package owrt import "fmt" // UCINetworkInterface describes uci network inteface (uci show network) type UCINetworkInterface struct { UciClient *UCI Name string Proto string IFName string IPAddr string Netmask string DNS string IFType string Metric string DHCP *UCIDHCPConf } // NewUCINetworkInterface builds a new UCIWirelessConf instance func NewUCINetworkInterface(uci *UCI) *UCINetworkInterface { return &UCINetworkInterface{ UciClient: uci, DHCP: &UCIDHCPConf{ UciClient: uci, }, } } // Create add a new entry for wifi interface in UCI Configuration func (ni *UCINetworkInterface) Create() *Action { uci := ni.UciClient conf := make(map[string]string) conf["proto"] = ni.Proto conf["ifname"] = ni.IFName conf["ipaddr"] = ni.IPAddr conf["netmask"] = ni.Netmask conf["dns"] = ni.DNS conf["type"] = ni.IFType conf["metric"] = ni.Metric result := uci.Set(fmt.Sprintf("network.%s", ni.Name), "interface") if result.ReturnCode != 0 { return result } for key, value := range conf { result := uci.Set(fmt.Sprintf("network.%s.%s", ni.Name, key), value) if result.ReturnCode != 0 { return result } } if ni.DHCP.Name != "" { dhCreate := ni.DHCP.Create() if dhCreate.ReturnCode != 0 { return dhCreate } } return &Action{ CommandResult: &CommandResult{ Stdout: "", Stderr: "", ReturnCode: 0, }, } } // Save commit and relaod configuration (writes it to files !) func (ni *UCINetworkInterface) Save() *Action { return ni.UciClient.Save() } // Delete remove wifi interface from UCI Configuration func (ni *UCINetworkInterface) Delete() *Action { uci := ni.UciClient if ni.DHCP.Name != "" { toDelete := fmt.Sprintf("dhcp.%s", ni.Name) del := uci.Delete(toDelete) if del.ReturnCode != 0 { return del } } toDelete := fmt.Sprintf("network.%s", ni.Name) del := uci.Delete(toDelete) if del.ReturnCode != 0 { return del } return uci.Commit() } // Update add a new entry for wifi interface in UCI Configuration func (ni *UCINetworkInterface) Update() *Action { uci := ni.UciClient ni.Delete() create := ni.Create() if create.ReturnCode != 0 { return create } return uci.Commit() }