rtnetlink.c (5891cd5ec46c2c2eb6427cb54d214b149635dd0e) | rtnetlink.c (22b67d17194fa47ac06b27475e63bb9f7f65b307) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * INET An implementation of the TCP/IP protocol suite for the LINUX 4 * operating system. INET is implemented using the BSD Socket 5 * interface as the means of communication with the user level. 6 * 7 * Routing netlink socket interface: protocol independent part. 8 * --- 445 unchanged lines hidden (view full) --- 454 add_wait_queue(&netdev_unregistering_wq, &wait); 455 for (;;) { 456 unregistering = false; 457 rtnl_lock(); 458 /* We held write locked pernet_ops_rwsem, and parallel 459 * setup_net() and cleanup_net() are not possible. 460 */ 461 for_each_net(net) { | 1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * INET An implementation of the TCP/IP protocol suite for the LINUX 4 * operating system. INET is implemented using the BSD Socket 5 * interface as the means of communication with the user level. 6 * 7 * Routing netlink socket interface: protocol independent part. 8 * --- 445 unchanged lines hidden (view full) --- 454 add_wait_queue(&netdev_unregistering_wq, &wait); 455 for (;;) { 456 unregistering = false; 457 rtnl_lock(); 458 /* We held write locked pernet_ops_rwsem, and parallel 459 * setup_net() and cleanup_net() are not possible. 460 */ 461 for_each_net(net) { |
462 if (net->dev_unreg_count > 0) { | 462 if (atomic_read(&net->dev_unreg_count) > 0) { |
463 unregistering = true; 464 break; 465 } 466 } 467 if (!unregistering) 468 break; 469 __rtnl_unlock(); 470 --- 1223 unchanged lines hidden (view full) --- 1694 struct net_device *dev, struct net *src_net, 1695 int type, u32 pid, u32 seq, u32 change, 1696 unsigned int flags, u32 ext_filter_mask, 1697 u32 event, int *new_nsid, int new_ifindex, 1698 int tgt_netnsid, gfp_t gfp) 1699{ 1700 struct ifinfomsg *ifm; 1701 struct nlmsghdr *nlh; | 463 unregistering = true; 464 break; 465 } 466 } 467 if (!unregistering) 468 break; 469 __rtnl_unlock(); 470 --- 1223 unchanged lines hidden (view full) --- 1694 struct net_device *dev, struct net *src_net, 1695 int type, u32 pid, u32 seq, u32 change, 1696 unsigned int flags, u32 ext_filter_mask, 1697 u32 event, int *new_nsid, int new_ifindex, 1698 int tgt_netnsid, gfp_t gfp) 1699{ 1700 struct ifinfomsg *ifm; 1701 struct nlmsghdr *nlh; |
1702 struct Qdisc *qdisc; | |
1703 1704 ASSERT_RTNL(); 1705 nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ifm), flags); 1706 if (nlh == NULL) 1707 return -EMSGSIZE; 1708 1709 ifm = nlmsg_data(nlh); 1710 ifm->ifi_family = AF_UNSPEC; 1711 ifm->__ifi_pad = 0; 1712 ifm->ifi_type = dev->type; 1713 ifm->ifi_index = dev->ifindex; 1714 ifm->ifi_flags = dev_get_flags(dev); 1715 ifm->ifi_change = change; 1716 1717 if (tgt_netnsid >= 0 && nla_put_s32(skb, IFLA_TARGET_NETNSID, tgt_netnsid)) 1718 goto nla_put_failure; 1719 | 1702 1703 ASSERT_RTNL(); 1704 nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ifm), flags); 1705 if (nlh == NULL) 1706 return -EMSGSIZE; 1707 1708 ifm = nlmsg_data(nlh); 1709 ifm->ifi_family = AF_UNSPEC; 1710 ifm->__ifi_pad = 0; 1711 ifm->ifi_type = dev->type; 1712 ifm->ifi_index = dev->ifindex; 1713 ifm->ifi_flags = dev_get_flags(dev); 1714 ifm->ifi_change = change; 1715 1716 if (tgt_netnsid >= 0 && nla_put_s32(skb, IFLA_TARGET_NETNSID, tgt_netnsid)) 1717 goto nla_put_failure; 1718 |
1720 qdisc = rtnl_dereference(dev->qdisc); | |
1721 if (nla_put_string(skb, IFLA_IFNAME, dev->name) || 1722 nla_put_u32(skb, IFLA_TXQLEN, dev->tx_queue_len) || 1723 nla_put_u8(skb, IFLA_OPERSTATE, 1724 netif_running(dev) ? dev->operstate : IF_OPER_DOWN) || 1725 nla_put_u8(skb, IFLA_LINKMODE, dev->link_mode) || 1726 nla_put_u32(skb, IFLA_MTU, dev->mtu) || 1727 nla_put_u32(skb, IFLA_MIN_MTU, dev->min_mtu) || 1728 nla_put_u32(skb, IFLA_MAX_MTU, dev->max_mtu) || 1729 nla_put_u32(skb, IFLA_GROUP, dev->group) || 1730 nla_put_u32(skb, IFLA_PROMISCUITY, dev->promiscuity) || 1731 nla_put_u32(skb, IFLA_NUM_TX_QUEUES, dev->num_tx_queues) || 1732 nla_put_u32(skb, IFLA_GSO_MAX_SEGS, dev->gso_max_segs) || 1733 nla_put_u32(skb, IFLA_GSO_MAX_SIZE, dev->gso_max_size) || 1734 nla_put_u32(skb, IFLA_GRO_MAX_SIZE, dev->gro_max_size) || 1735#ifdef CONFIG_RPS 1736 nla_put_u32(skb, IFLA_NUM_RX_QUEUES, dev->num_rx_queues) || 1737#endif 1738 put_master_ifindex(skb, dev) || 1739 nla_put_u8(skb, IFLA_CARRIER, netif_carrier_ok(dev)) || | 1719 if (nla_put_string(skb, IFLA_IFNAME, dev->name) || 1720 nla_put_u32(skb, IFLA_TXQLEN, dev->tx_queue_len) || 1721 nla_put_u8(skb, IFLA_OPERSTATE, 1722 netif_running(dev) ? dev->operstate : IF_OPER_DOWN) || 1723 nla_put_u8(skb, IFLA_LINKMODE, dev->link_mode) || 1724 nla_put_u32(skb, IFLA_MTU, dev->mtu) || 1725 nla_put_u32(skb, IFLA_MIN_MTU, dev->min_mtu) || 1726 nla_put_u32(skb, IFLA_MAX_MTU, dev->max_mtu) || 1727 nla_put_u32(skb, IFLA_GROUP, dev->group) || 1728 nla_put_u32(skb, IFLA_PROMISCUITY, dev->promiscuity) || 1729 nla_put_u32(skb, IFLA_NUM_TX_QUEUES, dev->num_tx_queues) || 1730 nla_put_u32(skb, IFLA_GSO_MAX_SEGS, dev->gso_max_segs) || 1731 nla_put_u32(skb, IFLA_GSO_MAX_SIZE, dev->gso_max_size) || 1732 nla_put_u32(skb, IFLA_GRO_MAX_SIZE, dev->gro_max_size) || 1733#ifdef CONFIG_RPS 1734 nla_put_u32(skb, IFLA_NUM_RX_QUEUES, dev->num_rx_queues) || 1735#endif 1736 put_master_ifindex(skb, dev) || 1737 nla_put_u8(skb, IFLA_CARRIER, netif_carrier_ok(dev)) || |
1740 (qdisc && 1741 nla_put_string(skb, IFLA_QDISC, qdisc->ops->id)) || | 1738 (dev->qdisc && 1739 nla_put_string(skb, IFLA_QDISC, dev->qdisc->ops->id)) || |
1742 nla_put_ifalias(skb, dev) || 1743 nla_put_u32(skb, IFLA_CARRIER_CHANGES, 1744 atomic_read(&dev->carrier_up_count) + 1745 atomic_read(&dev->carrier_down_count)) || 1746 nla_put_u32(skb, IFLA_CARRIER_UP_COUNT, 1747 atomic_read(&dev->carrier_up_count)) || 1748 nla_put_u32(skb, IFLA_CARRIER_DOWN_COUNT, 1749 atomic_read(&dev->carrier_down_count))) --- 3652 unchanged lines hidden (view full) --- 5402 dev = __dev_get_by_index(net, ifsm->ifindex); 5403 else 5404 return -EINVAL; 5405 5406 if (!dev) 5407 return -ENODEV; 5408 5409 filter_mask = ifsm->filter_mask; | 1740 nla_put_ifalias(skb, dev) || 1741 nla_put_u32(skb, IFLA_CARRIER_CHANGES, 1742 atomic_read(&dev->carrier_up_count) + 1743 atomic_read(&dev->carrier_down_count)) || 1744 nla_put_u32(skb, IFLA_CARRIER_UP_COUNT, 1745 atomic_read(&dev->carrier_up_count)) || 1746 nla_put_u32(skb, IFLA_CARRIER_DOWN_COUNT, 1747 atomic_read(&dev->carrier_down_count))) --- 3652 unchanged lines hidden (view full) --- 5400 dev = __dev_get_by_index(net, ifsm->ifindex); 5401 else 5402 return -EINVAL; 5403 5404 if (!dev) 5405 return -ENODEV; 5406 5407 filter_mask = ifsm->filter_mask; |
5410 if (!filter_mask) | 5408 if (!filter_mask) { 5409 NL_SET_ERR_MSG(extack, "Filter mask must be set for stats get"); |
5411 return -EINVAL; | 5410 return -EINVAL; |
5411 } |
|
5412 5413 nskb = nlmsg_new(if_nlmsg_stats_size(dev, filter_mask), GFP_KERNEL); 5414 if (!nskb) 5415 return -ENOBUFS; 5416 5417 err = rtnl_fill_statsinfo(nskb, dev, RTM_NEWSTATS, 5418 NETLINK_CB(skb).portid, nlh->nlmsg_seq, 0, 5419 0, filter_mask, &idxattr, &prividx); --- 301 unchanged lines hidden --- | 5412 5413 nskb = nlmsg_new(if_nlmsg_stats_size(dev, filter_mask), GFP_KERNEL); 5414 if (!nskb) 5415 return -ENOBUFS; 5416 5417 err = rtnl_fill_statsinfo(nskb, dev, RTM_NEWSTATS, 5418 NETLINK_CB(skb).portid, nlh->nlmsg_seq, 0, 5419 0, filter_mask, &idxattr, &prividx); --- 301 unchanged lines hidden --- |