The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/net/route.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * Copyright (c) 2004, 2005 The DragonFly Project.  All rights reserved.
    3  *
    4  * This code is derived from software contributed to The DragonFly Project
    5  * by Jeffrey M. Hsu.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  * 3. Neither the name of The DragonFly Project nor the names of its
   16  *    contributors may be used to endorse or promote products derived
   17  *    from this software without specific, prior written permission.
   18  *
   19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
   22  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
   23  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
   24  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
   25  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   26  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
   27  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   28  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   29  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   30  * SUCH DAMAGE.
   31  */
   32 
   33 /*
   34  * Copyright (c) 1980, 1986, 1993
   35  *      The Regents of the University of California.  All rights reserved.
   36  *
   37  * Redistribution and use in source and binary forms, with or without
   38  * modification, are permitted provided that the following conditions
   39  * are met:
   40  * 1. Redistributions of source code must retain the above copyright
   41  *    notice, this list of conditions and the following disclaimer.
   42  * 2. Redistributions in binary form must reproduce the above copyright
   43  *    notice, this list of conditions and the following disclaimer in the
   44  *    documentation and/or other materials provided with the distribution.
   45  * 3. All advertising materials mentioning features or use of this software
   46  *    must display the following acknowledgement:
   47  *      This product includes software developed by the University of
   48  *      California, Berkeley and its contributors.
   49  * 4. Neither the name of the University nor the names of its contributors
   50  *    may be used to endorse or promote products derived from this software
   51  *    without specific prior written permission.
   52  *
   53  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   54  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   55  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   56  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   57  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   58  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   59  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   60  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   61  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   62  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   63  * SUCH DAMAGE.
   64  *
   65  *      @(#)route.h     8.4 (Berkeley) 1/9/95
   66  * $FreeBSD: src/sys/net/route.h,v 1.36.2.5 2002/02/01 11:48:01 ru Exp $
   67  * $DragonFly: src/sys/net/route.h,v 1.24 2008/09/11 11:23:29 sephe Exp $
   68  */
   69 
   70 #ifndef _NET_ROUTE_H_
   71 #define _NET_ROUTE_H_
   72 
   73 #ifndef _SYS_TYPES_H_
   74 #include <sys/types.h>
   75 #endif
   76 #ifndef _SYS_PARAM_H_
   77 #include <sys/param.h>
   78 #endif
   79 #ifndef _SYS_SOCKET_H_
   80 #include <sys/socket.h>
   81 #endif
   82 
   83 /*
   84  * Kernel resident routing tables.
   85  *
   86  * The routing tables are initialized when interface addresses
   87  * are set by making entries for all directly connected interfaces.
   88  */
   89 
   90 /*
   91  * A route consists of a destination address and a reference
   92  * to a routing entry.  These are often held by protocols
   93  * in their control blocks, e.g. inpcb.
   94  */
   95 struct route {
   96         struct  rtentry *ro_rt;
   97         struct  sockaddr ro_dst;
   98 };
   99 
  100 /*
  101  * These numbers are used by reliable protocols for determining
  102  * retransmission behavior and are included in the routing structure.
  103  */
  104 struct rt_metrics {     /* grouped for locality of reference */
  105         u_long  rmx_locks;      /* Kernel must leave these values alone */
  106         u_long  rmx_mtu;        /* MTU for this path */
  107         u_long  rmx_pksent;     /* packets sent using this route */
  108         u_long  rmx_expire;     /* lifetime for route */
  109 
  110         u_long  rmx_sendpipe;   /* outbound delay-bandwidth product */
  111         u_long  rmx_ssthresh;   /* outbound gateway buffer limit */
  112         u_long  rmx_rtt;        /* estimated round trip time */
  113         u_long  rmx_rttvar;     /* estimated rtt variance */
  114 
  115         u_long  rmx_recvpipe;   /* inbound delay-bandwidth product */
  116         u_long  rmx_hopcount;   /* max hops expected */
  117         u_short rmx_mssopt;     /* peer's cached MSS */
  118         u_short rmx_pad;        /* explicit pad */
  119         u_long  rmx_msl;        /* maximum segment lifetime, unit: ms */
  120         u_long  rmx_iwmaxsegs;  /* IW segments max */
  121         u_long  rmx_iwcapsegs;  /* IW segments */
  122 };
  123 
  124 /*
  125  * rmx_rtt and rmx_rttvar are stored as microseconds;
  126  * RTTTOPRHZ(rtt) converts to a value suitable for use
  127  * by a protocol slowtimo counter.
  128  */
  129 #define RTM_RTTUNIT     1000000 /* units for rtt, rttvar, as units per sec */
  130 #define RTTTOPRHZ(r)    ((r) / (RTM_RTTUNIT / PR_SLOWHZ))
  131 
  132 /*
  133  * XXX kernel function pointer `rt_output' is visible to applications.
  134  */
  135 struct mbuf;
  136 
  137 /*
  138  * We distinguish between routes to hosts and routes to networks,
  139  * preferring the former if available.  For each route we infer
  140  * the interface to use from the gateway address supplied when
  141  * the route was entered.  Routes that forward packets through
  142  * gateways are marked so that the output routines know to address the
  143  * gateway rather than the ultimate destination.
  144  */
  145 #ifndef RNF_NORMAL
  146 #include <net/radix.h>
  147 #endif
  148 
  149 struct rtentry {
  150         struct  radix_node rt_nodes[2]; /* tree glue, and other values */
  151 #define rt_key(r)       ((struct sockaddr *)((r)->rt_nodes->rn_key))
  152 #define rt_mask(r)      ((struct sockaddr *)((r)->rt_nodes->rn_mask))
  153         struct  sockaddr *rt_gateway;   /* value */
  154         long    rt_refcnt;              /* # held references */
  155         u_long  rt_flags;               /* up/down?, host/net */
  156         struct  ifnet *rt_ifp;          /* the answer: interface to use */
  157         struct  ifaddr *rt_ifa;         /* the answer: interface to use */
  158         struct  sockaddr *rt_genmask;   /* for generation of cloned routes */
  159         void    *rt_llinfo;             /* pointer to link level info cache */
  160         struct  rt_metrics rt_rmx;      /* metrics used by rx'ing protocols */
  161         struct  rtentry *rt_gwroute;    /* implied entry for gatewayed routes */
  162         int     (*rt_output) (struct ifnet *, struct mbuf *, struct sockaddr *,
  163                               struct rtentry *);
  164                                         /* output routine for this (rt,if) */
  165         struct  rtentry *rt_parent;     /* cloning parent of this route */
  166         int     rt_cpuid;               /* owner cpu */
  167         struct  sockaddr *rt_shim[3];   /* mpls label / operation array */
  168 };
  169 
  170 /*
  171  * Following structure necessary for 4.3 compatibility;
  172  * We should eventually move it to a compat file.
  173  */
  174 struct ortentry {
  175         u_long  rt_hash;                /* to speed lookups */
  176         struct  sockaddr rt_dst;        /* key */
  177         struct  sockaddr rt_gateway;    /* value */
  178         short   rt_flags;               /* up/down?, host/net */
  179         short   rt_refcnt;              /* # held references */
  180         u_long  rt_use;                 /* raw # packets forwarded */
  181         struct  ifnet *rt_ifp;          /* the answer: interface to use */
  182 };
  183 
  184 #define rt_use rt_rmx.rmx_pksent
  185 
  186 #define RTF_UP          0x1             /* route usable */
  187 #define RTF_GATEWAY     0x2             /* destination is a gateway */
  188 #define RTF_HOST        0x4             /* host entry (net otherwise) */
  189 #define RTF_REJECT      0x8             /* host or net unreachable */
  190 #define RTF_DYNAMIC     0x10            /* created dynamically (by redirect) */
  191 #define RTF_MODIFIED    0x20            /* modified dynamically (by redirect) */
  192 #define RTF_DONE        0x40            /* message confirmed */
  193 /*                      0x80               unused, was RTF_DELCLONE */
  194 #define RTF_CLONING     0x100           /* generate new routes on use */
  195 #define RTF_XRESOLVE    0x200           /* external daemon resolves name */
  196 #define RTF_LLINFO      0x400           /* generated by link layer (e.g. ARP) */
  197 #define RTF_STATIC      0x800           /* manually added */
  198 #define RTF_BLACKHOLE   0x1000          /* just discard pkts (during updates) */
  199 #define RTF_PROTO2      0x4000          /* protocol specific routing flag */
  200 #define RTF_PROTO1      0x8000          /* protocol specific routing flag */
  201 
  202 #define RTF_PRCLONING   0x10000         /* protocol requires cloning */
  203 #define RTF_WASCLONED   0x20000         /* route generated through cloning */
  204 #define RTF_PROTO3      0x40000         /* protocol specific routing flag */
  205 /*                      0x80000            unused */
  206 #define RTF_PINNED      0x100000        /* future use */
  207 #define RTF_LOCAL       0x200000        /* route represents a local address */
  208 #define RTF_BROADCAST   0x400000        /* route represents a bcast address */
  209 #define RTF_MULTICAST   0x800000        /* route represents a mcast address */
  210 #define RTF_MPLSOPS     0x1000000       /* route uses mpls label operations */
  211                                         /* 0x2000000 and up unassigned */
  212 
  213 /*
  214  * Routing statistics.
  215  */
  216 struct  rtstatistics {
  217         u_long  rts_badredirect;        /* bogus redirect calls */
  218         u_long  rts_dynamic;            /* routes created by redirects */
  219         u_long  rts_newgateway;         /* routes modified by redirects */
  220         u_long  rts_unreach;            /* lookups which failed */
  221         u_long  rts_wildcard;           /* lookups satisfied by a wildcard */
  222 };
  223 /*
  224  * Structures for routing messages.
  225  */
  226 struct rt_msghdr {
  227         u_short rtm_msglen;     /* to skip over non-understood messages */
  228         u_char  rtm_version;    /* future binary compatibility */
  229         u_char  rtm_type;       /* message type */
  230         u_short rtm_index;      /* index for associated ifp */
  231         int     rtm_flags;      /* flags, incl. kern & message, e.g. DONE */
  232         int     rtm_addrs;      /* bitmask identifying sockaddrs in msg */
  233         pid_t   rtm_pid;        /* identify sender */
  234         int     rtm_seq;        /* for sender to identify action */
  235         int     rtm_errno;      /* why failed */
  236         int     rtm_use;        /* from rtentry */
  237         u_long  rtm_inits;      /* which metrics we are initializing */
  238         struct  rt_metrics rtm_rmx; /* metrics themselves */
  239 };
  240 
  241 #define RTM_VERSION     6       /* Up the ante and ignore older versions */
  242 
  243 /*
  244  * Message types.
  245  */
  246 #define RTM_ADD         0x1     /* Add Route */
  247 #define RTM_DELETE      0x2     /* Delete Route */
  248 #define RTM_CHANGE      0x3     /* Change Metrics or flags */
  249 #define RTM_GET         0x4     /* Report Metrics */
  250 #define RTM_LOSING      0x5     /* Kernel Suspects Partitioning */
  251 #define RTM_REDIRECT    0x6     /* Told to use different route */
  252 #define RTM_MISS        0x7     /* Lookup failed on this address */
  253 #define RTM_LOCK        0x8     /* fix specified metrics */
  254 #define RTM_OLDADD      0x9     /* caused by SIOCADDRT */
  255 #define RTM_OLDDEL      0xa     /* caused by SIOCDELRT */
  256 #define RTM_RESOLVE     0xb     /* req to resolve dst to LL addr */
  257 #define RTM_NEWADDR     0xc     /* address being added to iface */
  258 #define RTM_DELADDR     0xd     /* address being removed from iface */
  259 #define RTM_IFINFO      0xe     /* iface going up/down etc. */
  260 #define RTM_NEWMADDR    0xf     /* mcast group membership being added to if */
  261 #define RTM_DELMADDR    0x10    /* mcast group membership being deleted */
  262 #define RTM_IFANNOUNCE  0x11    /* iface arrival/departure */
  263 #define RTM_IEEE80211   0x12    /* IEEE80211 wireless event */
  264 
  265 /*
  266  * Bitmask values for rtm_inits and rmx_locks.
  267  */
  268 #define RTV_MTU         0x1     /* init or lock _mtu */
  269 #define RTV_HOPCOUNT    0x2     /* init or lock _hopcount */
  270 #define RTV_EXPIRE      0x4     /* init or lock _expire */
  271 #define RTV_RPIPE       0x8     /* init or lock _recvpipe */
  272 #define RTV_SPIPE       0x10    /* init or lock _sendpipe */
  273 #define RTV_SSTHRESH    0x20    /* init or lock _ssthresh */
  274 #define RTV_RTT         0x40    /* init or lock _rtt */
  275 #define RTV_RTTVAR      0x80    /* init or lock _rttvar */
  276 #define RTV_MSL         0x100   /* init or lock _msl */
  277 #define RTV_IWMAXSEGS   0x200   /* init or lock _iwmaxsegs */
  278 #define RTV_IWCAPSEGS   0x400   /* init or lock _iwcapsegs */
  279 
  280 /*
  281  * Bitmask values for rtm_addrs.
  282  */
  283 #define RTA_DST         0x1     /* destination sockaddr present */
  284 #define RTA_GATEWAY     0x2     /* gateway sockaddr present */
  285 #define RTA_NETMASK     0x4     /* netmask sockaddr present */
  286 #define RTA_GENMASK     0x8     /* cloning mask sockaddr present */
  287 #define RTA_IFP         0x10    /* interface name sockaddr present */
  288 #define RTA_IFA         0x20    /* interface addr sockaddr present */
  289 #define RTA_AUTHOR      0x40    /* sockaddr for author of redirect */
  290 #define RTA_BRD         0x80    /* for NEWADDR, broadcast or p-p dest addr */
  291 #define RTA_MPLS1       0x100   /* mpls label and/or operation present */
  292 #define RTA_MPLS2       0x200   /* mpls label and/or operation present */
  293 #define RTA_MPLS3       0x400   /* mpls label and/or operation present */
  294 
  295 /*
  296  * Index offsets for sockaddr array for alternate internal encoding.
  297  */
  298 #define RTAX_DST        0       /* destination sockaddr present */
  299 #define RTAX_GATEWAY    1       /* gateway sockaddr present */
  300 #define RTAX_NETMASK    2       /* netmask sockaddr present */
  301 #define RTAX_GENMASK    3       /* cloning mask sockaddr present */
  302 #define RTAX_IFP        4       /* interface name sockaddr present */
  303 #define RTAX_IFA        5       /* interface addr sockaddr present */
  304 #define RTAX_AUTHOR     6       /* sockaddr for author of redirect */
  305 #define RTAX_BRD        7       /* for NEWADDR, broadcast or p-p dest addr */
  306 #define RTAX_MPLS1      8       /* mpls label and/or operation present */
  307 #define RTAX_MPLS2      9       /* mpls label and/or operation present */
  308 #define RTAX_MPLS3      10      /* mpls label and/or operation present */
  309 #define RTAX_MAX        11      /* size of array to allocate */
  310 
  311 struct rt_addrinfo {
  312         int              rti_addrs;
  313         struct sockaddr *rti_info[RTAX_MAX];
  314         int              rti_flags;
  315         struct ifaddr   *rti_ifa;
  316         struct ifnet    *rti_ifp;
  317 };
  318 
  319 #ifdef _KERNEL
  320 
  321 #define rti_dst         rti_info[RTAX_DST]
  322 #define rti_gateway     rti_info[RTAX_GATEWAY]
  323 #define rti_netmask     rti_info[RTAX_NETMASK]
  324 #define rti_genmask     rti_info[RTAX_GENMASK]
  325 #define rti_ifpaddr     rti_info[RTAX_IFP]
  326 #define rti_ifaaddr     rti_info[RTAX_IFA]
  327 #define rti_author      rti_info[RTAX_AUTHOR]
  328 #define rti_bcastaddr   rti_info[RTAX_BRD]
  329 #define rti_mpls1       rti_info[RTAX_MPLS1]
  330 #define rti_mpls2       rti_info[RTAX_MPLS2]
  331 #define rti_mpls3       rti_info[RTAX_MPLS3]
  332 
  333 extern struct radix_node_head *rt_tables[MAXCPU][AF_MAX+1];
  334 
  335 struct ifmultiaddr;
  336 struct proc;
  337 struct ucred;
  338 
  339 void     route_init (void);
  340 void     rt_dstmsg(int type, struct sockaddr *dst, int error);
  341 int      rt_getifa (struct rt_addrinfo *);
  342 void     rt_ieee80211msg(struct ifnet *, int, void *, size_t);
  343 void     rt_ifannouncemsg (struct ifnet *, int);
  344 void     rt_ifmsg (struct ifnet *);
  345 int      rt_llroute (struct sockaddr *dst, struct rtentry *rt0,
  346             struct rtentry **drt);
  347 void     rt_missmsg (int, struct rt_addrinfo *, int, int);
  348 void     rt_newaddrmsg (int, struct ifaddr *, int, struct rtentry *);
  349 void     rt_newmaddrmsg (int, struct ifmultiaddr *);
  350 void     rt_rtmsg(int cmd, struct rtentry *rt, struct ifnet *ifp, int error);
  351 int      rt_setgate (struct rtentry *,
  352             struct sockaddr *, struct sockaddr *, boolean_t);
  353 void     rtalloc (struct route *);
  354 void     rtalloc_ign (struct route *, u_long);
  355 
  356 struct rtentry *
  357          _rtlookup (struct sockaddr *, __boolean_t, u_long);
  358 #define         RTL_REPORTMSG   TRUE
  359 #define         RTL_DONTREPORT  FALSE
  360 
  361 /* flags to ignore */
  362 #define         RTL_DOCLONE     0UL
  363 #define         RTL_DONTCLONE   (RTF_CLONING | RTF_PRCLONING)
  364 
  365 /*
  366  * Look up a route with no cloning side-effects or miss reports generated.
  367  */
  368 static __inline struct rtentry *
  369 rtpurelookup(struct sockaddr *dst)
  370 {
  371         return _rtlookup(dst, RTL_DONTREPORT, RTL_DONTCLONE);
  372 }
  373 
  374 /*
  375  * Do full route lookup with cloning and reporting on misses.
  376  */
  377 static __inline struct rtentry *
  378 rtlookup(struct sockaddr *dst)
  379 {
  380         return _rtlookup(dst, RTL_REPORTMSG, RTL_DOCLONE);
  381 }
  382 
  383 typedef void (*rtrequest1_callback_func_t)(int, int, struct rt_addrinfo *,
  384                                       struct rtentry *, void *);
  385 typedef int (*rtsearch_callback_func_t)(int, struct rt_addrinfo *,
  386                                         struct rtentry *, void *, int);
  387 
  388 void     rtfree (struct rtentry *);
  389 int      rtinit (struct ifaddr *, int, int);
  390 int      rtchange (struct ifaddr *, struct ifaddr *);
  391 int      rtioctl (u_long, caddr_t, struct ucred *);
  392 void     rtredirect (struct sockaddr *, struct sockaddr *,
  393             struct sockaddr *, int, struct sockaddr *);
  394 int      rtrequest (int, struct sockaddr *,
  395             struct sockaddr *, struct sockaddr *, int, struct rtentry **);
  396 int      rtrequest_global (int, struct sockaddr *,
  397             struct sockaddr *, struct sockaddr *, int);
  398 int      rtrequest1 (int, struct rt_addrinfo *, struct rtentry **);
  399 int      rtrequest1_global (int, struct rt_addrinfo *,
  400             rtrequest1_callback_func_t, void *, boolean_t);
  401 
  402 #define RTS_EXACTMATCH          TRUE
  403 #define RTS_NOEXACTMATCH        FALSE
  404 
  405 #define RTREQ_PRIO_HIGH         TRUE
  406 #define RTREQ_PRIO_NORM         FALSE
  407 
  408 int      rtsearch_global(int, struct rt_addrinfo *,
  409             rtsearch_callback_func_t, void *, boolean_t, boolean_t);
  410 
  411 int      rtmask_add_global(struct sockaddr *, boolean_t);
  412 
  413 struct sockaddr *_rtmask_lookup(struct sockaddr *, boolean_t);
  414 
  415 static __inline struct sockaddr *
  416 rtmask_lookup(struct sockaddr *_mask)
  417 {
  418         return _rtmask_lookup(_mask, FALSE);
  419 }
  420 
  421 static __inline struct sockaddr *
  422 rtmask_purelookup(struct sockaddr *_mask)
  423 {
  424         return _rtmask_lookup(_mask, TRUE);
  425 }
  426 
  427 void    rtfree_oncpu(struct rtentry *);
  428 void    rtfree_remote(struct rtentry *);
  429 void    rt_print(struct rt_addrinfo *, struct rtentry *);
  430 void    rt_addrinfo_print(int cmd, struct rt_addrinfo *);
  431 void    sockaddr_print(struct sockaddr *);
  432 
  433 struct netmsg_base;
  434 int     rt_domsg_global(struct netmsg_base *);
  435 
  436 #ifndef _SYS_GLOBALDATA_H_
  437 #include <sys/globaldata.h>
  438 #endif
  439 
  440 static __inline void
  441 RTFREE(struct rtentry *rt)
  442 {
  443         if (rt->rt_cpuid == mycpuid) {
  444                 if (rt->rt_refcnt <= 1)
  445                         rtfree_oncpu(rt);
  446                 else
  447                         --rt->rt_refcnt;
  448         } else {
  449                 rtfree_remote(rt);
  450         }
  451 }
  452 
  453 int     in_inithead(void **, int);
  454 #endif
  455 
  456 #endif

Cache object: 0dd89173cc89e2f6f54910b5fca2e1d5


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.