Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members

EvmsAccess.h

Go to the documentation of this file.
00001 #ifndef EVMS_ACCESS_H
00002 #define EVMS_ACCESS_H
00003 
00004 extern "C"
00005 {
00006 #define bool boolean
00007 #include <appAPI.h>
00008 #undef bool
00009 #undef min
00010 #undef max
00011 #undef _
00012 }
00013 
00014 #include <list>
00015 #include <ostream>
00016 
00017 using std::string;
00018 
00019 typedef enum { EVMS_UNKNOWN, EVMS_DISK, EVMS_SEGMENT, EVMS_REGION, EVMS_PLUGIN,
00020                EVMS_CONTAINER, EVMS_VOLUME, EVMS_OBJ } ObjType;
00021 
00022 class EvmsAccess;
00023 
00024 class EvmsObject
00025     {
00026     public:
00027         EvmsObject() { init(); };
00028         EvmsObject( object_handle_t id );
00029         virtual ~EvmsObject();
00030 
00031         ObjType type() const { return typ; };
00032         const string& name() const { return nam; };
00033         const object_handle_t id() const { return idt; };
00034 
00035         void disownPtr() { own_ptr = false; };
00036         void output( std::ostream& Stream ) const;
00037         unsigned long long sizeK() const { return size; };
00038         bool isDataType() const;
00039         bool isData() const { return is_data; };
00040         bool isFreespace() const { return is_freespace; };
00041         virtual void addRelation( EvmsAccess* Acc ) {};
00042 
00043     protected:
00044         void init();
00045 
00046         bool own_ptr;
00047         bool is_data;
00048         bool is_freespace;
00049         unsigned long long size;
00050         ObjType typ;
00051         object_handle_t idt;
00052         string nam;
00053         handle_object_info_t *info_p;
00054     };
00055 
00056 class EvmsDataObject : public EvmsObject
00057     {
00058     public:
00059         EvmsDataObject( EvmsObject *const obj );
00060         EvmsDataObject( object_handle_t id );
00061         const EvmsObject *const consumedBy() const { return consumed; };
00062         const EvmsObject *const volume() const { return vol; };
00063         void output( std::ostream& Stream ) const;
00064         virtual void addRelation( EvmsAccess* Acc );
00065 
00066     protected:
00067         void init();
00068         storage_object_info_t* getInfop();
00069 
00070         EvmsObject * consumed;
00071         EvmsObject * vol;
00072     };
00073 
00074 class EvmsContainerObject : public EvmsObject
00075     {
00076     public:
00077         struct peinfo
00078             {
00079             EvmsObject * obj;
00080             unsigned long long size;
00081             unsigned long long free;
00082             string uuid;
00083             };
00084 
00085         EvmsContainerObject( EvmsObject *const obj );
00086         EvmsContainerObject( object_handle_t id );
00087         unsigned long long freeK() const { return free; };
00088         unsigned long long peSize() const { return pe_size; };
00089         const std::list<peinfo>& consumes() const { return cons; };
00090         const std::list<EvmsObject *>& creates() const { return creat; };
00091         const string& typeName() const { return ctype; };
00092         void output( std::ostream& Stream ) const;
00093         virtual void addRelation( EvmsAccess* Acc );
00094 
00095     protected:
00096         void init();
00097         storage_container_info_t* getInfop();
00098 
00099         unsigned long long free;
00100         unsigned long long pe_size;
00101         string uuid;
00102         std::list<peinfo> cons;
00103         std::list<EvmsObject *> creat;
00104         string ctype;
00105         bool lvm1;
00106     };
00107 
00108 class EvmsVolumeObject : public EvmsObject
00109     {
00110     public:
00111         EvmsVolumeObject( EvmsObject *const obj );
00112         EvmsVolumeObject( object_handle_t id );
00113         const EvmsObject * consumedBy() const { return consumed; };
00114         EvmsObject * consumes() const { return cons; };
00115         const EvmsObject * assVol() const { return assc; };
00116         bool native() const { return nat; };
00117         bool active() const { return act; };
00118         const string& device() const { return dev; };
00119         void output( std::ostream& Stream ) const;
00120         void setConsumedBy( EvmsObject* Obj );
00121         virtual void addRelation( EvmsAccess* Acc );
00122 
00123     protected:
00124         void init();
00125         logical_volume_info_s* getInfop();
00126 
00127         bool nat;
00128         bool act;
00129         EvmsObject * consumed;
00130         EvmsObject * cons;
00131         EvmsObject * assc;
00132         string dev;
00133     };
00134 
00135 class EvmsAccess
00136     {
00137     public:
00138         EvmsObject *const addObject( object_handle_t id );
00139         EvmsObject *const find( object_handle_t id );
00140         EvmsAccess();
00141         ~EvmsAccess();
00142         void output( std::ostream &Stream ) const;
00143         void listVolumes( std::list<const EvmsVolumeObject*>& l ) const;
00144         void listContainer(std::list<const EvmsContainerObject*>& l ) const;
00145         const string& getErrorText() {return Error_C;};
00146         const string& getCmdLine() {return CmdLine_C;};
00147         int deleteCo( const string& Container_Cv );
00148         int extendCo( const string& Container_Cv, const string& PvName_Cv );
00149         int shrinkCo( const string& Container_Cv, const string& PvName_Cv );
00150         int createCo( const string& Container_Cv, unsigned long long PeSizeK_lv,
00151                        bool NewMeta_bv, const std::list<string>& Devices_Cv );
00152         int createLv( const string& LvName_Cv, const string& Container_Cv,
00153                       unsigned long long SizeK_lv, unsigned long Stripe_lv,
00154                       unsigned long long StripeSizeK_lv );
00155         int changeLvSize( const string& LvName_Cv, const string& Container_Cv,
00156                           unsigned long long SizeK_lv );
00157         int deleteLv( const string& LvName_Cv, const string& Container_Cv );
00158         int createCompatVol( const string& Volume_Cv );
00159 
00160     protected:
00161         void addObjectRelations();
00162         void rereadAllObjects();
00163         plugin_handle_t getLvmPlugin( bool lvm2=false );
00164         object_handle_t findUsingVolume( object_handle_t id );
00165         const EvmsContainerObject* findContainer( const string& name );
00166         const EvmsDataObject* findRegion( const string& container, 
00167                                           const string& name );
00168         const EvmsDataObject* findSegment( const string& name );
00169         const EvmsVolumeObject* findVolume( const string& name );
00170         bool endEvmsCommand();
00171         static int pluginFilterFunction( const char* plugin );
00172 
00173         std::list<EvmsObject*> objects;
00174         bool EvmsOpen_b;
00175         string Error_C;
00176         string CmdLine_C;
00177     };
00178 
00179 extern std::ostream& operator<<( std::ostream &Stream, const ObjType Obj );
00180 extern std::ostream& operator<<( std::ostream &Stream, const EvmsAccess& Obj );
00181 extern std::ostream& operator<<( std::ostream &Stream, const EvmsObject& Obj );
00182 extern std::ostream& operator<<( std::ostream &Stream, const EvmsDataObject& Obj );
00183 extern std::ostream& operator<<( std::ostream &Stream, const EvmsContainerObject& Obj );
00184 extern std::ostream& operator<<( std::ostream &Stream, const EvmsVolumeObject& Obj );
00185 
00186 #endif

Generated on Wed Sep 14 11:27:07 2005 for yast2-storage by  doxygen 1.4.4