diff options
Diffstat (limited to 'usr.sbin/rtadvd/rtadvd.h')
-rw-r--r-- | usr.sbin/rtadvd/rtadvd.h | 114 |
1 files changed, 67 insertions, 47 deletions
diff --git a/usr.sbin/rtadvd/rtadvd.h b/usr.sbin/rtadvd/rtadvd.h index 53bc555..ac8ce99 100644 --- a/usr.sbin/rtadvd/rtadvd.h +++ b/usr.sbin/rtadvd/rtadvd.h @@ -113,28 +113,26 @@ struct prefix { */ struct rtadvd_timer *pfx_timer; - u_int32_t pfx_validlifetime; /* AdvValidLifetime */ - long pfx_vltimeexpire; /* Expiration of vltime */ - u_int32_t pfx_preflifetime; /* AdvPreferredLifetime */ - long pfx_pltimeexpire; /* Expiration of pltime */ - u_int pfx_onlinkflg; /* bool: AdvOnLinkFlag */ - u_int pfx_autoconfflg; /* bool: AdvAutonomousFlag */ + uint32_t pfx_validlifetime; /* AdvValidLifetime */ + uint32_t pfx_vltimeexpire; /* Expiration of vltime */ + uint32_t pfx_preflifetime; /* AdvPreferredLifetime */ + uint32_t pfx_pltimeexpire; /* Expiration of pltime */ + int pfx_onlinkflg; /* bool: AdvOnLinkFlag */ + int pfx_autoconfflg; /* bool: AdvAutonomousFlag */ int pfx_prefixlen; int pfx_origin; /* From kernel or config */ struct in6_addr pfx_prefix; }; -#ifdef ROUTEINFO struct rtinfo { TAILQ_ENTRY(rtinfo) rti_next; - u_int32_t rti_ltime; /* route lifetime */ - u_int rti_rtpref; /* route preference */ + uint32_t rti_ltime; /* route lifetime */ + int rti_rtpref; /* route preference */ int rti_prefixlen; struct in6_addr rti_prefix; }; -#endif struct rdnss_addr { TAILQ_ENTRY(rdnss_addr) ra_next; @@ -146,8 +144,7 @@ struct rdnss { TAILQ_ENTRY(rdnss) rd_next; TAILQ_HEAD(, rdnss_addr) rd_list; /* list of DNS servers */ - int rd_cnt; /* number of DNS servers */ - u_int32_t rd_ltime; /* number of seconds valid */ + uint32_t rd_ltime; /* number of seconds valid */ }; /* @@ -172,7 +169,7 @@ struct dnssl { TAILQ_ENTRY(dnssl) dn_next; TAILQ_HEAD(, dnssl_addr) dn_list; /* list of search domains */ - u_int32_t dn_ltime; /* number of seconds valid */ + uint32_t dn_ltime; /* number of seconds valid */ }; struct soliciter { @@ -185,48 +182,37 @@ struct rainfo { /* pointer for list */ TAILQ_ENTRY(rainfo) rai_next; - /* timer related parameters */ - struct rtadvd_timer *rai_timer; - /* counter for the first few advertisements */ - int rai_initcounter; - /* timestamp when the latest RA was sent */ - struct timeval rai_lastsent; - /* number of RS waiting for RA */ - int rai_waiting; - /* interface information */ struct ifinfo *rai_ifinfo; - int rai_advlinkopt; /* bool: whether include link-layer addr opt */ + int rai_advlinkopt; /* bool: whether include link-layer addr opt */ int rai_advifprefix; /* bool: gather IF prefixes? */ /* Router configuration variables */ - u_short rai_lifetime; /* AdvDefaultLifetime */ - u_int rai_maxinterval; /* MaxRtrAdvInterval */ - u_int rai_mininterval; /* MinRtrAdvInterval */ + uint16_t rai_lifetime; /* AdvDefaultLifetime */ + uint16_t rai_maxinterval; /* MaxRtrAdvInterval */ + uint16_t rai_mininterval; /* MinRtrAdvInterval */ int rai_managedflg; /* AdvManagedFlag */ int rai_otherflg; /* AdvOtherConfigFlag */ int rai_rtpref; /* router preference */ - u_int32_t rai_linkmtu; /* AdvLinkMTU */ - u_int32_t rai_reachabletime; /* AdvReachableTime */ - u_int32_t rai_retranstimer; /* AdvRetransTimer */ - u_int rai_hoplimit; /* AdvCurHopLimit */ + uint32_t rai_linkmtu; /* AdvLinkMTU */ + uint32_t rai_reachabletime; /* AdvReachableTime */ + uint32_t rai_retranstimer; /* AdvRetransTimer */ + uint8_t rai_hoplimit; /* AdvCurHopLimit */ TAILQ_HEAD(, prefix) rai_prefix;/* AdvPrefixList(link head) */ int rai_pfxs; /* number of prefixes */ - long rai_clockskew; /* used for consisitency check of lifetimes */ + uint16_t rai_clockskew; /* used for consisitency check of lifetimes */ TAILQ_HEAD(, rdnss) rai_rdnss; /* DNS server list */ TAILQ_HEAD(, dnssl) rai_dnssl; /* search domain list */ -#ifdef ROUTEINFO TAILQ_HEAD(, rtinfo) rai_route; /* route information option (link head) */ int rai_routes; /* number of route information options */ -#endif /* actual RA packet data and its length */ size_t rai_ra_datalen; - u_char *rai_ra_data; + char *rai_ra_data; /* info about soliciter */ TAILQ_HEAD(, soliciter) rai_soliciter; /* recent solication source */ @@ -235,29 +221,63 @@ struct rainfo { /* RA information list */ extern TAILQ_HEAD(railist_head_t, rainfo) railist; +/* + * ifi_state: + * + * (INIT) + * | + * | update_ifinfo() + * | update_persist_ifinfo() + * v + * UNCONFIGURED + * | ^ + * loadconfig()| |rm_ifinfo(), ra_output() + * (MC join)| |(MC leave) + * | | + * | | + * v | + * TRANSITIVE + * | ^ + * ra_output()| |getconfig() + * | | + * | | + * | | + * v | + * CONFIGURED + * + * + */ #define IFI_STATE_UNCONFIGURED 0 #define IFI_STATE_CONFIGURED 1 +#define IFI_STATE_TRANSITIVE 2 struct ifinfo { TAILQ_ENTRY(ifinfo) ifi_next; - u_int16_t ifi_state; - u_int16_t ifi_persist; - u_int16_t ifi_ifindex; + uint16_t ifi_state; + uint16_t ifi_persist; + uint16_t ifi_ifindex; char ifi_ifname[IFNAMSIZ]; - u_int8_t ifi_type; - u_int16_t ifi_flags; - u_int32_t ifi_nd_flags; - u_int32_t ifi_phymtu; + uint8_t ifi_type; + uint16_t ifi_flags; + uint32_t ifi_nd_flags; + uint32_t ifi_phymtu; struct sockaddr_dl ifi_sdl; struct rainfo *ifi_rainfo; + struct rainfo *ifi_rainfo_trans; + uint16_t ifi_burstcount; + uint32_t ifi_burstinterval; + struct rtadvd_timer *ifi_ra_timer; + /* timestamp when the latest RA was sent */ + struct timeval ifi_ra_lastsent; + uint16_t ifi_rs_waitcount; /* statistics */ - u_int64_t ifi_raoutput; /* # of RAs sent */ - u_int64_t ifi_rainput; /* # of RAs received */ - u_int64_t ifi_rainconsistent; /* # of inconsistent recv'd RAs */ - u_int64_t ifi_rsinput; /* # of RSs received */ + uint64_t ifi_raoutput; /* # of RAs sent */ + uint64_t ifi_rainput; /* # of RAs received */ + uint64_t ifi_rainconsistent; /* # of inconsistent recv'd RAs */ + uint64_t ifi_rsinput; /* # of RSs received */ }; /* Interface list */ @@ -267,7 +287,7 @@ extern char *mcastif; struct rtadvd_timer *ra_timeout(void *); void ra_timer_update(void *, struct timeval *); -void ra_output(struct rainfo *); +void ra_output(struct ifinfo *); int prefix_match(struct in6_addr *, int, struct in6_addr *, int); @@ -275,4 +295,4 @@ struct ifinfo *if_indextoifinfo(int); struct prefix *find_prefix(struct rainfo *, struct in6_addr *, int); void rtadvd_set_reload(int); -void rtadvd_set_die(int); +void rtadvd_set_shutdown(int); |