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

Generated on Thu Jul 6 00:40:24 2006 for yast2-storage by  doxygen 1.4.6