Annotation of embedaddon/bird/proto/radv/radv.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  *     BIRD -- Router Advertisement
                      3:  *
                      4:  *
                      5:  *     Can be freely distributed and used under the terms of the GNU GPL.
                      6:  */
                      7: 
                      8: #ifndef _BIRD_RADV_H_
                      9: #define _BIRD_RADV_H_
                     10: 
                     11: #include "nest/bird.h"
                     12: 
                     13: #include "lib/ip.h"
                     14: #include "lib/lists.h"
                     15: #include "lib/socket.h"
                     16: #include "lib/timer.h"
                     17: #include "lib/resource.h"
                     18: #include "nest/protocol.h"
                     19: #include "nest/iface.h"
                     20: #include "nest/route.h"
                     21: #include "nest/cli.h"
                     22: #include "nest/locks.h"
                     23: #include "conf/conf.h"
                     24: #include "lib/string.h"
                     25: 
                     26: 
                     27: #define ICMPV6_PROTO 58
                     28: 
                     29: #define ICMPV6_RS 133
                     30: #define ICMPV6_RA 134
                     31: 
                     32: #define MAX_INITIAL_RTR_ADVERTISEMENTS 3
                     33: #define MAX_INITIAL_RTR_ADVERT_INTERVAL 16
                     34: 
                     35: #define DEFAULT_MAX_RA_INT 600
                     36: #define DEFAULT_MIN_DELAY 3
                     37: #define DEFAULT_CURRENT_HOP_LIMIT 64
                     38: 
                     39: #define DEFAULT_VALID_LIFETIME 86400
                     40: #define DEFAULT_PREFERRED_LIFETIME 14400
                     41: 
                     42: #define DEFAULT_DNS_LIFETIME_MULT 3
                     43: 
                     44: 
                     45: struct radv_config
                     46: {
                     47:   struct proto_config c;
                     48:   list patt_list;              /* List of iface configs (struct radv_iface_config) */
                     49:   list pref_list;              /* Global list of prefix configs (struct radv_prefix_config) */
                     50:   list rdnss_list;             /* Global list of RDNSS configs (struct radv_rdnss_config) */
                     51:   list dnssl_list;             /* Global list of DNSSL configs (struct radv_dnssl_config) */
                     52: 
                     53:   ip_addr trigger_prefix;      /* Prefix of a trigger route, if defined */
                     54:   u8 trigger_pxlen;            /* Pxlen of a trigger route, if defined */
                     55:   u8 trigger_valid;            /* Whether a trigger route is defined */
                     56: };
                     57: 
                     58: struct radv_iface_config
                     59: {
                     60:   struct iface_patt i;
                     61:   list pref_list;              /* Local list of prefix configs (struct radv_prefix_config) */
                     62:   list rdnss_list;             /* Local list of RDNSS configs (struct radv_rdnss_config) */
                     63:   list dnssl_list;             /* Local list of DNSSL configs (struct radv_dnssl_config) */
                     64: 
                     65:   u32 min_ra_int;              /* Standard options from RFC 4261 */
                     66:   u32 max_ra_int;
                     67:   u32 min_delay;
                     68: 
                     69:   u8 rdnss_local;              /* Global list is not used for RDNSS */
                     70:   u8 dnssl_local;              /* Global list is not used for DNSSL */
                     71: 
                     72:   u8 managed;                  /* Standard options from RFC 4261 */
                     73:   u8 other_config;
                     74:   u32 link_mtu;
                     75:   u32 reachable_time;
                     76:   u32 retrans_timer;
                     77:   u32 current_hop_limit;
                     78:   u32 default_lifetime;
                     79:   u8 default_lifetime_sensitive; /* Whether default_lifetime depends on trigger */
                     80:   u8 default_preference;       /* Default Router Preference (RFC 4191) */
                     81: };
                     82: 
                     83: struct radv_prefix_config
                     84: {
                     85:   node n;
                     86:   ip_addr prefix;
                     87:   uint pxlen;
                     88: 
                     89:   u8 skip;                     /* Do not include this prefix to RA */
                     90:   u8 onlink;                   /* Standard options from RFC 4261 */
                     91:   u8 autonomous;
                     92:   u32 valid_lifetime;
                     93:   u32 preferred_lifetime;
                     94:   u8 valid_lifetime_sensitive;  /* Whether valid_lifetime depends on trigger */
                     95:   u8 preferred_lifetime_sensitive; /* Whether preferred_lifetime depends on trigger */
                     96: };
                     97: 
                     98: struct radv_rdnss_config
                     99: {
                    100:   node n;
                    101:   u32 lifetime;                        /* Valid if lifetime_mult is 0 */
                    102:   u16 lifetime_mult;           /* Lifetime specified as multiple of max_ra_int */
                    103:   ip_addr server;              /* IP address of recursive DNS server */
                    104: };
                    105: 
                    106: struct radv_dnssl_config
                    107: {
                    108:   node n;
                    109:   u32 lifetime;                        /* Valid if lifetime_mult is 0 */
                    110:   u16 lifetime_mult;           /* Lifetime specified as multiple of max_ra_int */
                    111:   u8 dlen_first;               /* Length of first label in domain */
                    112:   u8 dlen_all;                 /* Both dlen_ filled in radv_process_domain() */
                    113:   char *domain;                        /* Domain for DNS search list, in processed form */
                    114: };
                    115: 
                    116: 
                    117: struct proto_radv
                    118: {
                    119:   struct proto p;
                    120:   list iface_list;             /* List of active ifaces */
                    121:   u8 active;                   /* Whether radv is active w.r.t. triggers */
                    122: };
                    123: 
                    124: struct radv_iface
                    125: {
                    126:   node n;
                    127:   struct proto_radv *ra;
                    128:   struct radv_iface_config *cf;        /* Related config, must be updated in reconfigure */
                    129:   struct iface *iface;
                    130:   struct ifa *addr;            /* Link-local address of iface */
                    131: 
                    132:   timer *timer;
                    133:   struct object_lock *lock;
                    134:   sock *sk;
                    135: 
                    136:   bird_clock_t last;           /* Time of last sending of RA */
                    137:   u16 plen;                    /* Length of prepared RA in tbuf, or 0 if not valid */
                    138:   byte initial;                        /* List of active ifaces */
                    139: };
                    140: 
                    141: #define RA_EV_INIT 1           /* Switch to initial mode */
                    142: #define RA_EV_CHANGE 2         /* Change of options or prefixes */
                    143: #define RA_EV_RS 3             /* Received RS */
                    144: 
                    145: /* Default Router Preferences (RFC 4191) */
                    146: #define RA_PREF_LOW    0x18
                    147: #define RA_PREF_MEDIUM 0x00
                    148: #define RA_PREF_HIGH   0x08
                    149: #define RA_PREF_MASK   0x18
                    150: 
                    151: 
                    152: #ifdef LOCAL_DEBUG
                    153: #define RADV_FORCE_DEBUG 1
                    154: #else
                    155: #define RADV_FORCE_DEBUG 0
                    156: #endif
                    157: #define RADV_TRACE(flags, msg, args...) do { if ((ra->p.debug & flags) || RADV_FORCE_DEBUG) \
                    158:        log(L_TRACE "%s: " msg, ra->p.name , ## args ); } while(0)
                    159: 
                    160: 
                    161: /* radv.c */
                    162: void radv_iface_notify(struct radv_iface *ifa, int event);
                    163: 
                    164: /* packets.c */
                    165: int radv_process_domain(struct radv_dnssl_config *cf);
                    166: void radv_send_ra(struct radv_iface *ifa, int shutdown);
                    167: int radv_sk_open(struct radv_iface *ifa);
                    168: 
                    169: 
                    170: 
                    171: #endif /* _BIRD_RADV_H_ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>