Lines Matching refs:nlh
782 const struct nlmsghdr *nlh, gfp_t flags) in rtnl_notify() argument
786 nlmsg_notify(rtnl, skb, pid, group, nlmsg_report(nlh), flags); in rtnl_notify()
1849 struct nlmsghdr *nlh; in rtnl_fill_ifinfo() local
1853 nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ifm), flags); in rtnl_fill_ifinfo()
1854 if (nlh == NULL) in rtnl_fill_ifinfo()
1857 ifm = nlmsg_data(nlh); in rtnl_fill_ifinfo()
1996 nlmsg_end(skb, nlh); in rtnl_fill_ifinfo()
2002 nlmsg_cancel(skb, nlh); in rtnl_fill_ifinfo()
2201 static int rtnl_valid_dump_ifinfo_req(const struct nlmsghdr *nlh, in rtnl_valid_dump_ifinfo_req() argument
2210 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifm))) { in rtnl_valid_dump_ifinfo_req()
2215 ifm = nlmsg_data(nlh); in rtnl_valid_dump_ifinfo_req()
2226 return nlmsg_parse_deprecated_strict(nlh, sizeof(*ifm), tb, in rtnl_valid_dump_ifinfo_req()
2238 hdrlen = nlmsg_len(nlh) < sizeof(struct ifinfomsg) ? in rtnl_valid_dump_ifinfo_req()
2241 return nlmsg_parse_deprecated(nlh, hdrlen, tb, IFLA_MAX, ifla_policy, in rtnl_valid_dump_ifinfo_req()
2249 const struct nlmsghdr *nlh = cb->nlh; in rtnl_dump_ifinfo() local
2263 err = rtnl_valid_dump_ifinfo_req(nlh, cb->strict_check, tb, extack); in rtnl_dump_ifinfo()
2312 nlh->nlmsg_seq, 0, flags, in rtnl_dump_ifinfo()
3194 static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_setlink() argument
3203 err = nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFLA_MAX, in rtnl_setlink()
3213 ifm = nlmsg_data(nlh); in rtnl_setlink()
3271 int rtnl_delete_link(struct net_device *dev, u32 portid, const struct nlmsghdr *nlh) in rtnl_delete_link() argument
3281 unregister_netdevice_many_notify(&list_kill, portid, nlh); in rtnl_delete_link()
3287 static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_dellink() argument
3299 err = nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFLA_MAX, in rtnl_dellink()
3316 ifm = nlmsg_data(nlh); in rtnl_dellink()
3333 err = rtnl_delete_link(dev, portid, nlh); in rtnl_dellink()
3343 u32 portid, const struct nlmsghdr *nlh) in rtnl_configure_link() argument
3357 __dev_notify_flags(dev, old_flags, (old_flags ^ dev->flags), portid, nlh); in rtnl_configure_link()
3360 __dev_notify_flags(dev, old_flags, ~0U, portid, nlh); in rtnl_configure_link()
3487 const struct nlmsghdr *nlh, in rtnl_newlink_create() argument
3547 err = rtnl_configure_link(dev, ifm, portid, nlh); in rtnl_newlink_create()
3583 static int __rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, in __rtnl_newlink() argument
3604 err = nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFLA_MAX, in __rtnl_newlink()
3613 ifm = nlmsg_data(nlh); in __rtnl_newlink()
3694 if (nlh->nlmsg_flags & NLM_F_EXCL) in __rtnl_newlink()
3696 if (nlh->nlmsg_flags & NLM_F_REPLACE) in __rtnl_newlink()
3728 if (!(nlh->nlmsg_flags & NLM_F_CREATE)) { in __rtnl_newlink()
3759 return rtnl_newlink_create(skb, ifm, ops, nlh, tb, data, extack); in __rtnl_newlink()
3762 static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_newlink() argument
3772 ret = __rtnl_newlink(skb, nlh, tbs, extack); in rtnl_newlink()
3778 const struct nlmsghdr *nlh, in rtnl_valid_getlink_req() argument
3785 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifm))) { in rtnl_valid_getlink_req()
3791 return nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFLA_MAX, in rtnl_valid_getlink_req()
3794 ifm = nlmsg_data(nlh); in rtnl_valid_getlink_req()
3801 err = nlmsg_parse_deprecated_strict(nlh, sizeof(*ifm), tb, IFLA_MAX, in rtnl_valid_getlink_req()
3825 static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_getlink() argument
3838 err = rtnl_valid_getlink_req(skb, nlh, tb, extack); in rtnl_getlink()
3857 ifm = nlmsg_data(nlh); in rtnl_getlink()
3884 nlh->nlmsg_seq, 0, 0, ext_filter_mask, in rtnl_getlink()
3941 static int rtnl_linkprop(int cmd, struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_linkprop() argument
3952 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, extack); in rtnl_linkprop()
3960 ifm = nlmsg_data(nlh); in rtnl_linkprop()
3989 static int rtnl_newlinkprop(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_newlinkprop() argument
3992 return rtnl_linkprop(RTM_NEWLINKPROP, skb, nlh, extack); in rtnl_newlinkprop()
3995 static int rtnl_dellinkprop(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_dellinkprop() argument
3998 return rtnl_linkprop(RTM_DELLINKPROP, skb, nlh, extack); in rtnl_dellinkprop()
4002 struct nlmsghdr *nlh) in rtnl_calcit() argument
4012 hdrlen = nlmsg_len(nlh) < sizeof(struct ifinfomsg) ? in rtnl_calcit()
4015 if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen)) in rtnl_calcit()
4019 nlmsg_attrdata(nlh, hdrlen), in rtnl_calcit()
4020 nlmsg_attrlen(nlh, hdrlen), rem) { in rtnl_calcit()
4045 int type = cb->nlh->nlmsg_type - RTM_BASE; in rtnl_dump_all()
4092 const struct nlmsghdr *nlh) in rtmsg_ifinfo_build_skb() argument
4103 if (nlmsg_report(nlh)) in rtmsg_ifinfo_build_skb()
4104 seq = nlmsg_seq(nlh); in rtmsg_ifinfo_build_skb()
4124 u32 portid, const struct nlmsghdr *nlh) in rtmsg_ifinfo_send() argument
4128 rtnl_notify(skb, net, portid, RTNLGRP_LINK, nlh, flags); in rtmsg_ifinfo_send()
4134 u32 portid, const struct nlmsghdr *nlh) in rtmsg_ifinfo_event() argument
4142 new_ifindex, portid, nlh); in rtmsg_ifinfo_event()
4144 rtmsg_ifinfo_send(skb, dev, flags, portid, nlh); in rtmsg_ifinfo_event()
4148 gfp_t flags, u32 portid, const struct nlmsghdr *nlh) in rtmsg_ifinfo() argument
4151 NULL, 0, portid, nlh); in rtmsg_ifinfo()
4167 struct nlmsghdr *nlh; in nlmsg_populate_fdb_fill() local
4170 nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndm), nlflags); in nlmsg_populate_fdb_fill()
4171 if (!nlh) in nlmsg_populate_fdb_fill()
4174 ndm = nlmsg_data(nlh); in nlmsg_populate_fdb_fill()
4189 nlmsg_end(skb, nlh); in nlmsg_populate_fdb_fill()
4193 nlmsg_cancel(skb, nlh); in nlmsg_populate_fdb_fill()
4293 static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_fdb_add() argument
4304 err = nlmsg_parse_deprecated(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, in rtnl_fdb_add()
4309 ndm = nlmsg_data(nlh); in rtnl_fdb_add()
4346 nlh->nlmsg_flags, extack); in rtnl_fdb_add()
4358 nlh->nlmsg_flags, in rtnl_fdb_add()
4362 nlh->nlmsg_flags); in rtnl_fdb_add()
4401 static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_fdb_del() argument
4404 bool del_bulk = !!(nlh->nlmsg_flags & NLM_F_BULK); in rtnl_fdb_del()
4418 err = nlmsg_parse_deprecated(nlh, sizeof(*ndm), tb, NDA_MAX, in rtnl_fdb_del()
4424 err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, extack); in rtnl_fdb_del()
4429 ndm = nlmsg_data(nlh); in rtnl_fdb_del()
4471 err = ops->ndo_fdb_del_bulk(nlh, dev, extack); in rtnl_fdb_del()
4492 err = ops->ndo_fdb_del_bulk(nlh, dev, extack); in rtnl_fdb_del()
4517 seq = cb->nlh->nlmsg_seq; in nlmsg_populate_fdb()
4568 static int valid_fdb_dump_strict(const struct nlmsghdr *nlh, in valid_fdb_dump_strict() argument
4576 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ndm))) { in valid_fdb_dump_strict()
4581 ndm = nlmsg_data(nlh); in valid_fdb_dump_strict()
4588 err = nlmsg_parse_deprecated_strict(nlh, sizeof(struct ndmsg), tb, in valid_fdb_dump_strict()
4622 static int valid_fdb_dump_legacy(const struct nlmsghdr *nlh, in valid_fdb_dump_legacy() argument
4636 if (nlmsg_len(nlh) != sizeof(struct ndmsg) && in valid_fdb_dump_legacy()
4637 (nlmsg_len(nlh) != sizeof(struct ndmsg) + in valid_fdb_dump_legacy()
4641 err = nlmsg_parse_deprecated(nlh, sizeof(struct ifinfomsg), in valid_fdb_dump_legacy()
4651 ifm = nlmsg_data(nlh); in valid_fdb_dump_legacy()
4673 err = valid_fdb_dump_strict(cb->nlh, &br_idx, &brport_idx, in rtnl_fdb_dump()
4676 err = valid_fdb_dump_legacy(cb->nlh, &br_idx, &brport_idx, in rtnl_fdb_dump()
4757 static int valid_fdb_get_strict(const struct nlmsghdr *nlh, in valid_fdb_get_strict() argument
4765 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ndm))) { in valid_fdb_get_strict()
4770 ndm = nlmsg_data(nlh); in valid_fdb_get_strict()
4782 err = nlmsg_parse_deprecated_strict(nlh, sizeof(struct ndmsg), tb, in valid_fdb_get_strict()
4820 static int rtnl_fdb_get(struct sk_buff *in_skb, struct nlmsghdr *nlh, in rtnl_fdb_get() argument
4835 err = valid_fdb_get_strict(nlh, tb, &ndm_flags, &br_idx, in rtnl_fdb_get()
4906 nlh->nlmsg_seq, extack); in rtnl_fdb_get()
4932 struct nlmsghdr *nlh; in ndo_dflt_bridge_getlink() local
4940 nlh = nlmsg_put(skb, pid, seq, RTM_NEWLINK, sizeof(*ifm), nlflags); in ndo_dflt_bridge_getlink()
4941 if (nlh == NULL) in ndo_dflt_bridge_getlink()
4944 ifm = nlmsg_data(nlh); in ndo_dflt_bridge_getlink()
5019 nlmsg_end(skb, nlh); in ndo_dflt_bridge_getlink()
5022 nlmsg_cancel(skb, nlh); in ndo_dflt_bridge_getlink()
5027 static int valid_bridge_getlink_req(const struct nlmsghdr *nlh, in valid_bridge_getlink_req() argument
5037 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifm))) { in valid_bridge_getlink_req()
5042 ifm = nlmsg_data(nlh); in valid_bridge_getlink_req()
5049 err = nlmsg_parse_deprecated_strict(nlh, in valid_bridge_getlink_req()
5054 err = nlmsg_parse_deprecated(nlh, sizeof(struct ifinfomsg), in valid_bridge_getlink_req()
5083 const struct nlmsghdr *nlh = cb->nlh; in rtnl_bridge_getlink() local
5088 u32 seq = nlh->nlmsg_seq; in rtnl_bridge_getlink()
5092 err = valid_bridge_getlink_req(nlh, cb->strict_check, &filter_mask, in rtnl_bridge_getlink()
5192 static int rtnl_bridge_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_bridge_setlink() argument
5202 if (nlmsg_len(nlh) < sizeof(*ifm)) in rtnl_bridge_setlink()
5205 ifm = nlmsg_data(nlh); in rtnl_bridge_setlink()
5215 br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC); in rtnl_bridge_setlink()
5241 err = br_dev->netdev_ops->ndo_bridge_setlink(dev, nlh, flags, in rtnl_bridge_setlink()
5253 err = dev->netdev_ops->ndo_bridge_setlink(dev, nlh, in rtnl_bridge_setlink()
5272 static int rtnl_bridge_dellink(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_bridge_dellink() argument
5283 if (nlmsg_len(nlh) < sizeof(*ifm)) in rtnl_bridge_dellink()
5286 ifm = nlmsg_data(nlh); in rtnl_bridge_dellink()
5296 br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC); in rtnl_bridge_dellink()
5317 err = br_dev->netdev_ops->ndo_bridge_dellink(dev, nlh, flags); in rtnl_bridge_dellink()
5328 err = dev->netdev_ops->ndo_bridge_dellink(dev, nlh, in rtnl_bridge_dellink()
5629 struct nlmsghdr *nlh; in rtnl_fill_statsinfo() local
5636 nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ifsm), flags); in rtnl_fill_statsinfo()
5637 if (!nlh) in rtnl_fill_statsinfo()
5640 ifsm = nlmsg_data(nlh); in rtnl_fill_statsinfo()
5773 nlmsg_end(skb, nlh); in rtnl_fill_statsinfo()
5780 nlmsg_cancel(skb, nlh); in rtnl_fill_statsinfo()
5782 nlmsg_end(skb, nlh); in rtnl_fill_statsinfo()
5901 static int rtnl_stats_get_parse(const struct nlmsghdr *nlh, in rtnl_stats_get_parse() argument
5914 err = nlmsg_parse(nlh, sizeof(struct if_stats_msg), tb, in rtnl_stats_get_parse()
5929 static int rtnl_valid_stats_req(const struct nlmsghdr *nlh, bool strict_check, in rtnl_valid_stats_req() argument
5934 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifsm))) { in rtnl_valid_stats_req()
5942 ifsm = nlmsg_data(nlh); in rtnl_valid_stats_req()
5959 static int rtnl_stats_get(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_stats_get() argument
5970 err = rtnl_valid_stats_req(nlh, netlink_strict_get_check(skb), in rtnl_stats_get()
5975 ifsm = nlmsg_data(nlh); in rtnl_stats_get()
5989 err = rtnl_stats_get_parse(nlh, ifsm->filter_mask, &filters, extack); in rtnl_stats_get()
5998 NETLINK_CB(skb).portid, nlh->nlmsg_seq, 0, in rtnl_stats_get()
6028 err = rtnl_valid_stats_req(cb->nlh, cb->strict_check, true, extack); in rtnl_stats_dump()
6032 ifsm = nlmsg_data(cb->nlh); in rtnl_stats_dump()
6038 err = rtnl_stats_get_parse(cb->nlh, ifsm->filter_mask, &filters, in rtnl_stats_dump()
6046 cb->nlh->nlmsg_seq, 0, in rtnl_stats_dump()
6100 static int rtnl_stats_set(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_stats_set() argument
6112 err = rtnl_valid_stats_req(nlh, netlink_strict_get_check(skb), in rtnl_stats_set()
6117 ifsm = nlmsg_data(nlh); in rtnl_stats_set()
6136 err = nlmsg_parse(nlh, sizeof(*ifsm), tb, IFLA_STATS_GETSET_MAX, in rtnl_stats_set()
6166 static int rtnl_mdb_valid_dump_req(const struct nlmsghdr *nlh, in rtnl_mdb_valid_dump_req() argument
6171 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*bpm))) { in rtnl_mdb_valid_dump_req()
6176 bpm = nlmsg_data(nlh); in rtnl_mdb_valid_dump_req()
6181 if (nlmsg_attrlen(nlh, sizeof(*bpm))) { in rtnl_mdb_valid_dump_req()
6204 err = rtnl_mdb_valid_dump_req(cb->nlh, cb->extack); in rtnl_mdb_dump()
6283 static int rtnl_mdb_get(struct sk_buff *in_skb, struct nlmsghdr *nlh, in rtnl_mdb_get() argument
6292 err = nlmsg_parse(nlh, sizeof(struct br_port_msg), tb, in rtnl_mdb_get()
6297 bpm = nlmsg_data(nlh); in rtnl_mdb_get()
6320 nlh->nlmsg_seq, extack); in rtnl_mdb_get()
6386 static int rtnl_mdb_add(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_mdb_add() argument
6395 err = nlmsg_parse_deprecated(nlh, sizeof(*bpm), tb, in rtnl_mdb_add()
6400 bpm = nlmsg_data(nlh); in rtnl_mdb_add()
6422 return dev->netdev_ops->ndo_mdb_add(dev, tb, nlh->nlmsg_flags, extack); in rtnl_mdb_add()
6466 static int rtnl_mdb_del(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_mdb_del() argument
6469 bool del_bulk = !!(nlh->nlmsg_flags & NLM_F_BULK); in rtnl_mdb_del()
6477 err = nlmsg_parse_deprecated(nlh, sizeof(*bpm), tb, in rtnl_mdb_del()
6481 err = nlmsg_parse(nlh, sizeof(*bpm), tb, MDBA_SET_ENTRY_MAX, in rtnl_mdb_del()
6486 bpm = nlmsg_data(nlh); in rtnl_mdb_del()
6554 const struct nlmsghdr *nlh, in rtnetlink_dump_start() argument
6564 return netlink_dump_start(ssk, skb, nlh, control); in rtnetlink_dump_start()
6567 static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnetlink_rcv_msg() argument
6580 type = nlh->nlmsg_type; in rtnetlink_rcv_msg()
6587 if (nlmsg_len(nlh) < sizeof(struct rtgenmsg)) in rtnetlink_rcv_msg()
6590 family = ((struct rtgenmsg *)nlmsg_data(nlh))->rtgen_family; in rtnetlink_rcv_msg()
6597 if (kind == RTNL_KIND_GET && (nlh->nlmsg_flags & NLM_F_DUMP)) { in rtnetlink_rcv_msg()
6614 min_dump_alloc = rtnl_calcit(skb, nlh); in rtnetlink_rcv_msg()
6631 err = rtnetlink_dump_start(rtnl, skb, nlh, &c); in rtnetlink_rcv_msg()
6655 if (kind == RTNL_KIND_DEL && (nlh->nlmsg_flags & NLM_F_BULK) && in rtnetlink_rcv_msg()
6666 err = doit(skb, nlh, extack); in rtnetlink_rcv_msg()
6675 err = link->doit(skb, nlh, extack); in rtnetlink_rcv_msg()