Annotation of embedaddon/bird/proto/radv/radv.h, revision 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>