Sample of static connection
A sample static connection creation over dbus using gonetworkmanager.
This commit is contained in:
		
							parent
							
								
									594bfca331
								
							
						
					
					
						commit
						fd171d0928
					
				
					 1 changed files with 176 additions and 0 deletions
				
			
		
							
								
								
									
										176
									
								
								examples/static_connect.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										176
									
								
								examples/static_connect.go
									
										
									
									
									
										Normal 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) | ||||
| } | ||||
		Reference in a new issue