]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - usr.sbin/rtadvd/rtadvd.h
unfinished sblive driver, playback/mixer only for now - not enabled in
[FreeBSD/FreeBSD.git] / usr.sbin / rtadvd / rtadvd.h
1 /*
2  * Copyright (C) 1998 WIDE Project.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. Neither the name of the project nor the names of its contributors
14  *    may be used to endorse or promote products derived from this software
15  *    without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  *
29  * $FreeBSD$
30  */
31
32 #define ALLNODES "ff02::1"
33 #define ALLROUTERS "ff02::2"
34 #define ALLSITEROUTERS "ff05::2"
35 #define ANY "::"
36 #define RTSOLLEN 8
37
38 /* protocol constants and default values */
39 #define DEF_MAXRTRADVINTERVAL 600
40 #define DEF_ADVLINKMTU 0
41 #define DEF_ADVREACHABLETIME 0
42 #define DEF_ADVRETRANSTIMER 0
43 #define DEF_ADVCURHOPLIMIT 64
44 #define DEF_ADVVALIDLIFETIME 2592000
45 #define DEF_ADVPREFERREDLIFETIME 604800
46
47 #define MAXROUTERLIFETIME 9000
48 #define MIN_MAXINTERVAL 4
49 #define MAX_MAXINTERVAL 1800
50 #define MIN_MININTERVAL 3
51 #define MAXREACHABLETIME 3600000
52
53 #define MAX_INITIAL_RTR_ADVERT_INTERVAL  16
54 #define MAX_INITIAL_RTR_ADVERTISEMENTS    3
55 #define MAX_FINAL_RTR_ADVERTISEMENTS      3
56 #define MIN_DELAY_BETWEEN_RAS             3
57 #define MAX_RA_DELAY_TIME                 500000 /* usec */
58
59 struct prefix {
60         struct  prefix *next;   /* forward link */
61         struct  prefix *prev;   /* previous link */
62
63         u_int32_t       validlifetime; /* AdvValidLifetime */
64         u_int32_t       preflifetime;   /* AdvPreferredLifetime */
65         u_int   onlinkflg;      /* bool: AdvOnLinkFlag */
66         u_int   autoconfflg;    /* bool: AdvAutonomousFlag */
67         int     prefixlen;
68         struct  in6_addr prefix;
69 };
70
71 struct  rainfo {
72         /* pointer for list */
73         struct  rainfo *next;
74
75         /* timer related parameters */
76         struct  rtadvd_timer *timer;
77         int     initcounter; /* counter for the first few advertisements */
78         struct  timeval lastsent; /* timestamp when the lates RA was sent */
79         int     waiting;                /* number of RS waiting for RA */
80
81         /* interface information */
82         int     ifindex;
83         int     advlinkopt;     /* bool: whether include link-layer addr opt */
84         struct  sockaddr_dl *sdl;
85         char    ifname[16];
86         int     phymtu;         /* mtu of the physical interface */
87
88         /* Router configuration variables */
89         u_short lifetime;       /* AdvDefaultLifetime */
90         u_int   maxinterval;    /* MaxRtrAdvInterval */
91         u_int   mininterval;    /* MinRtrAdvInterval */
92         int     managedflg;     /* AdvManagedFlag */
93         int     otherflg;       /* AdvOtherConfigFlag */
94         u_int32_t       linkmtu;        /* AdvLinkMTU */
95         u_int32_t       reachabletime; /* AdvReachableTime */
96         u_int32_t       retranstimer;   /* AdvRetransTimer */
97         u_int   hoplimit;       /* AdvCurHopLimit */
98         struct  prefix prefix;  /* AdvPrefixList(link head) */
99         int     pfxs;           /* number of prefixes */
100
101         /* actual RA packet data and its length */
102         size_t  ra_datalen;
103         u_char  *ra_data;
104 };
105
106 void    ra_timeout __P((void *));
107 void    ra_timer_update __P((void *, struct timeval *));