|
57 | 57 | #if IS_ENABLED(CONFIG_IPV6) |
58 | 58 | #include <net/addrconf.h> |
59 | 59 | #endif |
| 60 | +#include <linux/dpll.h> |
60 | 61 |
|
61 | 62 | #include "dev.h" |
62 | 63 |
|
@@ -1055,6 +1056,15 @@ static size_t rtnl_devlink_port_size(const struct net_device *dev) |
1055 | 1056 | return size; |
1056 | 1057 | } |
1057 | 1058 |
|
| 1059 | +static size_t rtnl_dpll_pin_size(const struct net_device *dev) |
| 1060 | +{ |
| 1061 | + size_t size = nla_total_size(0); /* nest IFLA_DPLL_PIN */ |
| 1062 | + |
| 1063 | + size += dpll_msg_pin_handle_size(netdev_dpll_pin(dev)); |
| 1064 | + |
| 1065 | + return size; |
| 1066 | +} |
| 1067 | + |
1058 | 1068 | static noinline size_t if_nlmsg_size(const struct net_device *dev, |
1059 | 1069 | u32 ext_filter_mask) |
1060 | 1070 | { |
@@ -1111,6 +1121,7 @@ static noinline size_t if_nlmsg_size(const struct net_device *dev, |
1111 | 1121 | + rtnl_prop_list_size(dev) |
1112 | 1122 | + nla_total_size(MAX_ADDR_LEN) /* IFLA_PERM_ADDRESS */ |
1113 | 1123 | + rtnl_devlink_port_size(dev) |
| 1124 | + + rtnl_dpll_pin_size(dev) |
1114 | 1125 | + 0; |
1115 | 1126 | } |
1116 | 1127 |
|
@@ -1774,6 +1785,28 @@ static int rtnl_fill_devlink_port(struct sk_buff *skb, |
1774 | 1785 | return ret; |
1775 | 1786 | } |
1776 | 1787 |
|
| 1788 | +static int rtnl_fill_dpll_pin(struct sk_buff *skb, |
| 1789 | + const struct net_device *dev) |
| 1790 | +{ |
| 1791 | + struct nlattr *dpll_pin_nest; |
| 1792 | + int ret; |
| 1793 | + |
| 1794 | + dpll_pin_nest = nla_nest_start(skb, IFLA_DPLL_PIN); |
| 1795 | + if (!dpll_pin_nest) |
| 1796 | + return -EMSGSIZE; |
| 1797 | + |
| 1798 | + ret = dpll_msg_add_pin_handle(skb, netdev_dpll_pin(dev)); |
| 1799 | + if (ret < 0) |
| 1800 | + goto nest_cancel; |
| 1801 | + |
| 1802 | + nla_nest_end(skb, dpll_pin_nest); |
| 1803 | + return 0; |
| 1804 | + |
| 1805 | +nest_cancel: |
| 1806 | + nla_nest_cancel(skb, dpll_pin_nest); |
| 1807 | + return ret; |
| 1808 | +} |
| 1809 | + |
1777 | 1810 | static int rtnl_fill_ifinfo(struct sk_buff *skb, |
1778 | 1811 | struct net_device *dev, struct net *src_net, |
1779 | 1812 | int type, u32 pid, u32 seq, u32 change, |
@@ -1916,6 +1949,9 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, |
1916 | 1949 | if (rtnl_fill_devlink_port(skb, dev)) |
1917 | 1950 | goto nla_put_failure; |
1918 | 1951 |
|
| 1952 | + if (rtnl_fill_dpll_pin(skb, dev)) |
| 1953 | + goto nla_put_failure; |
| 1954 | + |
1919 | 1955 | nlmsg_end(skb, nlh); |
1920 | 1956 | return 0; |
1921 | 1957 |
|
|
0 commit comments