Rev | Date | Author | Change Description |
---|---|---|---|
0.1 | 2018-09 | Shuotian Cheng | Initial Version |
This document provides the general information about basic SONiC incremental configuration support including IP addresses configuration changes, MTU configuration changes, and port channel configuration changes.
- Should be able to boot directly into working state given a working minigraph:
- All IPs are assigned correctly to each router interfaces
- All port channel interfaces are created with correct members enslaved
- All configured ports are set to admin status UP
- All configured ports are set to desired MTU
- Should not have static front panel interface configurations in
/etc/network/interfaces
file - Should not have static teamd configurations in
/etc/teamd/
folder. - Should be able to use command line to execute incremental updates including:
- Bring up/down all ports/port channels
- Assign/remove IPs towards non-LAG-member front panel ports, and port channels
- Change ports/port channels MTU
- Create/remove port channels
- Add/remove members of port channels
- Should be able to restart docker swss and the system recovers to the state before the restart
Note:
- Conflicting configurations that cannot be directly resolved are NOT supported in this phrase, including:
- removing a port channel with existing IPs (IPs need to be removed before removing the port channel)
- moving a port with IP into a port channel
- assign an IP to a port channel member
- adding/removing non-existing ports towards port channels, etc.
- Port channel and port channel members' admin status are set separately, indicating that a port channel's admin status DOWN will NOT affect its members' admin status to be brought down.
- By default, the admin status is UP and MTU is 9100.
- A member port will inherit its port channel's MTU. However, the value will be automatically reset to its original one after it is removed from the port channel.
- Should be able to move loopback interface out of
/etc/network/interfaces
file and managed byportmgrd
. - Should be able to restart docker teamd and all port channel configurations are reapplied. During the restart, all existing port channels will be removed from both control plane and data plane, and new configurations will be used to create use ones.
Note: The reason of moving this request into phase 2 is due to unrelated issues encountered while removing and recreating router interfaces, including IPv6 neighbor removal and potential SAI implementation issues.
TBD
The gap that orchagent daemon needs to fill is mostly related to MTU:
- Should be able to change router interface MTU
- Should be able to change LAG MTU
portsyncd
: Should not be responsible for setting admin status and MTU. Should write 'state' -> 'ok' when associated netdev is created.teamsyncd
: Should write 'state' -> 'ok' when associated netdev is created.
portmgrd
: Should be responsible port for admin status and MTU configuration changes. Related tables:PORT
intfsmgrd
: Should be responsible for port/port channel/VLAN IP configuraton changes. Related tables:PORT_INTERFACE
,PORTCHANNEL_INTERFACE
,VLAN_INTERFACE
.teammgrd
: Should be responsible for port channel and port channel member configuration changes. Related tables:PORTCHANNEL
ANDPORTCHANNEL_MEMBER
.
config interface <interface_name> add ip <ip_address>
config interface <interface_name> remove ip <ip_address>
config interface <interface_name> mtu <mtu_value>
config port_channel add <port_channel_name> --min_links <min_links> --fall_back <true|false>
config port_channel remove <port_channel_name>
config port_channel member add <port_channel_name> <port_name>
config port_channel member remove <port_channel_name> <port_name>
Theorem: Each configuration table can have one and only one manager daemon associated with it.
PORT|{{port_name}}
"admin_status": {{UP|DOWN}}
"mtu": {{mtu_value}}
INTERFACE|{{port_name}}|{{IP}}
PORTCHANNEL|{{port_channel_name}}
"admin_status": {{UP|DOWN}}
"mtu": {{mtu_value}}
"min_links": {{min_links_value}}
"fall_back": {{true|false}}
; Defines schema for port channel configuration attributes
key = PORTCHANNEL:name ; port channel configuration
; field = value
admin_status = "down" / "up" ; admin status
MTU = 1*4DIGIT ; mtu
MIN_LINKS = 1*2DIGIT ; min links
FALL_BACK = "false" / "true" ; fall back
PORTCHANNEL_INTERFACE|{{port_channel_name}}|{{IP}}
; Defines schema for port channel member configuration attributes
key = PORTCHANNEL:port_channel_name:member ; port channel member configuration
PORTCHANNEL_MEMBER|{{port_channel_name}}|{{port_name}}
- When LAG MTU is updated, all LAG members' MTUs are updated.
- When port/LAG MTU is updated, the associated router interface MTU is updated.
- If a port is part of a port channel, MTU will not be applied.
- Monitor
PORT
configuration table - Should be responsible for admin status changes and MTU changes
- Monitor
PORT_INTERFACE
,PORTCHANNEL_INTERFACE
,VLAN_INTERFACE
configuration tables - Should be responsible for IP changes
- Should listen to state database changes to detect port channels creation and removal
- Monitor
PORTCHANNEL
andPORTCHANNEL_MEMBER
configuration tables - Should be responsible for port channel changes and member changes
- Should listen to state database changes to detect port channel members creation and removal
- Should revert port configurations (admin status and MTU) after the port is removed from port channel
TBD
TBD
- Docker swss restart test
- Docker teamd restart test