rtnetlink.c (035d210f928ce083435b4fd351a26d126c02c927) rtnetlink.c (88d6378bd6c096cb8440face3ae3f33d55a2e6e4)
1/*
2 * INET An implementation of the TCP/IP protocol suite for the LINUX
3 * operating system. INET is implemented using the BSD Socket
4 * interface as the means of communication with the user level.
5 *
6 * Routing netlink socket interface: protocol independent part.
7 *
8 * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>

--- 882 unchanged lines hidden (view full) ---

891 + nla_total_size(4) /* IFLA_LINK_NETNSID */
892 + nla_total_size(ext_filter_mask
893 & RTEXT_FILTER_VF ? 4 : 0) /* IFLA_NUM_VF */
894 + rtnl_vfinfo_size(dev, ext_filter_mask) /* IFLA_VFINFO_LIST */
895 + rtnl_port_size(dev, ext_filter_mask) /* IFLA_VF_PORTS + IFLA_PORT_SELF */
896 + rtnl_link_get_size(dev) /* IFLA_LINKINFO */
897 + rtnl_link_get_af_size(dev) /* IFLA_AF_SPEC */
898 + nla_total_size(MAX_PHYS_ITEM_ID_LEN) /* IFLA_PHYS_PORT_ID */
1/*
2 * INET An implementation of the TCP/IP protocol suite for the LINUX
3 * operating system. INET is implemented using the BSD Socket
4 * interface as the means of communication with the user level.
5 *
6 * Routing netlink socket interface: protocol independent part.
7 *
8 * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>

--- 882 unchanged lines hidden (view full) ---

891 + nla_total_size(4) /* IFLA_LINK_NETNSID */
892 + nla_total_size(ext_filter_mask
893 & RTEXT_FILTER_VF ? 4 : 0) /* IFLA_NUM_VF */
894 + rtnl_vfinfo_size(dev, ext_filter_mask) /* IFLA_VFINFO_LIST */
895 + rtnl_port_size(dev, ext_filter_mask) /* IFLA_VF_PORTS + IFLA_PORT_SELF */
896 + rtnl_link_get_size(dev) /* IFLA_LINKINFO */
897 + rtnl_link_get_af_size(dev) /* IFLA_AF_SPEC */
898 + nla_total_size(MAX_PHYS_ITEM_ID_LEN) /* IFLA_PHYS_PORT_ID */
899 + nla_total_size(MAX_PHYS_ITEM_ID_LEN); /* IFLA_PHYS_SWITCH_ID */
899 + nla_total_size(MAX_PHYS_ITEM_ID_LEN) /* IFLA_PHYS_SWITCH_ID */
900 + nla_total_size(1); /* IFLA_PROTO_DOWN */
901
900}
901
902static int rtnl_vf_ports_fill(struct sk_buff *skb, struct net_device *dev)
903{
904 struct nlattr *vf_ports;
905 struct nlattr *vf_port;
906 int vf;
907 int err;

--- 169 unchanged lines hidden (view full) ---

1077 (upper_dev &&
1078 nla_put_u32(skb, IFLA_MASTER, upper_dev->ifindex)) ||
1079 nla_put_u8(skb, IFLA_CARRIER, netif_carrier_ok(dev)) ||
1080 (dev->qdisc &&
1081 nla_put_string(skb, IFLA_QDISC, dev->qdisc->ops->id)) ||
1082 (dev->ifalias &&
1083 nla_put_string(skb, IFLA_IFALIAS, dev->ifalias)) ||
1084 nla_put_u32(skb, IFLA_CARRIER_CHANGES,
902}
903
904static int rtnl_vf_ports_fill(struct sk_buff *skb, struct net_device *dev)
905{
906 struct nlattr *vf_ports;
907 struct nlattr *vf_port;
908 int vf;
909 int err;

--- 169 unchanged lines hidden (view full) ---

1079 (upper_dev &&
1080 nla_put_u32(skb, IFLA_MASTER, upper_dev->ifindex)) ||
1081 nla_put_u8(skb, IFLA_CARRIER, netif_carrier_ok(dev)) ||
1082 (dev->qdisc &&
1083 nla_put_string(skb, IFLA_QDISC, dev->qdisc->ops->id)) ||
1084 (dev->ifalias &&
1085 nla_put_string(skb, IFLA_IFALIAS, dev->ifalias)) ||
1086 nla_put_u32(skb, IFLA_CARRIER_CHANGES,
1085 atomic_read(&dev->carrier_changes)))
1087 atomic_read(&dev->carrier_changes)) ||
1088 nla_put_u8(skb, IFLA_PROTO_DOWN, dev->proto_down))
1086 goto nla_put_failure;
1087
1088 if (1) {
1089 struct rtnl_link_ifmap map = {
1090 .mem_start = dev->mem_start,
1091 .mem_end = dev->mem_end,
1092 .base_addr = dev->base_addr,
1093 .irq = dev->irq,

--- 220 unchanged lines hidden (view full) ---

1314 [IFLA_EXT_MASK] = { .type = NLA_U32 },
1315 [IFLA_PROMISCUITY] = { .type = NLA_U32 },
1316 [IFLA_NUM_TX_QUEUES] = { .type = NLA_U32 },
1317 [IFLA_NUM_RX_QUEUES] = { .type = NLA_U32 },
1318 [IFLA_PHYS_PORT_ID] = { .type = NLA_BINARY, .len = MAX_PHYS_ITEM_ID_LEN },
1319 [IFLA_CARRIER_CHANGES] = { .type = NLA_U32 }, /* ignored */
1320 [IFLA_PHYS_SWITCH_ID] = { .type = NLA_BINARY, .len = MAX_PHYS_ITEM_ID_LEN },
1321 [IFLA_LINK_NETNSID] = { .type = NLA_S32 },
1089 goto nla_put_failure;
1090
1091 if (1) {
1092 struct rtnl_link_ifmap map = {
1093 .mem_start = dev->mem_start,
1094 .mem_end = dev->mem_end,
1095 .base_addr = dev->base_addr,
1096 .irq = dev->irq,

--- 220 unchanged lines hidden (view full) ---

1317 [IFLA_EXT_MASK] = { .type = NLA_U32 },
1318 [IFLA_PROMISCUITY] = { .type = NLA_U32 },
1319 [IFLA_NUM_TX_QUEUES] = { .type = NLA_U32 },
1320 [IFLA_NUM_RX_QUEUES] = { .type = NLA_U32 },
1321 [IFLA_PHYS_PORT_ID] = { .type = NLA_BINARY, .len = MAX_PHYS_ITEM_ID_LEN },
1322 [IFLA_CARRIER_CHANGES] = { .type = NLA_U32 }, /* ignored */
1323 [IFLA_PHYS_SWITCH_ID] = { .type = NLA_BINARY, .len = MAX_PHYS_ITEM_ID_LEN },
1324 [IFLA_LINK_NETNSID] = { .type = NLA_S32 },
1325 [IFLA_PROTO_DOWN] = { .type = NLA_U8 },
1322};
1323
1324static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = {
1325 [IFLA_INFO_KIND] = { .type = NLA_STRING },
1326 [IFLA_INFO_DATA] = { .type = NLA_NESTED },
1327 [IFLA_INFO_SLAVE_KIND] = { .type = NLA_STRING },
1328 [IFLA_INFO_SLAVE_DATA] = { .type = NLA_NESTED },
1329};

--- 469 unchanged lines hidden (view full) ---

1799 int vf;
1800 int rem;
1801
1802 err = -EOPNOTSUPP;
1803 if (!ops->ndo_set_vf_port)
1804 goto errout;
1805
1806 nla_for_each_nested(attr, tb[IFLA_VF_PORTS], rem) {
1326};
1327
1328static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = {
1329 [IFLA_INFO_KIND] = { .type = NLA_STRING },
1330 [IFLA_INFO_DATA] = { .type = NLA_NESTED },
1331 [IFLA_INFO_SLAVE_KIND] = { .type = NLA_STRING },
1332 [IFLA_INFO_SLAVE_DATA] = { .type = NLA_NESTED },
1333};

--- 469 unchanged lines hidden (view full) ---

1803 int vf;
1804 int rem;
1805
1806 err = -EOPNOTSUPP;
1807 if (!ops->ndo_set_vf_port)
1808 goto errout;
1809
1810 nla_for_each_nested(attr, tb[IFLA_VF_PORTS], rem) {
1807 if (nla_type(attr) != IFLA_VF_PORT ||
1808 nla_len(attr) < NLA_HDRLEN) {
1809 err = -EINVAL;
1810 goto errout;
1811 }
1812 err = nla_parse_nested(port, IFLA_PORT_MAX, attr,
1813 ifla_port_policy);
1811 if (nla_type(attr) != IFLA_VF_PORT)
1812 continue;
1813 err = nla_parse_nested(port, IFLA_PORT_MAX,
1814 attr, ifla_port_policy);
1814 if (err < 0)
1815 goto errout;
1816 if (!port[IFLA_PORT_VF]) {
1817 err = -EOPNOTSUPP;
1818 goto errout;
1819 }
1820 vf = nla_get_u32(port[IFLA_PORT_VF]);
1821 err = ops->ndo_set_vf_port(dev, vf, port);

--- 34 unchanged lines hidden (view full) ---

1856 if (err < 0)
1857 goto errout;
1858
1859 status |= DO_SETLINK_NOTIFY;
1860 }
1861 }
1862 err = 0;
1863
1815 if (err < 0)
1816 goto errout;
1817 if (!port[IFLA_PORT_VF]) {
1818 err = -EOPNOTSUPP;
1819 goto errout;
1820 }
1821 vf = nla_get_u32(port[IFLA_PORT_VF]);
1822 err = ops->ndo_set_vf_port(dev, vf, port);

--- 34 unchanged lines hidden (view full) ---

1857 if (err < 0)
1858 goto errout;
1859
1860 status |= DO_SETLINK_NOTIFY;
1861 }
1862 }
1863 err = 0;
1864
1865 if (tb[IFLA_PROTO_DOWN]) {
1866 err = dev_change_proto_down(dev,
1867 nla_get_u8(tb[IFLA_PROTO_DOWN]));
1868 if (err)
1869 goto errout;
1870 status |= DO_SETLINK_NOTIFY;
1871 }
1872
1864errout:
1865 if (status & DO_SETLINK_MODIFIED) {
1866 if (status & DO_SETLINK_NOTIFY)
1867 netdev_state_change(dev);
1868
1869 if (err < 0)
1870 net_warn_ratelimited("A link change request failed with some changes committed already. Interface %s may have been left with an inconsistent configuration, please check.\n",
1871 dev->name);

--- 1543 unchanged lines hidden ---
1873errout:
1874 if (status & DO_SETLINK_MODIFIED) {
1875 if (status & DO_SETLINK_NOTIFY)
1876 netdev_state_change(dev);
1877
1878 if (err < 0)
1879 net_warn_ratelimited("A link change request failed with some changes committed already. Interface %s may have been left with an inconsistent configuration, please check.\n",
1880 dev->name);

--- 1543 unchanged lines hidden ---