Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F153929695
D40577.id123344.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
20 KB
Referenced Files
None
Subscribers
None
D40577.id123344.diff
View Options
diff --git a/sys/net/if.c b/sys/net/if.c
--- a/sys/net/if.c
+++ b/sys/net/if.c
@@ -4327,6 +4327,12 @@
return (ifp->if_idxgen);
}
+const char *
+if_getdescr(if_t ifp)
+{
+ return (ifp->if_description);
+}
+
void
if_setdescr(if_t ifp, char *descrbuf)
{
@@ -4357,6 +4363,12 @@
return (ifp->if_alloctype);
}
+void
+if_setlastchange(if_t ifp)
+{
+ getmicrotime(&ifp->if_lastchange);
+}
+
/*
* This is largely undesirable because it ties ifnet to a device, but does
* provide flexiblity for an embedded product vendor. Should be used with
@@ -4714,6 +4726,38 @@
return (count);
}
+struct ifaddr *
+ifa_iter_start(if_t ifp, struct ifa_iter *iter)
+{
+ struct ifaddr *ifa;
+
+ NET_EPOCH_ASSERT();
+
+ bzero(iter, sizeof(*iter));
+ ifa = CK_STAILQ_FIRST(&ifp->if_addrhead);
+ if (ifa != NULL)
+ iter->context[0] = CK_STAILQ_NEXT(ifa, ifa_link);
+ else
+ iter->context[0] = NULL;
+ return (ifa);
+}
+
+struct ifaddr *
+ifa_iter_next(struct ifa_iter *iter)
+{
+ struct ifaddr *ifa = iter->context[0];
+
+ if (ifa != NULL)
+ iter->context[0] = CK_STAILQ_NEXT(ifa, ifa_link);
+ return (ifa);
+}
+
+void
+ifa_iter_finish(struct ifa_iter *iter)
+{
+ /* Nothing to do here for now. */
+}
+
int
if_setsoftc(if_t ifp, void *softc)
{
@@ -4825,6 +4869,12 @@
return (ifp->if_resolvemulti(ifp, srcs, dst));
}
+int
+if_ioctl(if_t ifp, u_long cmd, void *data)
+{
+ return (ifp->if_ioctl(ifp, cmd, data));
+}
+
struct mbuf *
if_dequeue(if_t ifp)
{
diff --git a/sys/net/if_var.h b/sys/net/if_var.h
--- a/sys/net/if_var.h
+++ b/sys/net/if_var.h
@@ -573,9 +573,11 @@
const char *if_name(if_t ifp);
int if_setname(if_t ifp, const char *name);
int if_rename(if_t ifp, char *new_name);
+const char *if_getdescr(if_t ifp);
void if_setdescr(if_t ifp, char *descrbuf);
char *if_allocdescr(size_t sz, int malloc_flag);
void if_freedescr(char *descrbuf);
+void if_setlastchange(if_t ifp);
int if_getalloctype(const if_t ifp);
int if_gettype(const if_t ifp);
int if_setdev(if_t ifp, void *dev);
@@ -633,6 +635,7 @@
void if_vlancap(if_t ifp);
int if_transmit(if_t ifp, struct mbuf *m);
void if_init(if_t ifp, void *ctx);
+int if_ioctl(if_t ifp, u_long cmd, void *data);
int if_resolvemulti(if_t ifp, struct sockaddr **, struct sockaddr *);
uint64_t if_getcounter(if_t ifp, ift_counter counter);
struct label *if_getmaclabel(if_t ifp);
@@ -677,6 +680,14 @@
if_t if_iter_next(struct if_iter *);
void if_iter_finish(struct if_iter *);
+struct ifa_iter {
+ void *context[4];
+};
+
+struct ifaddr *ifa_iter_start(if_t ifp, struct ifa_iter *iter);
+struct ifaddr *ifa_iter_next(struct ifa_iter *iter);
+void ifa_iter_finish(struct ifa_iter *iter);
+
/* Functions */
void if_setinitfn(if_t ifp, if_init_fn_t);
void if_setinputfn(if_t ifp, if_input_fn_t);
diff --git a/sys/netlink/route/iface.c b/sys/netlink/route/iface.c
--- a/sys/netlink/route/iface.c
+++ b/sys/netlink/route/iface.c
@@ -120,11 +120,11 @@
};
static void
-get_operstate_ether(struct ifnet *ifp, struct if_state *pstate)
+get_operstate_ether(if_t ifp, struct if_state *pstate)
{
struct ifmediareq ifmr = {};
int error;
- error = (*ifp->if_ioctl)(ifp, SIOCGIFMEDIA, (void *)&ifmr);
+ error = if_ioctl(ifp, SIOCGIFMEDIA, (void *)&ifmr);
if (error != 0) {
NL_LOG(LOG_DEBUG, "error calling SIOCGIFMEDIA on %s: %d",
@@ -136,7 +136,7 @@
case IFM_ETHER:
if (ifmr.ifm_status & IFM_ACTIVE) {
pstate->ifla_carrier = 1;
- if (ifp->if_flags & IFF_MONITOR)
+ if (if_getflags(ifp) & IFF_MONITOR)
pstate->ifla_operstate = IF_OPER_DORMANT;
else
pstate->ifla_operstate = IF_OPER_UP;
@@ -146,7 +146,7 @@
}
static bool
-get_stats(struct nl_writer *nw, struct ifnet *ifp)
+get_stats(struct nl_writer *nw, if_t ifp)
{
struct rtnl_link_stats64 *stats;
@@ -158,34 +158,34 @@
nla->nla_len = nla_len;
stats = (struct rtnl_link_stats64 *)(nla + 1);
- stats->rx_packets = ifp->if_get_counter(ifp, IFCOUNTER_IPACKETS);
- stats->tx_packets = ifp->if_get_counter(ifp, IFCOUNTER_OPACKETS);
- stats->rx_bytes = ifp->if_get_counter(ifp, IFCOUNTER_IBYTES);
- stats->tx_bytes = ifp->if_get_counter(ifp, IFCOUNTER_OBYTES);
- stats->rx_errors = ifp->if_get_counter(ifp, IFCOUNTER_IERRORS);
- stats->tx_errors = ifp->if_get_counter(ifp, IFCOUNTER_OERRORS);
- stats->rx_dropped = ifp->if_get_counter(ifp, IFCOUNTER_IQDROPS);
- stats->tx_dropped = ifp->if_get_counter(ifp, IFCOUNTER_OQDROPS);
- stats->multicast = ifp->if_get_counter(ifp, IFCOUNTER_IMCASTS);
- stats->rx_nohandler = ifp->if_get_counter(ifp, IFCOUNTER_NOPROTO);
+ stats->rx_packets = if_getcounter(ifp, IFCOUNTER_IPACKETS);
+ stats->tx_packets = if_getcounter(ifp, IFCOUNTER_OPACKETS);
+ stats->rx_bytes = if_getcounter(ifp, IFCOUNTER_IBYTES);
+ stats->tx_bytes = if_getcounter(ifp, IFCOUNTER_OBYTES);
+ stats->rx_errors = if_getcounter(ifp, IFCOUNTER_IERRORS);
+ stats->tx_errors = if_getcounter(ifp, IFCOUNTER_OERRORS);
+ stats->rx_dropped = if_getcounter(ifp, IFCOUNTER_IQDROPS);
+ stats->tx_dropped = if_getcounter(ifp, IFCOUNTER_OQDROPS);
+ stats->multicast = if_getcounter(ifp, IFCOUNTER_IMCASTS);
+ stats->rx_nohandler = if_getcounter(ifp, IFCOUNTER_NOPROTO);
return (true);
}
static void
-get_operstate(struct ifnet *ifp, struct if_state *pstate)
+get_operstate(if_t ifp, struct if_state *pstate)
{
pstate->ifla_operstate = IF_OPER_UNKNOWN;
pstate->ifla_carrier = 0; /* no carrier */
- switch (ifp->if_type) {
+ switch (if_gettype(ifp)) {
case IFT_ETHER:
case IFT_L2VLAN:
get_operstate_ether(ifp, pstate);
break;
default:
/* Map admin state to the operstate */
- if (ifp->if_flags & IFF_UP) {
+ if (if_getflags(ifp) & IFF_UP) {
pstate->ifla_operstate = IF_OPER_UP;
pstate->ifla_carrier = 1;
} else
@@ -195,7 +195,7 @@
}
static void
-get_hwaddr(struct nl_writer *nw, struct ifnet *ifp)
+get_hwaddr(struct nl_writer *nw, if_t ifp)
{
struct ifreq ifr = {};
@@ -206,9 +206,9 @@
}
static unsigned
-ifp_flags_to_netlink(const struct ifnet *ifp)
+ifp_flags_to_netlink(const if_t ifp)
{
- return (ifp->if_flags | ifp->if_drv_flags);
+ return (if_getflags(ifp) | if_getdrvflags(ifp));
}
#define LLADDR_CONST(s) ((const void *)((s)->sdl_data + (s)->sdl_nlen))
@@ -290,7 +290,7 @@
* This function is called without epoch and MAY sleep.
*/
static bool
-dump_iface(struct nl_writer *nw, struct ifnet *ifp, const struct nlmsghdr *hdr,
+dump_iface(struct nl_writer *nw, if_t ifp, const struct nlmsghdr *hdr,
int if_flags_mask)
{
struct ifinfomsg *ifinfo;
@@ -303,8 +303,8 @@
ifinfo = nlmsg_reserve_object(nw, struct ifinfomsg);
ifinfo->ifi_family = AF_UNSPEC;
ifinfo->__ifi_pad = 0;
- ifinfo->ifi_type = ifp->if_type;
- ifinfo->ifi_index = ifp->if_index;
+ ifinfo->ifi_type = if_gettype(ifp);
+ ifinfo->ifi_index = if_getindex(ifp);
ifinfo->ifi_flags = ifp_flags_to_netlink(ifp);
ifinfo->ifi_change = if_flags_mask;
@@ -328,20 +328,20 @@
dump_sa(nw, IFLA_ADDRESS, ifa->ifa_addr);
}
- if ((ifp->if_broadcastaddr != NULL)) {
- nlattr_add(nw, IFLA_BROADCAST, ifp->if_addrlen,
- ifp->if_broadcastaddr);
+ if ((if_getbroadcastaddr(ifp) != NULL)) {
+ nlattr_add(nw, IFLA_BROADCAST, if_getaddrlen(ifp),
+ if_getbroadcastaddr(ifp));
}
- nlattr_add_u32(nw, IFLA_MTU, ifp->if_mtu);
+ nlattr_add_u32(nw, IFLA_MTU, if_getmtu(ifp));
/*
nlattr_add_u32(nw, IFLA_MIN_MTU, 60);
nlattr_add_u32(nw, IFLA_MAX_MTU, 9000);
nlattr_add_u32(nw, IFLA_GROUP, 0);
*/
- if (ifp->if_description != NULL)
- nlattr_add_string(nw, IFLA_IFALIAS, ifp->if_description);
+ if (if_getdescr(ifp) != NULL)
+ nlattr_add_string(nw, IFLA_IFALIAS, if_getdescr(ifp));
/* Store FreeBSD-specific attributes */
int off = nlattr_add_nested(nw, IFLA_FREEBSD);
@@ -354,7 +354,7 @@
get_stats(nw, ifp);
- uint32_t val = (ifp->if_flags & IFF_PROMISC) != 0;
+ uint32_t val = (if_getflags(ifp) & IFF_PROMISC) != 0;
nlattr_add_u32(nw, IFLA_PROMISCUITY, val);
ifc_dump_ifp_nl(ifp, nw);
@@ -412,13 +412,13 @@
NL_DECLARE_STRICT_PARSER(ifmsg_parser, struct ifinfomsg, check_ifmsg, nlf_p_if, nla_p_if);
static bool
-match_iface(struct ifnet *ifp, void *_arg)
+match_iface(if_t ifp, void *_arg)
{
struct nl_parsed_link *attrs = (struct nl_parsed_link *)_arg;
- if (attrs->ifi_index != 0 && attrs->ifi_index != ifp->if_index)
+ if (attrs->ifi_index != 0 && attrs->ifi_index != if_getindex(ifp))
return (false);
- if (attrs->ifi_type != 0 && attrs->ifi_index != ifp->if_type)
+ if (attrs->ifi_type != 0 && attrs->ifi_index != if_gettype(ifp))
return (false);
if (attrs->ifla_ifname != NULL && strcmp(attrs->ifla_ifname, if_name(ifp)))
return (false);
@@ -428,7 +428,7 @@
}
static int
-dump_cb(struct ifnet *ifp, void *_arg)
+dump_cb(if_t ifp, void *_arg)
{
struct netlink_walkargs *wa = (struct netlink_walkargs *)_arg;
if (!dump_iface(wa->nw, ifp, &wa->hdr, 0))
@@ -448,7 +448,7 @@
rtnl_handle_getlink(struct nlmsghdr *hdr, struct nlpcb *nlp, struct nl_pstate *npt)
{
struct epoch_tracker et;
- struct ifnet *ifp;
+ if_t ifp;
int error = 0;
struct nl_parsed_link attrs = {};
@@ -529,7 +529,7 @@
rtnl_handle_dellink(struct nlmsghdr *hdr, struct nlpcb *nlp, struct nl_pstate *npt)
{
struct epoch_tracker et;
- struct ifnet *ifp;
+ if_t ifp;
int error;
struct nl_parsed_link attrs = {};
@@ -609,7 +609,7 @@
modify_link(struct nlmsghdr *hdr, struct nl_parsed_link *lattrs,
struct nlattr_bmask *bm, struct nlpcb *nlp, struct nl_pstate *npt)
{
- struct ifnet *ifp = NULL;
+ if_t ifp = NULL;
struct epoch_tracker et;
if (lattrs->ifi_index == 0 && lattrs->ifla_ifname == NULL) {
@@ -948,7 +948,7 @@
('IFA_CACHEINFO', {'ifa_preferred': 4294967295, 'ifa_valid': 4294967295, 'cstamp': 63745746, 'tstamp': 63745746})],
*/
static bool
-dump_iface_addr(struct nl_writer *nw, struct ifnet *ifp, struct ifaddr *ifa,
+dump_iface_addr(struct nl_writer *nw, if_t ifp, struct ifaddr *ifa,
const struct nlmsghdr *hdr)
{
struct ifaddrmsg *ifamsg;
@@ -966,9 +966,9 @@
ifamsg->ifa_prefixlen = get_sa_plen(ifa->ifa_netmask);
ifamsg->ifa_flags = 0; // ifa_flags is useless
ifamsg->ifa_scope = ifa_get_scope(ifa);
- ifamsg->ifa_index = ifp->if_index;
+ ifamsg->ifa_index = if_getindex(ifp);
- if ((ifp->if_flags & IFF_POINTOPOINT) && sa_dst != NULL && sa_dst->sa_family != 0) {
+ if ((if_getflags(ifp) & IFF_POINTOPOINT) && sa_dst != NULL && sa_dst->sa_family != 0) {
/* P2P interface may have IPv6 LL with no dst address */
dump_sa(nw, IFA_ADDRESS, sa_dst);
dump_sa(nw, IFA_LOCAL, sa);
@@ -983,7 +983,7 @@
dump_sa(nw, IFA_LOCAL, sa);
#endif
}
- if (ifp->if_flags & IFF_BROADCAST)
+ if (if_getflags(ifp) & IFF_BROADCAST)
dump_sa(nw, IFA_BROADCAST, ifa->ifa_broadaddr);
nlattr_add_string(nw, IFA_LABEL, if_name(ifp));
@@ -1027,11 +1027,13 @@
}
static int
-dump_iface_addrs(struct netlink_walkargs *wa, struct ifnet *ifp)
+dump_iface_addrs(struct netlink_walkargs *wa, if_t ifp)
{
struct ifaddr *ifa;
+ struct ifa_iter it;
+ int error = 0;
- CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
+ for (ifa = ifa_iter_start(ifp, &it); ifa != NULL; ifa = ifa_iter_next(&it)) {
if (wa->family != 0 && wa->family != ifa->ifa_addr->sa_family)
continue;
if (ifa->ifa_addr->sa_family == AF_LINK)
@@ -1039,18 +1041,21 @@
if (prison_if(wa->cred, ifa->ifa_addr) != 0)
continue;
wa->count++;
- if (!dump_iface_addr(wa->nw, ifp, ifa, &wa->hdr))
- return (ENOMEM);
+ if (!dump_iface_addr(wa->nw, ifp, ifa, &wa->hdr)) {
+ error = ENOMEM;
+ break;
+ }
wa->dumped++;
}
+ ifa_iter_finish(&it);
- return (0);
+ return (error);
}
static int
rtnl_handle_getaddr(struct nlmsghdr *hdr, struct nlpcb *nlp, struct nl_pstate *npt)
{
- struct ifnet *ifp;
+ if_t ifp;
int error = 0;
struct nl_parsed_ifa attrs = {};
@@ -1078,11 +1083,14 @@
else
error = dump_iface_addrs(&wa, ifp);
} else {
- CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) {
+ struct if_iter it;
+
+ for (ifp = if_iter_start(&it); ifp != NULL; ifp = if_iter_next(&it)) {
error = dump_iface_addrs(&wa, ifp);
if (error != 0)
break;
}
+ if_iter_finish(&it);
}
NL_LOG(LOG_DEBUG2, "End dump, iterated %d dumped %d", wa.count, wa.dumped);
@@ -1098,7 +1106,7 @@
#ifdef INET
static int
handle_newaddr_inet(struct nlmsghdr *hdr, struct nl_parsed_ifa *attrs,
- struct ifnet *ifp, struct nlpcb *nlp, struct nl_pstate *npt)
+ if_t ifp, struct nlpcb *nlp, struct nl_pstate *npt)
{
int plen = attrs->ifa_prefixlen;
int if_flags = if_getflags(ifp);
@@ -1182,7 +1190,7 @@
static int
handle_deladdr_inet(struct nlmsghdr *hdr, struct nl_parsed_ifa *attrs,
- struct ifnet *ifp, struct nlpcb *nlp, struct nl_pstate *npt)
+ if_t ifp, struct nlpcb *nlp, struct nl_pstate *npt)
{
struct sockaddr_in *addr = (struct sockaddr_in *)attrs->ifa_local;
@@ -1203,7 +1211,7 @@
#ifdef INET6
static int
handle_newaddr_inet6(struct nlmsghdr *hdr, struct nl_parsed_ifa *attrs,
- struct ifnet *ifp, struct nlpcb *nlp, struct nl_pstate *npt)
+ if_t ifp, struct nlpcb *nlp, struct nl_pstate *npt)
{
struct sockaddr_in6 *addr, *dst;
@@ -1266,7 +1274,7 @@
static int
handle_deladdr_inet6(struct nlmsghdr *hdr, struct nl_parsed_ifa *attrs,
- struct ifnet *ifp, struct nlpcb *nlp, struct nl_pstate *npt)
+ if_t ifp, struct nlpcb *nlp, struct nl_pstate *npt)
{
struct sockaddr_in6 *addr = (struct sockaddr_in6 *)attrs->ifa_local;
@@ -1297,7 +1305,7 @@
return (error);
NET_EPOCH_ENTER(et);
- struct ifnet *ifp = ifnet_byindex_ref(attrs.ifa_index);
+ if_t ifp = ifnet_byindex_ref(attrs.ifa_index);
NET_EPOCH_EXIT(et);
if (ifp == NULL) {
@@ -1386,7 +1394,7 @@
}
static void
-rtnl_handle_ifevent(struct ifnet *ifp, int nlmsg_type, int if_flags_mask)
+rtnl_handle_ifevent(if_t ifp, int nlmsg_type, int if_flags_mask)
{
struct nlmsghdr hdr = { .nlmsg_type = nlmsg_type };
struct nl_writer nw = {};
@@ -1403,28 +1411,28 @@
}
static void
-rtnl_handle_ifattach(void *arg, struct ifnet *ifp)
+rtnl_handle_ifattach(void *arg, if_t ifp)
{
NL_LOG(LOG_DEBUG2, "ifnet %s", if_name(ifp));
rtnl_handle_ifevent(ifp, NL_RTM_NEWLINK, 0);
}
static void
-rtnl_handle_ifdetach(void *arg, struct ifnet *ifp)
+rtnl_handle_ifdetach(void *arg, if_t ifp)
{
NL_LOG(LOG_DEBUG2, "ifnet %s", if_name(ifp));
rtnl_handle_ifevent(ifp, NL_RTM_DELLINK, 0);
}
static void
-rtnl_handle_iflink(void *arg, struct ifnet *ifp)
+rtnl_handle_iflink(void *arg, if_t ifp)
{
NL_LOG(LOG_DEBUG2, "ifnet %s", if_name(ifp));
rtnl_handle_ifevent(ifp, NL_RTM_NEWLINK, 0);
}
void
-rtnl_handle_ifnet_event(struct ifnet *ifp, int if_flags_mask)
+rtnl_handle_ifnet_event(if_t ifp, int if_flags_mask)
{
NL_LOG(LOG_DEBUG2, "ifnet %s", if_name(ifp));
rtnl_handle_ifevent(ifp, NL_RTM_NEWLINK, if_flags_mask);
diff --git a/sys/netlink/route/iface_drivers.c b/sys/netlink/route/iface_drivers.c
--- a/sys/netlink/route/iface_drivers.c
+++ b/sys/netlink/route/iface_drivers.c
@@ -77,7 +77,7 @@
memcpy(buf, lattrs->ifla_ifalias, len);
if_setdescr(ifp, buf);
- getmicrotime(&ifp->if_lastchange);
+ if_setlastchange(ifp);
} else {
nlmsg_report_err_msg(npt, "Not enough privileges to set descr");
return (EPERM);
@@ -122,7 +122,7 @@
_nl_store_ifp_cookie(struct nl_pstate *npt, struct ifnet *ifp)
{
int ifname_len = strlen(if_name(ifp));
- uint32_t ifindex = (uint32_t)ifp->if_index;
+ uint32_t ifindex = (uint32_t)if_getindex(ifp);
int nla_len = sizeof(struct nlattr) * 3 +
sizeof(ifindex) + NL_ITEM_ALIGN(ifname_len + 1);
diff --git a/sys/netlink/route/neigh.c b/sys/netlink/route/neigh.c
--- a/sys/netlink/route/neigh.c
+++ b/sys/netlink/route/neigh.c
@@ -39,6 +39,8 @@
#include <sys/syslog.h>
#include <net/if.h>
+#include <net/if_var.h>
+#include <net/if_private.h>
#include <net/if_llatbl.h>
#include <netlink/netlink.h>
#include <netlink/netlink_ctl.h>
@@ -62,7 +64,7 @@
struct nl_writer *nw;
struct nlmsghdr hdr;
struct nlpcb *so;
- struct ifnet *ifp;
+ if_t ifp;
int family;
int error;
int count;
@@ -156,7 +158,7 @@
ndm = nlmsg_reserve_object(nw, struct ndmsg);
ndm->ndm_family = wa->family;
- ndm->ndm_ifindex = wa->ifp->if_index;
+ ndm->ndm_ifindex = if_getindex(wa->ifp);
ndm->ndm_state = lle_state_to_nl_state(wa->family, lle);
ndm->ndm_flags = lle_flags_to_nl_flags(lle);
@@ -178,7 +180,7 @@
if (lle->r_flags & RLLE_VALID) {
/* Has L2 */
- int addrlen = wa->ifp->if_addrlen;
+ int addrlen = if_getaddrlen(wa->ifp);
nlattr_add(nw, NDA_LLADDR, addrlen, lle->ll_addr);
}
@@ -226,7 +228,7 @@
}
static int
-dump_llts_iface(struct netlink_walkargs *wa, struct ifnet *ifp, int family)
+dump_llts_iface(struct netlink_walkargs *wa, if_t ifp, int family)
{
int error = 0;
@@ -248,21 +250,24 @@
}
static int
-dump_llts(struct netlink_walkargs *wa, struct ifnet *ifp, int family)
+dump_llts(struct netlink_walkargs *wa, if_t ifp, int family)
{
- NL_LOG(LOG_DEBUG, "Start dump ifp=%s family=%d", ifp ? if_name(ifp) : "NULL", family);
+ NL_LOG(LOG_DEBUG2, "Start dump ifp=%s family=%d", ifp ? if_name(ifp) : "NULL", family);
wa->hdr.nlmsg_flags |= NLM_F_MULTI;
if (ifp != NULL) {
dump_llts_iface(wa, ifp, family);
} else {
- CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) {
+ struct if_iter it;
+
+ for (ifp = if_iter_start(&it); ifp != NULL; ifp = if_iter_next(&it)) {
dump_llts_iface(wa, ifp, family);
}
+ if_iter_finish(&it);
}
- NL_LOG(LOG_DEBUG, "End dump, iterated %d dumped %d", wa->count, wa->dumped);
+ NL_LOG(LOG_DEBUG2, "End dump, iterated %d dumped %d", wa->count, wa->dumped);
if (!nlmsg_end_dump(wa->nw, wa->error, &wa->hdr)) {
NL_LOG(LOG_DEBUG, "Unable to add new message");
@@ -273,7 +278,7 @@
}
static int
-get_lle(struct netlink_walkargs *wa, struct ifnet *ifp, int family, struct sockaddr *dst)
+get_lle(struct netlink_walkargs *wa, if_t ifp, int family, struct sockaddr *dst)
{
struct lltable *llt = lltable_get(ifp, family);
if (llt == NULL)
@@ -290,7 +295,7 @@
}
static void
-set_scope6(struct sockaddr *sa, struct ifnet *ifp)
+set_scope6(struct sockaddr *sa, if_t ifp)
{
#ifdef INET6
if (sa != NULL && sa->sa_family == AF_INET6 && ifp != NULL) {
@@ -382,7 +387,7 @@
return (EINVAL);
}
- int addrlen = attrs.nda_ifp->if_addrlen;
+ int addrlen = if_getaddrlen(attrs.nda_ifp);
if (attrs.nda_lladdr->nla_len != sizeof(struct nlattr) + addrlen) {
NLMSG_REPORT_ERR_MSG(npt,
"NDA_LLADDR address length (%d) is different from expected (%d)",
@@ -552,7 +557,7 @@
static void
rtnl_lle_event(void *arg __unused, struct llentry *lle, int evt)
{
- struct ifnet *ifp;
+ if_t ifp;
int family;
LLE_WLOCK_ASSERT(lle);
diff --git a/sys/netlink/route/nexthop.c b/sys/netlink/route/nexthop.c
--- a/sys/netlink/route/nexthop.c
+++ b/sys/netlink/route/nexthop.c
@@ -455,7 +455,7 @@
nlattr_add_flag(nw, NHA_BLACKHOLE);
goto done;
}
- nlattr_add_u32(nw, NHA_OIF, nh->nh_ifp->if_index);
+ nlattr_add_u32(nw, NHA_OIF, if_getindex(nh->nh_ifp));
switch (nh->gw_sa.sa_family) {
#ifdef INET
@@ -476,7 +476,7 @@
int off = nlattr_add_nested(nw, NHA_FREEBSD);
if (off != 0) {
- nlattr_add_u32(nw, NHAF_AIF, nh->nh_aifp->if_index);
+ nlattr_add_u32(nw, NHAF_AIF, if_getindex(nh->nh_aifp));
if (uidx == 0) {
nlattr_add_u32(nw, NHAF_KID, nhop_get_idx(nh));
@@ -679,7 +679,7 @@
}
static void
-set_scope6(struct sockaddr *sa, struct ifnet *ifp)
+set_scope6(struct sockaddr *sa, if_t ifp)
{
#ifdef INET6
if (sa != NULL && sa->sa_family == AF_INET6 && ifp != NULL) {
@@ -799,7 +799,7 @@
* Returns 0 on success or errno.
*/
int
-nl_set_nexthop_gw(struct nhop_object *nh, struct sockaddr *gw, struct ifnet *ifp,
+nl_set_nexthop_gw(struct nhop_object *nh, struct sockaddr *gw, if_t ifp,
struct nl_pstate *npt)
{
#ifdef INET6
@@ -810,7 +810,7 @@
NLMSG_REPORT_ERR_MSG(npt, "interface not set");
return (EINVAL);
}
- in6_set_unicast_scopeid(&gw6->sin6_addr, ifp->if_index);
+ in6_set_unicast_scopeid(&gw6->sin6_addr, if_getindex(ifp));
}
}
#endif
@@ -908,7 +908,7 @@
}
}
- NL_LOG(LOG_DEBUG, "IFINDEX %d", attrs.nha_oif ? attrs.nha_oif->if_index : 0);
+ NL_LOG(LOG_DEBUG, "IFINDEX %d", attrs.nha_oif ? if_getindex(attrs.nha_oif) : 0);
unhop = malloc(sizeof(struct user_nhop), M_NETLINK, M_NOWAIT | M_ZERO);
if (unhop == NULL) {
diff --git a/sys/netlink/route/rt.c b/sys/netlink/route/rt.c
--- a/sys/netlink/route/rt.c
+++ b/sys/netlink/route/rt.c
@@ -201,7 +201,7 @@
if (rtnh == NULL)
return;
rtnh->rtnh_flags = 0;
- rtnh->rtnh_ifindex = wn[i].nh->nh_ifp->if_index;
+ rtnh->rtnh_ifindex = if_getindex(wn[i].nh->nh_ifp);
rtnh->rtnh_hops = wn[i].weight;
dump_rc_nhop_gw(nw, wn[i].nh);
uint32_t rtflags = nhop_get_rtflags(wn[i].nh);
@@ -256,7 +256,7 @@
nlattr_add_u32(nw, NL_RTA_EXPIRES, nh_expire - time_uptime);
/* In any case, fill outgoing interface */
- nlattr_add_u32(nw, NL_RTA_OIF, nh->nh_ifp->if_index);
+ nlattr_add_u32(nw, NL_RTA_OIF, if_getindex(nh->nh_ifp));
if (rnd->rnd_weight != RT_DEFAULT_WEIGHT)
nlattr_add_u32(nw, NL_RTA_WEIGHT, rnd->rnd_weight);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Apr 25, 9:22 PM (8 h, 14 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
32143176
Default Alt Text
D40577.id123344.diff (20 KB)
Attached To
Mode
D40577: netlink: convert to IfAPI.
Attached
Detach File
Event Timeline
Log In to Comment