diff options
| author | Kristof Provost <kp@FreeBSD.org> | 2023-03-15 12:31:45 +0000 |
|---|---|---|
| committer | Kristof Provost <kp@FreeBSD.org> | 2023-03-20 13:37:09 +0000 |
| commit | 137818006de5bb0be0b6562a0d601977f85c6867 (patch) | |
| tree | 2ae84bcb3d05cc2abe8948317fec3f798a4b2499 /sys/netlink/netlink_message_parser.c | |
| parent | 3afba490c1266200e9fd899f2494aa47f71c6095 (diff) | |
Diffstat (limited to 'sys/netlink/netlink_message_parser.c')
| -rw-r--r-- | sys/netlink/netlink_message_parser.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/sys/netlink/netlink_message_parser.c b/sys/netlink/netlink_message_parser.c index e30138266d9d..d0aaf4301872 100644 --- a/sys/netlink/netlink_message_parser.c +++ b/sys/netlink/netlink_message_parser.c @@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$"); #include <net/route/nhop.h> #include <net/route/route_ctl.h> +#include <netinet/in.h> #include <netlink/netlink.h> #include <netlink/netlink_ctl.h> #include <netlink/netlink_var.h> @@ -349,6 +350,30 @@ nlattr_get_uint64(struct nlattr *nla, struct nl_pstate *npt, const void *arg, vo return (0); } +int +nlattr_get_in_addr(struct nlattr *nla, struct nl_pstate *npt, const void *arg, void *target) +{ + if (__predict_false(NLA_DATA_LEN(nla) != sizeof(in_addr_t))) { + NLMSG_REPORT_ERR_MSG(npt, "nla type %d size(%u) is not in_addr_t", + nla->nla_type, NLA_DATA_LEN(nla)); + return (EINVAL); + } + memcpy(target, NLA_DATA_CONST(nla), sizeof(in_addr_t)); + return (0); +} + +int +nlattr_get_in6_addr(struct nlattr *nla, struct nl_pstate *npt, const void *arg, void *target) +{ + if (__predict_false(NLA_DATA_LEN(nla) != sizeof(struct in6_addr))) { + NLMSG_REPORT_ERR_MSG(npt, "nla type %d size(%u) is not struct in6_addr", + nla->nla_type, NLA_DATA_LEN(nla)); + return (EINVAL); + } + memcpy(target, NLA_DATA_CONST(nla), sizeof(struct in6_addr)); + return (0); +} + static int nlattr_get_ifp_internal(struct nlattr *nla, struct nl_pstate *npt, void *target, bool zero_ok) |
