00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef ETC_RAIDTAB_H
00024 #define ETC_RAIDTAB_H
00025
00026 #include <string>
00027 #include <map>
00028
00029 #include "y2storage/Storage.h"
00030
00031
00032 namespace storage
00033 {
00034
00035 class AsciiFile;
00036 class Md;
00037 class MdPartCo;
00038
00039 class EtcRaidtab
00040 {
00041 public:
00042 EtcRaidtab( const Storage* sto, const string& prefix="" );
00043 ~EtcRaidtab();
00044 void updateEntry( unsigned num, const std::list<string>& entries,
00045 const string&, const std::list<string>& devs );
00046 void removeEntry( unsigned num );
00047
00048
00049
00050
00051
00052 struct mdconf_info
00053 {
00054 bool container_present;
00055 struct {
00056 string metadata;
00057 string md_uuid;
00058 } container_info;
00059 string fs_name;
00060 string md_uuid;
00061 string member;
00062 };
00063 bool updateEntry(const mdconf_info& info);
00064 bool removeEntry(const mdconf_info& into);
00065
00066 protected:
00067 struct entry
00068 {
00069 entry() { first=last=0; }
00070 entry( unsigned f, unsigned l ) { first=f; last=l; }
00071 unsigned first;
00072 unsigned last;
00073 friend std::ostream& operator<< (std::ostream& s, const entry &v );
00074 };
00075 friend std::ostream& operator<< (std::ostream& s, const entry &v );
00076
00077 void updateMdadmFile();
00078 void buildMdadmMap();
00079 void buildMdadmMap2();
00080
00081
00082 string getUUID(const string& line);
00083 enum lineType
00084 {
00085 DEVICE=0,
00086 ARRAY,
00087 MAILFROM,
00088 PROGRAM,
00089 CREATE,
00090 HOMEHOST,
00091 AUTO,
00092 COMMENT,
00093 EMPTY,
00094 UNKNOWN
00095 };
00096 lineType getLineType(const string& line);
00097
00098
00099
00100
00101
00102 bool getArrayLine(unsigned& line, string& uuid);
00103 string ContLine(const mdconf_info& info);
00104 string ArrayLine(const mdconf_info& info);
00105 bool updateContainer(const mdconf_info& info);
00106
00107 void setDeviceLine(const string& line);
00108 void setAutoLine(const string& line);
00109
00110 const Storage* sto;
00111
00112 string mdadmname;
00113
00114 std::map<unsigned,entry> mtab;
00115 std::map<string,entry> uuidtab;
00116 AsciiFile* mdadm;
00117 };
00118
00119
00120 inline std::ostream& operator<< (std::ostream& s, const EtcRaidtab::entry& v )
00121 {
00122 s << "first=" << v.first << " last=" << v.last;
00123 return( s );
00124 }
00125
00126 }
00127
00128 #endif