mirror of
https://git.proxmox.com/git/mirror_iproute2
synced 2025-10-05 13:02:28 +00:00
1d2cfcf8b5
3572 Commits
Author | SHA1 | Message | Date | |
---|---|---|---|---|
![]() |
7fc75744c0 |
rdma: Add json output to link object
An example for the JSON output for two devices system. root@mtr-leonro:~# rdma link -d -p -j [{ "ifindex": 1, "port": 1, "ifname": "mlx5_0/1", "subnet_prefix": "fe80:0000:0000:0000", "lid": 13399, "sm_lid": 49151, "lmc": 0, "state": "ACTIVE", "physical_state": "LINK_UP", "caps": ["AUTO_MIG" ] },{ "ifindex": 2, "port": 1, "ifname": "mlx5_1/1", "subnet_prefix": "fe80:0000:0000:0000", "lid": 13400, "sm_lid": 49151, "lmc": 0, "state": "ACTIVE", "physical_state": "LINK_UP", "caps": ["AUTO_MIG" ] } ] Signed-off-by: Leon Romanovsky <leonro@mellanox.com> |
||
![]() |
ef353e2e94 |
rdma: Implement json output for dev object
The example output for machine with two devices root@mtr-leonro:~# rdma dev -j -p [{ "ifindex": 1, "ifname": "mlx5_0", "node_type": "ca", "fw": "2.8.9999", "node_guid": "5254:00c0:fe12:3457", "sys_image_guid": 5254:00c0:fe12:3457", "caps": [ "BAD_PKEY_CNTR", "BAD_QKEY_CNTR", "CHANGE_PHY_POR", "PORT_ACTIVE_EVENT", "SYS_IMAGE_GUID", "RC_RNR_NAK_GEN", "MEM_WINDOW", "UD_IP_CSUM", "UD_TSO", "XRC", "MEM_MGT_EXTENSIONS", "BLOCK_MULTICAST_LOOPBACK", "MEM_WINDOW_TYPE_2B", "RAW_IP_CSUM", "MANAGED_FLOW_STEERING", "RESIZE_MAX_WR" ] },{ "ifindex": 2, "ifname": mlx5_1, "node_type": "ca", "fw": "2.8.9999", "node_guid": "5254:00c0:fe12:3458", "sys_image_guid": "5254:00c0:fe12:3458", "caps": [ "BAD_PKEY_CNTR", "BAD_QKEY_CNTR", "CHANGE_PHY_POR", "PORT_ACTIVE_EVENT", "SYS_IMAGE_GUID", "RC_RNR_NAK_GEN", "MEM_WINDOW", "UD_IP_CSUM", "UD_TSO", "XRC", "MEM_MGT_EXTENSIONS", "BLOCK_MULTICAST_LOOPBACK", "MEM_WINDOW_TYPE_2B", "RAW_IP_CSUM", "MANAGED_FLOW_STEERING", "RESIZE_MAX_WR" ] } ] Signed-off-by: Leon Romanovsky <leonro@mellanox.com> |
||
![]() |
ab6e2b7bdb |
rdma: Add json and pretty outputs
Signed-off-by: Leon Romanovsky <leonro@mellanox.com> |
||
![]() |
da990ab40a |
rdma: Add link object
Link (port) object represent struct ib_port to the user space. Link properties: * Port capabilities * IB subnet prefix * LID, SM_LID and LMC * Port state * Physical state Signed-off-by: Leon Romanovsky <leonro@mellanox.com> |
||
![]() |
40df8263a0 |
rdma: Add dev object
Device (dev) object represents struct ib_device to the user space. Device properties: * Device capabilities * FW version to the device output * node_guid and sys_image_guid * node_type Signed-off-by: Leon Romanovsky <leonro@mellanox.com> |
||
![]() |
74bd75c2b6 |
rdma: Add basic infrastructure for RDMA tool
RDMA devices are cross-functional devices from one side, but very tailored for the specific markets from another. Such diversity caused to spread of RDMA related configuration across various tools, e.g. devlink, ip, ethtool, ib specific and vendor specific solutions. This patch adds ability to fill device and port information by reading RDMA netlink. Signed-off-by: Leon Romanovsky <leonro@mellanox.com> |
||
![]() |
afdc119410 |
utils: Move BIT macro to common header
BIT() macro was implemented and used by devlink for now, but following patches of rdmatool will reuse the same macro, so put it in common header file. Signed-off-by: Leon Romanovsky <leonro@mellanox.com> |
||
![]() |
18d7817c60 |
update kernel headers from net-next
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> |
||
![]() |
fa93d9a8aa | Merge branch 'master' into net-next | ||
![]() |
be55416add |
tipc/bearer: Fix resource leak in error path
Signed-off-by: Phil Sutter <phil@nwl.cc> |
||
![]() |
46131577cf |
ss: Fix potential memleak in unix_stats_print()
Fixes:
|
||
![]() |
b530cef0e3 |
ifstat: Fix memleak in dump_kern_db() for json output
Looks like this was forgotten when converting to common json output
formatter.
Fixes:
|
||
![]() |
35f6adefb8 |
ifstat: Fix memleak in error case
Signed-off-by: Phil Sutter <phil@nwl.cc> |
||
![]() |
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> |
||
![]() |
3e587d9f43 |
tc/em_ipset: Don't leak sockfd on error path
Signed-off-by: Phil Sutter <phil@nwl.cc> |
||
![]() |
4b45ae221e |
ss: Don't leak fd in tcp_show_netlink_file()
Signed-off-by: Phil Sutter <phil@nwl.cc> |
||
![]() |
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> |
||
![]() |
58a15e6c7e |
iproute_lwtunnel: Argument to strerror must be positive
Signed-off-by: Phil Sutter <phil@nwl.cc> |
||
![]() |
436270a45d |
tipc/node: Fix socket fd check in cmd_node_get_addr()
socket() returns -1 on error, not 0. Signed-off-by: Phil Sutter <phil@nwl.cc> |
||
![]() |
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> |
||
![]() |
2313b6bfe4 |
examples: Some shell fixes to cbq.init
This addresses the following issues: - $@ is an array, so don't use it in quoted strings - use $* instead. - Add missing quotes to components of [ ] expressions. These are not strictly necessary since the output of 'wc -l' should be a single word only, but in case of errors, bash prints "integer expression expected" instead of "too many arguments". - Use -print0/-0 when piping from find to xargs to allow for filenames which contain whitespace. - Quote arguments to 'eval' to prevent word-splitting. Signed-off-by: Phil Sutter <phil@nwl.cc> |
||
![]() |
e5fa0e6fe7 |
libnetlink: Fix extack attribute parsing
Initialize tb in nl_dump_ext_err since not all attributes will be sent in the messages. Add error checking on mnl_attr_parse and print messages on the off chance the ext ack attributes fail to validate. Signed-off-by: David Ahern <dsahern@gmail.com> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
e4a1216aeb |
ip: iplink.c: open/close json obj for ip -brief -json link show dev DEV
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com> |
||
![]() |
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> |
||
![]() |
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> |
||
![]() |
7252f16b2d |
json_writer: add new json handlers (null, float with format, lluint, hu)
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com> |
||
![]() |
5df6077259 |
ip: add new command line argument -json (mutually exclusive with -color)
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com> |
||
![]() |
959f142863 |
color: add new COLOR_NONE and disable_color function
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com> |
||
![]() |
0439990238 |
man: add documentation for seg6local lwt
This patch adds documentation in the ip-route man page about the seg6local lightweight tunnel. Signed-off-by: David Lebrun <david.lebrun@uclouvain.be> |