# Network Configuration Manager - Python API Photon OS 2.0 provides a Python API for the Network Configuration Manager. - [Setup Instructions](#setup-instructions) - [Initialization Steps](#initialization-steps) - [Get Online Help](#get-online-help) - [Basic Information](#basic-information) - [Interface Configuration](#interface-configuration) - [IP Address Configuration](#ip-address-configuration) - [DNS Configuration](#dns-configuration) - [DHCP Options, DUID, and IAID Configuration](#dhcp-options-duid-and-iaid-configuration) - [NTP Servers](#ntp-servers) # Setup Instructions To set up and run the latest version of the Network Manager API for Python: ~~~~ # tdnf install pmd pmd-python3 # systemctl start pmd ~~~~ # Initialization Steps ~~~~ # python3 >>> import pmd >>> net = pmd.server().net >>> net._command_ ~~~~ # Get Online Help Get help for all commands. ~~~~ >>> help(net) ~~~~ Get help for a specific command. ~~~~ >>> help(net.add_ntp_servers) -in function add_ntp_servers: add_ntp_servers(...) method of [server.net](http://server.net/) instance net.add_ntp_servers(ntpservers = ["20.20.20.20", "25.30.40.70"]) adds ntp servers. returns success: 0, failure: exception. (END) ~~~~ # Basic Information ### get_system_network_info Get network information details that are common to the entire system. **Syntax** ~~~~ net.get_system_network_info() ~~~~ **Returns** - details about the system network (DUID, DNS mode, DNS server list, DNS domain list, NTP server list) **Example** ~~~~ >>> system_network_info = netmgmt.get_system_network_info() >>> type (system_network_info) <class 'list'> >>> print ( system_network_info) [{DUID: 00:02:11:22:33:44:55:66:77:20, DNS Mode: (null), DNS ServerList: ['10.10.100.100', '20.20.200.10'], DNS domain list: [' [abcd.com](http://abcd.com)'], NTP ServerList: (null)}] ~~~~ ### get_err_info Get information about the specified error number. **Syntax** ~~~~ net.get_err_info(error = <error_number>) ~~~~ **Parameters** - error - error number Here is the list of error numbers: - 4097 - invalid parameter - 4098 - not supported - 4099 - out of memory - 4100 - value not found - 4101 - value exists - 4102 - invalid interface - 4103 - invalid mode - 4104 - bad configuration file - 4105 - write failed - 4106 - timout - 4107 - DCHP timeout **Returns** - success: 0 - failure: exception Example ~~~~ >> net.get_err_info(error = 4097) 'invalid parameter' ~~~~ # Interface Configuration Use these commands to manage the configuration for a network interface. ### get_link_info Get the link info for the specified interface or for all interfaces (if no interface is specified). **Syntax** ~~~~ net.get_link_info(ifname = interface_name) ~~~~ **Parameters** - ``ifname`` - interface name (optional) **Returns** - success: link info - failure: exception ### get_link_macaddr Get the MAC address for the specified interface or for all interfaces (if no interface is specified). **Syntax** ~~~~ net.get_link_macaddr(ifname = interface_name) ~~~~ **Parameters** - ``ifname`` - interface name (optional) **Returns** - success: MAC address - failure: exception ### get_link_mode Get the link mode for the specified interface (auto or manual), or for all interfaces (if no interface is specified). **Syntax** ~~~~ net.get_link_mode(ifname = interface_name) ~~~~ **Parameters** - ``ifname`` - interface name (optional) **Returns** - success: link mode (auto, manual, or unknown) - failure: exception ### get_link_mtu Get the MTU of the specified interface or for all interfaces (if no interface is specified). **Syntax** ~~~~ net.get_link_mtu(ifname = interface_name) ~~~~ **Parameters** - ``ifname`` - interface name (optional) **Returns** - success: link MTU - failure: exception ### get_link_state Get the link state of the specified interface or for all interfaces (if no interface is specified). **Syntax** ~~~~ net.get_link_state(ifname = interface_name) ~~~~ **Parameters** - ``ifname`` - interface name (optional) **Returns** - success: link state (up, down, unknown) - failure: exception ### set_link_down Bring down the specified interface. **Syntax** ~~~~ net.set_link_down(ifname = interface_name) ~~~~ **Parameters** - ``ifname`` - interface name **Returns** - success: 0 - failure: exception ### set_link_macaddr Set the MAC address of the specified interface. **Syntax** ~~~~ net.set_link_macaddr(ifname = interface_name, macaddr = mac_address) ~~~~ **Parameters** - ``ifname`` - interface name - ``macaddr`` = MAC address **Returns** - success: 0 - failure: exception ### set_link_mode Set the mode (auto or manual) of the specifed interface. **Syntax** ~~~~ net.set_link_mode(ifname = interface_name, link_mode = [auto, manual]) ~~~~ **Parameters** - ``ifname`` - interface name - ``link_mode`` - auto or manual **Returns** - success: 0 - failure: exception ### set_link_mtu Set the MTU for the specified interface. **Syntax** ~~~~ net.set_link_mtu(ifname = interface_name, mtu = mtu) ~~~~ **Parameters** - ``ifname`` - interface name - ``mtu`` - ``mtu`` **Returns** - success: 0 - failure: exception ### set_link_state Set the state (up or down) of the specified interface. **Syntax** ~~~~ net.set_link_state(ifname = interface_name, link_state = [down, up]) ~~~~ **Parameters** - ``ifname`` - interface name - ``link_state`` - down or up **Returns** - success: 0 - failure: exception ### set_link_up Brings up the specified interface. **Syntax** ~~~~ net.set_link_up(ifname = interface_name) ~~~~ **Parameters** - ``ifname`` - interface name - ``link_state`` - down or up **Returns** - success: 0 - failure: exception # IP Address Configuration Use these commands to manage IP address configuration for a network interface. ### add_static_ipv6_addr Add a static IPv6 address to the specified interface. **Syntax** ~~~~ net.add_static_ipv6_addr(ifname = interface_name, addr_prefix = ipv6address_prefix) ~~~~ **Parameters** - ``ifname`` - interface name - ``addr_prefix`` - IPv6 address prefix **Returns** - success: 0 - failure: exception ### del_static_ipv6_addr Delete a static IPv6 address from the specified interface. **Syntax** ~~~~ net.del_static_ipv6_addr(ifname = interface_name, addr_prefix = ipv6address_prefix) ~~~~ **Parameters** - ``ifname`` - interface name - ``addr_prefix`` - IPv6 address prefix **Returns** - success: 0 - failure: exception ### get_ipv4_addr_gateway Get the IPv4 address with the prefix and gateway for the specified interface. **Syntax** ~~~~ net.get_ipv4_addr_gateway(ifname = interface_name) ~~~~ **Parameters** - ``ifname`` - interface name **Returns** - success: IPv4 address with the prefix and gateway - failure: exception ### get_ipv6_addr Get the list of IPv6 addresses for the specified interface. **Syntax** ~~~~ net.get_ipv6_addr(ifname = interface_name) ~~~~ **Parameters** - ``ifname`` - interface name **Returns** - success: IPv6 address list - failure: exception ### get_ipv6_addr_mode Get the address mode for the specified interface to determine whether DHCPv6, autoconf are enabled or disabled. **Syntax** ~~~~ net.get_ipv6_addr_mode(ifname = interface_name) ~~~~ **Parameters** - ``ifname`` - interface name **Returns** - Status for DHCPv6, autoconf (True=enabled, False=disabled) - failure: exception ### get_ipv6_gateway Get the IPv6 gateway for the specified interface. **Syntax** ~~~~ net.get_ipv6_gateway(ifname = interface_name) ~~~~ **Parameters** - ``ifname`` - interface name **Returns** - success: IPv6 gateway - failure: exception ### set_ipv4_addr_gateway Set the IPv4 address with the prefix and gateway for the specified interface. **Syntax** ~~~~ net.get_ipv4_addr_gateway(ifname = interface_name, addr_mode = [dhcp, static, none], addr_prefix = ipv4addressprefix, gateway = ipv4gateway) ~~~~ **Parameters** - ``ifname`` - interface name - ``addr_mode`` - address mode - dhcp, static, or none - ``addr_prefix`` - IPv4 address or prefix - ``gateway`` - IPv4 gateway **Returns** - success: 0 - failure: exception ### set_ipv6_addr_mode Set the address mode for the specified interface. **Syntax** ~~~~ net.set_ipv6_addr_mode(ifname = interface_name, enable_dhcp = [True, False], enable_autoconf = [True, False]) ~~~~ **Parameters** - ``ifname`` - interface name - ``enable_dhcp`` - True to enable, False to disable - ``enable_autoconf`` - True to enable, False to disable **Returns** - success: 0 - failure: exception ### set_ipv6_gateway Set the IPv6 gateway for the specified interface. **Syntax** ~~~~ net.set_ipv6_gateway(ifname = interface_name, gateway = ipv6gateway) ~~~~ **Parameters** - ``ifname`` - interface name - ``gateway`` - IPv6 gateway **Returns** - success: 0 - failure: exception # DNS Configuration Use these commands to manage DNS domains and servers for a network interface. ### get_dns_domains Get the list of DNS domains for the specified interface. **Syntax** ~~~~ net.get_dns_domains(ifname = interface_name) ~~~~ **Parameters** - ``ifname`` - interface name **Returns** - success: list of DNS domains - failure: exception ### get_dns_servers Get the list of DNS servers and the mode for the specified interface. **Syntax** ~~~~ net.get_dns_servers(ifname = interface_name) ~~~~ **Parameters** - ``ifname`` - interface name **Returns** - success: list of DNS servers and mode - failure: exception ### set_dns_domains Set the list of DNS domains for the specified interface. **Syntax** ~~~~ net.set_dns_domains(domains = ["domain1","domain2",...], ifname = interface_name) ~~~~ **Parameters** - ``domains`` - comma-separated list of one or more domains - ``ifname`` - interface name **Returns** - success: 0 - failure: exception ### set_dns_servers Set the list of DNS servers for the specified interface. **Syntax** ~~~~ net.set_dns_servers(dns_mode = [dhcp, static], servers = ["server1","server2", ...], ifname = interface_name) ~~~~ **Parameters** - ``dns_mode`` - dhcp or static - ``servers`` - comma-separate list of one or more servers - ``ifname`` - interface name **Returns** - success: 0 - failure: exception # DHCP Options DUID and IAID Configuration ### get_link_iaid Get the IAID for the specified interface. **Syntax** ~~~~ net.get_link_iaid(ifname = interface) ~~~~ **Parameters** - ``ifname`` - interface name **Returns** - success: IAID - failure: exception ### set_link_iaid Set the IAID for the specified interface. **Syntax** ~~~~ net.set_link_iaid(ifname = interface_name, iaid = <iaid>) ~~~~ **Parameters** - ``ifname`` - interface name - iaid - IAID **Returns** - success: 0 - failure: exception ### get_dhcp_duid Get the DCHP DUID. **Syntax** ~~~~ net.get_dhcp_duid(ifname = interface_name) ~~~~ **Parameters** - ``ifname`` - interface name (optional) **Returns** - success: DUID - failure: exception ### set_dhcp_duid Set the DCHP DUID. **Syntax** ~~~~ net.set_dhcp_duid(ifname = interface_name duid = duid) ~~~~ **Parameters** - ``ifname`` - interface name (optional) - ``duid`` - DUID to set **Returns** - success: 0 - failure: exception # NTP Servers Use these commands to manage the NTP servers list. ### add_ntp_servers Add one or more NTP servers to the NTP servers list. **Syntax** ~~~~ net.add_ntp_servers(ntpservers = ["server1", "server2", ...]) ~~~~ **Parameters** - ``ntpservers`` - Comma-separated list of NTP servers to add to the list. **Returns** - success: 0 - failure: exception ### del_ntp_servers Remove one or more NTP servers from the NTP servers list. **Syntax** ~~~~ net.del_ntp_servers(ntpservers = ["server1", "server2", ...]) ~~~~ **Parameters** - ``ntpservers`` - Comma-separated list of NTP servers to remove from the list. **Returns** - success: 0 - failure: exception ### get_ntp_servers Get the NTP servers list. **Syntax** ~~~~ net.get_ntp_servers() ~~~~ **Returns** - success: NTP servers list - failure: exception ### set_ntp_servers Set the NTP servers list. **Syntax** ~~~~ net.set_ntp_servers(ntpservers = ["server1", "server2", ...]) ~~~~ **Parameters** - ``ntpservers`` - Comma-separated list of NTP servers to remove from the list. **Returns** - success: 0 - failure: exception ### get_hostname Get the host name. **Syntax** net.get_hostname() **Returns** - success: host name - failure: exception ### set_hostname Set the host name. **Syntax** ~~~~ net.set_hostname(hostname) ~~~~ **Parameters** - ``hostname`` - name to assign to the host **Returns** - success: 0 - failure: exception ### wait_for_ip Wait for the specified interface to acquire a valid IP address of the specified IP address type. **Syntax** ~~~~ net.wait_for_ip(ifname = interface_name, timeout = timeout, addrtypes = [ipv4, ipv6, static_ipv4, static_ipv6, dhcp_ipv4, dhcp_ipv6, auto_ipv6, link_local_ipv6]) ~~~~ **Parameters** - ``ifname`` - interface name - ``timeout`` - maximum time (in seconds) to wait (until the link is up) before timing out of the request; specify 0 for no timeout (wait indefinitely) - ``addrtypes`` - one of the following address types: ipv4, ipv6, static_ipv4, static_ipv6, dhcp_ipv4, dhcp_ipv6, auto_ipv6, or link_local_ipv6 **Returns** - success: 0 (when the link has an IP of the specified type) - failure: exception (for example, timeout expired) ### wait_for_link_up Wait for the specified interface to come up. **Syntax** ~~~~ net.wait_for_link_up(ifname = interface_name, timeout = timeout) ~~~~ **Parameters** - ``ifname`` - interface name - ``timeout`` - maximum time (in seconds) to wait (until the link is up) before timing out of the request; specify 0 for no timeout (wait indefinitely) **Returns** - success: 0 (when link is up) - failure: exception (for example, timeout expired) ### get_network_param Get the specified network configuration parameter for the specified interface or filename. **Syntax** ~~~~ net.get_network_param(object = IfName or Filename, paramname = SectionName_KeyName) ~~~~ **Parameters** - ``object`` - an interface name (for example, "eth0") or a file name (for example, /etc/systemd/resolved.conf) - ``paramname`` - name of a parameter associated with the object; specified in the format SectionName_KeyName (for example, Link_MTUBytes represents the MtuBytes key in [Link] section in [https://www.freedesktop.org/software/systemd/man/systemd.network.html](https://www.freedesktop.org/software/systemd/man/systemd.network.html)) **Returns** - success: 0 - failure: exception ### set_network_param Set the value of a network configuration parameter for the specified interface or filename. **Syntax** ~~~~ net.set_network_param(object = interface_name or filename, paramname = SectionName_KeyName, paramvalue = key_value) ~~~~ **Parameters** - ``object`` - an interface name (for example, "eth0") or a file name (for example, /etc/systemd/resolved.conf) - ``paramname`` - name of a parameter associated with the object; specified in the format SectionName_KeyName (for example, Link_MTUBytes represents the MtuBytes key in [Link] section in [https://www.freedesktop.org/software/systemd/man/systemd.network.html](https://www.freedesktop.org/software/systemd/man/systemd.network.html)) **Returns** - success: 0 - failure: exception