Changeset View
Changeset View
Standalone View
Standalone View
head/sys/net/route.c
Show First 20 Lines • Show All 55 Lines • ▼ Show 20 Lines | |||||
#include <sys/kernel.h> | #include <sys/kernel.h> | ||||
#include <sys/lock.h> | #include <sys/lock.h> | ||||
#include <sys/rmlock.h> | #include <sys/rmlock.h> | ||||
#include <net/if.h> | #include <net/if.h> | ||||
#include <net/if_var.h> | #include <net/if_var.h> | ||||
#include <net/if_dl.h> | #include <net/if_dl.h> | ||||
#include <net/route.h> | #include <net/route.h> | ||||
#include <net/route/route_ctl.h> | |||||
#include <net/route/route_var.h> | #include <net/route/route_var.h> | ||||
#include <net/route/nhop.h> | #include <net/route/nhop.h> | ||||
#include <net/route/shared.h> | #include <net/route/shared.h> | ||||
#include <net/vnet.h> | #include <net/vnet.h> | ||||
#ifdef RADIX_MPATH | #ifdef RADIX_MPATH | ||||
#include <net/radix_mpath.h> | #include <net/radix_mpath.h> | ||||
#endif | #endif | ||||
▲ Show 20 Lines • Show All 269 Lines • ▼ Show 20 Lines | #endif | ||||
tmproutes_init(rh); | tmproutes_init(rh); | ||||
/* Init locks */ | /* Init locks */ | ||||
RIB_LOCK_INIT(rh); | RIB_LOCK_INIT(rh); | ||||
nhops_init_rib(rh); | nhops_init_rib(rh); | ||||
/* Init subscription system */ | |||||
CK_STAILQ_INIT(&rh->rnh_subscribers); | |||||
/* Finally, set base callbacks */ | /* Finally, set base callbacks */ | ||||
rh->rnh_addaddr = rn_addroute; | rh->rnh_addaddr = rn_addroute; | ||||
rh->rnh_deladdr = rn_delete; | rh->rnh_deladdr = rn_delete; | ||||
rh->rnh_matchaddr = rn_match; | rh->rnh_matchaddr = rn_match; | ||||
rh->rnh_lookup = rn_lookup; | rh->rnh_lookup = rn_lookup; | ||||
rh->rnh_walktree = rn_walktree; | rh->rnh_walktree = rn_walktree; | ||||
rh->rnh_walktree_from = rn_walktree_from; | rh->rnh_walktree_from = rn_walktree_from; | ||||
▲ Show 20 Lines • Show All 786 Lines • ▼ Show 20 Lines | |||||
#endif | #endif | ||||
int | int | ||||
rtrequest1_fib(int req, struct rt_addrinfo *info, struct rtentry **ret_nrt, | rtrequest1_fib(int req, struct rt_addrinfo *info, struct rtentry **ret_nrt, | ||||
u_int fibnum) | u_int fibnum) | ||||
{ | { | ||||
const struct sockaddr *dst; | const struct sockaddr *dst; | ||||
struct rib_head *rnh; | struct rib_head *rnh; | ||||
struct rib_cmd_info rc; | |||||
int error; | int error; | ||||
KASSERT((fibnum < rt_numfibs), ("rtrequest1_fib: bad fibnum")); | KASSERT((fibnum < rt_numfibs), ("rtrequest1_fib: bad fibnum")); | ||||
KASSERT((info->rti_flags & RTF_RNH_LOCKED) == 0, ("rtrequest1_fib: locked")); | KASSERT((info->rti_flags & RTF_RNH_LOCKED) == 0, ("rtrequest1_fib: locked")); | ||||
NET_EPOCH_ASSERT(); | NET_EPOCH_ASSERT(); | ||||
dst = info->rti_info[RTAX_DST]; | dst = info->rti_info[RTAX_DST]; | ||||
Show All 16 Lines | rtrequest1_fib(int req, struct rt_addrinfo *info, struct rtentry **ret_nrt, | ||||
/* | /* | ||||
* If we are adding a host route then we don't want to put | * If we are adding a host route then we don't want to put | ||||
* a netmask in the tree, nor do we want to clone it. | * a netmask in the tree, nor do we want to clone it. | ||||
*/ | */ | ||||
if (info->rti_flags & RTF_HOST) | if (info->rti_flags & RTF_HOST) | ||||
info->rti_info[RTAX_NETMASK] = NULL; | info->rti_info[RTAX_NETMASK] = NULL; | ||||
bzero(&rc, sizeof(struct rib_cmd_info)); | |||||
error = 0; | error = 0; | ||||
switch (req) { | switch (req) { | ||||
case RTM_DELETE: | case RTM_DELETE: | ||||
error = del_route(rnh, info, ret_nrt); | error = del_route(rnh, info, &rc); | ||||
break; | break; | ||||
case RTM_RESOLVE: | case RTM_RESOLVE: | ||||
/* | /* | ||||
* resolve was only used for route cloning | * resolve was only used for route cloning | ||||
* here for compat | * here for compat | ||||
*/ | */ | ||||
break; | break; | ||||
case RTM_ADD: | case RTM_ADD: | ||||
error = add_route(rnh, info, ret_nrt); | error = add_route(rnh, info, &rc); | ||||
break; | break; | ||||
case RTM_CHANGE: | case RTM_CHANGE: | ||||
error = change_route(rnh, info, ret_nrt); | error = change_route(rnh, info, &rc); | ||||
break; | break; | ||||
default: | default: | ||||
error = EOPNOTSUPP; | error = EOPNOTSUPP; | ||||
} | } | ||||
if (ret_nrt != NULL) | |||||
*ret_nrt = rc.rc_rt; | |||||
return (error); | return (error); | ||||
} | } | ||||
void | void | ||||
rt_setmetrics(const struct rt_addrinfo *info, struct rtentry *rt) | rt_setmetrics(const struct rt_addrinfo *info, struct rtentry *rt) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 317 Lines • Show Last 20 Lines |