NOTICE: The Processors Wiki will End-of-Life on January 15, 2021. It is recommended to download any files or other content you may need that are hosted on processors.wiki.ti.com. The site is now set to read only.
DM814x AM387x Switch Config User Guide
Contents
- 1 Introduction
- 2 Switch Config Commands
- 2.1 CONFIG_SWITCH_ADD_MULTICAST
- 2.2 CONFIG_SWITCH_ADD_UNICAST
- 2.3 CONFIG_SWITCH_ADD_OUI
- 2.4 CONFIG_SWITCH_FIND_ADDR
- 2.5 CONFIG_SWITCH_DEL_MULTICAST
- 2.6 CONFIG_SWITCH_DEL_UNICAST
- 2.7 CONFIG_SWITCH_ADD_VLAN
- 2.8 CONFIG_SWITCH_FIND_VLAN
- 2.9 CONFIG_SWITCH_DEL_VLAN
- 2.10 CONFIG_SWITCH_SET_PORT_VLAN_CONFIG
- 2.11 CONFIG_SWITCH_TIMEOUT
- 2.12 CONFIG_SWITCH_DUMP
- 2.13 CONFIG_SWITCH_SET_FLOW_CONTROL
- 2.14 CONFIG_SWITCH_SET_PRIORITY_MAPPING
- 2.15 CONFIG_SWITCH_PORT_STATISTICS_ENABLE
- 2.16 CONFIG_SWITCH_CONFIG_DUMP
- 2.17 CONFIG_SWITCH_RATELIMIT
- 2.18 CONFIG_SWITCH_VID_INGRESS_CHECK
- 2.19 CONFIG_SWITCH_ADD_UNKNOWN_VLAN_INFO
- 2.20 CONFIG_SWITCH_802_1
- 2.21 CONFIG_SWITCH_MACAUTH
- 2.22 CONFIG_SWITCH_SET_PORT_CONFIG
- 2.23 CONFIG_SWITCH_GET_PORT_CONFIG
- 2.24 CONFIG_SWITCH_PORT_STATE
- 2.25 CONFIG_SWITCH_RESET
Introduction[edit]
DM814x Switch can be configured in various different combination of Ethernet Packet forwarding and blocking. There is no such standard interface in Linux to configure a switch. This user guide provides an interface to configure the switch using Socket IOCTL through SIOCDEVPRIVATE command.
Switch Config Commands[edit]
Following is sample code for configuring the switch.
<syntaxhighlight lang="c">
- include <stdio.h>
...
- include <linux/net_switch_config.h>
int main(void) { struct net_switch_config cmd_struct; struct ifreq ifr; int sockfd; strncpy(ifr.ifr_name, "eth0", IFNAMSIZ); ifr.ifr_data = (char*)&cmd_struct; if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { printf("Can't open the socket\n"); return -1; } memset(&cmd_struct, 0, sizeof(struct net_switch_config));
...//initialise cmd_struct with switch commands
if (ioctl(sockfd, SIOCDEVPRIVATE, &ifr) < 0) { printf("Command failed\n"); close(sockfd); return -1; } printf("command success\n"); close(sockfd); return 0; } </syntaxhighlight>
CONFIG_SWITCH_ADD_MULTICAST[edit]
CONFIG_SWITCH_ADD_MULTICAST is used to add a LLDP Multicast address and forward the multicast packet to the subscribed ports. If VLAN ID is greater than zero then VLAN LLDP/Multicast is added.
cmd_struct.cmd = CONFIG_SWITCH_ADD_MULTICAST
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.switchcmd.addr | LLDP/Multicast Address | MAC Address |
| cmd_struct.cmd_data.switchcmd.mem_port | Member port Bit 0 – Host port/Port 0 |
0 – 7 |
| cmd_struct.cmd_data.switchcmd.vid | VLAN ID | 0 – 4095 |
| cmd_struct.cmd_data.switchcmd.flag | Super | 0/1 |
| cmd_struct.cmd_data.switchcmd.untag_port | Multicast forward state | 0 – 3 |
Result
ioctl call returns success or failure.
CONFIG_SWITCH_ADD_UNICAST[edit]
CONFIG_SWITCH_ADD_UNICAST is used to add a Unicast address and forward the unicast packet to that port. If VLAN ID is greater than zero then VLAN Unicast is added.
cmd_struct.cmd = CONFIG_SWITCH_ADD_UNICAST
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.switchcmd.addr | Unicast Address | MAC Address |
| cmd_struct.cmd_data.switchcmd.mem_port | Port Number | 0 – 2 |
| cmd_struct.cmd_data.switchcmd.vid | VLAN ID | 0 – 4095 |
| cmd_struct.cmd_data.switchcmd.blocked | Blocked | 0/1 |
| cmd_struct.cmd_data.switchcmd.secure | Secure Bit | 0/1 |
| cmd_struct.cmd_data.switchcmd.ageable | Ageable | 0/1 |
Result
ioctl call returns success or failure.
CONFIG_SWITCH_ADD_OUI[edit]
CONFIG_SWITCH_ADD_OUI is used to add a OUI address.
cmd_struct.cmd = CONFIG_SWITCH_ADD_OUI
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.switchcmd.addr | Unicast Address | MAC Address |
| cmd_struct.cmd_data.switchcmd.mem_port | Member port Bit 0 – Host port/Port 0 |
0 – 7 |
Result
ioctl call returns success or failure.
CONFIG_SWITCH_FIND_ADDR[edit]
CONFIG_SWITCH_FIND_ADDR is used to find a address with or without VLAN ID.
cmd_struct.cmd = CONFIG_SWITCH_FIND_ADDR
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.switchcmd.addr | Unicast Address | MAC Address |
| cmd_struct.cmd_data.switchcmd.vid | VLAN ID | 0 – 4095 |
Result
ioctl call returns success or failure.
On success cmd_struct.ret_type will hold the ALE table index
CONFIG_SWITCH_DEL_MULTICAST[edit]
CONFIG_SWITCH_DEL_MULTICAST is used to Delete a LLDP/Multicast address with or without VLAN ID.
cmd_struct.cmd = CONFIG_SWITCH_DEL_MULTICAST
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.switchcmd.addr | Unicast Address | MAC Address |
| cmd_struct.cmd_data.switchcmd.vid | VLAN ID | 0 – 4095 |
| cmd_struct.cmd_data.switchcmd.mem_port | Member port Bit 0 – Host port/Port 0 |
0 – 7 |
Result
ioctl call returns success or failure.
CONFIG_SWITCH_DEL_UNICAST[edit]
CONFIG_SWITCH_DEL_UNICAST is used to Delete a Unicast address with or without VLAN ID.
cmd_struct.cmd = CONFIG_SWITCH_DEL_UNICAST
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.switchcmd.addr | Unicast Address | MAC Address |
| cmd_struct.cmd_data.switchcmd.vid | VLAN ID | 0 – 4095 |
Result
ioctl call returns success or failure.
CONFIG_SWITCH_ADD_VLAN[edit]
CONFIG_SWITCH_ADD_VLAN is used to add VLAN ID.
cmd_struct.cmd = CONFIG_SWITCH_ADD_VLAN
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.switchcmd.vid | VLAN ID | 0 – 4095 |
| cmd_struct.cmd_data.switchcmd.mem_port | Member port Bit 0 – Host port/Port 0 |
0 – 7 |
| cmd_struct.cmd_data.switchcmd.untag_port | Untagged Egress port mask Bit 0 – Host port/Port 0 |
0 – 7 |
| cmd_struct.cmd_data.switchcmd.reg_multi | Registered Multicast flood port mask Bit 0 – Host port/Port 0 |
0 – 7 |
| cmd_struct.cmd_data.switchcmd.unreg_multi | Unknown Multicast flood port mask Bit 0 – Host port/Port 0 |
0 – 7 |
Result
ioctl call returns success or failure.
CONFIG_SWITCH_FIND_VLAN[edit]
CONFIG_SWITCH_ADD_VLAN is used to add VLAN ID.
cmd_struct.cmd = CONFIG_SWITCH_ADD_VLAN
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.switchcmd.vid | VLAN ID | 0 – 4095 |
Result
ioctl call returns success or failure.
On success cmd_struct.ret_type will hold the ALE table index
CONFIG_SWITCH_DEL_VLAN[edit]
CONFIG_SWITCH_DEL_VLAN is used to delete VLAN ID.
cmd_struct.cmd = CONFIG_SWITCH_DEL_VLAN
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.switchcmd.vid | VLAN ID | 0 – 4095 |
Result
ioctl call returns success or failure.
CONFIG_SWITCH_SET_PORT_VLAN_CONFIG[edit]
CONFIG_SWITCH_SET_PORT_VLAN_CONFIG is used to set port VLAN ID.
cmd_struct.cmd = CONFIG_SWITCH_SET_PORT_VLAN_CONFIG
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.switchcmd.port | Port number | 0 - 2 |
| cmd_struct.cmd_data.switchcmd.vid | VLAN ID | 0 – 4095 |
| cmd_struct.cmd_data.switchcmd.prio_port | VLAN Priority | 0 – 7 |
| cmd_struct.cmd_data.switchcmd.CFI_port | VLAN CFI | 0/1 |
Result
ioctl call returns success or failure.
CONFIG_SWITCH_TIMEOUT[edit]
CONFIG_SWITCH_TIMEOUT is used to set ALE aging timeout.
cmd_struct.cmd = CONFIG_SWITCH_TIMEOUT
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.switchcmd.ale_timeout | ALE age out time | Timeout in Milli second |
Result
ioctl call returns success or failure.
CONFIG_SWITCH_DUMP[edit]
CONFIG_SWITCH_DUMP is used to dump ALE table.
cmd_struct.cmd = CONFIG_SWITCH_DUMP
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.switchcmd.aledump | ALE index | 0 - 1023 |
Result
ioctl call returns success or failure.
On success "cmd_struct.cmd_data.buf" holds ALE dump text.
CONFIG_SWITCH_SET_FLOW_CONTROL[edit]
CONFIG_SWITCH_SET_FLOW_CONTROL is used to set flow control of the ports.
cmd_struct.cmd = CONFIG_SWITCH_SET_FLOW_CONTROL
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.portcmd.port | Port Mask Bit 0 – Host port/Port 0 |
0 - 7 |
Result
ioctl call returns success or failure.
CONFIG_SWITCH_SET_PRIORITY_MAPPING[edit]
CONFIG_SWITCH_SET_PRIORITY_MAPPING is used to set priority mapping of the ports.
cmd_struct.cmd = CONFIG_SWITCH_SET_PRIORITY_MAPPING
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.portcmd.port | Port Numnber | 0 - 2 |
| cmd_struct.cmd_data.priocmd.prio_rx | Receive priority | 0 - 7 |
| cmd_struct.cmd_data.priocmd.prio_tx | Transmit priority | 0 - 7 |
| cmd_struct.cmd_data.priocmd.prio_switch | Switch priority | 0 - 3 |
Result
ioctl call returns success or failure.
CONFIG_SWITCH_PORT_STATISTICS_ENABLE[edit]
CONFIG_SWITCH_PORT_STATISTICS_ENABLE is used to enable hardware statics of the ports.
cmd_struct.cmd = CONFIG_SWITCH_PORT_STATISTICS_ENABLE
| Parameter | Description | Range |
|---|---|---|
| switch_config.cmd_data.switchcmd.mem_port | Port Mask Bit 0 – Host port/Port 0 |
0 - 7 |
Result
ioctl call returns success or failure.
CONFIG_SWITCH_CONFIG_DUMP[edit]
CONFIG_SWITCH_CONFIG_DUMP is used to dump the switch configuration.
cmd_struct.cmd = CONFIG_SWITCH_CONFIG_DUMP
| Parameter | Description | Range |
|---|---|---|
| None | - | - |
Result
ioctl call returns success or failure.
On success "cmd_struct.cmd_data.buf" holds Switch dump text.
CONFIG_SWITCH_RATELIMIT[edit]
CONFIG_SWITCH_RATELIMIT is used to enable/disable rate limit of the ports.
cmd_struct.cmd = CONFIG_SWITCH_RATELIMIT
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.portcmd.enable | Enable/Disable | Enable - 1 Disable - 0 |
| cmd_struct.cmd_data.portcmd.direction | Transmit/Receive | Transmit - 0 Receive - 1 |
| cmd_struct.cmd_data.portcmd.port | Port number | 0 - 2 |
| cmd_struct.cmd_data.portcmd.addr_type | Broadcast/Multicast | ADDR_TYPE_BROADCAST / ADDR_TYPE_MULTICAST |
| cmd_struct.cmd_data.portcmd.limit | No of Packet | 0 - 255 |
Result
ioctl call returns success or failure.
CONFIG_SWITCH_VID_INGRESS_CHECK[edit]
CONFIG_SWITCH_VID_INGRESS_CHECK is used to set VLAN Ingress Check.
cmd_struct.cmd = CONFIG_SWITCH_VID_INGRESS_CHECK
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.portcmd.port | Port number | 0 - 2 |
| cmd_struct.cmd_data.portcmd.vlan_ingress_check | Ingress enable/disable | Enable - 1 Disable - 0 |
| cmd_struct.cmd_data.portcmd.drop_untagged | Drop untagged enable/disabe | Enable - 1 Disable - 0 |
Result
ioctl call returns success or failure.
CONFIG_SWITCH_ADD_UNKNOWN_VLAN_INFO[edit]
CONFIG_SWITCH_ADD_UNKNOWN_VLAN_INFO is used to set unknown VLAN Info.
cmd_struct.cmd = CONFIG_SWITCH_ADD_UNKNOWN_VLAN_INFO
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.portcmd.port | Port mask Bit 0 – Host port/Port 0 |
0 - 7 |
| cmd_struct.cmd_data.portcmd.reg_multi_port_mask | Registered Multicast flood port mask Bit 0 – Host port/Port 0 |
0 - 7 |
| cmd_struct.cmd_data.portcmd.unknown_reg_multi_port_mask | Unknown Multicast flood port mask Bit 0 – Host port/Port 0 |
0 - 7 |
| cmd_struct.cmd_data.portcmd.unknown_vlan_member | Unknown Vlan Member port mask Bit 0 – Host port/Port 0 |
0 - 7 |
Result
ioctl call returns success or failure.
CONFIG_SWITCH_802_1[edit]
CONFIG_SWITCH_802_1 is used to enable 802.1 packet forwarding.
cmd_struct.cmd = CONFIG_SWITCH_802_1
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.portcmd.enable | Drop untagged enable/disabe | Enable - 1 Disable - 0 |
Result
ioctl call returns success or failure.
CONFIG_SWITCH_MACAUTH[edit]
CONFIG_SWITCH_MACAUTH is used to enable 802.1 packet forwarding.
cmd_struct.cmd = CONFIG_SWITCH_MACAUTH
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.portcmd.enable | Drop untagged enable/disabe | Enable - 1 Disable - 0 |
Result
ioctl call returns success or failure.
CONFIG_SWITCH_SET_PORT_CONFIG[edit]
CONFIG_SWITCH_SET_PORT_CONFIG is used to set Phy Config.
cmd_struct.cmd = CONFIG_SWITCH_SET_PORT_CONFIG
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.portcmd.port | Port number | 0 - 2 |
| cmd_struct.cmd_data.portcmd.limit | Speed | 0 - Auto/ 10/100/1000 |
| cmd_struct.cmd_data.portcmd.direction | Duplexity | Full - 1 Half - 0 |
Result
ioctl call returns success or failure.
CONFIG_SWITCH_GET_PORT_CONFIG[edit]
CONFIG_SWITCH_GET_PORT_CONFIG is used to get Phy Config.
cmd_struct.cmd = CONFIG_SWITCH_GET_PORT_CONFIG
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.portcmd.port | Port number | 0 - 2 |
Result
ioctl call returns success or failure.
On success "cmd_struct.cmd_data.portcmd.limit" holds port speed (0 - auto/10/100/1000) and "cmd_struct.cmd_data.portcmd.direction" holds duplexity (1 - Full Duplex / 0 - Half Duplex)
CONFIG_SWITCH_PORT_STATE[edit]
CONFIG_SWITCH_PORT_STATE is used to set port status.
cmd_struct.cmd = CONFIG_SWITCH_PORT_STATE
| Parameter | Description | Range |
|---|---|---|
| cmd_struct.cmd_data.portcmd.port | Port number | 0 - 2 |
| cmd_struct.cmd_data.portcmd.port_state | Port state | PORT_STATE_DISABLED/ PORT_STATE_BLOCKED/ PORT_STATE_LEARN/ PORT_STATE_FORWARD |
Result
ioctl call returns success or failure.
CONFIG_SWITCH_RESET[edit]
CONFIG_SWITCH_RESET is used to reset the switch.
cmd_struct.cmd = CONFIG_SWITCH_RESET
| Parameter | Description | Range |
|---|---|---|
| None | - | - |
Result
ioctl call returns success or failure.


