diff --git a/uci_firewall_redirect.go b/uci_firewall_redirect.go index f8bb768..fa10263 100644 --- a/uci_firewall_redirect.go +++ b/uci_firewall_redirect.go @@ -6,6 +6,7 @@ import ( // UCIFirewallRedirect is the description of an Wireless interface (cf Openwrt doc) on top of an Wireless Device type UCIFirewallRedirect struct { + UCI *UCI Name string Index int Src string @@ -19,12 +20,13 @@ type UCIFirewallRedirect struct { } // NewUCIFirewallRedirect builds a new UCIFirewallRedirect instance -func NewUCIFirewallRedirect() *UCIFirewallRedirect { - return &UCIFirewallRedirect{} +func NewUCIFirewallRedirect(uci *UCI) *UCIFirewallRedirect { + return &UCIFirewallRedirect{UCI: uci} } // Create add a new firewall rule in UCI Configuration -func (rd *UCIFirewallRedirect) Create(uci *UCI) *Action { +func (rd *UCIFirewallRedirect) Create() *Action { + uci := rd.UCI confPrefix := fmt.Sprintf("firewall.@redirect[%d]", rd.Index) conf := make(map[string][]string) @@ -59,7 +61,8 @@ func (rd *UCIFirewallRedirect) Create(uci *UCI) *Action { } // Save commit and relaod configuration (writes it to files !) -func (rd *UCIFirewallRedirect) Save(uci *UCI) *Action { +func (rd *UCIFirewallRedirect) Save() *Action { + uci := rd.UCI commitRes := uci.Commit() if commitRes.ReturnCode != 0 { return commitRes @@ -70,7 +73,8 @@ func (rd *UCIFirewallRedirect) Save(uci *UCI) *Action { } // Delete remove wifi interface from UCI Configuration -func (rd *UCIFirewallRedirect) Delete(uci *UCI) *Action { +func (rd *UCIFirewallRedirect) Delete() *Action { + uci := rd.UCI toDelete := fmt.Sprintf("firewall.@redirect[%d]", rd.Index) del := uci.Delete(toDelete) if del.ReturnCode != 0 { @@ -80,9 +84,10 @@ func (rd *UCIFirewallRedirect) Delete(uci *UCI) *Action { } // Update add a new entry for wifi interface in UCI Configuration -func (rd *UCIFirewallRedirect) Update(uci *UCI) *Action { - rd.Delete(uci) - create := rd.Create(uci) +func (rd *UCIFirewallRedirect) Update() *Action { + uci := rd.UCI + rd.Delete() + create := rd.Create() if create.ReturnCode != 0 { return create } diff --git a/uci_firewall_redirect_test.go b/uci_firewall_redirect_test.go index 48f269e..2e288a6 100644 --- a/uci_firewall_redirect_test.go +++ b/uci_firewall_redirect_test.go @@ -20,7 +20,7 @@ func TestFWRedirectCreate(t *testing.T) { exec := createMockExecutor("", "", 0) uci := NewUCIWithExecutor(exec, "") - redirect := NewUCIFirewallRedirect() + redirect := NewUCIFirewallRedirect(uci) redirect.Name = redirectName redirect.Index = redirectIndex redirect.Src = redirectSrc @@ -31,7 +31,7 @@ func TestFWRedirectCreate(t *testing.T) { redirect.DestIP = redirectDestIP redirect.DestPort = redirectDestPort - if redirect.Create(uci).ReturnCode != 0 { + if redirect.Create().ReturnCode != 0 { t.Fatalf("UCIFirewallRedirect.Create() failed !") } } @@ -40,7 +40,7 @@ func TestFWRedirectUpdate(t *testing.T) { exec := createMockExecutor("", "", 0) uci := NewUCIWithExecutor(exec, "") - redirect := NewUCIFirewallRedirect() + redirect := NewUCIFirewallRedirect(uci) redirect.Name = redirectName redirect.Index = redirectIndex redirect.Src = redirectSrc @@ -51,13 +51,13 @@ func TestFWRedirectUpdate(t *testing.T) { redirect.DestIP = redirectDestIP redirect.DestPort = redirectDestPort - if redirect.Create(uci).ReturnCode != 0 { + if redirect.Create().ReturnCode != 0 { t.Fatalf("UCIFirewallRedirect.Create() failed !") } redirect.Name = "NewRedirect" - if redirect.Update(uci).ReturnCode != 0 { + if redirect.Update().ReturnCode != 0 { t.Fatalf("UCIFirewallRedirect.Update() failed !") } } @@ -66,7 +66,7 @@ func TestFWRedirectDelete(t *testing.T) { exec := createMockExecutor("", "", 0) uci := NewUCIWithExecutor(exec, "") - redirect := NewUCIFirewallRedirect() + redirect := NewUCIFirewallRedirect(uci) redirect.Name = redirectName redirect.Index = redirectIndex redirect.Src = redirectSrc @@ -77,7 +77,7 @@ func TestFWRedirectDelete(t *testing.T) { redirect.DestIP = redirectDestIP redirect.DestPort = redirectDestPort - if redirect.Delete(uci).ReturnCode != 0 { + if redirect.Delete().ReturnCode != 0 { t.Fatalf("UCIWirelessInterface.Delete() failed !") } }