Stephen Hemminger
fa93d9a8aa
Merge branch 'master' into net-next
2017-08-18 09:43:00 -07:00
Phil Sutter
6ac5943bdd
ipvrf: Fix error path of vrf_switch()
...
Apart from trying to close(-1), this also leaked memory.
Signed-off-by: Phil Sutter <phil@nwl.cc>
2017-08-18 09:39:52 -07:00
Phil Sutter
08806fb019
iproute_lwtunnel: csum_mode value checking was ineffective
...
ila_csum_name2mode() returning -1 on error but being declared as
returning __u8 doesn't make much sense. Change the code to correctly
detect this issue. Checking for __u8 overruns shouldn't be necessary
though since ila_csum_name2mode() return values are well-defined.
Signed-off-by: Phil Sutter <phil@nwl.cc>
2017-08-18 09:13:17 -07:00
Phil Sutter
58a15e6c7e
iproute_lwtunnel: Argument to strerror must be positive
...
Signed-off-by: Phil Sutter <phil@nwl.cc>
2017-08-18 09:13:17 -07:00
Phil Sutter
1e3197e0fd
ifcfg: Quote left-hand side of [ ] expression
...
This prevents word-splitting and therefore leads to more accurate error
message in case 'grep -c' prints something other than a number.
Signed-off-by: Phil Sutter <phil@nwl.cc>
2017-08-18 09:11:00 -07:00
Julien Fortin
43bc20ae73
ip: iplink_vlan.c: add json output support
...
Schema:
{
"protocol": {
"type": "string",
"attr": "IFLA_VLAN_PROTOCOL"
},
"id": {
"type": "uint",
"attr": "IFLA_VLAN_ID"
},
"flags": {
"type": "array",
"attr": "IFLA_VLAN_FLAGS",
"array": [
{
"type": "string"
}
]
},
"ingress_qos": {
"type": "array",
"attr": "IFLA_VLAN_INGRESS_QOS",
"array": [
{
"type": "dict",
"dict": {
"from": {
"type": "uint"
},
"to": {
"type": "uint"
}
}
}
]
},
"egress_qos": {
"type": "array",
"attr": "IFLA_VLAN_EGRESS_QOS",
"array": [
{
"type": "dict",
"dict": {
"from": {
"type": "uint"
},
"to": {
"type": "uint"
}
}
}
]
}
}
$ ip link add name eth0.42 link eth0 type vlan id 42
$ ip -details -json link show
[{
"ifindex": 30,
"ifname": "eth0.42",
"link": "eth0",
"flags": ["BROADCAST","MULTICAST"],
"mtu": 1500,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "ether",
"address": "08:00:27:db:31:88",
"broadcast": "ff:ff:ff:ff:ff:ff",
"promiscuity": 0,
"linkinfo": {
"info_kind": "vlan",
"info_data": {
"protocol": "802.1Q",
"id": 42,
"flags": ["REORDER_HDR"]
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
}
]
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:41 -07:00
Julien Fortin
92b7454c31
ip: link_macvlan.c: add json output support
...
Schema:
{
"mode": {
"type": "string",
"attr": "IFLA_MACVLAN_MODE"
},
"nopromisc": {
"type": "bool",
"attr": "MACVLAN_FLAG_NOPROMISC"
},
"macaddr_count": {
"type": "int",
"attr": "IFLA_MACVLAN_MACADDR_COUNT"
},
"macaddr_data": {
"type": "array",
"attr": "IFLA_MACVLAN_MACADDR_DATA",
"array": [
{
"type": "string"
}
]
},
}
$ ip link add name peth0 link eth0 type macvlan
$ ip -details -json link show peth0
[{
"ifindex": 26,
"ifname": "peth0",
"link": "eth0",
"flags": ["BROADCAST","MULTICAST"],
"mtu": 1500,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "ether",
"address": "7a:84:48:3e:7b:1c",
"broadcast": "ff:ff:ff:ff:ff:ff",
"promiscuity": 0,
"linkinfo": {
"info_kind": "macvlan",
"info_data": {
"mode": "vepa"
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
}
]
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:41 -07:00
Julien Fortin
063dd06cc1
ip: link_vti6.c: add json output support
...
Schema:
{
"remote": {
"type": "string",
"attr": "IFLA_VTI_REMOTE"
},
"local": {
"type": "string",
"attr": "IFLA_VTI_LOCAL"
},
"link": {
"type": "string",
"attr": "IFLA_VTI_LINK",
"mutually_exclusive": {
"link_index": {
"type": "uint",
}
}
},
"ikey": {
"type": "string",
"attr": "IFLA_VTI_IKEY"
},
"okey": {
"type": "string",
"attr": "IFLA_VTI_OKEY"
}
}
➜ ~ ip -6 tunnel add name vti6 mode vti6 local 2001:db8:1::1/64 remote
2001:0db8:85a3:0000:0000:8a2e:0370:7334
➜ ~ ip link show
10: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN mode DEFAULT
group default
link/tunnel6 :: brd ::
11: ip6_vti0@NONE: <NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT
group default
link/tunnel6 :: brd ::
12: vti6@NONE: <POINTOPOINT,NOARP> mtu 1500 qdisc noop state DOWN mode
DEFAULT group default
link/tunnel6 2001:db8:1::1 peer 2001:db8:85a3::8a2e:370:7334
➜ ~ ./ip -details -json link show
[{
"ifindex": 10,
"ifname": "ip6tnl0",
"link": null,
"flags": ["NOARP"],
"mtu": 1452,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "tunnel6",
"address": "::",
"broadcast": "::",
"promiscuity": 0,
"linkinfo": {
"info_kind": "ip6tnl",
"info_data": {
"proto": "ip6ip6",
"remote": "::",
"local": "::",
"encap_limit": 0,
"ttl": 0,
"flowinfo_tclass": "0x00",
"flowlabel": "0x00000",
"flowinfo": "0x00000000"
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 11,
"ifname": "ip6_vti0",
"link": null,
"flags": ["NOARP"],
"mtu": 1500,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "tunnel6",
"address": "::",
"broadcast": "::",
"promiscuity": 0,
"linkinfo": {
"info_kind": "vti6",
"info_data": {
"remote": "::",
"local": "::",
"ikey": "0.0.0.0",
"okey": "0.0.0.0"
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 12,
"ifname": "vti6",
"link": null,
"flags": ["POINTOPOINT","NOARP"],
"mtu": 1500,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "tunnel6",
"address": "2001:db8:1::1",
"link_pointtopoint": true,
"broadcast": "2001:db8:85a3::8a2e:370:7334",
"promiscuity": 0,
"linkinfo": {
"info_kind": "vti6",
"info_data": {
"remote": "2001:db8:85a3::8a2e:370:7334",
"local": "2001:db8:1::1",
"ikey": "0.0.0.0",
"okey": "0.0.0.0"
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
}
]
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:41 -07:00
Julien Fortin
4c42a1c103
ip: link_vti.c: add json output support
...
Schema:
{
"remote": {
"type": "string",
"attr": "IFLA_VTI_REMOTE"
},
"local": {
"type": "string",
"attr": "IFLA_VTI_LOCAL"
},
"link": {
"type": "string",
"attr": "IFLA_VTI_LINK",
"mutually_exclusive": {
"link_index": {
"type": "uint",
}
}
},
"ikey": {
"type": "string",
"attr": "IFLA_VTI_IKEY"
},
"okey": {
"type": "string",
"attr": "IFLA_VTI_OKEY"
}
}
$ ip tunnel add vti0 mode vti local 192.0.2.1 remote 198.51.100.3
$ ip link show
10: ip_vti0@NONE: <NOARP> mtu 1428 qdisc noop state DOWN mode DEFAULT group
default
link/ipip 0.0.0.0 brd 0.0.0.0
11: vti0@NONE: <POINTOPOINT,NOARP> mtu 1428 qdisc noop state DOWN mode
DEFAULT group default
link/ipip 192.0.2.1 peer 198.51.100.3
$ ./ip -details -json link show
[{
"ifindex": 10,
"ifname": "ip_vti0",
"link": null,
"flags": ["NOARP"],
"mtu": 1428,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "ipip",
"address": "0.0.0.0",
"broadcast": "0.0.0.0",
"promiscuity": 0,
"linkinfo": {
"info_kind": "vti",
"info_data": {
"remote": "any",
"local": "any",
"ikey": "0.0.0.0",
"okey": "0.0.0.0"
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 11,
"ifname": "vti0",
"link": null,
"flags": ["POINTOPOINT","NOARP"],
"mtu": 1428,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "ipip",
"address": "192.0.2.1",
"link_pointtopoint": true,
"broadcast": "198.51.100.3",
"promiscuity": 0,
"linkinfo": {
"info_kind": "vti",
"info_data": {
"remote": "198.51.100.3",
"local": "192.0.2.1",
"ikey": "0.0.0.0",
"okey": "0.0.0.0"
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
}
]
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:41 -07:00
Julien Fortin
2539a407bb
ip: link_iptnl.c: add json output support
...
Schema
{
"remote": {
"type": "string",
"attr": "IFLA_IPTUN_REMOTE"
},
"local": {
"type": "string",
"attr": "IFLA_IPTUN_LOCAL"
},
"link": {
"type": "string",
"attr": "IFLA_IPTUN_LINK",
"mutually_exclusive": {
"link_index": {
"type": "uint",
}
}
},
"ttl": {
"type": "int",
"attr": "IFLA_IPTUN_TTL"
},
"tos": {
"type": "string",
"attr": "IFLA_IPTUN_TOS"
},
"pmtudisc": {
"type": "bool",
"attr": "IFLA_IPTUN_PMTUDISC"
},
"isatap": {
"type": "bool",
"attr": "SIT_ISATAP & IFLA_IPTUN_FLAGS"
},
"6rd": {
"type": "dict",
"attr": "IFLA_IPTUN_6RD_PREFIXLEN",
"dict": {
"prefix": {
"type": "string"
},
"prefixlen": {
"type": "uint",
"attr": "IFLA_IPTUN_6RD_PREFIXLEN"
},
"relay_prefix": {
"type": "string"
},
"relay_prefixlen": {
"type": "uint",
"attr": "IFLA_IPTUN_6RD_PREFIXLEN"
}
}
},
"encap": {
"type": "dict",
"attr": "IFLA_IPTUN_ENCAP_TYPE",
"dict": {
"type": {
"type": "string",
"attr": "IFLA_IPTUN_ENCAP_TYPE"
},
"sport": {
"type": "uint",
"attr": "IFLA_IPTUN_ENCAP_SPORT"
},
"dport": {
"type": "uint",
"attr": "IFLA_IPTUN_ENCAP_DPORT"
},
"csum": {
"type": "bool",
"attr": "TUNNEL_ENCAP_FLAG_CSUM"
},
"csum6": {
"type": "bool",
"attr": "TUNNEL_ENCAP_FLAG_CSUM6"
},
"remcsum": {
"type": "bool",
"attr": "TUNNEL_ENCAP_FLAG_REMCSUM"
}
}
}
}
$ ip tunnel add tun0 mode ipip local 192.0.2.1 remote 198.51.100.3
$ ip link show
10: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group
default
link/ipip 0.0.0.0 brd 0.0.0.0
11: tun0@NONE: <POINTOPOINT,NOARP> mtu 1480 qdisc noop state DOWN mode
DEFAULT group default
link/ipip 192.0.2.1 peer 198.51.100.3
$ ip -details -json link show
[{
"ifindex": 10,
"ifname": "tunl0",
"link": null,
"flags": ["NOARP"],
"mtu": 1480,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "ipip",
"address": "0.0.0.0",
"broadcast": "0.0.0.0",
"promiscuity": 0,
"linkinfo": {
"info_kind": "ipip",
"info_data": {
"remote": "any",
"local": "any",
"ttl": 0,
"pmtudisc": false
}
},
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 11,
"ifname": "tun0",
"link": null,
"flags": ["POINTOPOINT","NOARP"],
"mtu": 1480,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "ipip",
"address": "192.0.2.1",
"link_pointtopoint": true,
"broadcast": "198.51.100.3",
"promiscuity": 0,
"linkinfo": {
"info_kind": "ipip",
"info_data": {
"remote": "198.51.100.3",
"local": "192.0.2.1",
"ttl": 0,
"pmtudisc": true
}
},
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
}
]
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:41 -07:00
Julien Fortin
1facc1c61c
ip: link_ip6tnl.c: add json output support
...
Schema
{
"proto": {
"type": "string",
"attr": "IFLA_IPTUN_PROTO"
},
"remote": {
"type": "string",
"attr": "IFLA_IPTUN_REMOTE"
},
"local": {
"type": "string",
"attr": "IFLA_IPTUN_LOCAL"
},
"link": {
"type": "string",
"attr": "IFLA_IPTUN_LINK",
"mutually_exclusive": {
"link_index": {
"type": "uint",
}
}
},
"ip6_tnl_f_ign_encap_limit": {
"type": "bool",
"attr": "IP6_TNL_F_IGN_ENCAP_LIMIT"
},
"encap_limit": {
"type": "uint",
"attr": "IFLA_IPTUN_ENCAP_LIMIT"
},
"ttl": {
"type": "uint",
"attr": "IFLA_IPTUN_TTL"
},
"ip6_tnl_f_use_orig_tclass": {
"type": "",
"attr": "IP6_TNL_F_USE_ORIG_TCLASS"
},
"flowinfo_tclass": {
"type": "string",
"attr": "IP6_FLOWINFO_TCLASS"
},
"ip6_tnl_f_use_orig_flowlabel": {
"type": "bool",
"attr": "IP6_TNL_F_USE_ORIG_FLOWLABEL"
},
"flowlabel": {
"type": "string",
"attr": "IP6_FLOWINFO_FLOWLABEL"
},
"flowinfo": {
"type": "string"
},
"ip6_tnl_f_rcv_dscp_copy": {
"type": "bool",
"attr": "IP6_TNL_F_RCV_DSCP_COPY"
},
"ip6_tnl_f_mip6_dev": {
"type": "bool",
"attr": "IP6_TNL_F_MIP6_DEV"
},
"ip6_tnl_f_use_orig_fwmark": {
"type": "bool",
"attr": "IP6_TNL_F_USE_ORIG_FWMARK"
},
"encap": {
"type": "dict",
"attr": "IFLA_IPTUN_ENCAP_TYPE",
"dict": {
"type": {
"type": "string",
"attr": "IFLA_IPTUN_ENCAP_TYPE"
},
"sport": {
"type": "uint",
"attr": "IFLA_IPTUN_ENCAP_SPORT"
},
"dport": {
"type": "uint",
"attr": "IFLA_IPTUN_ENCAP_DPORT"
},
"csum": {
"type": "bool",
"attr": "TUNNEL_ENCAP_FLAG_CSUM"
},
"csum6": {
"type": "bool",
"attr": "TUNNEL_ENCAP_FLAG_CSUM6"
},
"remcsum": {
"type": "bool",
"attr": "TUNNEL_ENCAP_FLAG_REMCSUM"
}
}
}
}
$ ip link show
$ ip -6 tunnel add name tun6 mode ip6gre local 2001:db8:1::1/64 remote
2001:0db8:85a3:0000:0000:8a2e:0370:7334
$ ip link show
10: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN mode DEFAULT group
default
link/tunnel6 :: brd ::
11: ip6gre0@NONE: <NOARP> mtu 1448 qdisc noop state DOWN mode DEFAULT group
default
link/gre6 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 brd
00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
12: tun6@NONE: <POINTOPOINT,NOARP> mtu 1448 qdisc noop state DOWN mode
DEFAULT group default
link/gre6 20:01:0d:b8:00:01:00:00:00:00:00:00:00:00:00:01 peer
20:01:0d:b8:85:a3:00:00:00:00:8a:2e:03:70:73:34
➜ ~ ./ip -details -json link show
[{
"ifindex": 10,
"ifname": "ip6tnl0",
"link": null,
"flags": ["NOARP"],
"mtu": 1452,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "tunnel6",
"address": "::",
"broadcast": "::",
"promiscuity": 0,
"linkinfo": {
"info_kind": "ip6tnl",
"info_data": {
"proto": "ip6ip6",
"remote": "::",
"local": "::",
"encap_limit": 0,
"ttl": 0,
"flowinfo_tclass": "0x00",
"flowlabel": "0x00000",
"flowinfo": "0x00000000"
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 11,
"ifname": "ip6gre0",
"link": null,
"flags": ["NOARP"],
"mtu": 1448,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "gre6",
"address": "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00",
"broadcast": "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00",
"promiscuity": 0,
"linkinfo": {
"info_kind": "ip6gre",
"info_data": {
"remote": "any",
"local": "any",
"ttl": 0,
"encap_limit": 0,
"flowlabel": "0x00000"
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 12,
"ifname": "tun6",
"link": null,
"flags": ["POINTOPOINT","NOARP"],
"mtu": 1448,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "gre6",
"address": "20:01:0d:b8:00:01:00:00:00:00:00:00:00:00:00:01",
"link_pointtopoint": true,
"broadcast": "20:01:0d:b8:85:a3:00:00:00:00:8a:2e:03:70:73:34",
"promiscuity": 0,
"linkinfo": {
"info_kind": "ip6gre",
"info_data": {
"remote": "2001:db8:85a3::8a2e:370:7334",
"local": "2001:db8:1::1",
"ttl": 64,
"encap_limit": 4,
"flowlabel": "0x00000"
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
}
]
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:41 -07:00
Julien Fortin
6856fb6548
ip: link_gre6.c: add json output support
...
Schema
{
"remote": {
"type": "string",
"attr": "IFLA_GRE_REMOTE"
},
"local": {
"type": "string",
"attr": "IFLA_GRE_LOCAL"
},
"link": {
"type": "string",
"attr": "IFLA_GRE_LINK",
"mutually_exclusive": {
"link_index": {
"type": "uint",
}
}
},
"ttl": {
"type": "int",
"attr": "IFLA_GRE_TTL"
},
"ip6_tnl_f_ign_encap_limit": {
"type": "bool",
"attr": "IP6_TNL_F_IGN_ENCAP_LIMIT"
},
"encap_limit": {
"type": "int",
"attr": "IFLA_GRE_ENCAP_LIMIT"
},
"ip6_tnl_f_use_orig_flowlabel": {
"type": "bool",
"attr": "IP6_TNL_F_USE_ORIG_FLOWLABEL"
},
"flowlabel": {
"type": "string",
"attr": "IP6_FLOWINFO_FLOWLABEL"
},
"ip6_tnl_f_rcv_dscp_copy": {
"type": "bool",
"attr": "IP6_TNL_F_RCV_DSCP_COPY"
},
"ikey": {
"type": "string",
"attr": "IFLA_GRE_IKEY"
},
"okey": {
"type": "string",
"attr": "IFLA_GRE_OKEY"
},
"iseq": {
"type": "bool",
"attr": "IFLA_GRE_IFLAGS & GRE_SEQ"
},
"oseq": {
"type": "bool",
"attr": "IFLA_GRE_OFLAGS & GRE_SEQ"
},
"icsum": {
"type": "bool",
"attr": "IFLA_GRE_IFLAGS & GRE_CSUM"
},
"ocsum": {
"type": "bool",
"attr": "IFLA_GRE_OFLAGS & GRE_CSUM"
},
"encap": {
"type": "dict",
"attr": "IFLA_GRE_ENCAP_TYPE != TUNNEL_ENCAP_NONE",
"dict": {
"type": {
"type": "string",
"attr": "IFLA_GRE_ENCAP_TYPE"
},
"sport": {
"type": "uint",
"attr": "IFLA_GRE_ENCAP_SPORT"
},
"dport": {
"type": "uint",
"attr": "IFLA_GRE_ENCAP_DPORT"
},
"csum": {
"type": "bool",
"attr": "TUNNEL_ENCAP_FLAG_CSUM"
},
"csum6": {
"type": "bool",
"attr": "TUNNEL_ENCAP_FLAG_CSUM6"
},
"remcsum": {
"type": "bool",
"attr": "TUNNEL_ENCAP_FLAG_REMCSUM"
}
}
}
}
$ ip link show
$ ip -6 tunnel add name tun6 mode ip6gre local 2001:db8:1::1/64 remote
2001:0db8:85a3:0000:0000:8a2e:0370:7334
$ ip link show
10: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN mode DEFAULT
group default
link/tunnel6 :: brd ::
11: ip6gre0@NONE: <NOARP> mtu 1448 qdisc noop state DOWN mode DEFAULT
group default
link/gre6 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 brd
00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
12: tun6@NONE: <POINTOPOINT,NOARP> mtu 1448 qdisc noop state DOWN mode
DEFAULT group default
link/gre6 20:01:0d:b8:00:01:00:00:00:00:00:00:00:00:00:01 peer
20:01:0d:b8:85:a3:00:00:00:00:8a:2e:03:70:73:34
➜ ~ ./ip -details -json link show
[{
"ifindex": 10,
"ifname": "ip6tnl0",
"link": null,
"flags": ["NOARP"],
"mtu": 1452,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "tunnel6",
"address": "::",
"broadcast": "::",
"promiscuity": 0,
"linkinfo": {
"info_kind": "ip6tnl",
"info_data": {
"proto": "ip6ip6",
"remote": "::",
"local": "::",
"encap_limit": 0,
"ttl": 0,
"flowinfo_tclass": "0x00",
"flowlabel": "0x00000",
"flowinfo": "0x00000000"
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 11,
"ifname": "ip6gre0",
"link": null,
"flags": ["NOARP"],
"mtu": 1448,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "gre6",
"address": "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00",
"broadcast": "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00",
"promiscuity": 0,
"linkinfo": {
"info_kind": "ip6gre",
"info_data": {
"remote": "any",
"local": "any",
"ttl": 0,
"encap_limit": 0,
"flowlabel": "0x00000"
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 12,
"ifname": "tun6",
"link": null,
"flags": ["POINTOPOINT","NOARP"],
"mtu": 1448,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "gre6",
"address": "20:01:0d:b8:00:01:00:00:00:00:00:00:00:00:00:01",
"link_pointtopoint": true,
"broadcast": "20:01:0d:b8:85:a3:00:00:00:00:8a:2e:03:70:73:34",
"promiscuity": 0,
"linkinfo": {
"info_kind": "ip6gre",
"info_data": {
"remote": "2001:db8:85a3::8a2e:370:7334",
"local": "2001:db8:1::1",
"ttl": 64,
"encap_limit": 4,
"flowlabel": "0x00000"
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
}
]
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:41 -07:00
Julien Fortin
e2d4588331
ip: link_gre.c: add json output support
...
Schema
{
"external": {
"type": "bool",
"comment": "!tb[IFLA_GRE_COLLECT_METADATA]"
},
"remote": {
"type": "string",
"attr": "IFLA_GRE_REMOTE"
},
"local": {
"type": "string",
"attr": "IFLA_GRE_LOCAL"
},
"link": {
"type": "string",
"attr": "IFLA_GRE_LINK",
"mutually_exclusive": {
"link_index": {
"type": "uint",
}
}
},
"ttl": {
"type": "int",
"attr": "IFLA_GRE_TTL"
},
"tos": {
"type": "string",
"attr": "IFLA_GRE_TOS"
},
"pmtudisc": {
"type": "bool",
"attr": "IFLA_GRE_PMTUDISC"
},
"ikey": {
"type": "string",
"attr": "IFLA_GRE_IKEY"
},
"okey": {
"type": "string",
"attr": "IFLA_GRE_OKEY"
},
"iseq": {
"type": "bool",
"attr": "IFLA_GRE_IFLAGS & GRE_SEQ"
},
"oseq": {
"type": "bool",
"attr": "IFLA_GRE_OFLAGS & GRE_SEQ"
},
"icsum": {
"type": "bool",
"attr": "IFLA_GRE_IFLAGS & GRE_CSUM"
},
"ocsum": {
"type": "bool",
"attr": "IFLA_GRE_OFLAGS & GRE_CSUM"
},
"ignore_df": {
"type": "bool",
"attr": "IFLA_GRE_IGNORE_DF"
},
"encap": {
"type": "dict",
"attr": "IFLA_GRE_ENCAP_TYPE != TUNNEL_ENCAP_NONE",
"dict": {
"type": {
"type": "string",
"attr": "IFLA_GRE_ENCAP_TYPE"
},
"sport": {
"type": "uint",
"attr": "IFLA_GRE_ENCAP_SPORT"
},
"dport": {
"type": "uint",
"attr": "IFLA_GRE_ENCAP_DPORT"
},
"csum": {
"type": "bool",
"attr": "TUNNEL_ENCAP_FLAG_CSUM"
},
"csum6": {
"type": "bool",
"attr": "TUNNEL_ENCAP_FLAG_CSUM6"
},
"remcsum": {
"type": "bool",
"attr": "TUNNEL_ENCAP_FLAG_REMCSUM"
}
}
}
}
$ ip link show
$ ip tunnel add tun42 mode gre local 192.0.2.42 remote 203.0.113.42 key 42
$ ip link show
10: gre0@NONE: <NOARP> mtu 1476 qdisc noop state DOWN mode DEFAULT group
default
link/gre 0.0.0.0 brd 0.0.0.0
11: gretap0@NONE: <BROADCAST,MULTICAST> mtu 1462 qdisc noop state DOWN
mode DEFAULT group default qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
12: tun42@NONE: <POINTOPOINT,NOARP> mtu 1472 qdisc noop state DOWN mode
DEFAULT group default
link/gre 192.0.2.42 peer 203.0.113.42
$ ip -details -json link show
[{
"ifindex": 10,
"ifname": "gre0",
"link": null,
"flags": ["NOARP"],
"mtu": 1476,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "gre",
"address": "0.0.0.0",
"broadcast": "0.0.0.0",
"promiscuity": 0,
"linkinfo": {
"info_kind": "gre",
"info_data": {
"remote": "any",
"local": "any",
"ttl": 0,
"pmtudisc": false
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 11,
"ifname": "gretap0",
"link": null,
"flags": ["BROADCAST","MULTICAST"],
"mtu": 1462,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"txqlen": 1000,
"link_type": "ether",
"address": "00:00:00:00:00:00",
"broadcast": "ff:ff:ff:ff:ff:ff",
"promiscuity": 0,
"linkinfo": {
"info_kind": "gretap",
"info_data": {
"remote": "any",
"local": "any",
"ttl": 0,
"pmtudisc": false
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 12,
"ifname": "tun42",
"link": null,
"flags": ["POINTOPOINT","NOARP"],
"mtu": 1472,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "gre",
"address": "192.0.2.42",
"link_pointtopoint": true,
"broadcast": "203.0.113.42",
"promiscuity": 0,
"linkinfo": {
"info_kind": "gre",
"info_data": {
"remote": "203.0.113.42",
"local": "192.0.2.42",
"ttl": 0,
"pmtudisc": true,
"ikey": "0.0.0.42",
"okey": "0.0.0.42"
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
}
]
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:41 -07:00
Julien Fortin
c339834682
ip: ipmacsec.c: add json output support
...
Schema
{
"sci": {
"type": "string",
"attr": "IFLA_MACSEC_SCI"
},
"protect": {
"type": "string",
"attr": "IFLA_MACSEC_PROTECT"
},
"cipher_suite": {
"type": "string",
"attr": "IFLA_MACSEC_CIPHER_SUITE"
},
"icv_len": {
"type": "uint",
"attr": "IFLA_MACSEC_ICV_LEN"
},
"encoding_sa": {
"type": "uint",
"attr": "IFLA_MACSEC_ENCODING_SA"
},
"validation": {
"type": "string",
"attr": "IFLA_MACSEC_VALIDATION"
},
"encrypt": {
"type": "string",
"attr": "IFLA_MACSEC_ENCRYPT"
},
"inc_sci": {
"type": "string",
"attr": "IFLA_MACSEC_INC_SCI"
},
"es": {
"type": "string",
"attr": "IFLA_MACSEC_ES"
},
"scb": {
"type": "string",
"attr": "IFLA_MACSEC_SCB"
},
"replay_protect": {
"type": "string",
"attr": "IFLA_MACSEC_REPLAY_PROTECT"
},
"window": {
"type": "int",
"attr": ""
}
}
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:41 -07:00
Julien Fortin
2f26065e25
ip: iplink_xdp.c: add json output support
...
Schema
{
"attached": {
"type": "uint",
"attr": "IFLA_XDP_ATTACHED"
},
"prog_id": {
"type": "uint",
"attr": "IFLA_XDP_PROG_ID"
}
}
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:41 -07:00
Julien Fortin
3b98d9b804
ip: iplink_vxlan.c: add json output support
...
Schema:
{
"id": {
"type": "uint",
"attr": "IFLA_VXLAN_ID"
},
"group": {
"type": "string",
"attr": "IFLA_VXLAN_GROUP"
},
"remote": {
"type": "string",
"attr": "IFLA_VXLAN_GROUP"
},
"group6": {
"type": "string",
"attr": "IFLA_VXLAN_GROUP6"
},
"remote6": {
"type": "string",
"attr": "IFLA_VXLAN_GROUP6"
},
"local": {
"type": "string",
"attr": "IFLA_VXLAN_LOCAL"
},
"local6": {
"type": "string",
"attr": "IFLA_VXLAN_LOCAL6"
},
"link": {
"type": "string",
"attr": "IFLA_VXLAN_LINK",
"mutually_exclusive": {
"link_index": {
"type": "uint",
"comment": "if not ifname for ifindex"
}
}
},
"port_range": {
"type": "dict",
"attr": "IFLA_VXLAN_PORT_RANGE",
"dict": {
"low": {
"type": "uint"
},
"high": {
"type": "uint"
}
}
},
"port": {
"type": "uint",
"attr": "IFLA_VXLAN_PORT"
},
"learning": {
"type": "bool",
"attr": "IFLA_VXLAN_LEARNING"
},
"proxy": {
"type": "bool",
"attr": "IFLA_VXLAN_PROXY"
},
"rsc": {
"type": "bool",
"attr": "IFLA_VXLAN_RSC"
},
"l2miss": {
"type": "bool",
"attr": "IFLA_VXLAN_L2MISS"
},
"l3miss": {
"type": "bool",
"attr": "IFLA_VXLAN_L3MISS"
},
"tos": {
"type": "string",
"attr": "IFLA_VXLAN_TOS"
},
"ttl": {
"type": "int",
"attr": "IFLA_VXLAN_TTL"
},
"label": {
"type": "string",
"attr": "IFLA_VXLAN_LABEL"
},
"ageing": {
"type": "uint",
"attr": "IFLA_VXLAN_AGEING"
},
"limit": {
"type": "uint",
"attr": "IFLA_VXLAN_LIMIT"
},
"udp_csum": {
"type": "bool",
"attr": "IFLA_VXLAN_UDP_CSUM"
},
"udp_zero_csum6_tx": {
"type": "bool",
"attr": "IFLA_VXLAN_UDP_ZERO_CSUM6_TX"
},
"udp_zero_csum6_rx": {
"type": "bool",
"attr": "IFLA_VXLAN_UDP_ZERO_CSUM6_RX"
},
"remcsum_tx": {
"type": "bool",
"attr": "IFLA_VXLAN_REMCSUM_TX"
},
"remcsum_rx": {
"type": "bool",
"attr": "IFLA_VXLAN_REMCSUM_RX"
},
"collect_metadata": {
"type": "bool",
"attr": "IFLA_VXLAN_COLLECT_METADATA"
},
"gbp": {
"type": "bool",
"attr": "IFLA_VXLAN_GBP"
},
"gpe": {
"type": "bool",
"attr": "IFLA_VXLAN_GPE"
}
}
$ ip link add name vxlan42 type vxlan id 42 dev eth0 remote 203.0.113.6
local 192.0.2.1 dstport 4789
$ ip link add name vxlan43 type vxlan id 43 dev eth0 group 239.0.0.1
dstport 4789
$ ip -details -json link show
[{
"ifindex": 17,
"ifname": "vxlan42",
"flags": ["BROADCAST","MULTICAST"],
"mtu": 1450,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "ether",
"address": "b2:92:0e:1a:c6:42",
"broadcast": "ff:ff:ff:ff:ff:ff",
"promiscuity": 0,
"linkinfo": {
"info_kind": "vxlan",
"info_data": {
"id": 42,
"remote": "203.0.113.6",
"local": "192.0.2.1",
"link": "eth0",
"port_range": {
"low": 0,
"high": 0
},
"port": 4789,
"learning": true,
"ttl": 0,
"ageing": 300,
"udp_csum": false,
"udp_zero_csum6_tx": false,
"udp_zero_csum6_rx": false
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 18,
"ifname": "vxlan43",
"flags": ["BROADCAST","MULTICAST"],
"mtu": 1450,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "ether",
"address": "c6:51:4d:7f:f9:2f",
"broadcast": "ff:ff:ff:ff:ff:ff",
"promiscuity": 0,
"linkinfo": {
"info_kind": "vxlan",
"info_data": {
"id": 43,
"group": "239.0.0.1",
"link": "eth0",
"port_range": {
"low": 0,
"high": 0
},
"port": 4789,
"learning": true,
"ttl": 0,
"ageing": 300,
"udp_csum": false,
"udp_zero_csum6_tx": false,
"udp_zero_csum6_rx": false
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
}
]
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:41 -07:00
Julien Fortin
d9e84ec27c
ip: iplink_vrf.c: add json output support
...
Schema:
{
"table": {
"type": "uint",
"attr": "IFLA_VRF_TABLE"
}
}
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:41 -07:00
Julien Fortin
8f24afc9d4
ip: iplink_ipvlan.c: add json output support
...
Schema:
{
"mode": {
"type": "string",
"attr": "IFLA_IPVLAN_MODE"
}
}
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:41 -07:00
Julien Fortin
3bec1cf84e
ip: iplink_ipoib.c: add json output support
...
Schema:
{
"key": {
"type": "string",
"attr": "IFLA_IPOIB_PKEY"
},
"mode": {
"type": "string",
"attr": "IFLA_IPOIB_PKEY"
},
"umcast": {
"type": "string",
"attr": "IFLA_IPOIB_UMCAST"
}
}
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:41 -07:00
Julien Fortin
119fae0aa5
ip: iplink_geneve.c: add json output support
...
Schema:
{
"id": {
"type": "uint",
"attr": "IFLA_GENEVE_ID"
},
"remote": {
"type": "string",
"attr": "IFLA_GENEVE_REMOTE"
},
"remote6": {
"type": "string",
"attr": "IFLA_GENEVE_REMOTE6"
},
"ttl": {
"type": "int",
"attr": "IFLA_GENEVE_TTL"
},
"tos": {
"type": "string",
"attr": "IFLA_GENEVE_TOS"
},
"label": {
"type": "string",
"attr": "IFLA_GENEVE_LABEL"
},
"port": {
"type": "uint",
"attr": "IFLA_GENEVE_PORT"
},
"collect_metadata": {
"type": "bool",
"attr": "IFLA_GENEVE_COLLECT_METADATA"
},
"udp_csum": {
"type": "bool",
"attr": "IFLA_GENEVE_UDP_CSUM"
},
"udp_zero_csum6_tx": {
"type": "bool",
"attr": "IFLA_GENEVE_UDP_ZERO_CSUM6_TX"
},
"udp_zero_csum6_rx": {
"type": "bool",
"attr": "IFLA_GENEVE_UDP_ZERO_CSUM6_RX"
}
}
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:41 -07:00
Julien Fortin
529226009f
ip: iplink_can.c: add json output support
...
Schema: IFLA_INFO_DATA
{
"ctrlmode": {
"type": "array",
"attr": "IFLA_CAN_CTRLMODE",
"array": [
{
"type": "string"
}
]
},
"state": {
"type": "string",
"attr": "IFLA_CAN_STATE"
},
"berr_counter": {
"type": "dict",
"attr": "IFLA_CAN_BERR_COUNTER",
"dict": {
"tx": {
"type": "int"
},
"rx": {
"type": "int"
}
}
},
"restart_ms": {
"type": "int",
"attr": "IFLA_CAN_RESTART_MS"
},
"bittiming": {
"type": "dict",
"attr": "IFLA_CAN_BITTIMING",
"dict": {
"bitrate": {
"type": "int"
},
"sample_point": {
"type": "float"
},
"tq": {
"type": "int"
},
"prop_seg": {
"type": "int"
},
"phase_seg1": {
"type": "int"
},
"phase_seg2": {
"type": "int"
},
"sjw": {
"type": "int"
}
}
},
"bittiming_const": {
"type": "dict",
"attr": "IFLA_CAN_BITTIMING_CONST",
"dict": {
"name": {
"type": "string"
},
"tseg1": {
"type": "dict",
"dict": {
"min": {
"type": "int"
},
"max": {
"type": "int"
}
}
},
"tseg2": {
"type": "dict",
"dict": {
"min": {
"type": "int"
},
"max": {
"type": "int"
}
}
},
"sjw": {
"type": "dict",
"dict": {
"min": {
"type": "int"
},
"max": {
"type": "int"
}
}
},
"brp": {
"type": "dict",
"dict": {
"min": {
"type": "int"
},
"max": {
"type": "int"
}
}
},
"brp_inc": {
"type": "int"
}
}
},
"bittiming_bitrate": {
"type": "uint",
"attr": "IFLA_CAN_BITTIMING"
},
"bitrate_const": {
"type": "array",
"attr": "IFLA_CAN_BITRATE_CONST",
"array": [
{
"type": "uint"
}
]
},
"data_bittiming": {
"type": "dict",
"attr": "IFLA_CAN_DATA_BITTIMING",
"dict": {
"bitrate": {
"type": "int"
},
"sample_point": {
"type": "float"
},
"tq": {
"type": "int"
},
"prop_seg": {
"type": "int"
},
"phase_seg1": {
"type": "int"
},
"phase_seg2": {
"type": "int"
},
"sjw": {
"type": "int"
}
}
},
"data_bittiming_const": {
"type": "dict",
"attr": "IFLA_CAN_DATA_BITTIMING_CONST",
"dict": {
"name": {
"type": "string"
},
"tseg1": {
"type": "dict",
"dict": {
"min": {
"type": "int"
},
"max": {
"type": "int"
}
}
},
"tseg2": {
"type": "dict",
"dict": {
"min": {
"type": "int"
},
"max": {
"type": "int"
}
}
},
"sjw": {
"type": "dict",
"dict": {
"min": {
"type": "int"
},
"max": {
"type": "int"
}
}
},
"brp": {
"type": "dict",
"dict": {
"min": {
"type": "int"
},
"max": {
"type": "int"
}
}
},
"brp_inc": {
"type": "int"
}
}
},
"data_bittiming_bitrate": {
"type": "uint",
"attr": "IFLA_CAN_DATA_BITTIMING"
},
"data_bitrate_const": {
"type": "array",
"attr": "IFLA_CAN_DATA_BITRATE_CONST",
"array": [
{
"type": "uint"
}
]
},
"termination": {
"type": "unsigned short",
"attr": "IFLA_CAN_TERMINATION"
},
"termination_const": {
"type": "array",
"attr": "IFLA_CAN_TERMINATION_CONST",
"array": [
{
"type": "unsigned short"
}
]
},
"clock": {
"type": "int",
"attr": "IFLA_CAN_CLOCK"
}
}
IFLA_INFO_XSTATS
{
"restarts": {
"type": "int"
},
"bus_error": {
"type": "int"
},
"arbitration_lost": {
"type": "int"
},
"error_warning": {
"type": "int"
},
"error_passive": {
"type": "int"
},
"bus_off": {
"type": "int"
}
}
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:41 -07:00
Julien Fortin
165a703909
ip: iplink_bridge_slave.c: add json output support
...
Schema:
bridge_slave: IFLA_INFO_SLAVE_DATA
{
"state": {
"type": "string",
"attr": "IFLA_BRPORT_STATE",
"mutually_exclusive": {
"state_index": {
"type": "uint",
"comment": "if (state > BR_STATE_BLOCKING)"
}
}
},
"priority": {
"type": "int",
"attr": "IFLA_BRPORT_PRIORITY"
},
"cost": {
"type": "int",
"attr": "IFLA_BRPORT_COST"
},
"mode": {
"type": "bool",
"attr": "IFLA_BRPORT_MODE"
},
"guard": {
"type": "bool",
"attr": "IFLA_BRPORT_GUARD"
},
"protect": {
"type": "bool",
"attr": "IFLA_BRPORT_PROTECT"
},
"fast_leave": {
"type": "bool",
"attr": "IFLA_BRPORT_FAST_LEAVE"
},
"learning": {
"type": "bool",
"attr": "IFLA_BRPORT_LEARNING"
},
"unicast_flood": {
"type": "bool",
"attr": "IFLA_BRPORT_UNICAST_FLOOD"
},
"id": {
"type": "string",
"attr": "IFLA_BRPORT_ID"
},
"no": {
"type": "string",
"attr": "IFLA_BRPORT_NO"
},
"designated_port": {
"type": "uint",
"attr": "IFLA_BRPORT_DESIGNATED_PORT"
},
"designated_cost": {
"type": "uint",
"attr": "IFLA_BRPORT_DESIGNATED_COST"
},
"bridge_id": {
"type": "string",
"attr": "IFLA_BRPORT_BRIDGE_ID"
},
"root_id": {
"type": "string",
"attr": "IFLA_BRPORT_ROOT_ID"
},
"hold_timer": {
"type": "float",
"attr": "IFLA_BRPORT_HOLD_TIMER"
},
"message_age_timer": {
"type": "float",
"attr": "IFLA_BRPORT_MESSAGE_AGE_TIMER"
},
"forward_delay_timer": {
"type": "float",
"attr": "IFLA_BRPORT_FORWARD_DELAY_TIMER"
},
"topology_change_ack": {
"type": "uint",
"attr": "IFLA_BRPORT_TOPOLOGY_CHANGE_ACK"
},
"config_pending": {
"type": "uint",
"attr": "IFLA_BRPORT_CONFIG_PENDING"
},
"proxyarp": {
"type": "bool",
"attr": "IFLA_BRPORT_PROXYARP"
},
"proxyarp_wifi": {
"type": "bool",
"attr": "IFLA_BRPORT_PROXYARP_WIFI"
},
"multicast_router": {
"type": "uint",
"attr": "IFLA_BRPORT_MULTICAST_ROUTER"
},
"mcast_flood": {
"type": "bool",
"attr": "IFLA_BRPORT_MCAST_FLOOD"
}
}
$ ip link add dev br42 type bridge
$ ip link add dev bond42 type bond
$ ip link set dev bond42 master br42
$ ip link set dev bond42 up
$ ip link set dev br42 up
$ ip -details link show
$ ip -details link show
15: br42: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state
UP mode DEFAULT group default
link/ether 22:8f:91:bb:9f:09 brd ff:ff:ff:ff:ff:ff promiscuity 0
bridge forward_delay 1500 hello_time 200 max_age 2000 ageing_time
30000 stp_state 0 priority 32768 vlan_filtering 0 vlan_protocol 802.1Q
bridge_id 8000.22:8f:91:bb:9f:9 designated_root 8000.22:8f:91:bb:9f:9
root_port 0 root_path_cost 0 topology_change 0 topology_change_detected 0
hello_timer 0.00 tcn_timer 0.00 topology_change_timer 0.00
gc_timer 199.11 vlan_default_pvid 1 vlan_stats_enabled 0 group_fwd_mask 0
group_address 01:80:c2:00:00:00 mcast_snooping 1 mcast_router 1
mcast_query_use_ifaddr 0 mcast_querier 0 mcast_hash_elasticity 4096
mcast_hash_max 4096 mcast_last_member_count 2 mcast_startup_query_count 2
mcast_last_member_interval 100 mcast_membership_interval 26000
mcast_querier_interval 25500 mcast_query_interval 12500
mcast_query_response_interval 1000 mcast_startup_query_interval 3125
mcast_stats_enabled 0 mcast_igmp_version 2 mcast_mld_version 1
nf_call_iptables 0 nf_call_ip6tables 0 nf_call_arptables 0 addrgenmode
eui64
16: bond42: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc
noqueue master br42 state UNKNOWN mode DEFAULT group default
link/ether 22:8f:91:bb:9f:09 brd ff:ff:ff:ff:ff:ff promiscuity 1
bond mode 802.3ad miimon 100 updelay 0 downdelay 0 use_carrier 1
arp_interval 0 arp_validate none arp_all_targets any primary_reselect
always fail_over_mac none xmit_hash_policy layer3+4 resend_igmp 1
num_grat_arp 1 all_slaves_active 0 min_links 1 lp_interval 1
packets_per_slave 1 lacp_rate fast ad_select stable ad_actor_sys_prio
65535 ad_user_port_key 0 ad_actor_system 00:00:00:00:00:00
bridge_slave state forwarding priority 8 cost 100 hairpin off guard
off root_block off fastleave off learning on flood on port_id 0x8001
port_no 0x1 designated_port 32769 designated_cost 0 designated_bridge
8000.22:8f:91:bb:9f:9 designated_root 8000.22:8f:91:bb:9f:9 hold_timer
0.00 message_age_timer 0.00 forward_delay_timer 0.00
topology_change_ack 0 config_pending 0 proxy_arp off proxy_arp_wifi off
mcast_router 1 mcast_fast_leave off mcast_flood on neigh_suppress off
addrgenmode eui64
$ ip -details -json link show
[{
"ifindex": 15,
"ifname": "br42",
"flags": ["BROADCAST","MULTICAST","UP","LOWER_UP"],
"mtu": 1500,
"qdisc": "noqueue",
"operstate": "UP",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "ether",
"address": "22:8f:91:bb:9f:09",
"broadcast": "ff:ff:ff:ff:ff:ff",
"promiscuity": 0,
"linkinfo": {
"info_kind": "bridge",
"info_data": {
"forward_delay": 1500,
"hello_time": 200,
"max_age": 2000,
"ageing_time": 30000,
"stp_state": 0,
"priority": 32768,
"vlan_filtering": 0,
"vlan_protocol": "802.1Q",
"bridge_id": "8000.22:8f:91:bb:9f:9",
"root_id": "8000.22:8f:91:bb:9f:9",
"root_port": 0,
"root_path_cost": 0,
"topology_change": 0,
"topology_change_detected": 0,
"hello_timer": 0.00,
"tcn_timer": 0.00,
"topology_change_timer": 0.00,
"gc_timer": 298.27,
"vlan_default_pvid": 1,
"vlan_stats_enabled": 0,
"group_fwd_mask": "0",
"group_addr": "01:80:c2:00:00:00",
"mcast_snooping": 1,
"mcast_router": 1,
"mcast_query_use_ifaddr": 0,
"mcast_querier": 0,
"mcast_hash_elasticity": 4096,
"mcast_hash_max": 4096,
"mcast_last_member_cnt": 2,
"mcast_startup_query_cnt": 2,
"mcast_last_member_intvl": 100,
"mcast_membership_intvl": 26000,
"mcast_querier_intvl": 25500,
"mcast_query_intvl": 12500,
"mcast_query_response_intvl": 1000,
"mcast_startup_query_intvl": 3125,
"mcast_stats_enabled": 0,
"mcast_igmp_version": 2,
"mcast_mld_version": 1,
"nf_call_iptables": 0,
"nf_call_ip6tables": 0,
"nf_call_arptables": 0
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 16,
"ifname": "bond42",
"flags": ["BROADCAST","MULTICAST","MASTER","UP","LOWER_UP"],
"mtu": 1500,
"qdisc": "noqueue",
"master": "br42",
"operstate": "UNKNOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "ether",
"address": "22:8f:91:bb:9f:09",
"broadcast": "ff:ff:ff:ff:ff:ff",
"promiscuity": 1,
"linkinfo": {
"info_kind": "bond",
"info_data": {
"mode": "802.3ad",
"miimon": 100,
"updelay": 0,
"downdelay": 0,
"use_carrier": 1,
"arp_interval": 0,
"arp_validate": null,
"arp_all_targets": "any",
"primary_reselect": "always",
"fail_over_mac": "none",
"xmit_hash_policy": "layer3+4",
"resend_igmp": 1,
"num_peer_notif": 1,
"all_slaves_active": 0,
"min_links": 1,
"lp_interval": 1,
"packets_per_slave": 1,
"ad_lacp_rate": "fast",
"ad_select": "stable",
"ad_actor_sys_prio": 65535,
"ad_user_port_key": 0,
"ad_actor_system": "00:00:00:00:00:00"
},
"info_slave_kind": "bridge",
"info_slave_data": {
"state": "forwarding",
"priority": 8,
"cost": 100,
"hairpin": false,
"guard": false,
"root_block": false,
"fastleave": false,
"learning": true,
"flood": true,
"id": "0x8001",
"no": "0x1",
"designated_port": 32769,
"designated_cost": 0,
"bridge_id": "8000.22:8f:91:bb:9f:9",
"root_id": "8000.22:8f:91:bb:9f:9",
"hold_timer": 0.00,
"message_age_timer": 0.00,
"forward_delay_timer": 11.97,
"topology_change_ack": 0,
"config_pending": 0,
"proxy_arp": false,
"proxy_arp_wifi": false,
"multicast_router": 1,
"mcast_flood": true
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 16,
"num_rx_queues": 16,
"gso_max_size": 65536,
"gso_max_segs": 65535
}
]
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:41 -07:00
Julien Fortin
20aeecfbf5
ip: iplink_bridge.c: add json output support
...
Schema and live example:
bridge: IFLA_INFO_DATA
{
"forward_delay": {
"type": "uint",
"attr": "IFLA_BR_FORWARD_DELAY"
},
"hello_time": {
"type": "uint",
"attr": "IFLA_BR_HELLO_TIME"
},
"max_age": {
"type": "uint",
"attr": "IFLA_BR_MAX_AGE"
},
"ageing_time": {
"type": "uint",
"attr": "IFLA_BR_AGEING_TIME"
},
"stp_state": {
"type": "uint",
"attr": "IFLA_BR_STP_STATE"
},
"priority": {
"type": "uint",
"attr": "IFLA_BR_PRIORITY"
},
"vlan_filtering": {
"type": "uint",
"attr": "IFLA_BR_VLAN_FILTERING"
},
"vlan_protocol": {
"type": "string",
"attr": "IFLA_BR_VLAN_PROTOCOL"
},
"bridge_id": {
"type": "string",
"attr": "IFLA_BR_BRIDGE_ID"
},
"root_id": {
"type": "string",
"attr": "IFLA_BR_ROOT_ID"
},
"root_port": {
"type": "uint",
"attr": "IFLA_BR_ROOT_PORT"
},
"root_path_cost": {
"type": "uint",
"attr": "IFLA_BR_ROOT_PATH_COST"
},
"topology_change": {
"type": "uint",
"attr": "IFLA_BR_TOPOLOGY_CHANGE"
},
"topology_change_detected": {
"type": "uint",
"attr": "IFLA_BR_TOPOLOGY_CHANGE_DETECTED"
},
"hello_timer": {
"type": "float",
"attr": "IFLA_BR_HELLO_TIMER"
},
"tcn_timer": {
"type": "float",
"attr": "IFLA_BR_TCN_TIMER"
},
"topology_change_timer": {
"type": "float",
"attr": "IFLA_BR_TOPOLOGY_CHANGE_TIMER"
},
"gc_timer": {
"type": "float",
"attr": "IFLA_BR_GC_TIMER"
},
"vlan_default_pvid": {
"type": "uint",
"attr": "IFLA_BR_VLAN_DEFAULT_PVID"
},
"vlan_stats_enabled": {
"type": "uint",
"attr": "IFLA_BR_VLAN_STATS_ENABLED"
},
"group_fwd_mask": {
"type": "string",
"attr": "IFLA_BR_GROUP_FWD_MASK"
},
"group_addr": {
"type": "string",
"attr": "IFLA_BR_GROUP_ADDR"
},
"mcast_snooping": {
"type": "uint",
"attr": "IFLA_BR_MCAST_SNOOPING"
},
"mcast_router": {
"type": "uint",
"attr": "IFLA_BR_MCAST_ROUTER"
},
"mcast_query_use_ifaddr": {
"type": "uint",
"attr": "IFLA_BR_MCAST_QUERY_USE_IFADDR"
},
"mcast_querier": {
"type": "uint",
"attr": "IFLA_BR_MCAST_QUERIER"
},
"mcast_hash_elasticity": {
"type": "uint",
"attr": "IFLA_BR_MCAST_HASH_ELASTICITY"
},
"mcast_hash_max": {
"type": "uint",
"attr": "IFLA_BR_MCAST_HASH_MAX"
},
"mcast_last_member_cnt": {
"type": "uint",
"attr": "IFLA_BR_MCAST_LAST_MEMBER_CNT"
},
"mcast_startup_query_cnt": {
"type": "uint",
"attr": "IFLA_BR_MCAST_STARTUP_QUERY_CNT"
},
"mcast_last_member_intvl": {
"type": "lluint",
"attr": "IFLA_BR_MCAST_LAST_MEMBER_INTVL"
},
"mcast_membership_intvl": {
"type": "lluint",
"attr": "IFLA_BR_MCAST_MEMBERSHIP_INTVL"
},
"mcast_querier_intvl": {
"type": "lluint",
"attr": "IFLA_BR_MCAST_QUERIER_INTVL"
},
"mcast_query_intvl": {
"type": "lluint",
"attr": "IFLA_BR_MCAST_QUERY_INTVL"
},
"mcast_query_response_intvl": {
"type": "lluint",
"attr": "IFLA_BR_MCAST_QUERY_RESPONSE_INTVL"
},
"mcast_startup_query_intvl": {
"type": "lluint",
"attr": "IFLA_BR_MCAST_STARTUP_QUERY_INTVL"
},
"mcast_stats_enabled": {
"type": "uint",
"attr": "IFLA_BR_MCAST_STATS_ENABLED"
},
"mcast_igmp_version": {
"type": "uint",
"attr": "IFLA_BR_MCAST_IGMP_VERSION"
},
"mcast_mld_version": {
"type": "uint",
"attr": "IFLA_BR_MCAST_MLD_VERSION"
},
"nf_call_iptables": {
"type": "uint",
"attr": "IFLA_BR_NF_CALL_IPTABLES"
},
"nf_call_ip6tables": {
"type": "uint",
"attr": "IFLA_BR_NF_CALL_IP6TABLES"
},
"nf_call_arptables": {
"type": "uint",
"attr": "IFLA_BR_NF_CALL_ARPTABLES"
}
}
$ ip link add dev br42 type bridge
$ ip link add dev bond42 type bond
$ ip link set dev bond42 master br42
$ ip link set dev bond42 up
$ ip link set dev br42 up
$ ip -details link show
15: br42: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state
UP mode DEFAULT group default
link/ether 22:8f:91:bb:9f:09 brd ff:ff:ff:ff:ff:ff promiscuity 0
bridge forward_delay 1500 hello_time 200 max_age 2000 ageing_time
30000 stp_state 0 priority 32768 vlan_filtering 0 vlan_protocol 802.1Q
bridge_id 8000.22:8f:91:bb:9f:9 designated_root 8000.22:8f:91:bb:9f:9
root_port 0 root_path_cost 0 topology_change 0 topology_change_detected 0
hello_timer 0.00 tcn_timer 0.00 topology_change_timer 0.00
gc_timer 199.11 vlan_default_pvid 1 vlan_stats_enabled 0 group_fwd_mask 0
group_address 01:80:c2:00:00:00 mcast_snooping 1 mcast_router 1
mcast_query_use_ifaddr 0 mcast_querier 0 mcast_hash_elasticity 4096
mcast_hash_max 4096 mcast_last_member_count 2 mcast_startup_query_count 2
mcast_last_member_interval 100 mcast_membership_interval 26000
mcast_querier_interval 25500 mcast_query_interval 12500
mcast_query_response_interval 1000 mcast_startup_query_interval 3125
mcast_stats_enabled 0 mcast_igmp_version 2 mcast_mld_version 1
nf_call_iptables 0 nf_call_ip6tables 0 nf_call_arptables 0 addrgenmode
eui64
16: bond42: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc
noqueue master br42 state UNKNOWN mode DEFAULT group default
link/ether 22:8f:91:bb:9f:09 brd ff:ff:ff:ff:ff:ff promiscuity 1
bond mode 802.3ad miimon 100 updelay 0 downdelay 0 use_carrier 1
arp_interval 0 arp_validate none arp_all_targets any primary_reselect
always fail_over_mac none xmit_hash_policy layer3+4 resend_igmp 1
num_grat_arp 1 all_slaves_active 0 min_links 1 lp_interval 1
packets_per_slave 1 lacp_rate fast ad_select stable ad_actor_sys_prio
65535 ad_user_port_key 0 ad_actor_system 00:00:00:00:00:00
bridge_slave state forwarding priority 8 cost 100 hairpin off guard
off root_block off fastleave off learning on flood on port_id 0x8001
port_no 0x1 designated_port 32769 designated_cost 0 designated_bridge
8000.22:8f:91:bb:9f:9 designated_root 8000.22:8f:91:bb:9f:9 hold_timer
0.00 message_age_timer 0.00 forward_delay_timer 0.00
topology_change_ack 0 config_pending 0 proxy_arp off proxy_arp_wifi off
mcast_router 1 mcast_fast_leave off mcast_flood on neigh_suppress off
addrgenmode eui64
$ ip -details -json link show
[{
"ifindex": 15,
"ifname": "br42",
"flags": ["BROADCAST","MULTICAST","UP","LOWER_UP"],
"mtu": 1500,
"qdisc": "noqueue",
"operstate": "UP",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "ether",
"address": "22:8f:91:bb:9f:09",
"broadcast": "ff:ff:ff:ff:ff:ff",
"promiscuity": 0,
"linkinfo": {
"info_kind": "bridge",
"info_data": {
"forward_delay": 1500,
"hello_time": 200,
"max_age": 2000,
"ageing_time": 30000,
"stp_state": 0,
"priority": 32768,
"vlan_filtering": 0,
"vlan_protocol": "802.1Q",
"bridge_id": "8000.22:8f:91:bb:9f:9",
"root_id": "8000.22:8f:91:bb:9f:9",
"root_port": 0,
"root_path_cost": 0,
"topology_change": 0,
"topology_change_detected": 0,
"hello_timer": 0.00,
"tcn_timer": 0.00,
"topology_change_timer": 0.00,
"gc_timer": 298.27,
"vlan_default_pvid": 1,
"vlan_stats_enabled": 0,
"group_fwd_mask": "0",
"group_addr": "01:80:c2:00:00:00",
"mcast_snooping": 1,
"mcast_router": 1,
"mcast_query_use_ifaddr": 0,
"mcast_querier": 0,
"mcast_hash_elasticity": 4096,
"mcast_hash_max": 4096,
"mcast_last_member_cnt": 2,
"mcast_startup_query_cnt": 2,
"mcast_last_member_intvl": 100,
"mcast_membership_intvl": 26000,
"mcast_querier_intvl": 25500,
"mcast_query_intvl": 12500,
"mcast_query_response_intvl": 1000,
"mcast_startup_query_intvl": 3125,
"mcast_stats_enabled": 0,
"mcast_igmp_version": 2,
"mcast_mld_version": 1,
"nf_call_iptables": 0,
"nf_call_ip6tables": 0,
"nf_call_arptables": 0
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 16,
"ifname": "bond42",
"flags": ["BROADCAST","MULTICAST","MASTER","UP","LOWER_UP"],
"mtu": 1500,
"qdisc": "noqueue",
"master": "br42",
"operstate": "UNKNOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "ether",
"address": "22:8f:91:bb:9f:09",
"broadcast": "ff:ff:ff:ff:ff:ff",
"promiscuity": 1,
"linkinfo": {
"info_kind": "bond",
"info_data": {
"mode": "802.3ad",
"miimon": 100,
"updelay": 0,
"downdelay": 0,
"use_carrier": 1,
"arp_interval": 0,
"arp_validate": null,
"arp_all_targets": "any",
"primary_reselect": "always",
"fail_over_mac": "none",
"xmit_hash_policy": "layer3+4",
"resend_igmp": 1,
"num_peer_notif": 1,
"all_slaves_active": 0,
"min_links": 1,
"lp_interval": 1,
"packets_per_slave": 1,
"ad_lacp_rate": "fast",
"ad_select": "stable",
"ad_actor_sys_prio": 65535,
"ad_user_port_key": 0,
"ad_actor_system": "00:00:00:00:00:00"
},
"info_slave_kind": "bridge",
"info_slave_data": {
"state": "forwarding",
"priority": 8,
"cost": 100,
"hairpin": false,
"guard": false,
"root_block": false,
"fastleave": false,
"learning": true,
"flood": true,
"id": "0x8001",
"no": "0x1",
"designated_port": 32769,
"designated_cost": 0,
"bridge_id": "8000.22:8f:91:bb:9f:9",
"root_id": "8000.22:8f:91:bb:9f:9",
"hold_timer": 0.00,
"message_age_timer": 0.00,
"forward_delay_timer": 11.97,
"topology_change_ack": 0,
"config_pending": 0,
"proxy_arp": false,
"proxy_arp_wifi": false,
"multicast_router": 1,
"mcast_flood": true
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 16,
"num_rx_queues": 16,
"gso_max_size": 65536,
"gso_max_segs": 65535
}
]
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:40 -07:00
Julien Fortin
69ffd27325
ip: iplink_hsr.c: add json output support
...
Schema:
hsr: IFLA_INFO_DATA
{
"slave1": {
"type": "string",
"attr": "IFLA_HSR_SLAVE1"
},
"slave2": {
"type": "string",
"attr": "IFLA_HSR_SLAVE2"
},
"seq_nr": {
"type": "int",
"attr": "IFLA_HSR_SEQ_NR"
},
"supervision_addr": {
"type": "int",
"attr": "IFLA_HSR_SUPERVISION_ADDR"
}
}
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:40 -07:00
Julien Fortin
707cce5a63
ip: iplink_bond_slave.c: add json output support (info_slave_data)
...
Schema and live example:
bond_slave: IFLA_INFO_SLAVE_DATA
{
"state": {
"type": "string",
"attr": "IFLA_BOND_SLAVE_STATE",
"mutually_exclusive": {
"state_index": {
"type": "int",
"comment": "if (state >= ARRAY_SIZE(slave_states))"
}
}
},
"mii_status": {
"type": "string",
"attr": "IFLA_BOND_SLAVE_MII_STATUS",
"mutually_exclusive": {
"mii_status_index": {
"type": "int",
"comment": "if (status >= ARRAY_SIZE(slave_mii_status))"
}
}
},
"link_failure_count": {
"type": "int",
"attr": "IFLA_BOND_SLAVE_LINK_FAILURE_COUNT"
},
"perm_hwaddr": {
"type": "string",
"attr": "IFLA_BOND_SLAVE_PERM_HWADDR"
},
"queue_id": {
"type": "int",
"attr": "IFLA_BOND_SLAVE_QUEUE_ID"
},
"ad_aggregator_id": {
"type": "int",
"attr": "IFLA_BOND_SLAVE_AD_AGGREGATOR_ID"
},
"ad_actor_oper_port_state": {
"type": "int",
"attr": "IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE"
},
"ad_partner_oper_port_state": {
"type": "int",
"attr": "IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE"
}
}
$ ip link add dev bond42 type bond
$ ip link set dev swp5 master bond42
$ ip link set dev bond42 up
$ ip link set dev swp5 up
$ ip -details -json link show
[{
"ifindex": 7,
"ifname": "swp5",
"flags": ["BROADCAST","MULTICAST","SLAVE","UP","LOWER_UP"],
"mtu": 1500,
"qdisc": "pfifo_fast",
"master": "bond42",
"operstate": "UP",
"linkmode": "DEFAULT",
"group": "default",
"txqlen": 1000,
"link_type": "ether",
"address": "08:00:27:5c:03:c6",
"broadcast": "ff:ff:ff:ff:ff:ff",
"promiscuity": 0,
"linkinfo": {
"info_slave_kind": "bond",
"info_slave_data": {
"state": "BACKUP",
"mii_status": "UP",
"link_failure_count": 0,
"perm_hwaddr": "08:00:27:5c:03:c6",
"queue_id": 0,
"ad_aggregator_id": 1,
"ad_actor_oper_port_state": 79,
"ad_partner_oper_port_state": 1
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 14,
"ifname": "bond42",
"flags": ["NO-CARRIER","BROADCAST","MULTICAST","MASTER","UP"],
"mtu": 1500,
"qdisc": "noqueue",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "ether",
"address": "08:00:27:5c:03:c6",
"broadcast": "ff:ff:ff:ff:ff:ff",
"promiscuity": 0,
"linkinfo": {
"info_kind": "bond",
"info_data": {
"mode": "802.3ad",
"miimon": 100,
"updelay": 0,
"downdelay": 0,
"use_carrier": 1,
"arp_interval": 0,
"arp_validate": null,
"arp_all_targets": "any",
"primary_reselect": "always",
"fail_over_mac": "none",
"xmit_hash_policy": "layer3+4",
"resend_igmp": 1,
"num_peer_notif": 1,
"all_slaves_active": 0,
"min_links": 1,
"lp_interval": 1,
"packets_per_slave": 1,
"ad_lacp_rate": "fast",
"ad_select": "stable",
"ad_info": {
"aggregator": 1,
"num_ports": 1,
"actor_key": 0,
"partner_key": 1,
"partner_mac": "00:00:00:00:00:00"
},
"ad_actor_sys_prio": 65535,
"ad_user_port_key": 0,
"ad_actor_system": "00:00:00:00:00:00"
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 16,
"num_rx_queues": 16,
"gso_max_size": 65536,
"gso_max_segs": 65535
}
]
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:40 -07:00
Julien Fortin
7ff60b090f
ip: iplink_bond.c: add json output support
...
Schema and live example:
bond: IFLA_INFO_DATA
{
"mode": {
"type": "string",
"attr": "IFLA_BOND_MODE"
},
"active_slave": {
"type": "string",
"attr": "IFLA_BOND_ACTIVE_SLAVE",
"mutually_exclusive": {
"active_slave_index": {
"type": "int",
"comment": "if active slave doesn't have a valid ifname"
}
}
},
"miimon": {
"type": "uint",
"attr": "IFLA_BOND_MIIMON"
},
"updelay": {
"type": "uint",
"attr": "IFLA_BOND_UPDELAY"
},
"downdelay": {
"type": "uint",
"attr": "IFLA_BOND_DOWNDELAY"
},
"use_carrier": {
"type": "uint",
"attr": "IFLA_BOND_USE_CARRIER"
},
"arp_interval": {
"type": "uint",
"attr": "IFLA_BOND_ARP_INTERVAL"
},
"arp_ip_target": {
"type": "array",
"attr": "IFLA_BOND_ARP_IP_TARGET",
"array": [
{
"type": "string"
}
]
},
"arp_validate": {
"type": "string",
"attr": "IFLA_BOND_ARP_VALIDATE"
},
"arp_all_targets": {
"type": "string",
"attr": "IFLA_BOND_ARP_ALL_TARGETS"
},
"primary": {
"type": "string",
"attr": "IFLA_BOND_PRIMARY",
"mutually_exclusive": {
"primary_index": {
"type": "int",
"comment": "if primary doesn't have a valid ifname"
}
}
},
"primary_reselect": {
"type": "string",
"attr": "IFLA_BOND_PRIMARY_RESELECT"
},
"fail_over_mac": {
"type": "string",
"attr": "IFLA_BOND_FAIL_OVER_MAC"
},
"xmit_hash_policy": {
"type": "string",
"attr": "IFLA_BOND_XMIT_HASH_POLICY"
},
"resend_igmp": {
"type": "uint",
"attr": "IFLA_BOND_RESEND_IGMP"
},
"num_peer_notif": {
"type": "uint",
"attr": "IFLA_BOND_NUM_PEER_NOTIF"
},
"all_slaves_active": {
"type": "uint",
"attr": "IFLA_BOND_ALL_SLAVES_ACTIVE"
},
"min_links": {
"type": "uint",
"attr": "IFLA_BOND_MIN_LINKS"
},
"lp_interval": {
"type": "uint",
"attr": "IFLA_BOND_LP_INTERVAL"
},
"packets_per_slave": {
"type": "uint",
"attr": "IFLA_BOND_PACKETS_PER_SLAVE"
},
"ad_lacp_rate": {
"type": "string",
"attr": "IFLA_BOND_AD_LACP_RATE"
},
"ad_select": {
"type": "string",
"attr": "IFLA_BOND_AD_SELECT"
},
"ad_info": {
"type": "dict",
"attr": "IFLA_BOND_AD_INFO",
"dict": {
"aggregator": {
"type": "int",
"attr": "IFLA_BOND_AD_INFO_AGGREGATOR"
},
"num_ports": {
"type": "int",
"attr": "IFLA_BOND_AD_INFO_NUM_PORTS"
},
"actor_key": {
"type": "int",
"attr": "IFLA_BOND_AD_INFO_ACTOR_KEY"
},
"partner_key": {
"type": "int",
"attr": "IFLA_BOND_AD_INFO_PARTNER_KEY"
},
"partner_mac": {
"type": "string",
"attr": "IFLA_BOND_AD_INFO_PARTNER_MAC"
}
}
},
"ad_actor_sys_prio": {
"type": "uint",
"attr": "IFLA_BOND_AD_ACTOR_SYS_PRIO"
},
"ad_user_port_key": {
"type": "uint",
"attr": "IFLA_BOND_AD_USER_PORT_KEY"
},
"ad_actor_system": {
"type": "string",
"attr": "IFLA_BOND_AD_ACTOR_SYSTEM"
},
"tlb_dynamic_lb": {
"type": "uint",
"attr": "IFLA_BOND_TLB_DYNAMIC_LB"
}
}
$ ip link add dev bond42 type bond
$ ip link set dev swp5 master bond42
$ ip link set dev bond42 up
$ ip link set dev swp5 up
$ ip -details -json link show
[{
"ifindex": 7,
"ifname": "swp5",
"flags": ["BROADCAST","MULTICAST","SLAVE","UP","LOWER_UP"],
"mtu": 1500,
"qdisc": "pfifo_fast",
"master": "bond42",
"operstate": "UP",
"linkmode": "DEFAULT",
"group": "default",
"txqlen": 1000,
"link_type": "ether",
"address": "08:00:27:5c:03:c6",
"broadcast": "ff:ff:ff:ff:ff:ff",
"promiscuity": 0,
"linkinfo": {
"info_slave_kind": "bond",
"info_slave_data": {
"state": "BACKUP",
"mii_status": "UP",
"link_failure_count": 0,
"perm_hwaddr": "08:00:27:5c:03:c6",
"queue_id": 0,
"ad_aggregator_id": 1,
"ad_actor_oper_port_state": 79,
"ad_partner_oper_port_state": 1
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 14,
"ifname": "bond42",
"flags": ["NO-CARRIER","BROADCAST","MULTICAST","MASTER","UP"],
"mtu": 1500,
"qdisc": "noqueue",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "ether",
"address": "08:00:27:5c:03:c6",
"broadcast": "ff:ff:ff:ff:ff:ff",
"promiscuity": 0,
"linkinfo": {
"info_kind": "bond",
"info_data": {
"mode": "802.3ad",
"miimon": 100,
"updelay": 0,
"downdelay": 0,
"use_carrier": 1,
"arp_interval": 0,
"arp_validate": null,
"arp_all_targets": "any",
"primary_reselect": "always",
"fail_over_mac": "none",
"xmit_hash_policy": "layer3+4",
"resend_igmp": 1,
"num_peer_notif": 1,
"all_slaves_active": 0,
"min_links": 1,
"lp_interval": 1,
"packets_per_slave": 1,
"ad_lacp_rate": "fast",
"ad_select": "stable",
"ad_info": {
"aggregator": 1,
"num_ports": 1,
"actor_key": 0,
"partner_key": 1,
"partner_mac": "00:00:00:00:00:00"
},
"ad_actor_sys_prio": 65535,
"ad_user_port_key": 0,
"ad_actor_system": "00:00:00:00:00:00"
}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 16,
"num_rx_queues": 16,
"gso_max_size": 65536,
"gso_max_segs": 65535
}
]
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:40 -07:00
Julien Fortin
e4a1216aeb
ip: iplink.c: open/close json obj for ip -brief -json link show dev DEV
...
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:40 -07:00
Julien Fortin
d0e720111a
ip: ipaddress.c: add support for json output
...
This patch converts all output (mostly fprintfs) to the new ip_print api
which handle both regular and json output.
Initialize a json_writer and open an array object if -json was specified.
Note that the JSON attribute naming follows the NETLINK_ATTRIBUTE naming.
In many places throughout the code, IP, matches integer values with
hardcoded strings tables, such as link mode, link operstate or link
family.
In JSON context, this will result in a named string field. In the
very unlikely event that the requested index is out of bound, IP
displays the raw integer value. For JSON context this result in
having a different integer field example bellow:
if (mode >= ARRAY_SIZE(link_modes))
print_int(PRINT_ANY, "linkmode_index", "mode %d ", mode);
else
print_string(PRINT_ANY, "linkmode", "mode %s ",
link_modes[mode]);
The "_index" suffix is open to discussion and it is something that I came
up with. The bottom line is that you can't have a string field that may
become an int field in specific cases. Programs written in strongly type
languages (like C) might break if they are expecting a string value and
got an integer instead. We don't want to confuse anybody or make the code
even more complicated handling these specifics cases.
Hence the extra "_index" field that is easy to check for and deal with.
JSON schema, followed by live example:
Live config used:
$ ip link add dev vxlan42 type vxlan id 42
$ ip link add dev bond0 type bond
$ ip link add name swp1.50 link swp1 type vlan id 50
$ ip link add dev br0 type bridge
$ ip link set dev vxlan42 master br0
$ ip link set dev bond0 master br0
$ ip link set dev swp1.50 master br0
$ ip link set dev br0 up
$ ip -d link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode
DEFAULT group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 promiscuity 0
addrgenmode eui64
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:db:31:88 brd ff:ff:ff:ff:ff:ff promiscuity 0
addrgenmode eui64
3: swp1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode
DEFAULT group default qlen 1000
link/ether 08:00:27:5b:b1:75 brd ff:ff:ff:ff:ff:ff promiscuity 0
addrgenmode eui64
10: vxlan42: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br0 state
DOWN mode DEFAULT group default
link/ether 4a:d9:91:42:a2:d2 brd ff:ff:ff:ff:ff:ff promiscuity 1
vxlan id 42 srcport 0 0 dstport 8472 ageing 300
bridge_slave state disabled priority 8 cost 100 hairpin off guard off
root_block off fastleave off learning on flood on port_id 0x8001 port_no
0x1 designated_port 32769 designated_cost 0 designated_bridge
8000.8:0:27:5b:b1:75 designated_root 8000.8:0:27:5b:b1:75 hold_timer
0.00 message_age_timer 0.00 forward_delay_timer 0.00
topology_change_ack 0 config_pending 0 proxy_arp off proxy_arp_wifi off
mcast_router 1 mcast_fast_leave off mcast_flood on neigh_suppress off
addrgenmode eui64
11: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop master br0
state DOWN mode DEFAULT group default
link/ether e2:aa:7b:17:c5:14 brd ff:ff:ff:ff:ff:ff promiscuity 1
bond mode 802.3ad miimon 100 updelay 0 downdelay 0 use_carrier 1
arp_interval 0 arp_validate none arp_all_targets any primary_reselect
always fail_over_mac none xmit_hash_policy layer3+4 resend_igmp 1
num_grat_arp 1 all_slaves_active 0 min_links 1 lp_interval 1
packets_per_slave 1 lacp_rate fast ad_select stable ad_actor_sys_prio
65535 ad_user_port_key 0 ad_actor_system 00:00:00:00:00:00
bridge_slave state disabled priority 8 cost 100 hairpin off guard off
root_block off fastleave off learning on flood on port_id 0x8002 port_no
0x2 designated_port 32770 designated_cost 0 designated_bridge
8000.8:0:27:5b:b1:75 designated_root 8000.8:0:27:5b:b1:75 hold_timer
0.00 message_age_timer 0.00 forward_delay_timer 0.00
topology_change_ack 0 config_pending 0 proxy_arp off proxy_arp_wifi off
mcast_router 1 mcast_fast_leave off mcast_flood on neigh_suppress off
addrgenmode eui64
12: swp1.50@swp1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop master
br0 state DOWN mode DEFAULT group default
link/ether 08:00:27:5b:b1:75 brd ff:ff:ff:ff:ff:ff promiscuity 1
vlan protocol 802.1Q id 50 <REORDER_HDR>
bridge_slave state disabled priority 8 cost 100 hairpin off guard off
root_block off fastleave off learning on flood on port_id 0x8003 port_no
0x3 designated_port 32771 designated_cost 0 designated_bridge
8000.8:0:27:5b:b1:75 designated_root 8000.8:0:27:5b:b1:75 hold_timer
0.00 message_age_timer 0.00 forward_delay_timer 0.00
topology_change_ack 0 config_pending 0 proxy_arp off proxy_arp_wifi off
mcast_router 1 mcast_fast_leave off mcast_flood on neigh_suppress off
addrgenmode eui64
13: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state
DOWN mode DEFAULT group default
link/ether 08:00:27:5b:b1:75 brd ff:ff:ff:ff:ff:ff promiscuity 0
bridge forward_delay 1500 hello_time 200 max_age 2000 ageing_time
30000 stp_state 0 priority 32768 vlan_filtering 0 vlan_protocol 802.1Q
bridge_id 8000.8:0:27:5b:b1:75 designated_root 8000.8:0:27:5b:b1:75
root_port 0 root_path_cost 0 topology_change 0 topology_change_detected 0
hello_timer 0.00 tcn_timer 0.00 topology_change_timer 0.00
gc_timer 244.44 vlan_default_pvid 1 vlan_stats_enabled 0 group_fwd_mask 0
group_address 01:80:c2:00:00:00 mcast_snooping 1 mcast_router 1
mcast_query_use_ifaddr 0 mcast_querier 0 mcast_hash_elasticity 4096
mcast_hash_max 4096 mcast_last_member_count 2 mcast_startup_query_count 2
mcast_last_member_interval 100 mcast_membership_interval 26000
mcast_querier_interval 25500 mcast_query_interval 12500
mcast_query_response_interval 1000 mcast_startup_query_interval 3125
mcast_stats_enabled 0 mcast_igmp_version 2 mcast_mld_version 1
nf_call_iptables 0 nf_call_ip6tables 0 nf_call_arptables 0 addrgenmode
eui64
// Schema for: ip -brief link show
[
{
"deleted": {
"type": "bool",
"attr": "RTM_DELLINK"
},
"link": {
"type": "string",
"attr": "IFLA_LINK"
},
"ifname": {
"type": "string",
"attr": "IFNAME"
},
"operstate": {
"type": "string",
"attr": "IFLA_OPERSTATE",
"mutually_exclusive": {
"operstate_index": {
"type": "uint",
"comment": "if state >= ARRAY_SIZE(oper_states)"
}
}
},
"address": {
"type": "string",
"attr": "IFLA_ADDRESS"
},
"flags": {
"type": "array",
"attr": "IFF_LOOPBACK, IFF_BROADCAST...IFF_*"
},
"addr_info": {
"type": "array",
"array": [
{
"deleted": {
"type": "bool",
"attr": "RTM_DELADDR"
},
"family": {
"type": "string",
"attr": "ifa->ifa_family",
"mutually_exclusive": {
"family_index": {
"type": "uint",
"comment": "if family is not known"
}
}
},
"local": {
"type": "string",
"attr": "IFA_LOCAL"
},
"address": {
"type": "string",
"attr": "IFLA_LOCAL && IFA_ADDRESS"
},
"prefixlen": {
"type": "int",
"attr": "IFLA_LOCAL"
}
}
]
}
}
]
$ ip -json -brief link show
[{
"ifname": "lo",
"operstate": "UNKNOWN",
"address": "00:00:00:00:00:00",
"flags": ["LOOPBACK","UP","LOWER_UP"]
},{
"ifname": "eth0",
"operstate": "UP",
"address": "08:00:27:db:31:88",
"flags": ["BROADCAST","MULTICAST","UP","LOWER_UP"]
},{
"ifname": "swp1",
"operstate": "DOWN",
"address": "08:00:27:5b:b1:75",
"flags": ["BROADCAST","MULTICAST"]
},{
"ifname": "vxlan42",
"operstate": "DOWN",
"address": "4a:d9:91:42:a2:d2",
"flags": ["BROADCAST","MULTICAST"]
},{
"ifname": "bond0",
"operstate": "DOWN",
"address": "e2:aa:7b:17:c5:14",
"flags": ["BROADCAST","MULTICAST","MASTER"]
},{
"link": "swp1",
"ifname": "swp1.50",
"operstate": "DOWN",
"address": "08:00:27:5b:b1:75",
"flags": ["BROADCAST","MULTICAST","M-DOWN"]
},{
"ifname": "br0",
"operstate": "DOWN",
"address": "08:00:27:5b:b1:75",
"flags": ["NO-CARRIER","BROADCAST","MULTICAST","UP"]
}
]
Schema for normal plus -details: ip -json -details link show
[
{
"deleted": {
"type": "bool",
"attr": "RTM_DELLINK"
},
"ifindex": {
"type": "int"
},
"ifname": {
"type": "string",
"attr": "IFLA_IFNAME"
},
"link": {
"type": "string",
"attr": "IFLA_LINK",
"mutually_exclusive": {
"link_index": {
"type": "int",
"comment": "if IFLA_LINK_NETNSID exists"
}
}
},
"flags": {
"type": "array",
"attr": "IFF_LOOPBACK, IFF_BROADCAST...IFF_*"
},
"mtu": {
"type": "int",
"attr": "IFLA_MTU"
},
"xdp": {
"type": "object",
"attr": "IFLA_XDP",
"object": {
"mode": {
"type": "utin",
"attr": "IFLA_XDP_ATTACHED"
},
"prog_id": {
"type": "uint",
"attr": "IFLA_XDP_PROG_ID"
}
}
},
"qdisc": {
"type": "string",
"attr": "IFLA_QDISC"
},
"master": {
"type": "string",
"attr": "IFLA_MASTER"
},
"operstate": {
"type": "string",
"attr": "IFLA_OPERSTATE",
"mutually_exclusive": {
"operstate_index": {
"type": "uint",
"comment": "if state >= ARRAY_SIZE(oper_states)"
}
}
},
"linkmode": {
"type": "string",
"attr": "IFLA_LINKMODE",
"mutually_exclusive": {
"linkmode_index": {
"type": "uint",
"comment": "if mode >= ARRAY_SIZE(link_modes)"
}
}
},
"group": {
"type": "string",
"attr": "IFLA_GROUP"
},
"txqlen": {
"type": "int",
"attr": "IFLA_TXQLEN"
},
"event": {
"type": "string",
"attr": "IFLA_EVENT",
"mutually_exclusive": {
"event_index": {
"type": "uint",
"attr": "IFLA_OPERSTATE",
"comment": "if event >= ARRAY_SIZE(link_events)"
}
}
},
"link_type": {
"type": "string",
"attr": "ifi_type"
},
"address": {
"type": "string",
"attr": "IFLA_ADDRESS"
},
"link_pointtopoint": {
"type": "bool",
"attr": "IFF_POINTOPOINT"
},
"broadcast": {
"type": "string",
"attr": "IFLA_BROADCAST"
},
"link_netnsid": {
"type": "int",
"attr": "IFLA_LINK_NETNSID"
},
"proto_down": {
"type": "bool",
"attr": "IFLA_PROTO_DOWN"
},
//
// if -details
//
"promiscuity": {
"type": "uint",
"attr": "IFLA_PROMISCUITY"
},
"linkinfo": {
"type": "dict",
"attr": "IFLA_LINKINFO",
"dict": {
"info_kind": {
"type": "string",
"attr": "IFLA_INFO_KIND"
},
"info_data": {
"type": "dict",
"attr": "IFLA_INFO_DATA",
"dict": {}
},
"info_xstats": {
"type": "dict",
"attr": "IFLA_INFO_XSTATS",
"dict": {}
},
"info_slave_data": {
"type": "dict",
"attr": "IFLA_INFO_SLAVE_DATA",
"dict": {}
}
}
},
"inet6_addr_gen_mode": {
"type": "string",
"attr": "IFLA_INET6_ADDR_GEN_MODE"
},
"num_tx_queues": {
"type": "uint",
"attr": "IFLA_NUM_TX_QUEUES"
},
"num_rx_queues": {
"type": "uint",
"attr": "IFLA_NUM_RX_QUEUES"
},
"gso_max_size": {
"type": "uint",
"attr": "IFLA_GSO_MAX_SIZE"
},
"gso_max_segs": {
"type": "uint",
"attr": "IFLA_GSO_MAX_SEGS"
},
"phys_port_name": {
"type": "string",
"attr": "IFLA_PHYS_PORT_NAME"
},
"phys_port_id": {
"type": "string",
"attr": "IFLA_PHYS_PORT_ID"
},
"phys_switch_id": {
"type": "string",
"attr": "IFLA_PHYS_SWITCH_ID"
},
"ifalias": {
"type": "string",
"attr": "IFLA_IFALIAS"
},
"stats": {
"type": "dict",
"attr": "IFLA_STATS",
"dict": {
"rx": {
"type": "dict",
"dict": {
"bytes": {
"type": "uint"
},
"packets": {
"type": "uint"
},
"errors": {
"type": "uint"
},
"dropped": {
"type": "uint"
},
"over_errors": {
"type": "uint"
},
"multicast": {
"type": "uint"
},
"compressed": {
"type": "uint"
},
"length_errors": {
"type": "uint"
},
"crc_errors": {
"type": "uint"
},
"frame_errors": {
"type": "uint"
},
"fifo_errors": {
"type": "uint"
},
"missed_errors": {
"type": "uint"
},
"nohandler": {
"type": "uint"
}
}
},
"tx": {
"type": "dict",
"dict": {
"bytes": {
"type": "uint"
},
"packets": {
"type": "uint"
},
"errors": {
"type": "uint"
},
"dropped": {
"type": "uint"
},
"carrier_errors": {
"type": "uint"
},
"collisions": {
"type": "uint"
},
"compressed": {
"type": "uint"
},
"aborted_errors": {
"type": "uint"
},
"fifo_errors": {
"type": "uint"
},
"window_errors": {
"type": "uint"
},
"heartbeat_errors": {
"type": "uint"
},
"carrier_changes": {
"type": "uint"
}
}
}
}
},
"stats64": {
"type": "dict",
"attr": "IFLA_STATS64",
"dict": {
"rx": {
"type": "dict",
"dict": {
"bytes": {
"type": "uint"
},
"packets": {
"type": "uint"
},
"errors": {
"type": "uint"
},
"dropped": {
"type": "uint"
},
"over_errors": {
"type": "uint"
},
"multicast": {
"type": "uint"
},
"compressed": {
"type": "uint"
},
"length_errors": {
"type": "uint"
},
"crc_errors": {
"type": "uint"
},
"frame_errors": {
"type": "uint"
},
"fifo_errors": {
"type": "uint"
},
"missed_errors": {
"type": "uint"
},
"nohandler": {
"type": "uint"
}
}
},
"tx": {
"type": "dict",
"dict": {
"bytes": {
"type": "uint"
},
"packets": {
"type": "uint"
},
"errors": {
"type": "uint"
},
"dropped": {
"type": "uint"
},
"carrier_errors": {
"type": "uint"
},
"collisions": {
"type": "uint"
},
"compressed": {
"type": "uint"
},
"aborted_errors": {
"type": "uint"
},
"fifo_errors": {
"type": "uint"
},
"window_errors": {
"type": "uint"
},
"heartbeat_errors": {
"type": "uint"
},
"carrier_changes": {
"type": "uint"
}
}
}
}
},
"vfinfo_list": {
"type": "array",
"attr": "IFLA_VFINFO_LIST",
"array": [
{
"vf": {
"type": "int"
},
"mac": {
"type": "string"
},
"vlan_list": {
"type": "array",
"attr": "IFLA_VF_VLAN_LIST",
"array": [
{
"vlan": {
"type": "int"
},
"qos": {
"type": "int"
},
"protocol": {
"type": "string"
}
}
]
},
"vlan": {
"type": "int",
"attr": "!IFLA_VF_VLAN_LIST && IFLA_VF_VLAN"
},
"qos": {
"type": "int",
"attr": "!IFLA_VF_VLAN_LIST && IFLA_VF_VLAN"
},
"tx_rate": {
"type": "int"
},
"rate": {
"type": "dict",
"attr": "IFLA_VF_RATE",
"dict": {
"max_tx": {
"type": "int"
},
"min_tx": {
"type": "int"
}
}
},
"spoofchk": {
"type": "bool",
"attr": "IFLA_VF_SPOOFCHK"
},
"link_state": {
"type": "string",
"attr": "IFLA_VF_LINK_STATE"
},
"trust": {
"type": "bool",
"attr": "IFLA_VF_TRUST"
},
"query_rss_en": {
"type": "bool",
"attr": "IFLA_VF_RSS_QUERY_EN"
},
"stats": {
"type": "dict",
"attr": "IFLA_VF_STATS",
"dict": {
"rx": {
"type": "dict",
"dict": {
"bytes": {
"type": "uint",
"attr": "IFLA_VF_STATS_RX_BYTES"
},
"packets": {
"type": "uint",
"attr": "IFLA_VF_STATS_RX_PACKETS"
},
"multicast": {
"type": "uint",
"attr": "IFLA_VF_STATS_MULTICAST"
},
"broadcast": {
"type": "uint",
"attr": "IFLA_VF_STATS_BROADCAST"
}
}
},
"tx": {
"type": "dict",
"dict": {
"bytes": {
"type": "uint",
"attr": "IFLA_VF_STATS_TX_BYTES"
},
"packets": {
"type": "uint",
"attr": "IFLA_VF_STATS_TX_PACKETS"
}
}
}
}
}
}
]
}
}
]
Example with the config previously given:
Note that here, linkinfo attributes are not populated.
The schemas are provided in each link type patches.
$ ip -details -json link show
[{
"ifindex": 1,
"ifname": "lo",
"flags": ["LOOPBACK","UP","LOWER_UP"],
"mtu": 65536,
"qdisc": "noqueue",
"operstate": "UNKNOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "loopback",
"address": "00:00:00:00:00:00",
"broadcast": "00:00:00:00:00:00",
"promiscuity": 0,
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 2,
"ifname": "eth0",
"flags": ["BROADCAST","MULTICAST","UP","LOWER_UP"],
"mtu": 1500,
"qdisc": "pfifo_fast",
"operstate": "UP",
"linkmode": "DEFAULT",
"group": "default",
"txqlen": 1000,
"link_type": "ether",
"address": "08:00:27:db:31:88",
"broadcast": "ff:ff:ff:ff:ff:ff",
"promiscuity": 0,
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 3,
"ifname": "swp1",
"flags": ["BROADCAST","MULTICAST"],
"mtu": 1500,
"qdisc": "noop",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"txqlen": 1000,
"link_type": "ether",
"address": "08:00:27:5b:b1:75",
"broadcast": "ff:ff:ff:ff:ff:ff",
"promiscuity": 0,
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 10,
"ifname": "vxlan42",
"flags": ["BROADCAST","MULTICAST"],
"mtu": 1500,
"qdisc": "noop",
"master": "br0",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "ether",
"address": "4a:d9:91:42:a2:d2",
"broadcast": "ff:ff:ff:ff:ff:ff",
"promiscuity": 1,
"linkinfo": {
"info_kind": "vxlan",
"info_data": {},
"info_slave_kind": "bridge",
"info_slave_data": {}
},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 11,
"ifname": "bond0",
"flags": ["BROADCAST","MULTICAST","MASTER"],
"mtu": 1500,
"qdisc": "noop",
"master": "br0",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "ether",
"address": "e2:aa:7b:17:c5:14",
"broadcast": "ff:ff:ff:ff:ff:ff",
"promiscuity": 1,
"linkinfo": {
"info_kind": "bond",
"info_data": {},
"info_slave_kind": "bridge",
"info_slave_data": {},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 16,
"num_rx_queues": 16,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 12,
"ifname": "swp1.50",
"link": "swp1",
"flags": ["BROADCAST","MULTICAST","M-DOWN"],
"mtu": 1500,
"qdisc": "noop",
"master": "br0",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "ether",
"address": "08:00:27:5b:b1:75",
"broadcast": "ff:ff:ff:ff:ff:ff",
"promiscuity": 1,
"linkinfo": {
"info_kind": "vlan",
"info_data": {},
"info_slave_kind": "bridge",
"info_slave_data": {},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
},{
"ifindex": 13,
"ifname": "br0",
"flags": ["NO-CARRIER","BROADCAST","MULTICAST","UP"],
"mtu": 1500,
"qdisc": "noqueue",
"operstate": "DOWN",
"linkmode": "DEFAULT",
"group": "default",
"link_type": "ether",
"address": "08:00:27:5b:b1:75",
"broadcast": "ff:ff:ff:ff:ff:ff",
"promiscuity": 0,
"linkinfo": {
"info_kind": "bridge",
"info_data": {},
"inet6_addr_gen_mode": "eui64",
"num_tx_queues": 1,
"num_rx_queues": 1,
"gso_max_size": 65536,
"gso_max_segs": 65535
}
]
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:40 -07:00
Julien Fortin
6377572f0a
ip: ip_print: add new API to print JSON or regular format output
...
To avoid code duplication and have a ligther impact on most of the files,
these functions were made to handle both stdout (FP context) or JSON
output. Using this api, the changes are easier to read and the code
stays as compact as possible.
includes json_writer.h in ip_common.h to make the lib/json_writer.c
functions available to the new "ip_print" api.
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:40 -07:00
Julien Fortin
5df6077259
ip: add new command line argument -json (mutually exclusive with -color)
...
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
2017-08-17 18:02:40 -07:00
David Lebrun
8db158b9ca
iproute: add support for SRv6 local segment processing
...
This patch adds support for the seg6local lightweight tunnel
("ip route add ... encap seg6local ...").
Signed-off-by: David Lebrun <david.lebrun@uclouvain.be>
2017-08-15 16:44:23 -07:00
David Lebrun
00e76d4da3
iproute: add helper functions for SRH processing
...
This patch adds two helper functions to print and parse
Segment Routing Headers.
Signed-off-by: David Lebrun <david.lebrun@uclouvain.be>
2017-08-15 16:44:23 -07:00
Stephen Hemminger
16ab6c47ba
Merge branch 'master' into net-next
2017-08-10 16:41:59 -07:00
Daniel Borkmann
8cc360fe48
bpf: unbreak libelf linkage for bpf obj loader
...
Commit 69fed534a5 ("change how Config is used in Makefile's") moved
HAVE_MNL specific CFLAGS/LDLIBS for building with libmnl out of the
top level Makefile into sub-Makefiles. However, it also removed the
HAVE_ELF specific CFLAGS/LDLIBS entirely, which breaks the BPF object
loader for tc and ip with "No ELF library support compiled in." despite
having libelf detected in configure script. Fix it similarly as in
69fed534a5 for HAVE_ELF.
Fixes: 69fed534a5 ("change how Config is used in Makefile's")
Reported-by: Jeffrey Panneman <jeffrey.panneman@tno.nl>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2017-08-10 16:40:02 -07:00
Stephen Hemminger
7ef36c8cea
Merge branch 'master' into net-next
2017-08-09 09:11:48 -07:00
Stephen Hemminger
fcfcc40b7d
vti: print keys in hex not dotted notation
...
The ikey and okey value are normal u32 values. The input accepts
them in dotted, hex or decimal form. For output, hex seems like
the best form since they are not really addresses.
Suggested-by: Christian Langrock <christian.langrock@secunet.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2017-08-09 09:11:02 -07:00
Stephen Hemminger
e9155685b7
Merge branch 'master' into net-next
2017-08-09 08:41:34 -07:00
Stephen Hemminger
2a80154fde
vti6: fix local/remote any addr handling
...
According to the IPv4 behavior of 'ip' it should be possible
to omit the arguments for local and remote address.
Without this patch omitting these parameters would lead to
uninitialized memory being interpreted as IPv6 addresses.
Reported-by: Christian Langrock <christian.langrock@secunet.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2017-08-09 08:39:27 -07:00
Stephen Hemminger
6ff66acc60
tc, ip: more Makefile updates for LIBMNL
...
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2017-08-09 08:38:51 -07:00
Stephen Hemminger
c936d85e19
Merge branch 'master' into net-next
2017-08-04 13:16:47 -07:00
Casey Callendrello
d6a4076b6b
netns: make /var/run/netns bind-mount recursive
...
When ip netns {add|delete} is first run, it bind-mounts /var/run/netns
on top of itself, then marks it as shared. However, if there are already
bind-mounts in the directory from other tools, these would not be
propagated. Fix this by recursively bind-mounting.
Signed-off-by: Casey Callendrello <casey.callendrello@coreos.com>
Acked-by: "Eric W. Biederman" <ebiederm@xmission.com>
2017-08-04 12:08:52 -07:00
Ido Schimmel
4b3409d863
iproute: Display offload indication per-nexthop
...
Since kernel commit 475abbf1ef67 ("ipv4: fib: Set offload indication
according to nexthop flags") offload indication is reported on a
per-nexthop basis.
Adjust iproute2 to display it.
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Reviewed-by: Jiri Pirko <jiri@mellanox.com>
Acked-by: David Ahern <dsahern@gmail.com>
2017-08-03 16:13:16 -07:00
Stephen Hemminger
f73ac674d0
ip: change flag names to an array
...
For the most of the address flags, use a table of values rather
than open coding every value. This allows for easier inevitable
expansion of flags.
This also fixes the missing stable-privacy flag.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2017-08-01 08:37:53 -07:00
Matteo Croce
d3f0b09197
netns: more input validation
...
ip netns accepts invalid input as namespace name like an empty string or a
string longer than the maximum file name length.
Check that the netns name is not empty and less than or equal to NAME_MAX.
Signed-off-by: Matteo Croce <mcroce@redhat.com>
2017-07-27 11:25:20 -07:00
Girish Moodalbail
c2a85c3bcd
geneve: support for modifying geneve device
...
Ability to change geneve device attributes was added to kernel through
commit 5b861f6baa3a ("geneve: add rtnl changelink support"), however one
cannot do the same through ip-link(8) command. Changing the allowed
geneve device attributes using 'ip link set <geneve_name> type geneve id
<geneve_id> <allowed_attributes>' currently fails with 'operation not
supported' error. This patch adds support for it.
Signed-off-by: Girish Moodalbail <girish.moodalbail@oracle.com>
2017-07-27 11:22:50 -07:00
Élie Bouttier
2f406f2d0b
ip route: replace exits with returns
...
This patch replaces exits with returns in ip route
commands.
Allows to continue when invoked with ip -batch.
Signed-off-by: Élie Bouttier <elie@bouttier.eu>
2017-07-25 11:37:49 -07:00
Philip Prindeville
adbb296594
iproute2: add support for GRE ignore-df knob
...
In the presence of firewalls which improperly block ICMP Unreachable
(including Fragmentation Required) messages, Path MTU Discovery is
prevented from working.
The workaround is to handle IPv4 payloads opaquely, ignoring the DF
bit.
Kernel commit 22a59be8b7693eb2d0897a9638f5991f2f8e4ddd ("net: ipv4:
Add ability to have GRE ignore DF bit in IPv4 payloads") is
complemented by this user-space changeset which exposes control of
this setting.
Reviewed-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
2017-07-20 17:25:54 -07:00
Matteo Croce
79928fd055
netns: avoid directory traversal
...
ip netns keeps track of created namespaces with bind mounts named
/var/run/netns/<namespace>. No input sanitization is done, allowing creation and
deletion of files relatives to /var/run/netns or, if the path is non existent or
invalid, allows to create "untracked" namespaces (invisible to the tool).
This commit denies creation or deletion of namespaces with names contaning
"/" or matching exactly "." or "..".
Signed-off-by: Matteo Croce <mcroce@redhat.com>
2017-07-20 17:23:52 -07:00
Roopa Prabhu
2e86ed542d
iproute: extend route get for mpls routes
...
This patch extends route get to support mpls specific
route attributes like RTA_NEWDST.
Input:
RTA_DST - input label
RTA_NEWDST - labels in packet for multipath selection
By default the getroute handler returns matched
nexthop label, via and oif
With fibmatch keyword (RTM_F_FIB_MATCH flag), full matched
route is returned.
example:
$ip -f mpls route show
101
nexthop as to 102/103 via inet 172.16.2.2 dev virt1-2
nexthop as to 302/303 via inet 172.16.12.2 dev virt1-12
201
nexthop as to 202/203 via inet6 2001:db8:2::2 dev virt1-2
nexthop as to 402/403 via inet6 2001:db8:12::2 dev virt1-12
$ip -f mpls route get 103
RTNETLINK answers: Network is unreachable
$ip -f mpls route get 101
101 as to 102/103 via inet 172.16.2.2 dev virt1-2
$ip -f mpls route get as to 302/303 101
101 as to 302/303 via inet 172.16.12.2 dev virt1-12
$ip -f mpls route get fibmatch 103
RTNETLINK answers: Network is unreachable
$ip -f mpls route get fibmatch 101
101
nexthop as to 102/103 via inet 172.16.2.2 dev virt1-2
nexthop as to 302/303 via inet 172.16.12.2 dev virt1-12
Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
2017-07-18 17:17:27 -07:00
Stephen Hemminger
89ec74a3ea
remove duplicated #include's
...
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2017-07-18 17:17:15 -07:00
Stephen Hemminger
79e7918a2a
Merge branch 'master' into net-next
2017-07-05 09:07:30 -07:00
Krister Johansen
288c28bc11
iptunnel: add support for mpls/ip to ipip tunnels
...
Original-Author: Simon Horman <simon.horman@netronome.com>
Signed-off-by: Krister Johansen <kjlx@templeofstupid.com>
2017-07-05 09:04:59 -07:00
Krister Johansen
f005b700cf
iptunnel: add support for mpls/ip to sit tunnels
...
Original-Author: Simon Horman <simon.horman@netronome.com>
Signed-off-by: Krister Johansen <kjlx@templeofstupid.com>
2017-07-05 09:04:59 -07:00
Jakub Kicinski
1b5e809466
bpf: allow requesting XDP HW offload
...
Let XDP link set command request that the program be offloaded.
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
2017-06-27 16:13:55 -07:00
Jakub Kicinski
1468381415
bpf: add xdpdrv for requesting XDP driver mode
...
Allow user to select XDP DRV_MODE flag by using xdpdrv keyword
instead of xdp or xdpgeneric.
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
2017-06-27 16:13:55 -07:00
Jakub Kicinski
2de3379701
bpf: print xdp offloaded mode
...
Add interpretation of XDP_ATTACHED_HW mode on dump.
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
2017-06-27 16:13:55 -07:00
Martin KaFai Lau
0b4ea60b5a
bpf: Add support for IFLA_XDP_PROG_ID
...
This patch adds support to the newly added IFLA_XDP_PROG_ID.
./ip link show dev eth0
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 xdpgeneric/id:2 qdisc [...]
Signed-off-by: Martin KaFai Lau <kafai@fb.com>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
2017-06-27 16:13:55 -07:00
Stephen Hemminger
236211a763
Merge branch 'master' into net-next
2017-06-16 09:05:53 -07:00
David Lebrun
e4319590f7
iproute: fix compilation issue with older glibc
...
If a header that includes linux/in6.h is included before
iproute's utils.h, then iproute2 fails to compile on older
glibc versions.
Fixes: e8493916a8 ("iproute: add support for SR-IPv6 lwtunnel encapsulation")
Reported-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: David Lebrun <david.lebrun@uclouvain.be>
2017-06-16 09:03:48 -07:00
Hangbin Liu
ad0a6a2c63
ip neigh: allow flush FAILED neighbour entry
...
After upstream commit 5071034e4af7 ('neigh: Really delete an arp/neigh entry
on "ip neigh delete" or "arp -d"'), we could delete a single FAILED neighbour
entry now. But `ip neigh flush` still skip the FAILED entry.
Move the filter after first round flush so we can flush FAILED entry on fixed
kernel and also do not keep retrying on old kernel.
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
2017-06-16 09:01:02 -07:00
Stephen Hemminger
be8b93e3e2
Merge branch 'master' into net-next
2017-06-15 08:32:53 -07:00
Donald Sharp
3dc98cf2f5
ip: mroute: Add table output to show command
...
When the user specifies `table all` or `table 0` to
the `ip mroute show` command we dump the entirety of
the known mroute tables. Without some sort of
divisor to tell us what table we are looking at
the command is useless.
Add `Table: <vrf name>` to the output of 'ip mroute show table 0'
Follow the convention established by 'ip route show table 0'
for when to display
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
2017-06-15 08:29:30 -07:00
Nicolas Dichtel
a11b7b71a6
link_gre6: really support encaplimit option
...
This option is documented in gre6 help, but was not supported.
Fixes: af89576d7a ("iproute2: GRE over IPv6 tunnel support.")
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
2017-06-15 08:29:30 -07:00
Stephen Hemminger
a9ae195a21
xfrm: get #define's from linux includes
...
Use linux/ipsec.h and linux/in.h to get the definition of IP related
protocols.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2017-06-14 10:25:39 -07:00
Jakub Sitnicki
7b201d6019
iproute: Remove useless check for nexthop keyword when setting RTA_OIF
...
When modifying a route we set the RTA_OIF attribute only if a device was
specified with "dev" or "oif" keyword. But for some unknown reason we
earlier alternatively check also for the presence of "nexthop" keyword,
even though it has no effect. So remove the pointless check.
Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
2017-06-14 09:56:05 -07:00
Vlad Yasevich
735a52ceda
ip: Add IFLA_EVENT output to ip monitor
...
Add IFLA_EVENT output so that event types can be viewed with
'monitor' command. This gives a little more information for why
a given message was received.
Signed-off-by: Vladislav Yasevich <vyasevic@redhat.com>
2017-06-05 12:38:19 -07:00
Roopa Prabhu
aa883d86c0
ip: extend route get to return matching fib route
...
Uses newly introduced RTM_GETROUTE flag RTM_F_FIB_MATCH
to return a matching fib route. Introduces 'fibmatch'
keyword to ip route get.
ipv4:
----
$ip route show
default via 192.168.0.2 dev eth0
10.0.14.0/24
nexthop via 172.16.0.3 dev dummy0 weight 1
nexthop via 172.16.1.3 dev dummy1 weight 1
$ip route get 10.0.14.2
10.0.14.2 via 172.16.1.3 dev dummy1 src 172.16.1.1
cache
$ip route get fibmatch 10.0.14.2
10.0.14.0/24
nexthop via 172.16.0.3 dev dummy0 weight 1
nexthop via 172.16.1.3 dev dummy1 weight 1
ipv6:
----
$ip -6 route show
2001:db9:100::/120 metric 1024
nexthop via 2001:db8:2::2 dev dummy0 weight 1
nexthop via 2001:db8:12::2 dev dummy1 weight 1
$ip -6 route get 2001:db9:100::1
2001:db9:100::1 from :: via 2001:db8:12::2 dev dummy1 \
src 2001:db8:12::1 metric 1024 pref medium
$ip -6 route get fibmatch 2001:db9:100::1
2001:db9:100::/120 metric 1024
nexthop via 2001:db8:12::2 dev dummy1 weight 1
nexthop via 2001:db8:2::2 dev dummy0 weight 1
Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
Acked-by: David Ahern <dsahern@gmail.com>
2017-06-05 12:33:50 -07:00
Eli Cohen
5a3ec4ba64
iplink: Update usage in help message
...
Add to usage message a description of how to configure Infiniband node
and port GUIDs. Also modify the man page to emphasize the GUIDs are
configured for Infiniband VFs.
Fixes: d91fb3f4c7 ("Add support for configuring Infiniband GUIDs")
Signed-off-by: Eli Cohen <eli@mellanox.com>
Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
2017-06-05 12:29:36 -07:00
Oliver Hartkopp
efe459c76d
ip: link add vxcan support
...
Since commit a8f820a380a2a06 ('can: add Virtual CAN Tunnel driver (vxcan)')
for Linux 4.12 a virtual CAN tunnel driver analogue to veth is available in
Linux.
This patch adds the ability to create vxcan device pairs.
Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
2017-06-05 12:27:32 -07:00
David Ahern
1dddb60503
ip vrf: Add show command
...
Add show command to list all configured VRF and their table ids.
Signed-off-by: David Ahern <dsahern@gmail.com>
2017-05-30 17:54:03 -07:00
David Ahern
63891c7013
ip address: Change print_linkinfo_brief to take filter as an input
...
Change print_linkinfo_brief to take the filter as an input arg.
If the arg is NULL, use the global filter in ipaddress.c.
Signed-off-by: David Ahern <dsahern@gmail.com>
2017-05-30 17:54:03 -07:00
David Ahern
741dd5cd9c
ip address: Move filter struct to ip_common.h
...
Move filter struct to ip_common.h as struct link_filter.
Signed-off-by: David Ahern <dsahern@gmail.com>
2017-05-30 17:54:03 -07:00
David Ahern
4ad875944f
ip address: Export ip_linkaddr_list
...
ipaddr_list_flush_or_save generates a list of nlmsg's for links and
optionally for addresses. Move the code into ip_linkaddr_list and
export it along with the supporting infrastructure.
API to use this function is:
struct nlmsg_chain linfo = { NULL, NULL};
struct nlmsg_chain ainfo = { NULL, NULL};
ip_linkaddr_list(family, filter_req, &linfo, &ainfo);
... error checking and code looping over linfo/ainfo ...
free_nlmsg_chain(&linfo);
free_nlmsg_chain(&ainfo);
Signed-off-by: David Ahern <dsahern@gmail.com>
2017-05-30 17:54:03 -07:00
Daniel Borkmann
077bb1803c
bpf: update printing of generic xdp mode
...
Follow-up to d67b9cd28c1d ("xdp: refine xdp api with regards to
generic xdp") in order to update the XDP dumping part.
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2017-05-30 17:49:09 -07:00
Remigiusz Kołłątaj
759fa6086e
ip: add handling for new CAN netlink interface
...
This patch adds handling for new CAN netlink interface introduced in
4.11 kernel:
- IFLA_CAN_TERMINATION,
- IFLA_CAN_TERMINATION_CONST,
- IFLA_CAN_BITRATE_CONST,
- IFLA_CAN_DATA_BITRATE_CONST
Output example:
$ip -d link show can0
6: can0: <NOARP,ECHO> mtu 16 qdisc noop state DOWN mode DEFAULT group default qlen 10
link/can promiscuity 0
can state STOPPED (berr-counter tx 0 rx 0) restart-ms 0
bitrate 80000
[ 20000, 33333, 50000, 80000, 83333, 100000,
125000, 150000, 175000, 200000, 225000, 250000,
275000, 300000, 500000, 625000, 800000, 1000000 ]
termination 0 [ 0, 120 ]
clock 0numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
Signed-off-by: Remigiusz Kołłątaj <remigiusz.kollataj@mobica.com>
2017-05-30 17:39:33 -07:00
Baruch Siach
98447086f8
ip: include libc headers first
...
Including libc headers first helps as a workaround to redefinition of struct
ethhdr with a suitably patched musl libc that suppresses the kernel
if_ether.h.
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
2017-05-30 17:27:58 -07:00
Girish Moodalbail
01c659955a
vxlan: Add support for modifying vxlan device attributes
...
Ability to change vxlan device attributes was added to kernel through
commit 8bcdc4f3a20b ("vxlan: add changelink support"), however one
cannot do the same through ip(8) command. Changing the allowed vxlan
device attributes using 'ip link set dev <vxlan_name> type vxlan
<allowed_attributes>' currently fails with 'operation not supported'
error. This failure is due to the incorrect rtnetlink message
construction for the 'ip link set' operation.
The vxlan_parse_opt() callback function is called for parsing options
for both 'ip link add' and 'ip link set'. For the 'add' case, we pass
down default values for those attributes that were not provided as CLI
options. However, for the 'set' case we should be only passing down the
explicitly provided attributes and not any other (default) attributes.
Signed-off-by: Girish Moodalbail <girish.moodalbail@oracle.com>
2017-05-11 11:11:08 -07:00
Boris Pismenny
cfd2e727f0
ip xfrm: Add xfrm state crypto offload
...
syntax:
ip xfrm state .... offload dev <if-name> dir <in or out>
Example to add inbound offload:
ip xfrm state .... offload dev mlx0 dir in
Example to add outbound offload:
ip xfrm state .... offload dev mlx0 dir out
Signed-off-by: Boris Pismenny <borisp@mellanox.com>
Signed-off-by: Ilan Tayari <ilant@mellanox.com>
2017-05-01 09:30:25 -07:00
Daniel Borkmann
a872b870a5
bpf: add support for generic xdp
...
Follow-up to commit c7272ca720 ("bpf: add initial support for
attaching xdp progs") to also support generic XDP. This adds an
indicator for loaded generic XDP programs when programs are loaded
as shown in c7272ca720 , but the driver still lacks native XDP
support.
# ip link
[...]
3: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 xdpgeneric qdisc [...]
link/ether 0c:c4:7a:03:f9:25 brd ff:ff:ff:ff:ff:ff
[...]
In case the driver does support native XDP, but the user wants
to load the program as generic XDP (e.g. for testing purposes),
then this can be done with the same semantics as in c7272ca720 ,
but with 'xdpgeneric' instead of 'xdp' command for loading:
# ip -force link set dev eno1 xdpgeneric obj xdp.o
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: David S. Miller <davem@davemloft.net>
2017-05-01 09:28:19 -07:00
Stephen Hemminger
d2b9100a08
Merge branch 'master' into net-next
2017-05-01 09:26:51 -07:00
Stephen Hemminger
bb6ab47b16
iplink: whitespace cleanup
...
Break lines to conform to 80 col guideline.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2017-05-01 09:13:09 -07:00
Zhang Shengju
432b92a702
iplink: add support for IFLA_CARRIER attribute
...
Add support to set IFLA_CARRIER attribute.
Signed-off-by: Zhang Shengju <zhangshengju@cmss.chinamobile.com>
2017-05-01 09:06:54 -07:00
Michal Kubeček
6ec14f1abb
routel: fix infinite loop in line parser
...
As noticed by one of the few users of routel script, it ends up in an
infinite loop when they pull out the cable from the NIC used for some
route. This is caused by its parser expecting the line of "ip route show"
output consists of "key value" pairs (except for the initial target range),
together with an old trap of Bourne style shells that "shift 2" does
nothing if there is only one argument left. Some keywords, e.g. "linkdown",
are not followed by a value.
Improve the parser to
(1) only set variables for keywords we care about
(2) recognize (currently) known keywords without value
This is still far from perfect (and certainly not future proof) but to
fully fix the script, one would probably have to rewrite the logic
completely (and I'm not sure it's worth the effort).
Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
2017-04-27 16:42:29 -07:00
Craig Gallek
ad4b1425c3
iplink: Expose IFLA_*_FWMARK attributes for supported link types
...
This attribute allows the administrator to adjust the packet marking
attribute of tunnels that support policy based routing.
Signed-off-by: Craig Gallek <kraig@google.com>
2017-04-23 09:14:46 -07:00
Stephen Hemminger
590dde3a98
Merge branch 'master' into net-next
2017-04-23 09:14:35 -07:00
Craig Gallek
35893864c8
gre6: fix copy/paste bugs in GREv6 attribute manipulation
...
Fixes: af89576d7a8c("iproute2: GRE over IPv6 tunnel support.")
Signed-off-by: Craig Gallek <kraig@google.com>
2017-04-23 09:13:07 -07:00
David Lebrun
e8493916a8
iproute: add support for SR-IPv6 lwtunnel encapsulation
...
This patch adds support for SEG6 encapsulation type
("ip route add ... encap seg6 ...").
Signed-off-by: David Lebrun <david.lebrun@uclouvain.be>
2017-04-16 10:21:43 -07:00
David Lebrun
9386332823
ip: add ip sr command to control SR-IPv6 internal structures
...
This patch adds commands to support the tunnel source properties
("ip sr tunsrc") and the HMAC key -> secret, algorithm binding
("ip sr hmac").
Signed-off-by: David Lebrun <david.lebrun@uclouvain.be>
2017-04-16 10:21:43 -07:00
David Ahern
0da8250be8
ip vrf: Add command name next to pid
...
'ip vrf pids' is used to list processes bound to a vrf, but it only
shows the pid leaving a lot of work for the user. Add the command
name to the output. With this patch you get the more user friendly:
$ ip vrf pids mgmt
1121 ntpd
1418 gdm-session-wor
1488 gnome-session
1491 dbus-launch
1492 dbus-daemon
1565 sshd
...
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
2017-04-16 10:19:32 -07:00
David Ahern
f443565f8d
ip vrf: Add command name next to pid
...
'ip vrf pids' is used to list processes bound to a vrf, but it only
shows the pid leaving a lot of work for the user. Add the command
name to the output. With this patch you get the more user friendly:
$ ip vrf pids mgmt
1121 ntpd
1418 gdm-session-wor
1488 gnome-session
1491 dbus-launch
1492 dbus-daemon
1565 sshd
...
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
2017-04-16 10:06:33 -07:00
David Ahern
c6858ef431
ip netconf: show all families on dev request
...
Currently specifying a device to ip netconf and it dumps only values
for IPv4. Change this to dump data for all families unless a specific
family is given.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
2017-04-14 16:00:15 -07:00
David Ahern
f052f5dfe0
ip netconf: Show all address families by default in dumps
...
Currently, 'ip netconf' only shows ipv4 and ipv6 netconf settings. If IPv6
is not enabled, the dump ends with
RTNETLINK answers: Operation not supported
when IPv6 request is attempted. Further, if the mpls_router module is also
loaded a separate request is needed to get MPLS settings.
To make this better going forward, use the new PF_UNSPEC dump all option
if the kernel supports it. If the kernel does not, it sets NLMSG_ERROR and
returns EOPNOTSUPP which is trapped and we fall back to the existing output
to maintain compatibility with existing kernels.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
2017-04-14 16:00:15 -07:00
Robert Shearman
9688cf3b7a
iproute: Add support for MPLS LWT ttl attribute
...
Add support for setting and displaying the ttl attribute
for MPLS IP lighweight tunnels.
Signed-off-by: Robert Shearman <rshearma@brocade.com>
Acked-by: David Ahern <dsa@cumulusnetworks.com>
2017-04-12 10:02:15 -07:00
Robert Shearman
c44d18ea96
iproute: Add support for ttl-propagation attribute
...
Add support for setting and displaying the ttl-propagation attribute
initially used by MPLS to control propagation of MPLS TTL to IPv4/IPv6
TTL/hop-limit on popping final label on a per-route basis.
Signed-off-by: Robert Shearman <rshearma@brocade.com>
Acked-by: David Ahern <dsa@cumulusnetworks.com>
2017-04-12 10:02:15 -07:00
Timothy Redaelli
5551ed44d3
ip-route: Prevent some other double spaces in output
...
Print spaces only after text.
CC: Phil Sutter <phil@nwl.cc>
Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
Acked-by: Phil Sutter <phil@nwl.cc>
2017-04-12 09:53:23 -07:00
Phil Sutter
9fd7b86c2d
ip: link: Add missing link type help texts
...
These are basically stubs: The types which lacked their own help text
simply don't accept any options (yet). Still it might be a bit confusing
to users if they are presented with the generic 'ip link' help text
instead of something saying there are no type specific options.
Signed-off-by: Phil Sutter <phil@nwl.cc>
2017-04-04 14:51:29 -07:00
Phil Sutter
8b47135474
ip: link: Unify link type help functions a bit
...
Take help function in iplink_bridge.c as an example and make other link
types' help functions similar:
* Use a single fprintf() call (if possible).
* Don't state a full command line, just "... type OPTIONS".
* Put every option in it's own line, align options by column.
* List mandatory options first.
link_veth.c is intentionally left untouched because it's 'peer' option
eats all kinds of generic link options and the help text points this out
without duplicating all the options there again.
Signed-off-by: Phil Sutter <phil@nwl.cc>
2017-04-04 14:51:29 -07:00
Phil Sutter
e336868e09
ip: link: macvlan: Add newline to help output
...
A newline between synopsis and variable definition looks nice and is
consistent with others.
Signed-off-by: Phil Sutter <phil@nwl.cc>
2017-04-04 14:51:29 -07:00
Phil Sutter
be985020ab
ip: link: bond: Fix whitespace in help text
...
Signed-off-by: Phil Sutter <phil@nwl.cc>
2017-04-04 14:51:29 -07:00
Vincent Bernat
97d564b90c
vxlan: use preferred address family when neither group or remote is specified
...
When neither group or remote is specified (or if they are specified with
the any address), nothing is sent to the kernel. In this case, the
kernel defaults to IPv4. This makes impossible to use IPv6 with
unspecified unicast remote ("bridge fdb add" will return
EAFNOTSUPPORT).
If the user specifies a preferred address family (eg, "ip -6 link add"),
then send either IFLA_VXLAN_GROUP or IFLA_VXLAN_GROUP6 to enforce the
use of the appropriate family.
Signed-off-by: Vincent Bernat <vincent@bernat.im>
2017-03-20 10:16:09 -07:00
David Ahern
3e14fd0411
ip route: Add missing space between nexthop and via for mpls multipath routes
...
MPLS multipath routes are missing a space between 'nexthop' and 'via':
$ ip -net ns1 -f mpls ro ls
100
nexthopvia inet 172.16.2.2 dev virt12
nexthopvia inet 172.16.3.2 dev br0
Add it.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
2017-03-20 10:14:44 -07:00
Robert Shearman
837552b445
iplink: add support for afstats subcommand
...
Add support for new afstats subcommand. This uses the new
IFLA_STATS_AF_SPEC attribute of RTM_GETSTATS messages to show
per-device, AF-specific stats. At the moment the kernel only supports
MPLS AF stats, so that is all that's implemented here.
The print_num function is exposed from ipaddress.c to be used for
printing the new stats so that the human-readable option, if set, can
be respected.
Example of use:
$ ./ip/ip -f mpls link afstats dev eth1
3: eth1
mpls:
RX: bytes packets errors dropped noroute
9016 98 0 0 0
TX: bytes packets errors dropped
7232 113 0 0
Signed-off-by: Robert Shearman <rshearma@brocade.com>
2017-03-10 08:44:55 -08:00
Stephen Hemminger
84da4099e9
xfrm: remove unnecessary casts
...
Since RTA_DATA() returns void * no need to cast it.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2017-02-24 15:23:14 -08:00
Stephen Hemminger
9f1370c0e5
netlink route attribute cleanup
...
Use the new helper functions rta_getattr_u* instead of direct
cast of RTA_DATA(). Where RTA_DATA() is a structure, then remove
the unnecessary cast since RTA_DATA() is void *
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2017-02-24 08:56:38 -08:00
David Ahern
76f7d89d4d
ip: Add support for MPLS netconf
...
Add support for MPLS netconf to ip monitor and ip netconf commands.
Changes to header files not included as those are typically pulled
in my a header sync with the kernel.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
2017-02-23 08:58:40 -08:00
Stephen Hemminger
2b99748a60
add missing iplink_xstats.c
...
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2017-02-20 08:53:40 -08:00
Nikolay Aleksandrov
217264a079
iplink: bridge_slave: add support for displaying xstats
...
This patch adds support to the bridge_slave link type for displaying
xstats by reusing the previously added bridge xstats callbacks.
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
2017-02-18 16:37:24 -08:00
Nikolay Aleksandrov
60ec0ecf0f
iplink: bridge: add support for displaying xstats
...
Add support for the new parse/print_ifla_xstats callbacks and use them to
print the per-bridge multicast stats.
Example:
$ ip link xstats type bridge
br0
IGMP queries:
RX: v1 0 v2 0 v3 0
TX: v1 0 v2 0 v3 0
IGMP reports:
RX: v1 0 v2 0 v3 0
TX: v1 0 v2 0 v3 0
IGMP leaves: RX: 0 TX: 0
IGMP parse errors: 0
MLD queries:
RX: v1 0 v2 0
TX: v1 0 v2 0
MLD reports:
RX: v1 0 v2 0
TX: v1 0 v2 0
MLD leaves: RX: 0 TX: 0
MLD parse errors: 0
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
2017-02-18 16:36:58 -08:00
Nikolay Aleksandrov
94f1a22aa7
iplink: add support for xstats subcommand
...
This patch adds support for a new xstats link subcommand which uses the
specified link type's new parse/print_ifla_xstats callbacks to display
extended statistics.
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2017-02-18 16:36:01 -08:00
Stephen Hemminger
ac94e16ca2
Merge branch 'merge-4.10' into next-merge
2017-02-17 15:34:24 -08:00
David Ahern
b5377431df
ip vrf: Detect invalid vrf name in pids command
...
Verify VRF name is valid before attempting to read cgroups files.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
2017-02-17 15:33:24 -08:00
David Ahern
6a9783831c
ip vrf: Handle VRF nesting in namespace
...
Since cgroups are not namespace aware, the directory heirarchy used by
ip vrf should account for network namespaces. In this case, change the
path from CGRP/BASE/vrf/NAME to CGRP/BASE/NETNS/vrf/NAME where CGRP is
the cgroup2 mount path, BASE in any base heirarchy inherited before VRF
is applied and NAME is the VRF name.
The intent is as follows: a user logs into the box into some namespace
with a name known to iproute2. Some other policy may have put the
process into a BASE heirarchy. From there the user executes a task in
a VRF and in doing so the task heirarchy becomes CGRP/BASE/NETNS/vrf/NAME.
The namespace level is omitted for the default namespace.
Reported-by: Andy Lutomirski <luto@amacapital.net>
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
2017-02-17 15:33:24 -08:00
David Ahern
9c49438a67
ip netns: refactor netns_identify
...
Move guts of netns_identify into a standalone function that returns
the netns name in a given buffer.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
2017-02-17 15:33:24 -08:00
David Ahern
46afa6947b
ip vrf: Handle vrf in a cgroup hierarchy
...
Add support for VRF in a pre-existing hierarchy. For example, if the
current process is running in CGRP/foo/bar, the 'ip vrf exec NAME CMD'
should run CMD in the cgroup CGRP/foo/bar/vrf/NAME.
When listing process ids in a VRF, search for the directory vrf/NAME
regardless of base path (foo/bar/vrf/NAME and vrf/NAME) are still
running against the same vrf NAME.
Reported-by: Andy Lutomirski <luto@amacapital.net>
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
2017-02-17 15:33:24 -08:00
Stephen Hemminger
818a10a77f
Merge branch 'master' into net-next
2017-02-06 14:13:27 -08:00
Ralf Baechle
e7867c34e8
ip: HSR: Fix cut and paste error
...
Fixes: 5c0aec93a5 ("ip: Add HSR support")
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2017-02-06 13:49:02 -08:00
Stephen Hemminger
fefc93bb28
Merge branch 'master' into net-next
2017-01-29 20:30:05 -08:00
Hangbin Liu
d1b41236e1
iplink: bridge_slave: add support for IFLA_BRPORT_FLUSH
...
This patch implements support for the IFLA_BRPORT_FLUSH attribute
in iproute2 so it can flush bridge slave's fdb dynamic entries.
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
Reviewed-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
2017-01-20 10:32:34 -08:00
Hangbin Liu
c3f1e3c425
iplink: bridge: add support for IFLA_BR_MCAST_MLD_VERSION
...
This patch implements support for the IFLA_BR_MCAST_MLD_VERSION
attribute in iproute2 so it can change the mcast mld version.
Reviewed-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
2017-01-20 10:32:34 -08:00
Hangbin Liu
19756950f7
iplink: bridge: add support for IFLA_BR_MCAST_IGMP_VERSION
...
This patch implements support for the IFLA_BR_MCAST_IGMP_VERSION
attribute in iproute2 so it can change the mcast igmp version.
Reviewed-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
2017-01-20 10:32:34 -08:00
Hangbin Liu
6ddad009e2
iplink: bridge: add support for IFLA_BR_MCAST_STATS_ENABLED
...
This patch implements support for the IFLA_BR_MCAST_STATS_ENABLED
attribute in iproute2 so it can enable/disable mcast stats accounting.
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
Reviewed-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
2017-01-20 10:32:34 -08:00
Hangbin Liu
7d93b567ea
iplink: bridge: add support for IFLA_BR_VLAN_STATS_ENABLED
...
This patch implements support for the IFLA_BR_VLAN_STATS_ENABLED
attribute in iproute2 so it can enable/disable vlan stats accounting.
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
Reviewed-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
2017-01-20 10:32:34 -08:00
Hangbin Liu
f3372d62eb
iplink: bridge: add support for IFLA_BR_FDB_FLUSH
...
This patch implements support for the IFLA_BR_FDB_FLUSH attribute
in iproute2 so it can flush bridge fdb dynamic entries.
Reviewed-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
2017-01-20 10:32:34 -08:00
Nikolay Aleksandrov
e763e3310e
ipmroute: add support for RTNH_F_UNRESOLVED
...
This patch adds a new field that is printed in the end of the line which
denotes the real entry state. Before this patch an entry's IIF could
disappear and it would look like an unresolved one (iif = unresolved):
(3.0.16.1, 225.11.16.1) Iif: unresolved
with no way to really distinguish it from an unresolved entry.
After the patch if the dumped entry has RTNH_F_UNRESOLVED set we get:
(3.0.16.1, 225.11.16.1) Iif: unresolved State: unresolved
for unresolved entries and:
(0.0.0.0, 225.11.11.11) Iif: eth4 Oifs: eth3 State: resolved
for resolved entries after the OIF list. Note that "State:" has ':' in
it so it cannot be mistaken for an interface name.
And for the example above, we'd get:
(0.0.0.0, 225.11.11.11) Iif: unresolved State: resolved
Also when dumping all routes via ip route show table all,
it will show up as:
multicast 225.11.16.1/32 from 3.0.16.1/32 table default proto 17 unresolved
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2017-01-20 09:41:26 -08:00
David Ahern
11f2c75315
ip route: error out on multiple via without nexthop keyword
...
To specify multiple nexthops in a route the user is expected to use the
"nexthop" keyword which ip route uses to create the RTA_MULTIPATH.
However, ip route always accepts multiple 'via' keywords where only the
last one is used in the route leading to confusion. For example, ip
accepts this syntax:
$ ip ro add vrf red 1.1.1.0/24 via 10.100.1.18 via 10.100.2.18
but the route entered inserted by the kernel is just the last gateway:
1.1.1.0/24 via 10.100.2.18 dev eth2
which is not the full request from the user. Detect the presense of
multiple 'via' and give the user a hint to add nexthop:
$ ip ro add vrf red 1.1.1.0/24 via 10.100.1.18 via 10.100.2.18
Error: argument "via" is wrong: use nexthop syntax to specify multiple via
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2017-01-20 09:38:20 -08:00
Alexander Heinlein
d5eb0564da
ip/xfrm: Fix deleteall when having many policies installed
...
Fix "Policy buffer overflow" when trying to use deleteall with many
policies installed.
Signed-off-by: Alexander Heinlein <alexander.heinlein@secunet.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2017-01-20 09:21:02 -08:00
Jamal Hadi Salim
1c570c50a3
utils: make hex2mem available to all users
...
hex2mem() api is useful for parsing hexstrings which are then packed in
a stream of chars.
Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
2017-01-17 08:45:22 -08:00
Petr Vorel
530903dd90
ip: fix igmp parsing when iface is long
...
Entries with long vhost names in /proc/net/igmp have no whitespace
between name and colon, so sscanf() adds it to vhost and
'ip maddr show iface' doesn't include inet result.
Signed-off-by: Petr Vorel <pvorel@suse.cz>
2017-01-17 08:39:55 -08:00
David Forster
40f9070d94
ip6tunnel: Align ipv6 tunnel key display with ipv4
...
Show ipv6 tunnel keys on presence of GRE_KEY flag for tunnel types
other than GRE. Aligns ipv6 behaviour with ipv4.
Signed-off-by: dforster@brocade.com
2017-01-12 17:34:02 -08:00
David Ahern
9b036afd3c
ip vrf: Improve bpf error messages
...
Next up a non-root user gets various bpf related error messages:
$ ip vrf exec mgmt bash
Failed to load BPF prog: 'Operation not permitted'
Kernel compiled with CGROUP_BPF enabled?
Catch the EPERM error and do not show the kernel config option.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
2017-01-09 12:13:09 -08:00
Julien Fortin
fd4ca03935
ip: vfinfo: remove code duplication for IFLA_VF_RSS_QUERY_EN
...
Fixes: 4fb4a10e12 ("ipaddress: Print IFLA_VF_QUERY_RSS_EN setting”)
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
Acked-by: Phil Sutter <phil@nwl.cc>
2016-12-21 15:56:39 -08:00
David Ahern
ee9369a05f
ip netns: Reset vrf to default VRF on namespace switch
...
A vrf is local to a namespace. Drop any VRF association before trying
to exec a command in the new namespace.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
2016-12-21 15:56:39 -08:00
David Ahern
2917b4f41a
ip vrf: Fix reset to default VRF
...
Path in vrf_switch for "default" VRF is supposed to be MNT/vrf not
MNT/default. Also, default_vrf flag is redundant with ifindex. Remove
the flag in favor of ifindex != 0.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
2016-12-21 15:56:39 -08:00
David Ahern
b5efa59763
ip vrf: Refactor ipvrf_identify
...
Split ipvrf_identify into arg processing and a function that does the
actual cgroup file parsing. The latter function is used in a follow
on patch.
In the process, convert the reading of the cgroups file to use fopen
and fgets just in case the file ever grows beyond 4k. Move printing
of any error message and the vrf name to the caller of the new
vrf_identify.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
2016-12-21 15:56:39 -08:00
David Ahern
c94112faf5
ip vrf: Move kernel config hint to prog_load failure
...
Move the hint about CGROUP_BPF enabled to prog_load failure since
it fails before the attach. Update the existing error message to
print to stderr.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
2016-12-21 15:56:39 -08:00
Stephen Hemminger
ab91aee4b0
ipvrf: cleanup style issues
...
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2016-12-13 10:43:24 -08:00
David Ahern
1949f82cdf
Introduce ip vrf command
...
'ip vrf' follows the user semnatics established by 'ip netns'.
The 'ip vrf' subcommand supports 3 usages:
1. Run a command against a given vrf:
ip vrf exec NAME CMD
Uses the recently committed cgroup/sock BPF option. vrf directory
is added to cgroup2 mount. Individual vrfs are created under it. BPF
filter attached to vrf/NAME cgroup2 to set sk_bound_dev_if to the VRF
device index. From there the current process (ip's pid) is addded to
the cgroups.proc file and the given command is exected. In doing so
all AF_INET/AF_INET6 (ipv4/ipv6) sockets are automatically bound to
the VRF domain.
The association is inherited parent to child allowing the command to
be a shell from which other commands are run relative to the VRF.
2. Show the VRF a process is bound to:
ip vrf id
This command essentially looks at /proc/pid/cgroup for a "::/vrf/"
entry with the VRF name following.
3. Show process ids bound to a VRF
ip vrf pids NAME
This command dumps the file MNT/vrf/NAME/cgroup.procs since that file
shows the process ids in the particular vrf cgroup.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
2016-12-13 10:20:16 -08:00
David Ahern
463d9efaa2
libnetlink: Add variant of rtnl_talk that does not display RTNETLINK answers error
...
iplink_vrf has 2 functions used to validate a user given device name is
a VRF device and to return the table id. If the user string is not a
device name ip commands with a vrf keyword show a confusing error
message: "RTNETLINK answers: No such device".
Add a variant of rtnl_talk that does not display the "RTNETLINK answers"
message and update iplink_vrf to use it.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
2016-12-13 10:20:16 -08:00
David Ahern
2330490f0e
change name_is_vrf to return index
...
index of 0 means name is not a valid vrf.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
2016-12-13 10:20:16 -08:00
David Ahern
08bd33d77f
move cmd_exec to lib utils
...
Code move only; no functional change intended.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
2016-12-13 10:20:16 -08:00
Stephen Hemminger
b723368caa
lwtunnel: style cleanup
...
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2016-12-12 15:37:00 -08:00
Thomas Graf
b15f440e78
lwt: BPF support for LWT
...
Adds support to configure BPF programs as nexthop actions via the LWT
framework.
Example:
ip route add 192.168.253.2/32 \
encap bpf out obj lwt_len_hist_kern.o section len_hist \
dev veth0
Signed-off-by: Thomas Graf <tgraf@suug.ch>
2016-12-12 15:32:54 -08:00
Daniel Borkmann
c7272ca720
bpf: add initial support for attaching xdp progs
...
Now that we made the BPF loader generic as a library, reuse it
for loading XDP programs as well. This basically adds a minimal
start of a facility for iproute2 to load XDP programs. There
currently only exists the xdp1_user.c sample code in the kernel
tree that sets up netlink directly and an iovisor/bcc front-end.
Since we have all the necessary infrastructure in place already
from tc side, we can just reuse its loader back-end and thus
facilitate migration and usability among the two for people
familiar with tc/bpf already. Sharing maps, performing tail calls,
etc works the same way as with tc. Naturally, once kernel
configuration API evolves, we will extend new features for XDP
here as well, resp. extend dumping of related netlink attributes.
Minimal example:
clang -target bpf -O2 -Wall -c prog.c -o prog.o
ip [-force] link set dev em1 xdp obj prog.o # attaching
ip [-d] link # dumping
ip link set dev em1 xdp off # detaching
For the dump, intention is that in the first line for each ip
link entry, we'll see "xdp" to indicate that this device has an
XDP program attached. Once we dump some more useful information
via netlink (digest, etc), idea is that 'ip -d link' will then
display additional relevant program information below the "link/
ether [...]" output line for such devices, for example.
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Alexei Starovoitov <ast@kernel.org>
2016-12-09 12:44:12 -08:00
Amir Vadai
aab0f61043
libnetlink: Introduce rta_getattr_be*()
...
Add the utility functions rta_getattr_be16() and rta_getattr_be32(), and
change existing code to use it.
Signed-off-by: Amir Vadai <amir@vadai.me>
2016-12-02 14:12:09 -08:00
Stephen Hemminger
328374dcfe
Merge branch 'master' into net-next
2016-12-01 10:29:12 -08:00
Zhang Shengju
6bd1ea28c5
link: add team and team_slave link type
...
Add missing team and team_slave link type.
Signed-off-by: Zhang Shengju <zhangshengju@cmss.chinamobile.com>
2016-11-29 14:03:00 -08:00
Stephen Hemminger
281db53ff8
l2tp: style cleanup
...
Make l2tp conform to kernel style guidelines
2016-11-29 13:40:06 -08:00
Asbjørn Sloth Tønnesen
f7982f5c95
l2tp: show tunnel: expose UDP checksum state
...
Signed-off-by: Asbjørn Sloth Tønnesen <asbjorn@asbjorn.st>
2016-11-29 13:31:30 -08:00
Asbjørn Sloth Tønnesen
8a11421a5d
l2tp: support sequence numbering
...
This patch implement and documents the user interface for
sequence numbering.
Signed-off-by: Asbjørn Sloth Tønnesen <asbjorn@asbjorn.st>
2016-11-29 13:31:30 -08:00
Asbjørn Sloth Tønnesen
35cc6ded4f
l2tp: read IPv6 UDP checksum attributes from kernel
...
In case of an older kernel that doesn't set L2TP_ATTR_UDP_ZERO_CSUM6_{RX,TX}
the old hard-coded value is being preserved, since the attribute flag will be
missing.
Signed-off-by: Asbjørn Sloth Tønnesen <asbjorn@asbjorn.st>
2016-11-29 13:31:30 -08:00