Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet/in_fib.c
Show First 20 Lines • Show All 90 Lines • ▼ Show 20 Lines | fib4_rte_to_nh_basic(struct rtentry *rte, struct in_addr dst, | ||||
/* TODO: Handle RTF_BROADCAST here */ | /* TODO: Handle RTF_BROADCAST here */ | ||||
} | } | ||||
static void | static void | ||||
fib4_rte_to_nh_extended(struct rtentry *rte, struct in_addr dst, | fib4_rte_to_nh_extended(struct rtentry *rte, struct in_addr dst, | ||||
uint32_t flags, struct nhop4_extended *pnh4) | uint32_t flags, struct nhop4_extended *pnh4) | ||||
{ | { | ||||
struct sockaddr_in *gw; | struct sockaddr_in *gw; | ||||
struct in_ifaddr *ia; | |||||
if ((flags & NHR_IFAIF) != 0) | if ((flags & NHR_IFAIF) != 0) | ||||
pnh4->nh_ifp = rte->rt_ifa->ifa_ifp; | pnh4->nh_ifp = rte->rt_ifa->ifa_ifp; | ||||
else | else | ||||
pnh4->nh_ifp = rte->rt_ifp; | pnh4->nh_ifp = rte->rt_ifp; | ||||
pnh4->nh_mtu = min(rte->rt_mtu, rte->rt_ifp->if_mtu); | pnh4->nh_mtu = min(rte->rt_mtu, rte->rt_ifp->if_mtu); | ||||
if (rte->rt_flags & RTF_GATEWAY) { | if (rte->rt_flags & RTF_GATEWAY) { | ||||
gw = (struct sockaddr_in *)rte->rt_gateway; | gw = (struct sockaddr_in *)rte->rt_gateway; | ||||
pnh4->nh_addr = gw->sin_addr; | pnh4->nh_addr = gw->sin_addr; | ||||
} else | } else | ||||
pnh4->nh_addr = dst; | pnh4->nh_addr = dst; | ||||
/* Set flags */ | /* Set flags */ | ||||
pnh4->nh_flags = fib_rte_to_nh_flags(rte->rt_flags); | pnh4->nh_flags = fib_rte_to_nh_flags(rte->rt_flags); | ||||
gw = (struct sockaddr_in *)rt_key(rte); | gw = (struct sockaddr_in *)rt_key(rte); | ||||
if (gw->sin_addr.s_addr == 0) | if (gw->sin_addr.s_addr == 0) | ||||
pnh4->nh_flags |= NHF_DEFAULT; | pnh4->nh_flags |= NHF_DEFAULT; | ||||
/* XXX: Set RTF_BROADCAST if GW address is broadcast */ | pnh4->nh_ia = ifatoia(rte->rt_ifa); | ||||
pnh4->nh_src = IA_SIN(pnh4->nh_ia)->sin_addr; | |||||
ia = ifatoia(rte->rt_ifa); | |||||
pnh4->nh_src = IA_SIN(ia)->sin_addr; | |||||
} | } | ||||
/* | /* | ||||
* Performs IPv4 route table lookup on @dst. Returns 0 on success. | * Performs IPv4 route table lookup on @dst. Returns 0 on success. | ||||
* Stores nexthop info provided @pnh4 structure. | * Stores nexthop info provided @pnh4 structure. | ||||
* Note that | * Note that | ||||
* - nh_ifp cannot be safely dereferenced | * - nh_ifp cannot be safely dereferenced | ||||
* - nh_ifp represents logical transmit interface (rt_ifp) (e.g. if | * - nh_ifp represents logical transmit interface (rt_ifp) (e.g. if | ||||
▲ Show 20 Lines • Show All 108 Lines • Show Last 20 Lines |