.. | .. |
---|
1 | | -/* This program is free software; you can redistribute it and/or modify |
---|
2 | | - * it under the terms of the GNU General Public License version 2 |
---|
3 | | - * as published by the Free Software Foundation. |
---|
4 | | - * |
---|
5 | | - * This program is distributed in the hope that it will be useful, |
---|
6 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
7 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
8 | | - * GNU General Public License for more details. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
| 2 | +/* |
---|
9 | 3 | * |
---|
10 | 4 | * Authors: |
---|
11 | 5 | * Alexander Aring <aar@pengutronix.de> |
---|
.. | .. |
---|
242 | 236 | struct cfg802154_registered_device **rdev, |
---|
243 | 237 | struct wpan_dev **wpan_dev) |
---|
244 | 238 | { |
---|
| 239 | + const struct genl_dumpit_info *info = genl_dumpit_info(cb); |
---|
245 | 240 | int err; |
---|
246 | 241 | |
---|
247 | 242 | rtnl_lock(); |
---|
248 | 243 | |
---|
249 | 244 | if (!cb->args[0]) { |
---|
250 | | - err = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl802154_fam.hdrsize, |
---|
251 | | - genl_family_attrbuf(&nl802154_fam), |
---|
252 | | - nl802154_fam.maxattr, nl802154_policy, NULL); |
---|
253 | | - if (err) |
---|
254 | | - goto out_unlock; |
---|
255 | | - |
---|
256 | 245 | *wpan_dev = __cfg802154_wpan_dev_from_attrs(sock_net(skb->sk), |
---|
257 | | - genl_family_attrbuf(&nl802154_fam)); |
---|
| 246 | + info->attrs); |
---|
258 | 247 | if (IS_ERR(*wpan_dev)) { |
---|
259 | 248 | err = PTR_ERR(*wpan_dev); |
---|
260 | 249 | goto out_unlock; |
---|
.. | .. |
---|
312 | 301 | static int |
---|
313 | 302 | nl802154_put_flags(struct sk_buff *msg, int attr, u32 mask) |
---|
314 | 303 | { |
---|
315 | | - struct nlattr *nl_flags = nla_nest_start(msg, attr); |
---|
| 304 | + struct nlattr *nl_flags = nla_nest_start_noflag(msg, attr); |
---|
316 | 305 | int i; |
---|
317 | 306 | |
---|
318 | 307 | if (!nl_flags) |
---|
.. | .. |
---|
338 | 327 | struct nlattr *nl_page; |
---|
339 | 328 | unsigned long page; |
---|
340 | 329 | |
---|
341 | | - nl_page = nla_nest_start(msg, NL802154_ATTR_CHANNELS_SUPPORTED); |
---|
| 330 | + nl_page = nla_nest_start_noflag(msg, NL802154_ATTR_CHANNELS_SUPPORTED); |
---|
342 | 331 | if (!nl_page) |
---|
343 | 332 | return -ENOBUFS; |
---|
344 | 333 | |
---|
.. | .. |
---|
360 | 349 | struct nlattr *nl_caps, *nl_channels; |
---|
361 | 350 | int i; |
---|
362 | 351 | |
---|
363 | | - nl_caps = nla_nest_start(msg, NL802154_ATTR_WPAN_PHY_CAPS); |
---|
| 352 | + nl_caps = nla_nest_start_noflag(msg, NL802154_ATTR_WPAN_PHY_CAPS); |
---|
364 | 353 | if (!nl_caps) |
---|
365 | 354 | return -ENOBUFS; |
---|
366 | 355 | |
---|
367 | | - nl_channels = nla_nest_start(msg, NL802154_CAP_ATTR_CHANNELS); |
---|
| 356 | + nl_channels = nla_nest_start_noflag(msg, NL802154_CAP_ATTR_CHANNELS); |
---|
368 | 357 | if (!nl_channels) |
---|
369 | 358 | return -ENOBUFS; |
---|
370 | 359 | |
---|
.. | .. |
---|
380 | 369 | if (rdev->wpan_phy.flags & WPAN_PHY_FLAG_CCA_ED_LEVEL) { |
---|
381 | 370 | struct nlattr *nl_ed_lvls; |
---|
382 | 371 | |
---|
383 | | - nl_ed_lvls = nla_nest_start(msg, |
---|
384 | | - NL802154_CAP_ATTR_CCA_ED_LEVELS); |
---|
| 372 | + nl_ed_lvls = nla_nest_start_noflag(msg, |
---|
| 373 | + NL802154_CAP_ATTR_CCA_ED_LEVELS); |
---|
385 | 374 | if (!nl_ed_lvls) |
---|
386 | 375 | return -ENOBUFS; |
---|
387 | 376 | |
---|
.. | .. |
---|
396 | 385 | if (rdev->wpan_phy.flags & WPAN_PHY_FLAG_TXPOWER) { |
---|
397 | 386 | struct nlattr *nl_tx_pwrs; |
---|
398 | 387 | |
---|
399 | | - nl_tx_pwrs = nla_nest_start(msg, NL802154_CAP_ATTR_TX_POWERS); |
---|
| 388 | + nl_tx_pwrs = nla_nest_start_noflag(msg, |
---|
| 389 | + NL802154_CAP_ATTR_TX_POWERS); |
---|
400 | 390 | if (!nl_tx_pwrs) |
---|
401 | 391 | return -ENOBUFS; |
---|
402 | 392 | |
---|
.. | .. |
---|
504 | 494 | if (nl802154_put_capabilities(msg, rdev)) |
---|
505 | 495 | goto nla_put_failure; |
---|
506 | 496 | |
---|
507 | | - nl_cmds = nla_nest_start(msg, NL802154_ATTR_SUPPORTED_COMMANDS); |
---|
| 497 | + nl_cmds = nla_nest_start_noflag(msg, NL802154_ATTR_SUPPORTED_COMMANDS); |
---|
508 | 498 | if (!nl_cmds) |
---|
509 | 499 | goto nla_put_failure; |
---|
510 | 500 | |
---|
.. | .. |
---|
560 | 550 | struct netlink_callback *cb, |
---|
561 | 551 | struct nl802154_dump_wpan_phy_state *state) |
---|
562 | 552 | { |
---|
563 | | - struct nlattr **tb = genl_family_attrbuf(&nl802154_fam); |
---|
564 | | - int ret = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl802154_fam.hdrsize, tb, |
---|
565 | | - nl802154_fam.maxattr, nl802154_policy, NULL); |
---|
566 | | - |
---|
567 | | - /* TODO check if we can handle error here, |
---|
568 | | - * we have no backward compatibility |
---|
569 | | - */ |
---|
570 | | - if (ret) |
---|
571 | | - return 0; |
---|
| 553 | + const struct genl_dumpit_info *info = genl_dumpit_info(cb); |
---|
| 554 | + struct nlattr **tb = info->attrs; |
---|
572 | 555 | |
---|
573 | 556 | if (tb[NL802154_ATTR_WPAN_PHY]) |
---|
574 | 557 | state->filter_wpan_phy = nla_get_u32(tb[NL802154_ATTR_WPAN_PHY]); |
---|
.. | .. |
---|
693 | 676 | |
---|
694 | 677 | switch (desc->mode) { |
---|
695 | 678 | case NL802154_KEY_ID_MODE_IMPLICIT: |
---|
696 | | - nl_dev_addr = nla_nest_start(msg, NL802154_KEY_ID_ATTR_IMPLICIT); |
---|
| 679 | + nl_dev_addr = nla_nest_start_noflag(msg, |
---|
| 680 | + NL802154_KEY_ID_ATTR_IMPLICIT); |
---|
697 | 681 | if (!nl_dev_addr) |
---|
698 | 682 | return -ENOBUFS; |
---|
699 | 683 | |
---|
.. | .. |
---|
768 | 752 | params.frame_counter)) |
---|
769 | 753 | return -ENOBUFS; |
---|
770 | 754 | |
---|
771 | | - nl_key_id = nla_nest_start(msg, NL802154_ATTR_SEC_OUT_KEY_ID); |
---|
| 755 | + nl_key_id = nla_nest_start_noflag(msg, NL802154_ATTR_SEC_OUT_KEY_ID); |
---|
772 | 756 | if (!nl_key_id) |
---|
773 | 757 | return -ENOBUFS; |
---|
774 | 758 | |
---|
.. | .. |
---|
1311 | 1295 | { |
---|
1312 | 1296 | struct nlattr *attrs[NL802154_DEV_ADDR_ATTR_MAX + 1]; |
---|
1313 | 1297 | |
---|
1314 | | - if (!nla || nla_parse_nested(attrs, NL802154_DEV_ADDR_ATTR_MAX, nla, |
---|
1315 | | - nl802154_dev_addr_policy, NULL)) |
---|
| 1298 | + if (!nla || nla_parse_nested_deprecated(attrs, NL802154_DEV_ADDR_ATTR_MAX, nla, nl802154_dev_addr_policy, NULL)) |
---|
1316 | 1299 | return -EINVAL; |
---|
1317 | 1300 | |
---|
1318 | 1301 | if (!attrs[NL802154_DEV_ADDR_ATTR_PAN_ID] || !attrs[NL802154_DEV_ADDR_ATTR_MODE]) |
---|
.. | .. |
---|
1352 | 1335 | { |
---|
1353 | 1336 | struct nlattr *attrs[NL802154_KEY_ID_ATTR_MAX + 1]; |
---|
1354 | 1337 | |
---|
1355 | | - if (!nla || nla_parse_nested(attrs, NL802154_KEY_ID_ATTR_MAX, nla, |
---|
1356 | | - nl802154_key_id_policy, NULL)) |
---|
| 1338 | + if (!nla || nla_parse_nested_deprecated(attrs, NL802154_KEY_ID_ATTR_MAX, nla, nl802154_key_id_policy, NULL)) |
---|
1357 | 1339 | return -EINVAL; |
---|
1358 | 1340 | |
---|
1359 | 1341 | if (!attrs[NL802154_KEY_ID_ATTR_MODE]) |
---|
.. | .. |
---|
1464 | 1446 | if (nla_put_u32(msg, NL802154_ATTR_IFINDEX, dev->ifindex)) |
---|
1465 | 1447 | goto nla_put_failure; |
---|
1466 | 1448 | |
---|
1467 | | - nl_key = nla_nest_start(msg, NL802154_ATTR_SEC_KEY); |
---|
| 1449 | + nl_key = nla_nest_start_noflag(msg, NL802154_ATTR_SEC_KEY); |
---|
1468 | 1450 | if (!nl_key) |
---|
1469 | 1451 | goto nla_put_failure; |
---|
1470 | 1452 | |
---|
1471 | | - nl_key_id = nla_nest_start(msg, NL802154_KEY_ATTR_ID); |
---|
| 1453 | + nl_key_id = nla_nest_start_noflag(msg, NL802154_KEY_ATTR_ID); |
---|
1472 | 1454 | if (!nl_key_id) |
---|
1473 | 1455 | goto nla_put_failure; |
---|
1474 | 1456 | |
---|
.. | .. |
---|
1576 | 1558 | struct ieee802154_llsec_key_id id = { }; |
---|
1577 | 1559 | u32 commands[NL802154_CMD_FRAME_NR_IDS / 32] = { }; |
---|
1578 | 1560 | |
---|
| 1561 | + if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR) |
---|
| 1562 | + return -EOPNOTSUPP; |
---|
| 1563 | + |
---|
1579 | 1564 | if (!info->attrs[NL802154_ATTR_SEC_KEY] || |
---|
1580 | | - nla_parse_nested(attrs, NL802154_KEY_ATTR_MAX, |
---|
1581 | | - info->attrs[NL802154_ATTR_SEC_KEY], |
---|
1582 | | - nl802154_key_policy, info->extack)) |
---|
| 1565 | + nla_parse_nested_deprecated(attrs, NL802154_KEY_ATTR_MAX, info->attrs[NL802154_ATTR_SEC_KEY], nl802154_key_policy, info->extack)) |
---|
1583 | 1566 | return -EINVAL; |
---|
1584 | 1567 | |
---|
1585 | 1568 | if (!attrs[NL802154_KEY_ATTR_USAGE_FRAMES] || |
---|
.. | .. |
---|
1627 | 1610 | struct nlattr *attrs[NL802154_KEY_ATTR_MAX + 1]; |
---|
1628 | 1611 | struct ieee802154_llsec_key_id id; |
---|
1629 | 1612 | |
---|
| 1613 | + if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR) |
---|
| 1614 | + return -EOPNOTSUPP; |
---|
| 1615 | + |
---|
1630 | 1616 | if (!info->attrs[NL802154_ATTR_SEC_KEY] || |
---|
1631 | | - nla_parse_nested(attrs, NL802154_KEY_ATTR_MAX, |
---|
1632 | | - info->attrs[NL802154_ATTR_SEC_KEY], |
---|
1633 | | - nl802154_key_policy, info->extack)) |
---|
| 1617 | + nla_parse_nested_deprecated(attrs, NL802154_KEY_ATTR_MAX, info->attrs[NL802154_ATTR_SEC_KEY], nl802154_key_policy, info->extack)) |
---|
1634 | 1618 | return -EINVAL; |
---|
1635 | 1619 | |
---|
1636 | 1620 | if (ieee802154_llsec_parse_key_id(attrs[NL802154_KEY_ATTR_ID], &id) < 0) |
---|
.. | .. |
---|
1655 | 1639 | if (nla_put_u32(msg, NL802154_ATTR_IFINDEX, dev->ifindex)) |
---|
1656 | 1640 | goto nla_put_failure; |
---|
1657 | 1641 | |
---|
1658 | | - nl_device = nla_nest_start(msg, NL802154_ATTR_SEC_DEVICE); |
---|
| 1642 | + nl_device = nla_nest_start_noflag(msg, NL802154_ATTR_SEC_DEVICE); |
---|
1659 | 1643 | if (!nl_device) |
---|
1660 | 1644 | goto nla_put_failure; |
---|
1661 | 1645 | |
---|
.. | .. |
---|
1749 | 1733 | { |
---|
1750 | 1734 | struct nlattr *attrs[NL802154_DEV_ATTR_MAX + 1]; |
---|
1751 | 1735 | |
---|
1752 | | - if (!nla || nla_parse_nested(attrs, NL802154_DEV_ATTR_MAX, |
---|
1753 | | - nla, nl802154_dev_policy, NULL)) |
---|
| 1736 | + if (!nla || nla_parse_nested_deprecated(attrs, NL802154_DEV_ATTR_MAX, nla, nl802154_dev_policy, NULL)) |
---|
1754 | 1737 | return -EINVAL; |
---|
1755 | 1738 | |
---|
1756 | 1739 | memset(dev, 0, sizeof(*dev)); |
---|
.. | .. |
---|
1804 | 1787 | struct nlattr *attrs[NL802154_DEV_ATTR_MAX + 1]; |
---|
1805 | 1788 | __le64 extended_addr; |
---|
1806 | 1789 | |
---|
| 1790 | + if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR) |
---|
| 1791 | + return -EOPNOTSUPP; |
---|
| 1792 | + |
---|
1807 | 1793 | if (!info->attrs[NL802154_ATTR_SEC_DEVICE] || |
---|
1808 | | - nla_parse_nested(attrs, NL802154_DEV_ATTR_MAX, |
---|
1809 | | - info->attrs[NL802154_ATTR_SEC_DEVICE], |
---|
1810 | | - nl802154_dev_policy, info->extack)) |
---|
| 1794 | + nla_parse_nested_deprecated(attrs, NL802154_DEV_ATTR_MAX, info->attrs[NL802154_ATTR_SEC_DEVICE], nl802154_dev_policy, info->extack)) |
---|
1811 | 1795 | return -EINVAL; |
---|
1812 | 1796 | |
---|
1813 | 1797 | if (!attrs[NL802154_DEV_ATTR_EXTENDED_ADDR]) |
---|
.. | .. |
---|
1833 | 1817 | if (nla_put_u32(msg, NL802154_ATTR_IFINDEX, dev->ifindex)) |
---|
1834 | 1818 | goto nla_put_failure; |
---|
1835 | 1819 | |
---|
1836 | | - nl_devkey = nla_nest_start(msg, NL802154_ATTR_SEC_DEVKEY); |
---|
| 1820 | + nl_devkey = nla_nest_start_noflag(msg, NL802154_ATTR_SEC_DEVKEY); |
---|
1837 | 1821 | if (!nl_devkey) |
---|
1838 | 1822 | goto nla_put_failure; |
---|
1839 | 1823 | |
---|
.. | .. |
---|
1843 | 1827 | devkey->frame_counter)) |
---|
1844 | 1828 | goto nla_put_failure; |
---|
1845 | 1829 | |
---|
1846 | | - nl_key_id = nla_nest_start(msg, NL802154_DEVKEY_ATTR_ID); |
---|
| 1830 | + nl_key_id = nla_nest_start_noflag(msg, NL802154_DEVKEY_ATTR_ID); |
---|
1847 | 1831 | if (!nl_key_id) |
---|
1848 | 1832 | goto nla_put_failure; |
---|
1849 | 1833 | |
---|
.. | .. |
---|
1941 | 1925 | return -EOPNOTSUPP; |
---|
1942 | 1926 | |
---|
1943 | 1927 | if (!info->attrs[NL802154_ATTR_SEC_DEVKEY] || |
---|
1944 | | - nla_parse_nested(attrs, NL802154_DEVKEY_ATTR_MAX, |
---|
1945 | | - info->attrs[NL802154_ATTR_SEC_DEVKEY], |
---|
1946 | | - nl802154_devkey_policy, info->extack) < 0) |
---|
| 1928 | + nla_parse_nested_deprecated(attrs, NL802154_DEVKEY_ATTR_MAX, info->attrs[NL802154_ATTR_SEC_DEVKEY], nl802154_devkey_policy, info->extack) < 0) |
---|
1947 | 1929 | return -EINVAL; |
---|
1948 | 1930 | |
---|
1949 | 1931 | if (!attrs[NL802154_DEVKEY_ATTR_FRAME_COUNTER] || |
---|
.. | .. |
---|
1973 | 1955 | struct ieee802154_llsec_device_key key; |
---|
1974 | 1956 | __le64 extended_addr; |
---|
1975 | 1957 | |
---|
| 1958 | + if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR) |
---|
| 1959 | + return -EOPNOTSUPP; |
---|
| 1960 | + |
---|
1976 | 1961 | if (!info->attrs[NL802154_ATTR_SEC_DEVKEY] || |
---|
1977 | | - nla_parse_nested(attrs, NL802154_DEVKEY_ATTR_MAX, |
---|
1978 | | - info->attrs[NL802154_ATTR_SEC_DEVKEY], |
---|
1979 | | - nl802154_devkey_policy, info->extack)) |
---|
| 1962 | + nla_parse_nested_deprecated(attrs, NL802154_DEVKEY_ATTR_MAX, info->attrs[NL802154_ATTR_SEC_DEVKEY], nl802154_devkey_policy, info->extack)) |
---|
1980 | 1963 | return -EINVAL; |
---|
1981 | 1964 | |
---|
1982 | 1965 | if (!attrs[NL802154_DEVKEY_ATTR_EXTENDED_ADDR]) |
---|
.. | .. |
---|
2010 | 1993 | if (nla_put_u32(msg, NL802154_ATTR_IFINDEX, dev->ifindex)) |
---|
2011 | 1994 | goto nla_put_failure; |
---|
2012 | 1995 | |
---|
2013 | | - nl_seclevel = nla_nest_start(msg, NL802154_ATTR_SEC_LEVEL); |
---|
| 1996 | + nl_seclevel = nla_nest_start_noflag(msg, NL802154_ATTR_SEC_LEVEL); |
---|
2014 | 1997 | if (!nl_seclevel) |
---|
2015 | 1998 | goto nla_put_failure; |
---|
2016 | 1999 | |
---|
.. | .. |
---|
2101 | 2084 | { |
---|
2102 | 2085 | struct nlattr *attrs[NL802154_SECLEVEL_ATTR_MAX + 1]; |
---|
2103 | 2086 | |
---|
2104 | | - if (!nla || nla_parse_nested(attrs, NL802154_SECLEVEL_ATTR_MAX, |
---|
2105 | | - nla, nl802154_seclevel_policy, NULL)) |
---|
| 2087 | + if (!nla || nla_parse_nested_deprecated(attrs, NL802154_SECLEVEL_ATTR_MAX, nla, nl802154_seclevel_policy, NULL)) |
---|
2106 | 2088 | return -EINVAL; |
---|
2107 | 2089 | |
---|
2108 | 2090 | memset(sl, 0, sizeof(*sl)); |
---|
.. | .. |
---|
2262 | 2244 | static const struct genl_ops nl802154_ops[] = { |
---|
2263 | 2245 | { |
---|
2264 | 2246 | .cmd = NL802154_CMD_GET_WPAN_PHY, |
---|
| 2247 | + .validate = GENL_DONT_VALIDATE_STRICT | |
---|
| 2248 | + GENL_DONT_VALIDATE_DUMP_STRICT, |
---|
2265 | 2249 | .doit = nl802154_get_wpan_phy, |
---|
2266 | 2250 | .dumpit = nl802154_dump_wpan_phy, |
---|
2267 | 2251 | .done = nl802154_dump_wpan_phy_done, |
---|
2268 | | - .policy = nl802154_policy, |
---|
2269 | 2252 | /* can be retrieved by unprivileged users */ |
---|
2270 | 2253 | .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | |
---|
2271 | 2254 | NL802154_FLAG_NEED_RTNL, |
---|
2272 | 2255 | }, |
---|
2273 | 2256 | { |
---|
2274 | 2257 | .cmd = NL802154_CMD_GET_INTERFACE, |
---|
| 2258 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2275 | 2259 | .doit = nl802154_get_interface, |
---|
2276 | 2260 | .dumpit = nl802154_dump_interface, |
---|
2277 | | - .policy = nl802154_policy, |
---|
2278 | 2261 | /* can be retrieved by unprivileged users */ |
---|
2279 | 2262 | .internal_flags = NL802154_FLAG_NEED_WPAN_DEV | |
---|
2280 | 2263 | NL802154_FLAG_NEED_RTNL, |
---|
2281 | 2264 | }, |
---|
2282 | 2265 | { |
---|
2283 | 2266 | .cmd = NL802154_CMD_NEW_INTERFACE, |
---|
| 2267 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2284 | 2268 | .doit = nl802154_new_interface, |
---|
2285 | | - .policy = nl802154_policy, |
---|
2286 | 2269 | .flags = GENL_ADMIN_PERM, |
---|
2287 | 2270 | .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | |
---|
2288 | 2271 | NL802154_FLAG_NEED_RTNL, |
---|
2289 | 2272 | }, |
---|
2290 | 2273 | { |
---|
2291 | 2274 | .cmd = NL802154_CMD_DEL_INTERFACE, |
---|
| 2275 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2292 | 2276 | .doit = nl802154_del_interface, |
---|
2293 | | - .policy = nl802154_policy, |
---|
2294 | 2277 | .flags = GENL_ADMIN_PERM, |
---|
2295 | 2278 | .internal_flags = NL802154_FLAG_NEED_WPAN_DEV | |
---|
2296 | 2279 | NL802154_FLAG_NEED_RTNL, |
---|
2297 | 2280 | }, |
---|
2298 | 2281 | { |
---|
2299 | 2282 | .cmd = NL802154_CMD_SET_CHANNEL, |
---|
| 2283 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2300 | 2284 | .doit = nl802154_set_channel, |
---|
2301 | | - .policy = nl802154_policy, |
---|
2302 | 2285 | .flags = GENL_ADMIN_PERM, |
---|
2303 | 2286 | .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | |
---|
2304 | 2287 | NL802154_FLAG_NEED_RTNL, |
---|
2305 | 2288 | }, |
---|
2306 | 2289 | { |
---|
2307 | 2290 | .cmd = NL802154_CMD_SET_CCA_MODE, |
---|
| 2291 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2308 | 2292 | .doit = nl802154_set_cca_mode, |
---|
2309 | | - .policy = nl802154_policy, |
---|
2310 | 2293 | .flags = GENL_ADMIN_PERM, |
---|
2311 | 2294 | .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | |
---|
2312 | 2295 | NL802154_FLAG_NEED_RTNL, |
---|
2313 | 2296 | }, |
---|
2314 | 2297 | { |
---|
2315 | 2298 | .cmd = NL802154_CMD_SET_CCA_ED_LEVEL, |
---|
| 2299 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2316 | 2300 | .doit = nl802154_set_cca_ed_level, |
---|
2317 | | - .policy = nl802154_policy, |
---|
2318 | 2301 | .flags = GENL_ADMIN_PERM, |
---|
2319 | 2302 | .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | |
---|
2320 | 2303 | NL802154_FLAG_NEED_RTNL, |
---|
2321 | 2304 | }, |
---|
2322 | 2305 | { |
---|
2323 | 2306 | .cmd = NL802154_CMD_SET_TX_POWER, |
---|
| 2307 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2324 | 2308 | .doit = nl802154_set_tx_power, |
---|
2325 | | - .policy = nl802154_policy, |
---|
2326 | 2309 | .flags = GENL_ADMIN_PERM, |
---|
2327 | 2310 | .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | |
---|
2328 | 2311 | NL802154_FLAG_NEED_RTNL, |
---|
2329 | 2312 | }, |
---|
2330 | 2313 | { |
---|
2331 | 2314 | .cmd = NL802154_CMD_SET_WPAN_PHY_NETNS, |
---|
| 2315 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2332 | 2316 | .doit = nl802154_wpan_phy_netns, |
---|
2333 | | - .policy = nl802154_policy, |
---|
2334 | 2317 | .flags = GENL_ADMIN_PERM, |
---|
2335 | 2318 | .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | |
---|
2336 | 2319 | NL802154_FLAG_NEED_RTNL, |
---|
2337 | 2320 | }, |
---|
2338 | 2321 | { |
---|
2339 | 2322 | .cmd = NL802154_CMD_SET_PAN_ID, |
---|
| 2323 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2340 | 2324 | .doit = nl802154_set_pan_id, |
---|
2341 | | - .policy = nl802154_policy, |
---|
2342 | 2325 | .flags = GENL_ADMIN_PERM, |
---|
2343 | 2326 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2344 | 2327 | NL802154_FLAG_NEED_RTNL, |
---|
2345 | 2328 | }, |
---|
2346 | 2329 | { |
---|
2347 | 2330 | .cmd = NL802154_CMD_SET_SHORT_ADDR, |
---|
| 2331 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2348 | 2332 | .doit = nl802154_set_short_addr, |
---|
2349 | | - .policy = nl802154_policy, |
---|
2350 | 2333 | .flags = GENL_ADMIN_PERM, |
---|
2351 | 2334 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2352 | 2335 | NL802154_FLAG_NEED_RTNL, |
---|
2353 | 2336 | }, |
---|
2354 | 2337 | { |
---|
2355 | 2338 | .cmd = NL802154_CMD_SET_BACKOFF_EXPONENT, |
---|
| 2339 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2356 | 2340 | .doit = nl802154_set_backoff_exponent, |
---|
2357 | | - .policy = nl802154_policy, |
---|
2358 | 2341 | .flags = GENL_ADMIN_PERM, |
---|
2359 | 2342 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2360 | 2343 | NL802154_FLAG_NEED_RTNL, |
---|
2361 | 2344 | }, |
---|
2362 | 2345 | { |
---|
2363 | 2346 | .cmd = NL802154_CMD_SET_MAX_CSMA_BACKOFFS, |
---|
| 2347 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2364 | 2348 | .doit = nl802154_set_max_csma_backoffs, |
---|
2365 | | - .policy = nl802154_policy, |
---|
2366 | 2349 | .flags = GENL_ADMIN_PERM, |
---|
2367 | 2350 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2368 | 2351 | NL802154_FLAG_NEED_RTNL, |
---|
2369 | 2352 | }, |
---|
2370 | 2353 | { |
---|
2371 | 2354 | .cmd = NL802154_CMD_SET_MAX_FRAME_RETRIES, |
---|
| 2355 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2372 | 2356 | .doit = nl802154_set_max_frame_retries, |
---|
2373 | | - .policy = nl802154_policy, |
---|
2374 | 2357 | .flags = GENL_ADMIN_PERM, |
---|
2375 | 2358 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2376 | 2359 | NL802154_FLAG_NEED_RTNL, |
---|
2377 | 2360 | }, |
---|
2378 | 2361 | { |
---|
2379 | 2362 | .cmd = NL802154_CMD_SET_LBT_MODE, |
---|
| 2363 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2380 | 2364 | .doit = nl802154_set_lbt_mode, |
---|
2381 | | - .policy = nl802154_policy, |
---|
2382 | 2365 | .flags = GENL_ADMIN_PERM, |
---|
2383 | 2366 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2384 | 2367 | NL802154_FLAG_NEED_RTNL, |
---|
2385 | 2368 | }, |
---|
2386 | 2369 | { |
---|
2387 | 2370 | .cmd = NL802154_CMD_SET_ACKREQ_DEFAULT, |
---|
| 2371 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2388 | 2372 | .doit = nl802154_set_ackreq_default, |
---|
2389 | | - .policy = nl802154_policy, |
---|
2390 | 2373 | .flags = GENL_ADMIN_PERM, |
---|
2391 | 2374 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2392 | 2375 | NL802154_FLAG_NEED_RTNL, |
---|
.. | .. |
---|
2394 | 2377 | #ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL |
---|
2395 | 2378 | { |
---|
2396 | 2379 | .cmd = NL802154_CMD_SET_SEC_PARAMS, |
---|
| 2380 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2397 | 2381 | .doit = nl802154_set_llsec_params, |
---|
2398 | | - .policy = nl802154_policy, |
---|
2399 | 2382 | .flags = GENL_ADMIN_PERM, |
---|
2400 | 2383 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2401 | 2384 | NL802154_FLAG_NEED_RTNL, |
---|
2402 | 2385 | }, |
---|
2403 | 2386 | { |
---|
2404 | 2387 | .cmd = NL802154_CMD_GET_SEC_KEY, |
---|
| 2388 | + .validate = GENL_DONT_VALIDATE_STRICT | |
---|
| 2389 | + GENL_DONT_VALIDATE_DUMP_STRICT, |
---|
2405 | 2390 | /* TODO .doit by matching key id? */ |
---|
2406 | 2391 | .dumpit = nl802154_dump_llsec_key, |
---|
2407 | | - .policy = nl802154_policy, |
---|
2408 | 2392 | .flags = GENL_ADMIN_PERM, |
---|
2409 | 2393 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2410 | 2394 | NL802154_FLAG_NEED_RTNL, |
---|
2411 | 2395 | }, |
---|
2412 | 2396 | { |
---|
2413 | 2397 | .cmd = NL802154_CMD_NEW_SEC_KEY, |
---|
| 2398 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2414 | 2399 | .doit = nl802154_add_llsec_key, |
---|
2415 | | - .policy = nl802154_policy, |
---|
2416 | 2400 | .flags = GENL_ADMIN_PERM, |
---|
2417 | 2401 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2418 | 2402 | NL802154_FLAG_NEED_RTNL, |
---|
2419 | 2403 | }, |
---|
2420 | 2404 | { |
---|
2421 | 2405 | .cmd = NL802154_CMD_DEL_SEC_KEY, |
---|
| 2406 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2422 | 2407 | .doit = nl802154_del_llsec_key, |
---|
2423 | | - .policy = nl802154_policy, |
---|
2424 | 2408 | .flags = GENL_ADMIN_PERM, |
---|
2425 | 2409 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2426 | 2410 | NL802154_FLAG_NEED_RTNL, |
---|
.. | .. |
---|
2428 | 2412 | /* TODO unique identifier must short+pan OR extended_addr */ |
---|
2429 | 2413 | { |
---|
2430 | 2414 | .cmd = NL802154_CMD_GET_SEC_DEV, |
---|
| 2415 | + .validate = GENL_DONT_VALIDATE_STRICT | |
---|
| 2416 | + GENL_DONT_VALIDATE_DUMP_STRICT, |
---|
2431 | 2417 | /* TODO .doit by matching extended_addr? */ |
---|
2432 | 2418 | .dumpit = nl802154_dump_llsec_dev, |
---|
2433 | | - .policy = nl802154_policy, |
---|
2434 | 2419 | .flags = GENL_ADMIN_PERM, |
---|
2435 | 2420 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2436 | 2421 | NL802154_FLAG_NEED_RTNL, |
---|
2437 | 2422 | }, |
---|
2438 | 2423 | { |
---|
2439 | 2424 | .cmd = NL802154_CMD_NEW_SEC_DEV, |
---|
| 2425 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2440 | 2426 | .doit = nl802154_add_llsec_dev, |
---|
2441 | | - .policy = nl802154_policy, |
---|
2442 | 2427 | .flags = GENL_ADMIN_PERM, |
---|
2443 | 2428 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2444 | 2429 | NL802154_FLAG_NEED_RTNL, |
---|
2445 | 2430 | }, |
---|
2446 | 2431 | { |
---|
2447 | 2432 | .cmd = NL802154_CMD_DEL_SEC_DEV, |
---|
| 2433 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2448 | 2434 | .doit = nl802154_del_llsec_dev, |
---|
2449 | | - .policy = nl802154_policy, |
---|
2450 | 2435 | .flags = GENL_ADMIN_PERM, |
---|
2451 | 2436 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2452 | 2437 | NL802154_FLAG_NEED_RTNL, |
---|
.. | .. |
---|
2454 | 2439 | /* TODO remove complete devkey, put it as nested? */ |
---|
2455 | 2440 | { |
---|
2456 | 2441 | .cmd = NL802154_CMD_GET_SEC_DEVKEY, |
---|
| 2442 | + .validate = GENL_DONT_VALIDATE_STRICT | |
---|
| 2443 | + GENL_DONT_VALIDATE_DUMP_STRICT, |
---|
2457 | 2444 | /* TODO doit by matching ??? */ |
---|
2458 | 2445 | .dumpit = nl802154_dump_llsec_devkey, |
---|
2459 | | - .policy = nl802154_policy, |
---|
2460 | 2446 | .flags = GENL_ADMIN_PERM, |
---|
2461 | 2447 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2462 | 2448 | NL802154_FLAG_NEED_RTNL, |
---|
2463 | 2449 | }, |
---|
2464 | 2450 | { |
---|
2465 | 2451 | .cmd = NL802154_CMD_NEW_SEC_DEVKEY, |
---|
| 2452 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2466 | 2453 | .doit = nl802154_add_llsec_devkey, |
---|
2467 | | - .policy = nl802154_policy, |
---|
2468 | 2454 | .flags = GENL_ADMIN_PERM, |
---|
2469 | 2455 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2470 | 2456 | NL802154_FLAG_NEED_RTNL, |
---|
2471 | 2457 | }, |
---|
2472 | 2458 | { |
---|
2473 | 2459 | .cmd = NL802154_CMD_DEL_SEC_DEVKEY, |
---|
| 2460 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2474 | 2461 | .doit = nl802154_del_llsec_devkey, |
---|
2475 | | - .policy = nl802154_policy, |
---|
2476 | 2462 | .flags = GENL_ADMIN_PERM, |
---|
2477 | 2463 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2478 | 2464 | NL802154_FLAG_NEED_RTNL, |
---|
2479 | 2465 | }, |
---|
2480 | 2466 | { |
---|
2481 | 2467 | .cmd = NL802154_CMD_GET_SEC_LEVEL, |
---|
| 2468 | + .validate = GENL_DONT_VALIDATE_STRICT | |
---|
| 2469 | + GENL_DONT_VALIDATE_DUMP_STRICT, |
---|
2482 | 2470 | /* TODO .doit by matching frame_type? */ |
---|
2483 | 2471 | .dumpit = nl802154_dump_llsec_seclevel, |
---|
2484 | | - .policy = nl802154_policy, |
---|
2485 | 2472 | .flags = GENL_ADMIN_PERM, |
---|
2486 | 2473 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2487 | 2474 | NL802154_FLAG_NEED_RTNL, |
---|
2488 | 2475 | }, |
---|
2489 | 2476 | { |
---|
2490 | 2477 | .cmd = NL802154_CMD_NEW_SEC_LEVEL, |
---|
| 2478 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2491 | 2479 | .doit = nl802154_add_llsec_seclevel, |
---|
2492 | | - .policy = nl802154_policy, |
---|
2493 | 2480 | .flags = GENL_ADMIN_PERM, |
---|
2494 | 2481 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2495 | 2482 | NL802154_FLAG_NEED_RTNL, |
---|
2496 | 2483 | }, |
---|
2497 | 2484 | { |
---|
2498 | 2485 | .cmd = NL802154_CMD_DEL_SEC_LEVEL, |
---|
| 2486 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
2499 | 2487 | /* TODO match frame_type only? */ |
---|
2500 | 2488 | .doit = nl802154_del_llsec_seclevel, |
---|
2501 | | - .policy = nl802154_policy, |
---|
2502 | 2489 | .flags = GENL_ADMIN_PERM, |
---|
2503 | 2490 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
---|
2504 | 2491 | NL802154_FLAG_NEED_RTNL, |
---|
.. | .. |
---|
2511 | 2498 | .hdrsize = 0, /* no private header */ |
---|
2512 | 2499 | .version = 1, /* no particular meaning now */ |
---|
2513 | 2500 | .maxattr = NL802154_ATTR_MAX, |
---|
| 2501 | + .policy = nl802154_policy, |
---|
2514 | 2502 | .netnsok = true, |
---|
2515 | 2503 | .pre_doit = nl802154_pre_doit, |
---|
2516 | 2504 | .post_doit = nl802154_post_doit, |
---|