Sample of static connection

A sample static connection creation over dbus using gonetworkmanager.
This commit is contained in:
everactivemilligan 2021-03-18 13:08:49 -04:00 committed by GitHub
parent 594bfca331
commit fd171d0928
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

176
examples/static_connect.go Normal file
View file

@ -0,0 +1,176 @@
package main
import (
"fmt"
"os"
"github.com/Wifx/gonetworkmanager"
"github.com/google/uuid"
)
const (
ethernetType = "802-3-ethernet"
ethernetSection = "802-3-ethernet"
ethernetSectionAutoNegotiate = "auto-negotiate"
connectionSection = "connection"
connectionSectionID = "id"
connectionSectionType = "type"
connectionSectionUUID = "uuid"
connectionSectionIfaceName = "interface-name"
connectionSectionAutoconnect = "autoconnect"
ip4Section = "ipv4"
ip4SectionAddressData = "address-data"
ip4SectionAddresses = "addresses"
ip4SectionAddress = "address"
ip4SectionPrefix = "prefix"
ip4SectionMethod = "method"
ip4SectionGateway = "gateway"
ip4SectionNeverDefault = "never-default"
ip6Section = "ipv6"
ip6SectionMethod = "method"
connectionID = "My Connection"
interfaceName = "eth1"
desiredIPAddress = "192.168.1.1"
desiredGatewayAddress = "192.168.1.1"
desiredIPAddressNumerical = 16885952
desiredIPPrefix = 24
desiredGatewayAddressNumerical = 16885952
// Allows for static ip
desiredIP4Method = "manual"
// Would like this to be "disabled" however not supported
// in the current network manager stack
desiredIP6Method = "ignore"
)
func printVersion() {
/* Create new instance of gonetworkmanager */
nm, err := gonetworkmanager.NewNetworkManager()
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
// Don't really need the network manager object per se
// however knowing the version isn't bad
var nmVersion string
nmVersion, err = nm.GetPropertyVersion()
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
fmt.Println("Network Manager Version: " + nmVersion)
}
func checkForExistingConnection() error {
// See if our connection already exists
everactiveSettings, err := gonetworkmanager.NewSettings()
if err != nil {
return err
}
currentConnections, err := everactiveSettings.ListConnections()
if err != nil {
return err
}
for _, v := range currentConnections {
connectionSettings, settingsError := v.GetSettings()
if settingsError != nil {
fmt.Println("settings error, continuing")
continue
}
currentConnectionSection := connectionSettings[connectionSection]
if currentConnectionSection[connectionSectionID] == connectionID {
return fmt.Errorf("connection already exists")
}
}
return nil
}
func createNewConnection() error {
connection := make(map[string]map[string]interface{})
connection[ethernetSection] = make(map[string]interface{})
connection[ethernetSection][ethernetSectionAutoNegotiate] = false
connection[connectionSection] = make(map[string]interface{})
connection[connectionSection][connectionSectionID] = connectionID
connection[connectionSection][connectionSectionType] = ethernetType
connectionUUID, err := uuid.NewUUID()
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
connection[connectionSection][connectionSectionUUID] = connectionUUID.String()
connection[connectionSection][connectionSectionIfaceName] = interfaceName
connection[connectionSection][connectionSectionAutoconnect] = true
connection[ip4Section] = make(map[string]interface{})
addressData := make([]map[string]interface{}, 1)
addressData[0] = make(map[string]interface{})
addressData[0][ip4SectionAddress] = desiredIPAddress
addressData[0][ip4SectionPrefix] = desiredIPPrefix
connection[ip4Section][ip4SectionAddressData] = addressData
// order defined by network manager
addresses := make([]uint32, 3)
addresses[0] = desiredIPAddressNumerical
addresses[1] = desiredIPPrefix
addresses[2] = desiredGatewayAddressNumerical
addressArray := make([][]uint32, 1)
addressArray[0] = addresses
connection[ip4Section][ip4SectionAddresses] = addressArray
connection[ip4Section][ip4SectionGateway] = desiredGatewayAddress
connection[ip4Section][ip4SectionMethod] = desiredIP4Method
connection[ip4Section][ip4SectionNeverDefault] = true
connection[ip6Section] = make(map[string]interface{})
connection[ip6Section][ip6SectionMethod] = desiredIP6Method
everactiveSettings, err := gonetworkmanager.NewSettings()
if err != nil {
return err
}
_, err = everactiveSettings.AddConnection(connection)
if err != nil {
return err
}
return nil
}
func main() {
// show the version
printVersion()
// See if our connection already exists
err := checkForExistingConnection()
if err != nil {
fmt.Println(err.Error())
os.Exit(0)
}
// create the new connection
err = createNewConnection()
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
fmt.Print("added " + connectionID + " to the system.")
os.Exit(0)
}