Lines Matching refs:nlh

948 		 const struct nlmsghdr *nlh, gfp_t flags)  in rtnl_notify()  argument
952 nlmsg_notify(rtnl, skb, pid, group, nlmsg_report(nlh), flags); in rtnl_notify()
2016 struct nlmsghdr *nlh; in rtnl_fill_ifinfo() local
2020 nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ifm), flags); in rtnl_fill_ifinfo()
2021 if (nlh == NULL) in rtnl_fill_ifinfo()
2024 ifm = nlmsg_data(nlh); in rtnl_fill_ifinfo()
2165 nlmsg_end(skb, nlh); in rtnl_fill_ifinfo()
2171 nlmsg_cancel(skb, nlh); in rtnl_fill_ifinfo()
2372 static int rtnl_valid_dump_ifinfo_req(const struct nlmsghdr *nlh, in rtnl_valid_dump_ifinfo_req() argument
2381 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifm))) { in rtnl_valid_dump_ifinfo_req()
2386 ifm = nlmsg_data(nlh); in rtnl_valid_dump_ifinfo_req()
2397 return nlmsg_parse_deprecated_strict(nlh, sizeof(*ifm), tb, in rtnl_valid_dump_ifinfo_req()
2409 hdrlen = nlmsg_len(nlh) < sizeof(struct ifinfomsg) ? in rtnl_valid_dump_ifinfo_req()
2412 return nlmsg_parse_deprecated(nlh, hdrlen, tb, IFLA_MAX, ifla_policy, in rtnl_valid_dump_ifinfo_req()
2420 const struct nlmsghdr *nlh = cb->nlh; in rtnl_dump_ifinfo() local
2435 err = rtnl_valid_dump_ifinfo_req(nlh, cb->strict_check, tb, extack); in rtnl_dump_ifinfo()
2487 nlh->nlmsg_seq, 0, flags, in rtnl_dump_ifinfo()
3390 static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_setlink() argument
3393 struct ifinfomsg *ifm = nlmsg_data(nlh); in rtnl_setlink()
3401 err = nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFLA_MAX, in rtnl_setlink()
3476 int rtnl_delete_link(struct net_device *dev, u32 portid, const struct nlmsghdr *nlh) in rtnl_delete_link() argument
3486 unregister_netdevice_many_notify(&list_kill, portid, nlh); in rtnl_delete_link()
3492 static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_dellink() argument
3495 struct ifinfomsg *ifm = nlmsg_data(nlh); in rtnl_dellink()
3504 err = nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFLA_MAX, in rtnl_dellink()
3528 err = rtnl_delete_link(dev, portid, nlh); in rtnl_dellink()
3545 u32 portid, const struct nlmsghdr *nlh) in rtnl_configure_link() argument
3559 __dev_notify_flags(dev, old_flags, (old_flags ^ dev->flags), portid, nlh); in rtnl_configure_link()
3562 __dev_notify_flags(dev, old_flags, ~0U, portid, nlh); in rtnl_configure_link()
3671 static int rtnl_changelink(const struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_changelink() argument
3683 if (nlh->nlmsg_flags & NLM_F_EXCL) in rtnl_changelink()
3686 if (nlh->nlmsg_flags & NLM_F_REPLACE) in rtnl_changelink()
3733 return do_setlink(skb, dev, tgt_net, nlmsg_data(nlh), extack, tb, status); in rtnl_changelink()
3760 const struct nlmsghdr *nlh, in rtnl_newlink_create() argument
3804 err = rtnl_configure_link(dev, ifm, portid, nlh); in rtnl_newlink_create()
3855 static int __rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, in __rtnl_newlink() argument
3869 ifm = nlmsg_data(nlh); in __rtnl_newlink()
3885 return rtnl_changelink(skb, nlh, ops, dev, tgt_net, tbs, data, extack); in __rtnl_newlink()
3887 if (!(nlh->nlmsg_flags & NLM_F_CREATE)) { in __rtnl_newlink()
3907 return rtnl_newlink_create(skb, ifm, ops, tgt_net, link_net, peer_net, nlh, in __rtnl_newlink()
3911 static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_newlink() argument
3927 ret = nlmsg_parse_deprecated(nlh, sizeof(struct ifinfomsg), tb, in rtnl_newlink()
4022 ret = __rtnl_newlink(skb, nlh, ops, tgt_net, link_net, peer_net, tbs, data, extack); in rtnl_newlink()
4036 const struct nlmsghdr *nlh, in rtnl_valid_getlink_req() argument
4043 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifm))) { in rtnl_valid_getlink_req()
4049 return nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFLA_MAX, in rtnl_valid_getlink_req()
4052 ifm = nlmsg_data(nlh); in rtnl_valid_getlink_req()
4059 err = nlmsg_parse_deprecated_strict(nlh, sizeof(*ifm), tb, IFLA_MAX, in rtnl_valid_getlink_req()
4083 static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_getlink() argument
4096 err = rtnl_valid_getlink_req(skb, nlh, tb, extack); in rtnl_getlink()
4115 ifm = nlmsg_data(nlh); in rtnl_getlink()
4142 nlh->nlmsg_seq, 0, 0, ext_filter_mask, in rtnl_getlink()
4199 static int rtnl_linkprop(int cmd, struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_linkprop() argument
4210 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, extack); in rtnl_linkprop()
4218 ifm = nlmsg_data(nlh); in rtnl_linkprop()
4247 static int rtnl_newlinkprop(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_newlinkprop() argument
4250 return rtnl_linkprop(RTM_NEWLINKPROP, skb, nlh, extack); in rtnl_newlinkprop()
4253 static int rtnl_dellinkprop(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_dellinkprop() argument
4256 return rtnl_linkprop(RTM_DELLINKPROP, skb, nlh, extack); in rtnl_dellinkprop()
4260 struct nlmsghdr *nlh) in rtnl_calcit() argument
4270 hdrlen = nlmsg_len(nlh) < sizeof(struct ifinfomsg) ? in rtnl_calcit()
4273 if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen)) in rtnl_calcit()
4277 nlmsg_attrdata(nlh, hdrlen), in rtnl_calcit()
4278 nlmsg_attrlen(nlh, hdrlen), rem) { in rtnl_calcit()
4303 int type = cb->nlh->nlmsg_type - RTM_BASE; in rtnl_dump_all()
4350 const struct nlmsghdr *nlh) in rtmsg_ifinfo_build_skb() argument
4361 if (nlmsg_report(nlh)) in rtmsg_ifinfo_build_skb()
4362 seq = nlmsg_seq(nlh); in rtmsg_ifinfo_build_skb()
4382 u32 portid, const struct nlmsghdr *nlh) in rtmsg_ifinfo_send() argument
4386 rtnl_notify(skb, net, portid, RTNLGRP_LINK, nlh, flags); in rtmsg_ifinfo_send()
4392 u32 portid, const struct nlmsghdr *nlh) in rtmsg_ifinfo_event() argument
4400 new_ifindex, portid, nlh); in rtmsg_ifinfo_event()
4402 rtmsg_ifinfo_send(skb, dev, flags, portid, nlh); in rtmsg_ifinfo_event()
4406 gfp_t flags, u32 portid, const struct nlmsghdr *nlh) in rtmsg_ifinfo() argument
4409 NULL, 0, portid, nlh); in rtmsg_ifinfo()
4425 struct nlmsghdr *nlh; in nlmsg_populate_fdb_fill() local
4428 nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndm), nlflags); in nlmsg_populate_fdb_fill()
4429 if (!nlh) in nlmsg_populate_fdb_fill()
4432 ndm = nlmsg_data(nlh); in nlmsg_populate_fdb_fill()
4447 nlmsg_end(skb, nlh); in nlmsg_populate_fdb_fill()
4451 nlmsg_cancel(skb, nlh); in nlmsg_populate_fdb_fill()
4551 static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_fdb_add() argument
4562 err = nlmsg_parse_deprecated(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, in rtnl_fdb_add()
4567 ndm = nlmsg_data(nlh); in rtnl_fdb_add()
4605 nlh->nlmsg_flags, &notified, extack); in rtnl_fdb_add()
4619 nlh->nlmsg_flags, in rtnl_fdb_add()
4623 nlh->nlmsg_flags); in rtnl_fdb_add()
4662 static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_fdb_del() argument
4665 bool del_bulk = !!(nlh->nlmsg_flags & NLM_F_BULK); in rtnl_fdb_del()
4679 err = nlmsg_parse_deprecated(nlh, sizeof(*ndm), tb, NDA_MAX, in rtnl_fdb_del()
4685 err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, extack); in rtnl_fdb_del()
4690 ndm = nlmsg_data(nlh); in rtnl_fdb_del()
4734 err = ops->ndo_fdb_del_bulk(nlh, dev, extack); in rtnl_fdb_del()
4758 err = ops->ndo_fdb_del_bulk(nlh, dev, extack); in rtnl_fdb_del()
4784 seq = cb->nlh->nlmsg_seq; in nlmsg_populate_fdb()
4835 static int valid_fdb_dump_strict(const struct nlmsghdr *nlh, in valid_fdb_dump_strict() argument
4843 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ndm))) { in valid_fdb_dump_strict()
4848 ndm = nlmsg_data(nlh); in valid_fdb_dump_strict()
4855 err = nlmsg_parse_deprecated_strict(nlh, sizeof(struct ndmsg), tb, in valid_fdb_dump_strict()
4889 static int valid_fdb_dump_legacy(const struct nlmsghdr *nlh, in valid_fdb_dump_legacy() argument
4903 if (nlmsg_len(nlh) != sizeof(struct ndmsg) && in valid_fdb_dump_legacy()
4904 (nlmsg_len(nlh) != sizeof(struct ndmsg) + in valid_fdb_dump_legacy()
4908 err = nlmsg_parse_deprecated(nlh, sizeof(struct ifinfomsg), in valid_fdb_dump_legacy()
4918 ifm = nlmsg_data(nlh); in valid_fdb_dump_legacy()
4938 err = valid_fdb_dump_strict(cb->nlh, &br_idx, &brport_idx, in rtnl_fdb_dump()
4941 err = valid_fdb_dump_legacy(cb->nlh, &br_idx, &brport_idx, in rtnl_fdb_dump()
5003 static int valid_fdb_get_strict(const struct nlmsghdr *nlh, in valid_fdb_get_strict() argument
5011 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ndm))) { in valid_fdb_get_strict()
5016 ndm = nlmsg_data(nlh); in valid_fdb_get_strict()
5028 err = nlmsg_parse_deprecated_strict(nlh, sizeof(struct ndmsg), tb, in valid_fdb_get_strict()
5066 static int rtnl_fdb_get(struct sk_buff *in_skb, struct nlmsghdr *nlh, in rtnl_fdb_get() argument
5081 err = valid_fdb_get_strict(nlh, tb, &ndm_flags, &br_idx, in rtnl_fdb_get()
5152 nlh->nlmsg_seq, extack); in rtnl_fdb_get()
5178 struct nlmsghdr *nlh; in ndo_dflt_bridge_getlink() local
5186 nlh = nlmsg_put(skb, pid, seq, RTM_NEWLINK, sizeof(*ifm), nlflags); in ndo_dflt_bridge_getlink()
5187 if (nlh == NULL) in ndo_dflt_bridge_getlink()
5190 ifm = nlmsg_data(nlh); in ndo_dflt_bridge_getlink()
5265 nlmsg_end(skb, nlh); in ndo_dflt_bridge_getlink()
5268 nlmsg_cancel(skb, nlh); in ndo_dflt_bridge_getlink()
5273 static int valid_bridge_getlink_req(const struct nlmsghdr *nlh, in valid_bridge_getlink_req() argument
5283 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifm))) { in valid_bridge_getlink_req()
5288 ifm = nlmsg_data(nlh); in valid_bridge_getlink_req()
5295 err = nlmsg_parse_deprecated_strict(nlh, in valid_bridge_getlink_req()
5300 err = nlmsg_parse_deprecated(nlh, sizeof(struct ifinfomsg), in valid_bridge_getlink_req()
5329 const struct nlmsghdr *nlh = cb->nlh; in rtnl_bridge_getlink() local
5334 u32 seq = nlh->nlmsg_seq; in rtnl_bridge_getlink()
5338 err = valid_bridge_getlink_req(nlh, cb->strict_check, &filter_mask, in rtnl_bridge_getlink()
5438 static int rtnl_bridge_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_bridge_setlink() argument
5448 if (nlmsg_len(nlh) < sizeof(*ifm)) in rtnl_bridge_setlink()
5451 ifm = nlmsg_data(nlh); in rtnl_bridge_setlink()
5461 br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC); in rtnl_bridge_setlink()
5487 err = br_dev->netdev_ops->ndo_bridge_setlink(dev, nlh, flags, in rtnl_bridge_setlink()
5499 err = dev->netdev_ops->ndo_bridge_setlink(dev, nlh, in rtnl_bridge_setlink()
5518 static int rtnl_bridge_dellink(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_bridge_dellink() argument
5529 if (nlmsg_len(nlh) < sizeof(*ifm)) in rtnl_bridge_dellink()
5532 ifm = nlmsg_data(nlh); in rtnl_bridge_dellink()
5542 br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC); in rtnl_bridge_dellink()
5563 err = br_dev->netdev_ops->ndo_bridge_dellink(dev, nlh, flags); in rtnl_bridge_dellink()
5574 err = dev->netdev_ops->ndo_bridge_dellink(dev, nlh, in rtnl_bridge_dellink()
5875 struct nlmsghdr *nlh; in rtnl_fill_statsinfo() local
5882 nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ifsm), flags); in rtnl_fill_statsinfo()
5883 if (!nlh) in rtnl_fill_statsinfo()
5886 ifsm = nlmsg_data(nlh); in rtnl_fill_statsinfo()
6019 nlmsg_end(skb, nlh); in rtnl_fill_statsinfo()
6026 nlmsg_cancel(skb, nlh); in rtnl_fill_statsinfo()
6028 nlmsg_end(skb, nlh); in rtnl_fill_statsinfo()
6147 static int rtnl_stats_get_parse(const struct nlmsghdr *nlh, in rtnl_stats_get_parse() argument
6160 err = nlmsg_parse(nlh, sizeof(struct if_stats_msg), tb, in rtnl_stats_get_parse()
6175 static int rtnl_valid_stats_req(const struct nlmsghdr *nlh, bool strict_check, in rtnl_valid_stats_req() argument
6180 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifsm))) { in rtnl_valid_stats_req()
6188 ifsm = nlmsg_data(nlh); in rtnl_valid_stats_req()
6205 static int rtnl_stats_get(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_stats_get() argument
6216 err = rtnl_valid_stats_req(nlh, netlink_strict_get_check(skb), in rtnl_stats_get()
6221 ifsm = nlmsg_data(nlh); in rtnl_stats_get()
6235 err = rtnl_stats_get_parse(nlh, ifsm->filter_mask, &filters, extack); in rtnl_stats_get()
6244 NETLINK_CB(skb).portid, nlh->nlmsg_seq, 0, in rtnl_stats_get()
6274 err = rtnl_valid_stats_req(cb->nlh, cb->strict_check, true, extack); in rtnl_stats_dump()
6278 ifsm = nlmsg_data(cb->nlh); in rtnl_stats_dump()
6284 err = rtnl_stats_get_parse(cb->nlh, ifsm->filter_mask, &filters, in rtnl_stats_dump()
6292 cb->nlh->nlmsg_seq, 0, in rtnl_stats_dump()
6346 static int rtnl_stats_set(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_stats_set() argument
6358 err = rtnl_valid_stats_req(nlh, netlink_strict_get_check(skb), in rtnl_stats_set()
6363 ifsm = nlmsg_data(nlh); in rtnl_stats_set()
6382 err = nlmsg_parse(nlh, sizeof(*ifsm), tb, IFLA_STATS_GETSET_MAX, in rtnl_stats_set()
6412 static int rtnl_mdb_valid_dump_req(const struct nlmsghdr *nlh, in rtnl_mdb_valid_dump_req() argument
6417 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*bpm))) { in rtnl_mdb_valid_dump_req()
6422 bpm = nlmsg_data(nlh); in rtnl_mdb_valid_dump_req()
6427 if (nlmsg_attrlen(nlh, sizeof(*bpm))) { in rtnl_mdb_valid_dump_req()
6450 err = rtnl_mdb_valid_dump_req(cb->nlh, cb->extack); in rtnl_mdb_dump()
6529 static int rtnl_mdb_get(struct sk_buff *in_skb, struct nlmsghdr *nlh, in rtnl_mdb_get() argument
6538 err = nlmsg_parse(nlh, sizeof(struct br_port_msg), tb, in rtnl_mdb_get()
6543 bpm = nlmsg_data(nlh); in rtnl_mdb_get()
6566 nlh->nlmsg_seq, extack); in rtnl_mdb_get()
6632 static int rtnl_mdb_add(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_mdb_add() argument
6641 err = nlmsg_parse_deprecated(nlh, sizeof(*bpm), tb, in rtnl_mdb_add()
6646 bpm = nlmsg_data(nlh); in rtnl_mdb_add()
6668 return dev->netdev_ops->ndo_mdb_add(dev, tb, nlh->nlmsg_flags, extack); in rtnl_mdb_add()
6712 static int rtnl_mdb_del(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_mdb_del() argument
6715 bool del_bulk = !!(nlh->nlmsg_flags & NLM_F_BULK); in rtnl_mdb_del()
6723 err = nlmsg_parse_deprecated(nlh, sizeof(*bpm), tb, in rtnl_mdb_del()
6727 err = nlmsg_parse(nlh, sizeof(*bpm), tb, MDBA_SET_ENTRY_MAX, in rtnl_mdb_del()
6732 bpm = nlmsg_data(nlh); in rtnl_mdb_del()
6800 const struct nlmsghdr *nlh, in rtnetlink_dump_start() argument
6810 return netlink_dump_start(ssk, skb, nlh, control); in rtnetlink_dump_start()
6813 static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnetlink_rcv_msg() argument
6826 type = nlh->nlmsg_type; in rtnetlink_rcv_msg()
6833 if (nlmsg_len(nlh) < sizeof(struct rtgenmsg)) in rtnetlink_rcv_msg()
6836 family = ((struct rtgenmsg *)nlmsg_data(nlh))->rtgen_family; in rtnetlink_rcv_msg()
6843 if (kind == RTNL_KIND_GET && (nlh->nlmsg_flags & NLM_F_DUMP)) { in rtnetlink_rcv_msg()
6860 min_dump_alloc = rtnl_calcit(skb, nlh); in rtnetlink_rcv_msg()
6877 err = rtnetlink_dump_start(rtnl, skb, nlh, &c); in rtnetlink_rcv_msg()
6901 if (kind == RTNL_KIND_DEL && (nlh->nlmsg_flags & NLM_F_BULK) && in rtnetlink_rcv_msg()
6912 err = doit(skb, nlh, extack); in rtnetlink_rcv_msg()
6921 err = link->doit(skb, nlh, extack); in rtnetlink_rcv_msg()