@@ -84,7 +84,7 @@ func (ipsMgr *IpsetManager) CreateList(listName string) error {
8484 spec : util .IpsetSetListFlag ,
8585 }
8686 log .Printf ("Creating List: %+v" , entry )
87- if _ , err := ipsMgr .Run (entry ); err != nil {
87+ if errCode , err := ipsMgr .Run (entry ); err != nil && errCode != 1 {
8888 log .Errorf ("Error: failed to create ipset list %s." , listName )
8989 return err
9090 }
@@ -101,10 +101,8 @@ func (ipsMgr *IpsetManager) DeleteList(listName string) error {
101101 set : util .GetHashedName (listName ),
102102 }
103103
104- errCode , err := ipsMgr .Run (entry )
105- if err != nil {
104+ if errCode , err := ipsMgr .Run (entry ); err != nil {
106105 if errCode == 1 {
107- log .Printf ("Error: Cannot delete list %s as it's being referred or doesn't exist." , listName )
108106 return nil
109107 }
110108
@@ -137,7 +135,7 @@ func (ipsMgr *IpsetManager) AddToList(listName string, setName string) error {
137135 spec : util .GetHashedName (setName ),
138136 }
139137
140- if _ , err := ipsMgr .Run (entry ); err != nil {
138+ if errCode , err := ipsMgr .Run (entry ); err != nil && errCode != 1 {
141139 log .Errorf ("Error: failed to create ipset rules. rule: %+v" , entry )
142140 return err
143141 }
@@ -166,8 +164,8 @@ func (ipsMgr *IpsetManager) DeleteFromList(listName string, setName string) erro
166164 set : hashedListName ,
167165 spec : hashedSetName ,
168166 }
169- errCode , err := ipsMgr . Run ( entry )
170- if errCode > 1 && err != nil {
167+
168+ if _ , err := ipsMgr . Run ( entry ); err != nil {
171169 log .Errorf ("Error: failed to delete ipset entry. %+v" , entry )
172170 return err
173171 }
@@ -183,7 +181,7 @@ func (ipsMgr *IpsetManager) DeleteFromList(listName string, setName string) erro
183181}
184182
185183// CreateSet creates an ipset.
186- func (ipsMgr * IpsetManager ) CreateSet (setName string ) error {
184+ func (ipsMgr * IpsetManager ) CreateSet (setName , spec string ) error {
187185 if _ , exists := ipsMgr .setMap [setName ]; exists {
188186 return nil
189187 }
@@ -193,10 +191,10 @@ func (ipsMgr *IpsetManager) CreateSet(setName string) error {
193191 operationFlag : util .IpsetCreationFlag ,
194192 // Use hashed string for set name to avoid string length limit of ipset.
195193 set : util .GetHashedName (setName ),
196- spec : util . IpsetNetHashFlag ,
194+ spec : spec ,
197195 }
198196 log .Printf ("Creating Set: %+v" , entry )
199- if _ , err := ipsMgr .Run (entry ); err != nil {
197+ if errCode , err := ipsMgr .Run (entry ); err != nil && errCode != 1 {
200198 log .Errorf ("Error: failed to create ipset." )
201199 return err
202200 }
@@ -221,10 +219,9 @@ func (ipsMgr *IpsetManager) DeleteSet(setName string) error {
221219 operationFlag : util .IpsetDestroyFlag ,
222220 set : util .GetHashedName (setName ),
223221 }
224- errCode , err := ipsMgr . Run ( entry )
225- if err != nil {
222+
223+ if errCode , err := ipsMgr . Run ( entry ); err != nil {
226224 if errCode == 1 {
227- log .Printf ("Cannot delete set %s as it's being referred." , setName )
228225 return nil
229226 }
230227
@@ -238,12 +235,12 @@ func (ipsMgr *IpsetManager) DeleteSet(setName string) error {
238235}
239236
240237// AddToSet inserts an ip to an entry in setMap, and creates/updates the corresponding ipset.
241- func (ipsMgr * IpsetManager ) AddToSet (setName string , ip string ) error {
242- if ipsMgr .Exists (setName , ip , util . IpsetNetHashFlag ) {
238+ func (ipsMgr * IpsetManager ) AddToSet (setName , ip , spec string ) error {
239+ if ipsMgr .Exists (setName , ip , spec ) {
243240 return nil
244241 }
245242
246- if err := ipsMgr .CreateSet (setName ); err != nil {
243+ if err := ipsMgr .CreateSet (setName , spec ); err != nil {
247244 return err
248245 }
249246
@@ -253,7 +250,7 @@ func (ipsMgr *IpsetManager) AddToSet(setName string, ip string) error {
253250 spec : ip ,
254251 }
255252
256- if _ , err := ipsMgr .Run (entry ); err != nil {
253+ if errCode , err := ipsMgr .Run (entry ); err != nil && errCode != 1 {
257254 log .Printf ("Error: failed to create ipset rules. %+v" , entry )
258255 return err
259256 }
@@ -264,7 +261,7 @@ func (ipsMgr *IpsetManager) AddToSet(setName string, ip string) error {
264261}
265262
266263// DeleteFromSet removes an ip from an entry in setMap, and delete/update the corresponding ipset.
267- func (ipsMgr * IpsetManager ) DeleteFromSet (setName string , ip string ) error {
264+ func (ipsMgr * IpsetManager ) DeleteFromSet (setName , ip string ) error {
268265 if _ , exists := ipsMgr .setMap [setName ]; ! exists {
269266 log .Printf ("ipset with name %s not found" , setName )
270267 return nil
@@ -281,11 +278,18 @@ func (ipsMgr *IpsetManager) DeleteFromSet(setName string, ip string) error {
281278 set : util .GetHashedName (setName ),
282279 spec : ip ,
283280 }
284- if _ , err := ipsMgr .Run (entry ); err != nil {
281+
282+ if errCode , err := ipsMgr .Run (entry ); err != nil {
283+ if errCode == 1 {
284+ return nil
285+ }
286+
285287 log .Errorf ("Error: failed to delete ipset entry. Entry: %+v" , entry )
286288 return err
287289 }
288290
291+ ipsMgr .DeleteSet (setName )
292+
289293 return nil
290294}
291295
0 commit comments