Lines Matching refs:nlh

763 		 struct nlmsghdr *nlh, gfp_t flags)  in rtnl_notify()  argument
767 nlmsg_notify(rtnl, skb, pid, group, nlmsg_report(nlh), flags); in rtnl_notify()
1739 struct nlmsghdr *nlh; in rtnl_fill_ifinfo() local
1743 nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ifm), flags); in rtnl_fill_ifinfo()
1744 if (nlh == NULL) in rtnl_fill_ifinfo()
1747 ifm = nlmsg_data(nlh); in rtnl_fill_ifinfo()
1868 nlmsg_end(skb, nlh); in rtnl_fill_ifinfo()
1874 nlmsg_cancel(skb, nlh); in rtnl_fill_ifinfo()
2071 static int rtnl_valid_dump_ifinfo_req(const struct nlmsghdr *nlh, in rtnl_valid_dump_ifinfo_req() argument
2080 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifm))) { in rtnl_valid_dump_ifinfo_req()
2085 ifm = nlmsg_data(nlh); in rtnl_valid_dump_ifinfo_req()
2096 return nlmsg_parse_deprecated_strict(nlh, sizeof(*ifm), tb, in rtnl_valid_dump_ifinfo_req()
2108 hdrlen = nlmsg_len(nlh) < sizeof(struct ifinfomsg) ? in rtnl_valid_dump_ifinfo_req()
2111 return nlmsg_parse_deprecated(nlh, hdrlen, tb, IFLA_MAX, ifla_policy, in rtnl_valid_dump_ifinfo_req()
2118 const struct nlmsghdr *nlh = cb->nlh; in rtnl_dump_ifinfo() local
2136 err = rtnl_valid_dump_ifinfo_req(nlh, cb->strict_check, tb, extack); in rtnl_dump_ifinfo()
2190 nlh->nlmsg_seq, 0, flags, in rtnl_dump_ifinfo()
3040 static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_setlink() argument
3049 err = nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFLA_MAX, in rtnl_setlink()
3059 ifm = nlmsg_data(nlh); in rtnl_setlink()
3129 static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_dellink() argument
3140 err = nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFLA_MAX, in rtnl_dellink()
3157 ifm = nlmsg_data(nlh); in rtnl_dellink()
3408 static int __rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, in __rtnl_newlink() argument
3429 err = nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFLA_MAX, in __rtnl_newlink()
3438 ifm = nlmsg_data(nlh); in __rtnl_newlink()
3520 if (nlh->nlmsg_flags & NLM_F_EXCL) in __rtnl_newlink()
3522 if (nlh->nlmsg_flags & NLM_F_REPLACE) in __rtnl_newlink()
3550 if (!(nlh->nlmsg_flags & NLM_F_CREATE)) { in __rtnl_newlink()
3584 static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_newlink() argument
3594 ret = __rtnl_newlink(skb, nlh, tbs, extack); in rtnl_newlink()
3600 const struct nlmsghdr *nlh, in rtnl_valid_getlink_req() argument
3607 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifm))) { in rtnl_valid_getlink_req()
3613 return nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFLA_MAX, in rtnl_valid_getlink_req()
3616 ifm = nlmsg_data(nlh); in rtnl_valid_getlink_req()
3623 err = nlmsg_parse_deprecated_strict(nlh, sizeof(*ifm), tb, IFLA_MAX, in rtnl_valid_getlink_req()
3647 static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_getlink() argument
3660 err = rtnl_valid_getlink_req(skb, nlh, tb, extack); in rtnl_getlink()
3679 ifm = nlmsg_data(nlh); in rtnl_getlink()
3698 nlh->nlmsg_seq, 0, 0, ext_filter_mask, in rtnl_getlink()
3755 static int rtnl_linkprop(int cmd, struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_linkprop() argument
3766 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, extack); in rtnl_linkprop()
3774 ifm = nlmsg_data(nlh); in rtnl_linkprop()
3803 static int rtnl_newlinkprop(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_newlinkprop() argument
3806 return rtnl_linkprop(RTM_NEWLINKPROP, skb, nlh, extack); in rtnl_newlinkprop()
3809 static int rtnl_dellinkprop(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_dellinkprop() argument
3812 return rtnl_linkprop(RTM_DELLINKPROP, skb, nlh, extack); in rtnl_dellinkprop()
3815 static u32 rtnl_calcit(struct sk_buff *skb, struct nlmsghdr *nlh) in rtnl_calcit() argument
3825 hdrlen = nlmsg_len(nlh) < sizeof(struct ifinfomsg) ? in rtnl_calcit()
3828 if (nlmsg_parse_deprecated(nlh, hdrlen, tb, IFLA_MAX, ifla_policy, NULL) >= 0) { in rtnl_calcit()
3853 int type = cb->nlh->nlmsg_type - RTM_BASE; in rtnl_dump_all()
3967 struct nlmsghdr *nlh; in nlmsg_populate_fdb_fill() local
3970 nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndm), nlflags); in nlmsg_populate_fdb_fill()
3971 if (!nlh) in nlmsg_populate_fdb_fill()
3974 ndm = nlmsg_data(nlh); in nlmsg_populate_fdb_fill()
3989 nlmsg_end(skb, nlh); in nlmsg_populate_fdb_fill()
3993 nlmsg_cancel(skb, nlh); in nlmsg_populate_fdb_fill()
4088 static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_fdb_add() argument
4099 err = nlmsg_parse_deprecated(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, in rtnl_fdb_add()
4104 ndm = nlmsg_data(nlh); in rtnl_fdb_add()
4141 nlh->nlmsg_flags, extack); in rtnl_fdb_add()
4153 nlh->nlmsg_flags, in rtnl_fdb_add()
4157 nlh->nlmsg_flags); in rtnl_fdb_add()
4203 static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_fdb_del() argument
4206 bool del_bulk = !!(nlh->nlmsg_flags & NLM_F_BULK); in rtnl_fdb_del()
4220 err = nlmsg_parse_deprecated(nlh, sizeof(*ndm), tb, NDA_MAX, in rtnl_fdb_del()
4223 err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, in rtnl_fdb_del()
4229 ndm = nlmsg_data(nlh); in rtnl_fdb_del()
4319 seq = cb->nlh->nlmsg_seq; in nlmsg_populate_fdb()
4370 static int valid_fdb_dump_strict(const struct nlmsghdr *nlh, in valid_fdb_dump_strict() argument
4378 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ndm))) { in valid_fdb_dump_strict()
4383 ndm = nlmsg_data(nlh); in valid_fdb_dump_strict()
4390 err = nlmsg_parse_deprecated_strict(nlh, sizeof(struct ndmsg), tb, in valid_fdb_dump_strict()
4424 static int valid_fdb_dump_legacy(const struct nlmsghdr *nlh, in valid_fdb_dump_legacy() argument
4438 if (nlmsg_len(nlh) != sizeof(struct ndmsg) && in valid_fdb_dump_legacy()
4439 (nlmsg_len(nlh) != sizeof(struct ndmsg) + in valid_fdb_dump_legacy()
4443 err = nlmsg_parse_deprecated(nlh, sizeof(struct ifinfomsg), in valid_fdb_dump_legacy()
4453 ifm = nlmsg_data(nlh); in valid_fdb_dump_legacy()
4475 err = valid_fdb_dump_strict(cb->nlh, &br_idx, &brport_idx, in rtnl_fdb_dump()
4478 err = valid_fdb_dump_legacy(cb->nlh, &br_idx, &brport_idx, in rtnl_fdb_dump()
4559 static int valid_fdb_get_strict(const struct nlmsghdr *nlh, in valid_fdb_get_strict() argument
4567 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ndm))) { in valid_fdb_get_strict()
4572 ndm = nlmsg_data(nlh); in valid_fdb_get_strict()
4584 err = nlmsg_parse_deprecated_strict(nlh, sizeof(struct ndmsg), tb, in valid_fdb_get_strict()
4622 static int rtnl_fdb_get(struct sk_buff *in_skb, struct nlmsghdr *nlh, in rtnl_fdb_get() argument
4637 err = valid_fdb_get_strict(nlh, tb, &ndm_flags, &br_idx, in rtnl_fdb_get()
4708 nlh->nlmsg_seq, extack); in rtnl_fdb_get()
4734 struct nlmsghdr *nlh; in ndo_dflt_bridge_getlink() local
4742 nlh = nlmsg_put(skb, pid, seq, RTM_NEWLINK, sizeof(*ifm), nlflags); in ndo_dflt_bridge_getlink()
4743 if (nlh == NULL) in ndo_dflt_bridge_getlink()
4746 ifm = nlmsg_data(nlh); in ndo_dflt_bridge_getlink()
4821 nlmsg_end(skb, nlh); in ndo_dflt_bridge_getlink()
4824 nlmsg_cancel(skb, nlh); in ndo_dflt_bridge_getlink()
4829 static int valid_bridge_getlink_req(const struct nlmsghdr *nlh, in valid_bridge_getlink_req() argument
4839 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifm))) { in valid_bridge_getlink_req()
4844 ifm = nlmsg_data(nlh); in valid_bridge_getlink_req()
4851 err = nlmsg_parse_deprecated_strict(nlh, in valid_bridge_getlink_req()
4856 err = nlmsg_parse_deprecated(nlh, sizeof(struct ifinfomsg), in valid_bridge_getlink_req()
4885 const struct nlmsghdr *nlh = cb->nlh; in rtnl_bridge_getlink() local
4890 u32 seq = nlh->nlmsg_seq; in rtnl_bridge_getlink()
4894 err = valid_bridge_getlink_req(nlh, cb->strict_check, &filter_mask, in rtnl_bridge_getlink()
4994 static int rtnl_bridge_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_bridge_setlink() argument
5005 if (nlmsg_len(nlh) < sizeof(*ifm)) in rtnl_bridge_setlink()
5008 ifm = nlmsg_data(nlh); in rtnl_bridge_setlink()
5018 br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC); in rtnl_bridge_setlink()
5040 err = br_dev->netdev_ops->ndo_bridge_setlink(dev, nlh, flags, in rtnl_bridge_setlink()
5052 err = dev->netdev_ops->ndo_bridge_setlink(dev, nlh, in rtnl_bridge_setlink()
5071 static int rtnl_bridge_dellink(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_bridge_dellink() argument
5082 if (nlmsg_len(nlh) < sizeof(*ifm)) in rtnl_bridge_dellink()
5085 ifm = nlmsg_data(nlh); in rtnl_bridge_dellink()
5095 br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC); in rtnl_bridge_dellink()
5117 err = br_dev->netdev_ops->ndo_bridge_dellink(dev, nlh, flags); in rtnl_bridge_dellink()
5128 err = dev->netdev_ops->ndo_bridge_dellink(dev, nlh, in rtnl_bridge_dellink()
5431 struct nlmsghdr *nlh; in rtnl_fill_statsinfo() local
5438 nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ifsm), flags); in rtnl_fill_statsinfo()
5439 if (!nlh) in rtnl_fill_statsinfo()
5442 ifsm = nlmsg_data(nlh); in rtnl_fill_statsinfo()
5575 nlmsg_end(skb, nlh); in rtnl_fill_statsinfo()
5582 nlmsg_cancel(skb, nlh); in rtnl_fill_statsinfo()
5584 nlmsg_end(skb, nlh); in rtnl_fill_statsinfo()
5703 static int rtnl_stats_get_parse(const struct nlmsghdr *nlh, in rtnl_stats_get_parse() argument
5716 err = nlmsg_parse(nlh, sizeof(struct if_stats_msg), tb, in rtnl_stats_get_parse()
5731 static int rtnl_valid_stats_req(const struct nlmsghdr *nlh, bool strict_check, in rtnl_valid_stats_req() argument
5736 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifsm))) { in rtnl_valid_stats_req()
5744 ifsm = nlmsg_data(nlh); in rtnl_valid_stats_req()
5761 static int rtnl_stats_get(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_stats_get() argument
5772 err = rtnl_valid_stats_req(nlh, netlink_strict_get_check(skb), in rtnl_stats_get()
5777 ifsm = nlmsg_data(nlh); in rtnl_stats_get()
5791 err = rtnl_stats_get_parse(nlh, ifsm->filter_mask, &filters, extack); in rtnl_stats_get()
5800 NETLINK_CB(skb).portid, nlh->nlmsg_seq, 0, in rtnl_stats_get()
5832 err = rtnl_valid_stats_req(cb->nlh, cb->strict_check, true, extack); in rtnl_stats_dump()
5836 ifsm = nlmsg_data(cb->nlh); in rtnl_stats_dump()
5842 err = rtnl_stats_get_parse(cb->nlh, ifsm->filter_mask, &filters, in rtnl_stats_dump()
5855 cb->nlh->nlmsg_seq, 0, in rtnl_stats_dump()
5917 static int rtnl_stats_set(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnl_stats_set() argument
5929 err = rtnl_valid_stats_req(nlh, netlink_strict_get_check(skb), in rtnl_stats_set()
5934 ifsm = nlmsg_data(nlh); in rtnl_stats_set()
5953 err = nlmsg_parse(nlh, sizeof(*ifsm), tb, IFLA_STATS_GETSET_MAX, in rtnl_stats_set()
5985 static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, in rtnetlink_rcv_msg() argument
5998 type = nlh->nlmsg_type; in rtnetlink_rcv_msg()
6005 if (nlmsg_len(nlh) < sizeof(struct rtgenmsg)) in rtnetlink_rcv_msg()
6008 family = ((struct rtgenmsg *)nlmsg_data(nlh))->rtgen_family; in rtnetlink_rcv_msg()
6015 if (kind == RTNL_KIND_GET && (nlh->nlmsg_flags & NLM_F_DUMP)) { in rtnetlink_rcv_msg()
6031 min_dump_alloc = rtnl_calcit(skb, nlh); in rtnetlink_rcv_msg()
6047 err = netlink_dump_start(rtnl, skb, nlh, &c); in rtnetlink_rcv_msg()
6071 if (kind == RTNL_KIND_DEL && (nlh->nlmsg_flags & NLM_F_BULK) && in rtnetlink_rcv_msg()
6082 err = doit(skb, nlh, extack); in rtnetlink_rcv_msg()
6091 err = link->doit(skb, nlh, extack); in rtnetlink_rcv_msg()