📄 iproutelib.h
字号:
--(RREFCNT (x)); \ } while (0)/* Structure for specifying new metrics in the ipRouteModify call */struct changeMetrics { BOOL setMetrics; /* update metrics too or just update */ /* the locks */ u_long cm_inits; /* which metrics are we changing */ struct rt_metrics cm_rmx; /* metrics themselves */ };#define ARP_ROUTE(pRoute) \ ((pRoute)->rt_gateway->sa_family == AF_LINK && \ (RFLAGS ((pRoute)) & RTF_LLINFO))/* * This macro is used to detect routes that had their gateway changed to * an ARP template by the internal route processing. The RTF_LOCAL is used * to detect loopback IPv6 routes which are added with a RTF_LINFO flag */#define INTERFACE_ROUTE(pRoute) \ ((pRoute)->rt_gateway->sa_family == AF_LINK && \ (!(RFLAGS ((pRoute)) & RTF_LLINFO) || \ (RFLAGS ((pRoute)) & RTF_LOCAL)))#define GET_INTERFACE_ADDR(pRoute) ((ROUTE_IFA (pRoute))->ifa_addr)/* These macros return the protocol address for the given sockaddr */#define SOCKADDR_IN(s) (((struct sockaddr_in *)(s))->sin_addr.s_addr)#define IP4ADDR(pAddr) ((ULONG *) &(SOCKADDR_IN(pAddr)))#ifdef INET6#define SOCKADDR_IN6(s) (((struct sockaddr_in6 *)(s))->sin6_addr)#define SA6(s) (((struct sockaddr_in6 *)(s))->sin6_addr)#define IP6ADDR(pAddr) ((ULONG *) &(SOCKADDR_IN6(pAddr))) /* This macro checks if the given IPv6 addr is all zeros */#define IP6_ADDR_IS_ZERO(s) (SA6(s).s6_addr32[0] == 0 && \ SA6(s).s6_addr32[1] == 0 && \ SA6(s).s6_addr32[2] == 0 && \ SA6(s).s6_addr32[3] == 0)#define IPADDR_IS_ZERO(s) \ ((s)->sa_family == AF_INET ? \ ((s)->sa_len <= (u_char)IP4ADDR (0) || SOCKADDR_IN (s) == 0) : \ ((s)->sa_len <= (u_char)IP6ADDR (0) || IP6_ADDR_IS_ZERO (s))) /* This macro checks if the given IPv6 addr is all ones */#define IP6_ADDR_IS_ALLONES(s) (SA6(s).s6_addr32[0] == 0xffffffff && \ SA6(s).s6_addr32[1] == 0xffffffff && \ SA6(s).s6_addr32[2] == 0xffffffff && \ SA6(s).s6_addr32[3] == 0xffffffff)#define IPADDR_IS_ALLONES(s) \ ((s)->sa_family == AF_INET ? SOCKADDR_IN (s) == 0xffffffff : \ IP6_ADDR_IS_ALLONES (s))#else /* INET6 */#define IPADDR_IS_ZERO(s) \ ((s)->sa_len <= (u_char)IP4ADDR (0) || SOCKADDR_IN (s) == 0)#define IPADDR_IS_ALLONES(s) (SOCKADDR_IN (s) == 0xffffffff)#endif /* INET6 */#ifdef DEBUG_CHECKS#ifdef INET6/* * The following macro returns a pointer to the start of the IP address * given the sockaddr structure. For unrecognized address families * it calls panic */#define IPADDR(pAddr) (pAddr->sa_family == AF_INET ? IP4ADDR (pAddr) :\ (pAddr->sa_family == AF_INET6 ? IP6ADDR (pAddr) : \ (ULONG *) (panic("BAD address family: %d %x @ %s:%d\n", \ pAddr->sa_family, pAddr, \ __FILE__, __LINE__),\ NULL)))#else /* INET6 *//* * The following macro returns a pointer to the start of the IP address * given the sockaddr structure. For unrecognized address families * it calls panic */#define IPADDR(pAddr) (pAddr->sa_family == AF_INET ? IP4ADDR (pAddr) : \ (ULONG *) (panic ("BAD address family: %d %x @ %s:%d\n", \ pAddr->sa_family, pAddr, \ __FILE__, __LINE__), \ NULL))#endif /* INET6 */#else /* DEBUG_CHECKS */#ifdef INET6/* * The following macro returns a pointer to the start of the IPv4 or IPv6 * address within a sockaddr structure. It silently ignores unrecognized * address families, since debugging is not enabled. */#define IPADDR(pAddr) ((pAddr)->sa_family == AF_INET ? \ (ULONG *) &(SOCKADDR_IN((pAddr))) : \ (ULONG *) &(SOCKADDR_IN6((pAddr))))#else /* INET6 *//* * The following macro returns a pointer to the start of the IPv4 address * within a sockaddr structure. It silently ignores unrecognized address * families, since debugging is not enabled. */#define IPADDR(pAddr) ((ULONG *) &(SOCKADDR_IN((pAddr))))#endif /* INET6 */ #endif /* DEBUG_CHECKS *//* external function declarations */#ifdef VIRTUAL_STACKextern VS_REG_ID ipRouteRegistrationNum;#endif /* VIRTUAL_STACK */extern IP_ROUTE_CONFIG_PARAMS_T ipRouteDefaultConfigParams;struct ipRouteDispatchTable;/* Administrative functions */STATUS ipRouteLibInit __P ((void));STATUS ipRouteLibInstInit __P ((void *pRouteConfigParams));STATUS ipRouteLibShutdown __P (());#ifdef VIRTUAL_STACKSTATUS ipRouteLibDestructor __P ((VSNUM vsnum));#endif /* VIRTUAL_STACK */STATUS ipRouteTableSet __P ((ULONG routeUsage, struct ipRouteDispatchTable * pRibOps));STATUS ipRouteTableCreate __P ((ULONG routeUsage));STATUS ipRouteTablesCreate __P ((void));STATUS ipRouteTableDestroy __P ((ULONG routeUsage));STATUS ipRouteTableShow __P ((int routeUsage));/* Core functions - Route creation, deletion, modification, retrieval, free */STATUS ipRouteCreate __P ((struct sockaddr * pDstAddr, struct sockaddr * pNetmask, struct sockaddr * pGateway, ULONG routeIndex, ULONG routeTos, ULONG routeOwner, ULONG routeSource, ULONG routeFormat, UCHAR routeWeight, ULONG routeFlags, void * pRouteData, void * pCustomData, struct rtentry **ppRtEntry));STATUS ipRouteDelete __P ((struct sockaddr * pDstAddr, struct sockaddr * pNetmask, struct sockaddr * pGateway, long routeTos, ULONG routeOwner, ULONG routeFormat));STATUS ipIntRouteDelete __P ((struct sockaddr * pDstAddr, struct sockaddr * pNetmask, struct sockaddr * pGateway, long routeTos, ULONG routeOwner, ULONG routeFormat, struct rt_msghdr *pRtm));struct rtentry * ipRouteGet __P ((struct sockaddr * pDstAddr, struct sockaddr * pGateway, long routeTos, ULONG routeOwner, ULONG routeFormat, BOOL skipFlag));struct rtentry * ipRouteLookup __P ((struct sockaddr * pDstAddr, struct sockaddr * pNetmask, struct sockaddr * pGateway, long routeTos, ULONG routeOwner, ULONG routeFormat));struct rtentry * ipRouteLexGet __P ((struct sockaddr * pDstAddr, struct sockaddr * pNetmask, struct sockaddr * pGateway, ULONG routeTos, ULONG indexType, ULONG routeFormat));struct rtentry * ipRouteLexNextGet __P ((struct sockaddr * pDstAddr, struct sockaddr * pNetmask, struct sockaddr * pGateway, ULONG * pTos, ULONG indexType, ULONG routeFormat));STATUS ipRouteModify __P ((struct sockaddr * pDstAddr, struct sockaddr * pNetmask, struct sockaddr * pGateway, ULONG routeIndex, long routeTos, ULONG routeOwner, ULONG routeSource, ULONG routeFormat, struct sockaddr * pNewGateway, UCHAR * pNewWeight, ULONG * pNewFlags, void * pNewRouteData, void * pNewCustomData));STATUS ipIntRouteModify __P ((struct sockaddr * pDstAddr, struct sockaddr * pNetmask, struct sockaddr * pGateway, ULONG routeIndex, long routeTos, ULONG routeOwner, ULONG routeSource, ULONG routeFormat, struct sockaddr * pNewGateway, UCHAR * pNewWeight, ULONG * pNewFlags, void * pNewRouteData, void * pNewCustomData, struct rt_msghdr *pRtm));void ipRouteUnlock __P ((struct rtentry * pRoute));void ipRouteLock __P ((struct rtentry * pRoute));void ipRouteUnlockOrDelete __P ((struct rtentry * pRoute));STATUS ipRouteNumRoutesGet __P ((int routeUsage));/* Support functions - needed by other parts of the code */STATUS ipRouteTableWalk __P ((ULONG routeUsage, void (* pFunc )(struct rtentry * rt, void * pArg), void * pArg));struct rtentry * ipRouteMatch __P ((struct rtentry * pRoute, struct sockaddr * pGateway, long routeTos, ULONG routeOwner));int rt_setgate __P ((struct rtentry *rt, struct sockaddr * pDstAddr, struct sockaddr * pGate));void ipRouteNetmaskTrim (int routeFormat, struct sockaddr * pNetmask);#ifdef __cplusplus}#endif#endif /* _INCrouteEnhLibh */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -