📄 in6_var.h
字号:
#define SIOCGSCOPE6DEF _IOWR('i', 90, struct in6_ifreq)#define SIOCSIFPREFIX_IN6 _IOW('i', 100, struct in6_prefixreq) /* set */#define SIOCGIFPREFIX_IN6 _IOWR('i', 101, struct in6_prefixreq) /* get */#define SIOCDIFPREFIX_IN6 _IOW('i', 102, struct in6_prefixreq) /* del */#define SIOCAIFPREFIX_IN6 _IOW('i', 103, struct in6_rrenumreq) /* add */#define SIOCCIFPREFIX_IN6 _IOW('i', 104, \ struct in6_rrenumreq) /* change */#define SIOCSGIFPREFIX_IN6 _IOW('i', 105, \ struct in6_rrenumreq) /* set global */#define SIOCGETSGCNT_IN6 _IOWR('u', 106, \ struct sioc_sg_req6) /* get s,g pkt cnt */#define SIOCGETMIFCNT_IN6 _IOWR('u', 107, \ struct sioc_mif_req6) /* get pkt cnt per if */#define SIOCAADDRCTL_POLICY _IOW('u', 108, struct in6_addrpolicy)#define SIOCDADDRCTL_POLICY _IOW('u', 109, struct in6_addrpolicy)#define IN6_IFF_ANYCAST 0x01 /* anycast address */#define IN6_IFF_TENTATIVE 0x02 /* tentative address */#define IN6_IFF_DUPLICATED 0x04 /* DAD detected duplicate */#define IN6_IFF_DETACHED 0x08 /* may be detached from the link */#define IN6_IFF_DEPRECATED 0x10 /* deprecated address */#define IN6_IFF_NODAD 0x20 /* don't perform DAD on this address * (used only at first SIOC* call) */#define IN6_IFF_AUTOCONF 0x40 /* autoconfigurable address. */#define IN6_IFF_TEMPORARY 0x80 /* temporary (anonymous) address. */#define IN6_IFF_HOME 0x100 /* MIP6:home address */#define IN6_IFF_DEREGISTERING 0x200 /* MIP6:deregistering address */#define IN6_IFF_SUBNETANYCAST 0x4000 /* subnet anycast address *//* do not input/output */#define IN6_IFF_NOTREADY (IN6_IFF_TENTATIVE|IN6_IFF_DUPLICATED)/* flags which cannot be changed by hand */#ifndef MIP6#define IN6_IFF_READONLY (IN6_IFF_DUPLICATED|IN6_IFF_DETACHED|\ IN6_IFF_NODAD|IN6_IFF_TEMPORARY)#else/* Mobile IPv6 userland program requires to assign an address with NODAD. */#define IN6_IFF_READONLY (IN6_IFF_DUPLICATED|IN6_IFF_DETACHED|\ IN6_IFF_TEMPORARY)#endif /* !MIP6 */#ifdef _WRS_KERNEL#define IN6_ARE_SCOPE_CMP(a,b) ((a)-(b))#define IN6_ARE_SCOPE_EQUAL(a,b) ((a)==(b))#ifndef VIRTUAL_STACKextern struct in6_ifaddr *_in6_ifaddr;extern struct icmp6stat _icmp6stat;#endif /*VIRTUAL_STACK*/#define in6_ifstat_inc(ifp, tag) \do { \ if (ifp) \ ((struct in6_ifextra *)((ifp)->if_afdata[AF_INET6]))->in6_ifstat->tag++; \} while (0)extern struct ifqueue ip6intrq; /* IP6 packet input queue (loopback) */extern INTRQ_QJOB ip6intrqJob;extern struct in6_addr zeroin6_addr;extern u_char inet6ctlerrmap[];extern unsigned long in6_maxmtu;/* * Macro for finding the internet address structure (in6_ifaddr) corresponding * to a given interface (ifnet structure). */#define IFP_TO_IA6(ifp, ia) \/* struct ifnet *ifp; */ \/* struct in6_ifaddr *ia; */ \do { \ struct ifaddr *ifa; \ for (ifa = (ifp)->if_addrlist.tqh_first; ifa; ifa = ifa->ifa_list.tqe_next) { \ if (!ifa->ifa_addr) \ continue; \ if (ifa->ifa_addr->sa_family == AF_INET6) \ break; \ } \ (ia) = (struct in6_ifaddr *)ifa; \} while (0)/* * Multi-cast membership entry. One for each group/ifp that a PCB * belongs to. */struct in6_multi_mship { struct in6_multi *i6mm_maddr; /* Multicast address pointer */ struct sock_msf *i6mm_msf; /* Multicast source filters */ LIST_ENTRY(in6_multi_mship) i6mm_chain; /* multicast options chain */};/* * Per-interface router version information; referred to when MLDv1/v2 coexists. */struct router6_info { struct ifnet *rt6i_ifp; int rt6i_type; /* type of router which is querier on this interface */ u_int rt6i_timer1; /* MLDv1 Querier Present timer */ u_int rt6i_timer2; /* MLDv2 Querier Present timer */ u_int rt6i_qrv; /* Querier Robustness Variable */ u_int rt6i_qqi; /* Querier Interval Variable */ u_int rt6i_qri; /* Querier Response Interval */ struct router6_info *rt6i_next;};struct callout;struct in6_multi { LIST_ENTRY(in6_multi) in6m_entry; /* list glue */ struct in6_addr in6m_addr; /* IP6 multicast address */ struct ifnet *in6m_ifp; /* back pointer to ifnet */ struct ifmultiaddr *in6m_ifma; /* back pointer to ifmultiaddr */ u_int in6m_refcount; /* # membership claims by sockets */ u_int in6m_state; /* state of the membership */ struct router6_info *in6m_rti; /* router info */ struct in6_multi_source *in6m_source; /* filtered source list */#ifdef MLDv2 u_int in6m_timer; /* MLD6 listener report timer */#else int in6m_timer; /* delay to send the 1st report */ struct timeval in6m_timer_expire; /* when the timer expires */ struct callout *in6m_timer_ch;#endif};#define IN6M_TIMER_UNDEF -1/* flags to in6_update_ifa */#define IN6_IFAUPDATE_DADDELAY 0x1 /* first time to configure an address */extern LIST_HEAD(in6_multihead, in6_multi) _in6_multihead;/* * Structure used by macros below to remember position when stepping through * all of the in6_multi records. */struct in6_multistep { struct in6_ifaddr *i_ia; struct in6_multi *i_in6m;};/* * Macros for looking up the in6_multi record for a given IP6 multicast * address on a given interface. If no matching record is found, "in6m" * returns NULL. */#define IN6_LOOKUP_MULTI(addr, ifp, in6m) \/* struct in6_addr addr; */ \/* struct ifnet *ifp; */ \/* struct in6_multi *in6m; */ \do { \ struct ifmultiaddr *ifma; \ for (ifma = (ifp)->if_multiaddrs.lh_first; ifma; \ ifma = ifma->ifma_link.le_next) { \ if (ifma->ifma_addr->sa_family == AF_INET6 \ && IN6_ARE_ADDR_EQUAL(&((struct sockaddr_in6 *)ifma->ifma_addr)->sin6_addr, \ &(addr))) \ break; \ } \ (in6m) = (struct in6_multi *)(ifma ? ifma->ifma_protospec : 0); \} while(0)/* * Macro to step through all of the in6_multi records, one at a time. * The current position is remembered in "step", which the caller must * provide. IN6_FIRST_MULTI(), below, must be called to initialize "step" * and get the first record. Both macros return a NULL "in6m" when there * are no remaining records. */#define IN6_NEXT_MULTI(step, in6m) \/* struct in6_multistep step; */ \/* struct in6_multi *in6m; */ \do { \ if (((in6m) = (step).i_in6m) != NULL) \ (step).i_in6m = (step).i_in6m->in6m_entry.le_next; \} while(0)#define IN6_FIRST_MULTI(step, in6m) \/* struct in6_multistep step; */ \/* struct in6_multi *in6m */ \do { \ (step).i_in6m = _in6_multihead.lh_first; \ IN6_NEXT_MULTI((step), (in6m)); \} while(0)/* * Macros for looking up the in6_multi_mship record for a given IP6 multicast * address on a given interface. If no matching record is found, "imm" * returns NULL. */#define IN6_LOOKUP_MSHIP(addr, ifp, imop, imm) \/* struct in6_addr addr; */ \/* struct ifnet *ifp; */ \/* struct ip6_moptions *imop */ \/* struct in6_multi_mship *imm; */ \do { \ for ((imm) = (imop)->im6o_memberships.lh_first; \ (imm) != NULL; (imm) = (imm)->i6mm_chain.le_next) { \ if ((imm)->i6mm_maddr->in6m_ifp != (ifp)) \ continue; \ if (!IN6_ARE_ADDR_EQUAL(&(imm)->i6mm_maddr->in6m_addr, \ &(addr))) \ continue; \ break; \ } \} while (/*CONSTCOND*/ 0) struct in6_multi *in6_addmulti __P((struct in6_addr *, struct ifnet *, int *, int));void in6_delmulti __P((struct in6_multi *));struct in6_multi_mship *in6_joingroup __P((struct ifnet *, struct in6_addr *, int *, int));int in6_leavegroup __P((struct in6_multi_mship *));#ifdef MLDV2struct in6_multi *in6_addmulti2(struct in6_addr *, struct ifnet *, int *, u_int16_t, struct sockaddr_storage *, u_int, int);void in6_delmulti2(struct in6_multi *, int *, u_int16_t, struct sockaddr_storage *, u_int, int);struct in6_multi *in6_modmulti2(struct in6_addr *, struct ifnet *, int *, u_int16_t, struct sockaddr_storage *, u_int, u_int16_t, struct sockaddr_storage *, u_int, int, u_int);#endifint in6_mask2len __P((struct in6_addr *, u_char *));extern void in6_len2mask __P((struct in6_addr *, int));int in6_control __P((struct socket *, u_long, caddr_t, struct ifnet *, struct proc *));int in6_update_ifa __P((struct ifnet *, struct in6_aliasreq *, struct in6_ifaddr *, int));void in6_purgeaddr __P((struct ifaddr *));int in6if_do_dad __P((struct ifnet *));void in6_purgeif __P((struct ifnet *));void in6_savemkludge __P((struct in6_ifaddr *));void in6_setmaxmtu __P((void));int in6_if2idlen __P((struct ifnet *));void in6_restoremkludge __P((struct in6_ifaddr *, struct ifnet *));void in6_createmkludge __P((struct ifnet *));void in6_purgemkludge __P((struct ifnet *));struct in6_ifaddr *in6ifa_ifpforlinklocal __P((struct ifnet *, int));struct in6_ifaddr *in6ifa_ifpwithaddr __P((struct ifnet *, struct in6_addr *));char *ip6_sprintf __P((const struct in6_addr *));int in6_addr2zoneid __P((struct ifnet *, struct in6_addr *, u_int32_t *));int in6_matchlen __P((struct in6_addr *, struct in6_addr *));int in6_are_prefix_equal __P((struct in6_addr *, struct in6_addr *, int));void in6_prefixlen2mask __P((struct in6_addr *, int));void in6_purgeprefix __P((struct ifnet *));int in6_embedscope __P((struct in6_addr *, const struct sockaddr_in6 *));int in6_recoverscope __P((struct sockaddr_in6 *, const struct in6_addr *, struct ifnet *));void in6_clearscope __P((struct in6_addr *));int in6_src_ioctl __P((u_long, caddr_t));void *in6_ifafdata_init(struct ifnet *);void in6_ifafdata_delete(struct ifnet *);#endif /* _WRS_KERNEL */#ifdef __cplusplus}#endif#endif /* _NETINET6_IN6_VAR_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -