Merge branch 'multibind'
[l2tpns.git] / bgp.h
diff --git a/bgp.h b/bgp.h
index 6dbfbf8..8e636ab 100644 (file)
--- a/bgp.h
+++ b/bgp.h
@@ -1,5 +1,5 @@
 /* BGPv4 (RFC1771) */
 /* BGPv4 (RFC1771) */
-/* $Id: bgp.h,v 1.5 2005/06/04 15:42:35 bodea Exp $ */
+/* $Id: bgp.h,v 1.5 2005-06-04 15:42:35 bodea Exp $ */
 
 #ifndef __BGP_H__
 #define __BGP_H__
 
 #ifndef __BGP_H__
 #define __BGP_H__
@@ -67,6 +67,10 @@ struct bgp_mp_cap_param {
     uint8_t safi;
 } __attribute__ ((packed));
 
     uint8_t safi;
 } __attribute__ ((packed));
 
+/* bgp_mp_cap_param.afi */
+#define BGP_MP_AFI_RESERVED    0
+#define BGP_MP_AFI_IPv4                1
+#define BGP_MP_AFI_IPv6                2
 /* bgp_mp_cap_param.safi */
 #define BGP_MP_SAFI_UNICAST    1
 #define BGP_MP_SAFI_MULTICAST  2
 /* bgp_mp_cap_param.safi */
 #define BGP_MP_SAFI_UNICAST    1
 #define BGP_MP_SAFI_MULTICAST  2
@@ -209,10 +213,17 @@ struct bgp_buf {
     size_t done;                       /* bytes sent/recvd */
 };
 
     size_t done;                       /* bytes sent/recvd */
 };
 
+enum bgp_mp_handling {
+    HandleIPv6Routes,
+    DoesntHandleIPv6Routes,
+    HandlingUnknown,
+};
+
 /* state */
 struct bgp_peer {
     char name[32];                     /* peer name */
     in_addr_t addr;                    /* peer address */
 /* state */
 struct bgp_peer {
     char name[32];                     /* peer name */
     in_addr_t addr;                    /* peer address */
+    in_addr_t source_addr;             /* our source address */
     int as;                            /* AS number */
     int sock;
     enum bgp_state state;              /* FSM state */
     int as;                            /* AS number */
     int sock;
     enum bgp_state state;              /* FSM state */
@@ -237,7 +248,7 @@ struct bgp_peer {
     int path_attr_len_without_nexthop; /* length of path attrs  without NEXT_HOP */
     uint32_t events;                   /* events to poll */
     struct event_data edata;           /* poll data */
     int path_attr_len_without_nexthop; /* length of path attrs  without NEXT_HOP */
     uint32_t events;                   /* events to poll */
     struct event_data edata;           /* poll data */
-    int handle_ipv6_routes;            /* can handle IPv6 routes advertisements */
+    enum bgp_mp_handling mp_handling;  /* how it handles IPv6 routes advertisements */
     int update_routes6;                        /* UPDATE required for IPv6 routes */
     struct bgp_route6_list *routes6;   /* IPv6 routes known by this peer */
     char mp_reach_nlri_partial[BGP_PATH_ATTR_MP_REACH_NLRI_PARTIAL_SIZE];
     int update_routes6;                        /* UPDATE required for IPv6 routes */
     struct bgp_route6_list *routes6;   /* IPv6 routes known by this peer */
     char mp_reach_nlri_partial[BGP_PATH_ATTR_MP_REACH_NLRI_PARTIAL_SIZE];
@@ -255,20 +266,19 @@ extern int bgp_configured;
 /* actions */
 int bgp_setup(int as);
 int bgp_start(struct bgp_peer *peer, char *name, int as, int keepalive,
 /* actions */
 int bgp_setup(int as);
 int bgp_start(struct bgp_peer *peer, char *name, int as, int keepalive,
-    int hold, int enable);
+    int hold, struct in_addr update_source, int enable);
 
 void bgp_stop(struct bgp_peer *peer);
 void bgp_halt(struct bgp_peer *peer);
 int bgp_restart(struct bgp_peer *peer);
 
 void bgp_stop(struct bgp_peer *peer);
 void bgp_halt(struct bgp_peer *peer);
 int bgp_restart(struct bgp_peer *peer);
-int bgp_add_route(in_addr_t ip, in_addr_t mask);
+int bgp_add_route(in_addr_t ip, int prefixlen);
 int bgp_add_route6(struct in6_addr ip, int prefixlen);
 int bgp_add_route6(struct in6_addr ip, int prefixlen);
-int bgp_del_route(in_addr_t ip, in_addr_t mask);
+int bgp_del_route(in_addr_t ip, int prefixlen);
 int bgp_del_route6(struct in6_addr ip, int prefixlen);
 void bgp_enable_routing(int enable);
 int bgp_set_poll(void);
 int bgp_process(uint32_t events[]);
 int bgp_del_route6(struct in6_addr ip, int prefixlen);
 void bgp_enable_routing(int enable);
 int bgp_set_poll(void);
 int bgp_process(uint32_t events[]);
+void bgp_process_peers_timers();
 char const *bgp_state_str(enum bgp_state state);
 
 char const *bgp_state_str(enum bgp_state state);
 
-extern char const *cvs_id_bgp;
-
 #endif /* __BGP_H__ */
 #endif /* __BGP_H__ */