Annotation of embedaddon/quagga/bgpd/bgpd.h, revision 1.1
1.1 ! misho 1: /* BGP message definition header.
! 2: Copyright (C) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro
! 3:
! 4: This file is part of GNU Zebra.
! 5:
! 6: GNU Zebra is free software; you can redistribute it and/or modify it
! 7: under the terms of the GNU General Public License as published by the
! 8: Free Software Foundation; either version 2, or (at your option) any
! 9: later version.
! 10:
! 11: GNU Zebra is distributed in the hope that it will be useful, but
! 12: WITHOUT ANY WARRANTY; without even the implied warranty of
! 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! 14: General Public License for more details.
! 15:
! 16: You should have received a copy of the GNU General Public License
! 17: along with GNU Zebra; see the file COPYING. If not, write to the Free
! 18: Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! 19: 02111-1307, USA. */
! 20:
! 21: #ifndef _QUAGGA_BGPD_H
! 22: #define _QUAGGA_BGPD_H
! 23:
! 24: /* For union sockunion. */
! 25: #include "sockunion.h"
! 26:
! 27: /* Typedef BGP specific types. */
! 28: typedef u_int32_t as_t;
! 29: typedef u_int16_t as16_t; /* we may still encounter 16 Bit asnums */
! 30: typedef u_int16_t bgp_size_t;
! 31:
! 32: /* BGP master for system wide configurations and variables. */
! 33: struct bgp_master
! 34: {
! 35: /* BGP instance list. */
! 36: struct list *bgp;
! 37:
! 38: /* BGP thread master. */
! 39: struct thread_master *master;
! 40:
! 41: /* work queues */
! 42: struct work_queue *process_main_queue;
! 43: struct work_queue *process_rsclient_queue;
! 44:
! 45: /* Listening sockets */
! 46: struct list *listen_sockets;
! 47:
! 48: /* BGP port number. */
! 49: u_int16_t port;
! 50:
! 51: /* Listener address */
! 52: char *address;
! 53:
! 54: /* BGP start time. */
! 55: time_t start_time;
! 56:
! 57: /* Various BGP global configuration. */
! 58: u_char options;
! 59: #define BGP_OPT_NO_FIB (1 << 0)
! 60: #define BGP_OPT_MULTIPLE_INSTANCE (1 << 1)
! 61: #define BGP_OPT_CONFIG_CISCO (1 << 2)
! 62: };
! 63:
! 64: /* BGP instance structure. */
! 65: struct bgp
! 66: {
! 67: /* AS number of this BGP instance. */
! 68: as_t as;
! 69:
! 70: /* Name of this BGP instance. */
! 71: char *name;
! 72:
! 73: /* Reference count to allow peer_delete to finish after bgp_delete */
! 74: int lock;
! 75:
! 76: /* Self peer. */
! 77: struct peer *peer_self;
! 78:
! 79: /* BGP peer. */
! 80: struct list *peer;
! 81:
! 82: /* BGP peer group. */
! 83: struct list *group;
! 84:
! 85: /* BGP route-server-clients. */
! 86: struct list *rsclient;
! 87:
! 88: /* BGP configuration. */
! 89: u_int16_t config;
! 90: #define BGP_CONFIG_ROUTER_ID (1 << 0)
! 91: #define BGP_CONFIG_CLUSTER_ID (1 << 1)
! 92: #define BGP_CONFIG_CONFEDERATION (1 << 2)
! 93:
! 94: /* BGP router identifier. */
! 95: struct in_addr router_id;
! 96: struct in_addr router_id_static;
! 97:
! 98: /* BGP route reflector cluster ID. */
! 99: struct in_addr cluster_id;
! 100:
! 101: /* BGP confederation information. */
! 102: as_t confed_id;
! 103: as_t *confed_peers;
! 104: int confed_peers_cnt;
! 105:
! 106: /* BGP flags. */
! 107: u_int16_t flags;
! 108: #define BGP_FLAG_ALWAYS_COMPARE_MED (1 << 0)
! 109: #define BGP_FLAG_DETERMINISTIC_MED (1 << 1)
! 110: #define BGP_FLAG_MED_MISSING_AS_WORST (1 << 2)
! 111: #define BGP_FLAG_MED_CONFED (1 << 3)
! 112: #define BGP_FLAG_NO_DEFAULT_IPV4 (1 << 4)
! 113: #define BGP_FLAG_NO_CLIENT_TO_CLIENT (1 << 5)
! 114: #define BGP_FLAG_ENFORCE_FIRST_AS (1 << 6)
! 115: #define BGP_FLAG_COMPARE_ROUTER_ID (1 << 7)
! 116: #define BGP_FLAG_ASPATH_IGNORE (1 << 8)
! 117: #define BGP_FLAG_IMPORT_CHECK (1 << 9)
! 118: #define BGP_FLAG_NO_FAST_EXT_FAILOVER (1 << 10)
! 119: #define BGP_FLAG_LOG_NEIGHBOR_CHANGES (1 << 11)
! 120: #define BGP_FLAG_GRACEFUL_RESTART (1 << 12)
! 121: #define BGP_FLAG_ASPATH_CONFED (1 << 13)
! 122:
! 123: /* BGP Per AF flags */
! 124: u_int16_t af_flags[AFI_MAX][SAFI_MAX];
! 125: #define BGP_CONFIG_DAMPENING (1 << 0)
! 126:
! 127: /* Static route configuration. */
! 128: struct bgp_table *route[AFI_MAX][SAFI_MAX];
! 129:
! 130: /* Aggregate address configuration. */
! 131: struct bgp_table *aggregate[AFI_MAX][SAFI_MAX];
! 132:
! 133: /* BGP routing information base. */
! 134: struct bgp_table *rib[AFI_MAX][SAFI_MAX];
! 135:
! 136: /* BGP redistribute configuration. */
! 137: u_char redist[AFI_MAX][ZEBRA_ROUTE_MAX];
! 138:
! 139: /* BGP redistribute metric configuration. */
! 140: u_char redist_metric_flag[AFI_MAX][ZEBRA_ROUTE_MAX];
! 141: u_int32_t redist_metric[AFI_MAX][ZEBRA_ROUTE_MAX];
! 142:
! 143: /* BGP redistribute route-map. */
! 144: struct
! 145: {
! 146: char *name;
! 147: struct route_map *map;
! 148: } rmap[AFI_MAX][ZEBRA_ROUTE_MAX];
! 149:
! 150: /* BGP distance configuration. */
! 151: u_char distance_ebgp;
! 152: u_char distance_ibgp;
! 153: u_char distance_local;
! 154:
! 155: /* BGP default local-preference. */
! 156: u_int32_t default_local_pref;
! 157:
! 158: /* BGP default timer. */
! 159: u_int32_t default_holdtime;
! 160: u_int32_t default_keepalive;
! 161:
! 162: /* BGP graceful restart */
! 163: u_int32_t restart_time;
! 164: u_int32_t stalepath_time;
! 165: };
! 166:
! 167: /* BGP peer-group support. */
! 168: struct peer_group
! 169: {
! 170: /* Name of the peer-group. */
! 171: char *name;
! 172:
! 173: /* Pointer to BGP. */
! 174: struct bgp *bgp;
! 175:
! 176: /* Peer-group client list. */
! 177: struct list *peer;
! 178:
! 179: /* Peer-group config */
! 180: struct peer *conf;
! 181: };
! 182:
! 183: /* BGP Notify message format. */
! 184: struct bgp_notify
! 185: {
! 186: u_char code;
! 187: u_char subcode;
! 188: char *data;
! 189: bgp_size_t length;
! 190: };
! 191:
! 192: /* Next hop self address. */
! 193: struct bgp_nexthop
! 194: {
! 195: struct interface *ifp;
! 196: struct in_addr v4;
! 197: #ifdef HAVE_IPV6
! 198: struct in6_addr v6_global;
! 199: struct in6_addr v6_local;
! 200: #endif /* HAVE_IPV6 */
! 201: };
! 202:
! 203: /* BGP router distinguisher value. */
! 204: #define BGP_RD_SIZE 8
! 205:
! 206: struct bgp_rd
! 207: {
! 208: u_char val[BGP_RD_SIZE];
! 209: };
! 210:
! 211: #define RMAP_IN 0
! 212: #define RMAP_OUT 1
! 213: #define RMAP_IMPORT 2
! 214: #define RMAP_EXPORT 3
! 215: #define RMAP_MAX 4
! 216:
! 217: /* BGP filter structure. */
! 218: struct bgp_filter
! 219: {
! 220: /* Distribute-list. */
! 221: struct
! 222: {
! 223: char *name;
! 224: struct access_list *alist;
! 225: } dlist[FILTER_MAX];
! 226:
! 227: /* Prefix-list. */
! 228: struct
! 229: {
! 230: char *name;
! 231: struct prefix_list *plist;
! 232: } plist[FILTER_MAX];
! 233:
! 234: /* Filter-list. */
! 235: struct
! 236: {
! 237: char *name;
! 238: struct as_list *aslist;
! 239: } aslist[FILTER_MAX];
! 240:
! 241: /* Route-map. */
! 242: struct
! 243: {
! 244: char *name;
! 245: struct route_map *map;
! 246: } map[RMAP_MAX];
! 247:
! 248: /* Unsuppress-map. */
! 249: struct
! 250: {
! 251: char *name;
! 252: struct route_map *map;
! 253: } usmap;
! 254: };
! 255:
! 256: /* BGP neighbor structure. */
! 257: struct peer
! 258: {
! 259: /* BGP structure. */
! 260: struct bgp *bgp;
! 261:
! 262: /* reference count, primarily to allow bgp_process'ing of route_node's
! 263: * to be done after a struct peer is deleted.
! 264: *
! 265: * named 'lock' for hysterical reasons within Quagga.
! 266: */
! 267: int lock;
! 268:
! 269: /* BGP peer group. */
! 270: struct peer_group *group;
! 271: u_char af_group[AFI_MAX][SAFI_MAX];
! 272:
! 273: /* Peer's remote AS number. */
! 274: as_t as;
! 275:
! 276: /* Peer's local AS number. */
! 277: as_t local_as;
! 278:
! 279: /* Peer's Change local AS number. */
! 280: as_t change_local_as;
! 281:
! 282: /* Remote router ID. */
! 283: struct in_addr remote_id;
! 284:
! 285: /* Local router ID. */
! 286: struct in_addr local_id;
! 287:
! 288: /* Peer specific RIB when configured as route-server-client. */
! 289: struct bgp_table *rib[AFI_MAX][SAFI_MAX];
! 290:
! 291: /* Packet receive and send buffer. */
! 292: struct stream *ibuf;
! 293: struct stream_fifo *obuf;
! 294: struct stream *work;
! 295:
! 296: /* Status of the peer. */
! 297: int status;
! 298: int ostatus;
! 299:
! 300: /* Peer index, used for dumping TABLE_DUMP_V2 format */
! 301: uint16_t table_dump_index;
! 302:
! 303: /* Peer information */
! 304: int fd; /* File descriptor */
! 305: int ttl; /* TTL of TCP connection to the peer. */
! 306: int gtsm_hops; /* minimum hopcount to peer */
! 307: char *desc; /* Description of the peer. */
! 308: unsigned short port; /* Destination port for peer */
! 309: char *host; /* Printable address of the peer. */
! 310: union sockunion su; /* Sockunion address of the peer. */
! 311: time_t uptime; /* Last Up/Down time */
! 312: time_t readtime; /* Last read time */
! 313: time_t resettime; /* Last reset time */
! 314:
! 315: unsigned int ifindex; /* ifindex of the BGP connection. */
! 316: char *ifname; /* bind interface name. */
! 317: char *update_if;
! 318: union sockunion *update_source;
! 319: struct zlog *log;
! 320:
! 321: union sockunion *su_local; /* Sockunion of local address. */
! 322: union sockunion *su_remote; /* Sockunion of remote address. */
! 323: int shared_network; /* Is this peer shared same network. */
! 324: struct bgp_nexthop nexthop; /* Nexthop */
! 325:
! 326: /* Peer address family configuration. */
! 327: u_char afc[AFI_MAX][SAFI_MAX];
! 328: u_char afc_nego[AFI_MAX][SAFI_MAX];
! 329: u_char afc_adv[AFI_MAX][SAFI_MAX];
! 330: u_char afc_recv[AFI_MAX][SAFI_MAX];
! 331:
! 332: /* Capability flags (reset in bgp_stop) */
! 333: u_int16_t cap;
! 334: #define PEER_CAP_REFRESH_ADV (1 << 0) /* refresh advertised */
! 335: #define PEER_CAP_REFRESH_OLD_RCV (1 << 1) /* refresh old received */
! 336: #define PEER_CAP_REFRESH_NEW_RCV (1 << 2) /* refresh rfc received */
! 337: #define PEER_CAP_DYNAMIC_ADV (1 << 3) /* dynamic advertised */
! 338: #define PEER_CAP_DYNAMIC_RCV (1 << 4) /* dynamic received */
! 339: #define PEER_CAP_RESTART_ADV (1 << 5) /* restart advertised */
! 340: #define PEER_CAP_RESTART_RCV (1 << 6) /* restart received */
! 341: #define PEER_CAP_AS4_ADV (1 << 7) /* as4 advertised */
! 342: #define PEER_CAP_AS4_RCV (1 << 8) /* as4 received */
! 343:
! 344: /* Capability flags (reset in bgp_stop) */
! 345: u_int16_t af_cap[AFI_MAX][SAFI_MAX];
! 346: #define PEER_CAP_ORF_PREFIX_SM_ADV (1 << 0) /* send-mode advertised */
! 347: #define PEER_CAP_ORF_PREFIX_RM_ADV (1 << 1) /* receive-mode advertised */
! 348: #define PEER_CAP_ORF_PREFIX_SM_RCV (1 << 2) /* send-mode received */
! 349: #define PEER_CAP_ORF_PREFIX_RM_RCV (1 << 3) /* receive-mode received */
! 350: #define PEER_CAP_ORF_PREFIX_SM_OLD_RCV (1 << 4) /* send-mode received */
! 351: #define PEER_CAP_ORF_PREFIX_RM_OLD_RCV (1 << 5) /* receive-mode received */
! 352: #define PEER_CAP_RESTART_AF_RCV (1 << 6) /* graceful restart afi/safi received */
! 353: #define PEER_CAP_RESTART_AF_PRESERVE_RCV (1 << 7) /* graceful restart afi/safi F-bit received */
! 354:
! 355: /* Global configuration flags. */
! 356: u_int32_t flags;
! 357: #define PEER_FLAG_PASSIVE (1 << 0) /* passive mode */
! 358: #define PEER_FLAG_SHUTDOWN (1 << 1) /* shutdown */
! 359: #define PEER_FLAG_DONT_CAPABILITY (1 << 2) /* dont-capability */
! 360: #define PEER_FLAG_OVERRIDE_CAPABILITY (1 << 3) /* override-capability */
! 361: #define PEER_FLAG_STRICT_CAP_MATCH (1 << 4) /* strict-match */
! 362: #define PEER_FLAG_DYNAMIC_CAPABILITY (1 << 5) /* dynamic capability */
! 363: #define PEER_FLAG_DISABLE_CONNECTED_CHECK (1 << 6) /* disable-connected-check */
! 364: #define PEER_FLAG_LOCAL_AS_NO_PREPEND (1 << 7) /* local-as no-prepend */
! 365:
! 366: /* NSF mode (graceful restart) */
! 367: u_char nsf[AFI_MAX][SAFI_MAX];
! 368:
! 369: /* Per AF configuration flags. */
! 370: u_int32_t af_flags[AFI_MAX][SAFI_MAX];
! 371: #define PEER_FLAG_SEND_COMMUNITY (1 << 0) /* send-community */
! 372: #define PEER_FLAG_SEND_EXT_COMMUNITY (1 << 1) /* send-community ext. */
! 373: #define PEER_FLAG_NEXTHOP_SELF (1 << 2) /* next-hop-self */
! 374: #define PEER_FLAG_REFLECTOR_CLIENT (1 << 3) /* reflector-client */
! 375: #define PEER_FLAG_RSERVER_CLIENT (1 << 4) /* route-server-client */
! 376: #define PEER_FLAG_SOFT_RECONFIG (1 << 5) /* soft-reconfiguration */
! 377: #define PEER_FLAG_AS_PATH_UNCHANGED (1 << 6) /* transparent-as */
! 378: #define PEER_FLAG_NEXTHOP_UNCHANGED (1 << 7) /* transparent-next-hop */
! 379: #define PEER_FLAG_MED_UNCHANGED (1 << 8) /* transparent-next-hop */
! 380: #define PEER_FLAG_DEFAULT_ORIGINATE (1 << 9) /* default-originate */
! 381: #define PEER_FLAG_REMOVE_PRIVATE_AS (1 << 10) /* remove-private-as */
! 382: #define PEER_FLAG_ALLOWAS_IN (1 << 11) /* set allowas-in */
! 383: #define PEER_FLAG_ORF_PREFIX_SM (1 << 12) /* orf capability send-mode */
! 384: #define PEER_FLAG_ORF_PREFIX_RM (1 << 13) /* orf capability receive-mode */
! 385: #define PEER_FLAG_MAX_PREFIX (1 << 14) /* maximum prefix */
! 386: #define PEER_FLAG_MAX_PREFIX_WARNING (1 << 15) /* maximum prefix warning-only */
! 387: #define PEER_FLAG_NEXTHOP_LOCAL_UNCHANGED (1 << 16) /* leave link-local nexthop unchanged */
! 388:
! 389: /* MD5 password */
! 390: char *password;
! 391:
! 392: /* default-originate route-map. */
! 393: struct
! 394: {
! 395: char *name;
! 396: struct route_map *map;
! 397: } default_rmap[AFI_MAX][SAFI_MAX];
! 398:
! 399: /* Peer status flags. */
! 400: u_int16_t sflags;
! 401: #define PEER_STATUS_ACCEPT_PEER (1 << 0) /* accept peer */
! 402: #define PEER_STATUS_PREFIX_OVERFLOW (1 << 1) /* prefix-overflow */
! 403: #define PEER_STATUS_CAPABILITY_OPEN (1 << 2) /* capability open send */
! 404: #define PEER_STATUS_HAVE_ACCEPT (1 << 3) /* accept peer's parent */
! 405: #define PEER_STATUS_GROUP (1 << 4) /* peer-group conf */
! 406: #define PEER_STATUS_NSF_MODE (1 << 5) /* NSF aware peer */
! 407: #define PEER_STATUS_NSF_WAIT (1 << 6) /* wait comeback peer */
! 408:
! 409: /* Peer status af flags (reset in bgp_stop) */
! 410: u_int16_t af_sflags[AFI_MAX][SAFI_MAX];
! 411: #define PEER_STATUS_ORF_PREFIX_SEND (1 << 0) /* prefix-list send peer */
! 412: #define PEER_STATUS_ORF_WAIT_REFRESH (1 << 1) /* wait refresh received peer */
! 413: #define PEER_STATUS_DEFAULT_ORIGINATE (1 << 2) /* default-originate peer */
! 414: #define PEER_STATUS_PREFIX_THRESHOLD (1 << 3) /* exceed prefix-threshold */
! 415: #define PEER_STATUS_PREFIX_LIMIT (1 << 4) /* exceed prefix-limit */
! 416: #define PEER_STATUS_EOR_SEND (1 << 5) /* end-of-rib send to peer */
! 417: #define PEER_STATUS_EOR_RECEIVED (1 << 6) /* end-of-rib received from peer */
! 418:
! 419: /* Default attribute value for the peer. */
! 420: u_int32_t config;
! 421: #define PEER_CONFIG_WEIGHT (1 << 0) /* Default weight. */
! 422: #define PEER_CONFIG_TIMER (1 << 1) /* keepalive & holdtime */
! 423: #define PEER_CONFIG_CONNECT (1 << 2) /* connect */
! 424: #define PEER_CONFIG_ROUTEADV (1 << 3) /* route advertise */
! 425: u_int32_t weight;
! 426: u_int32_t holdtime;
! 427: u_int32_t keepalive;
! 428: u_int32_t connect;
! 429: u_int32_t routeadv;
! 430:
! 431: /* Timer values. */
! 432: u_int32_t v_start;
! 433: u_int32_t v_connect;
! 434: u_int32_t v_holdtime;
! 435: u_int32_t v_keepalive;
! 436: u_int32_t v_asorig;
! 437: u_int32_t v_routeadv;
! 438: u_int32_t v_pmax_restart;
! 439: u_int32_t v_gr_restart;
! 440:
! 441: /* Threads. */
! 442: struct thread *t_read;
! 443: struct thread *t_write;
! 444: struct thread *t_start;
! 445: struct thread *t_connect;
! 446: struct thread *t_holdtime;
! 447: struct thread *t_keepalive;
! 448: struct thread *t_asorig;
! 449: struct thread *t_routeadv;
! 450: struct thread *t_pmax_restart;
! 451: struct thread *t_gr_restart;
! 452: struct thread *t_gr_stale;
! 453:
! 454: /* workqueues */
! 455: struct work_queue *clear_node_queue;
! 456:
! 457: /* Statistics field */
! 458: u_int32_t open_in; /* Open message input count */
! 459: u_int32_t open_out; /* Open message output count */
! 460: u_int32_t update_in; /* Update message input count */
! 461: u_int32_t update_out; /* Update message ouput count */
! 462: time_t update_time; /* Update message received time. */
! 463: u_int32_t keepalive_in; /* Keepalive input count */
! 464: u_int32_t keepalive_out; /* Keepalive output count */
! 465: u_int32_t notify_in; /* Notify input count */
! 466: u_int32_t notify_out; /* Notify output count */
! 467: u_int32_t refresh_in; /* Route Refresh input count */
! 468: u_int32_t refresh_out; /* Route Refresh output count */
! 469: u_int32_t dynamic_cap_in; /* Dynamic Capability input count. */
! 470: u_int32_t dynamic_cap_out; /* Dynamic Capability output count. */
! 471:
! 472: /* BGP state count */
! 473: u_int32_t established; /* Established */
! 474: u_int32_t dropped; /* Dropped */
! 475:
! 476: /* Syncronization list and time. */
! 477: struct bgp_synchronize *sync[AFI_MAX][SAFI_MAX];
! 478: time_t synctime;
! 479:
! 480: /* Send prefix count. */
! 481: unsigned long scount[AFI_MAX][SAFI_MAX];
! 482:
! 483: /* Announcement attribute hash. */
! 484: struct hash *hash[AFI_MAX][SAFI_MAX];
! 485:
! 486: /* Notify data. */
! 487: struct bgp_notify notify;
! 488:
! 489: /* Whole packet size to be read. */
! 490: unsigned long packet_size;
! 491:
! 492: /* Filter structure. */
! 493: struct bgp_filter filter[AFI_MAX][SAFI_MAX];
! 494:
! 495: /* ORF Prefix-list */
! 496: struct prefix_list *orf_plist[AFI_MAX][SAFI_MAX];
! 497:
! 498: /* Prefix count. */
! 499: unsigned long pcount[AFI_MAX][SAFI_MAX];
! 500:
! 501: /* Max prefix count. */
! 502: unsigned long pmax[AFI_MAX][SAFI_MAX];
! 503: u_char pmax_threshold[AFI_MAX][SAFI_MAX];
! 504: u_int16_t pmax_restart[AFI_MAX][SAFI_MAX];
! 505: #define MAXIMUM_PREFIX_THRESHOLD_DEFAULT 75
! 506:
! 507: /* allowas-in. */
! 508: char allowas_in[AFI_MAX][SAFI_MAX];
! 509:
! 510: /* peer reset cause */
! 511: char last_reset;
! 512: #define PEER_DOWN_RID_CHANGE 1 /* bgp router-id command */
! 513: #define PEER_DOWN_REMOTE_AS_CHANGE 2 /* neighbor remote-as command */
! 514: #define PEER_DOWN_LOCAL_AS_CHANGE 3 /* neighbor local-as command */
! 515: #define PEER_DOWN_CLID_CHANGE 4 /* bgp cluster-id command */
! 516: #define PEER_DOWN_CONFED_ID_CHANGE 5 /* bgp confederation identifier command */
! 517: #define PEER_DOWN_CONFED_PEER_CHANGE 6 /* bgp confederation peer command */
! 518: #define PEER_DOWN_RR_CLIENT_CHANGE 7 /* neighbor route-reflector-client command */
! 519: #define PEER_DOWN_RS_CLIENT_CHANGE 8 /* neighbor route-server-client command */
! 520: #define PEER_DOWN_UPDATE_SOURCE_CHANGE 9 /* neighbor update-source command */
! 521: #define PEER_DOWN_AF_ACTIVATE 10 /* neighbor activate command */
! 522: #define PEER_DOWN_USER_SHUTDOWN 11 /* neighbor shutdown command */
! 523: #define PEER_DOWN_USER_RESET 12 /* clear ip bgp command */
! 524: #define PEER_DOWN_NOTIFY_RECEIVED 13 /* notification received */
! 525: #define PEER_DOWN_NOTIFY_SEND 14 /* notification send */
! 526: #define PEER_DOWN_CLOSE_SESSION 15 /* tcp session close */
! 527: #define PEER_DOWN_NEIGHBOR_DELETE 16 /* neghbor delete */
! 528: #define PEER_DOWN_RMAP_BIND 17 /* neghbor peer-group command */
! 529: #define PEER_DOWN_RMAP_UNBIND 18 /* no neighbor peer-group command */
! 530: #define PEER_DOWN_CAPABILITY_CHANGE 19 /* neighbor capability command */
! 531: #define PEER_DOWN_PASSIVE_CHANGE 20 /* neighbor passive command */
! 532: #define PEER_DOWN_MULTIHOP_CHANGE 21 /* neighbor multihop command */
! 533: #define PEER_DOWN_NSF_CLOSE_SESSION 22 /* NSF tcp session close */
! 534:
! 535: /* The kind of route-map Flags.*/
! 536: u_char rmap_type;
! 537: #define PEER_RMAP_TYPE_IN (1 << 0) /* neighbor route-map in */
! 538: #define PEER_RMAP_TYPE_OUT (1 << 1) /* neighbor route-map out */
! 539: #define PEER_RMAP_TYPE_NETWORK (1 << 2) /* network route-map */
! 540: #define PEER_RMAP_TYPE_REDISTRIBUTE (1 << 3) /* redistribute route-map */
! 541: #define PEER_RMAP_TYPE_DEFAULT (1 << 4) /* default-originate route-map */
! 542: #define PEER_RMAP_TYPE_NOSET (1 << 5) /* not allow to set commands */
! 543: #define PEER_RMAP_TYPE_IMPORT (1 << 6) /* neighbor route-map import */
! 544: #define PEER_RMAP_TYPE_EXPORT (1 << 7) /* neighbor route-map export */
! 545: };
! 546:
! 547: #define PEER_PASSWORD_MINLEN (1)
! 548: #define PEER_PASSWORD_MAXLEN (80)
! 549:
! 550: /* This structure's member directly points incoming packet data
! 551: stream. */
! 552: struct bgp_nlri
! 553: {
! 554: /* AFI. */
! 555: afi_t afi;
! 556:
! 557: /* SAFI. */
! 558: safi_t safi;
! 559:
! 560: /* Pointer to NLRI byte stream. */
! 561: u_char *nlri;
! 562:
! 563: /* Length of whole NLRI. */
! 564: bgp_size_t length;
! 565: };
! 566:
! 567: /* BGP versions. */
! 568: #define BGP_VERSION_4 4
! 569:
! 570: /* Default BGP port number. */
! 571: #define BGP_PORT_DEFAULT 179
! 572:
! 573: /* BGP message header and packet size. */
! 574: #define BGP_MARKER_SIZE 16
! 575: #define BGP_HEADER_SIZE 19
! 576: #define BGP_MAX_PACKET_SIZE 4096
! 577:
! 578: /* BGP minimum message size. */
! 579: #define BGP_MSG_OPEN_MIN_SIZE (BGP_HEADER_SIZE + 10)
! 580: #define BGP_MSG_UPDATE_MIN_SIZE (BGP_HEADER_SIZE + 4)
! 581: #define BGP_MSG_NOTIFY_MIN_SIZE (BGP_HEADER_SIZE + 2)
! 582: #define BGP_MSG_KEEPALIVE_MIN_SIZE (BGP_HEADER_SIZE + 0)
! 583: #define BGP_MSG_ROUTE_REFRESH_MIN_SIZE (BGP_HEADER_SIZE + 4)
! 584: #define BGP_MSG_CAPABILITY_MIN_SIZE (BGP_HEADER_SIZE + 3)
! 585:
! 586: /* BGP message types. */
! 587: #define BGP_MSG_OPEN 1
! 588: #define BGP_MSG_UPDATE 2
! 589: #define BGP_MSG_NOTIFY 3
! 590: #define BGP_MSG_KEEPALIVE 4
! 591: #define BGP_MSG_ROUTE_REFRESH_NEW 5
! 592: #define BGP_MSG_CAPABILITY 6
! 593: #define BGP_MSG_ROUTE_REFRESH_OLD 128
! 594:
! 595: /* BGP open optional parameter. */
! 596: #define BGP_OPEN_OPT_AUTH 1
! 597: #define BGP_OPEN_OPT_CAP 2
! 598:
! 599: /* BGP4 attribute type codes. */
! 600: #define BGP_ATTR_ORIGIN 1
! 601: #define BGP_ATTR_AS_PATH 2
! 602: #define BGP_ATTR_NEXT_HOP 3
! 603: #define BGP_ATTR_MULTI_EXIT_DISC 4
! 604: #define BGP_ATTR_LOCAL_PREF 5
! 605: #define BGP_ATTR_ATOMIC_AGGREGATE 6
! 606: #define BGP_ATTR_AGGREGATOR 7
! 607: #define BGP_ATTR_COMMUNITIES 8
! 608: #define BGP_ATTR_ORIGINATOR_ID 9
! 609: #define BGP_ATTR_CLUSTER_LIST 10
! 610: #define BGP_ATTR_DPA 11
! 611: #define BGP_ATTR_ADVERTISER 12
! 612: #define BGP_ATTR_RCID_PATH 13
! 613: #define BGP_ATTR_MP_REACH_NLRI 14
! 614: #define BGP_ATTR_MP_UNREACH_NLRI 15
! 615: #define BGP_ATTR_EXT_COMMUNITIES 16
! 616: #define BGP_ATTR_AS4_PATH 17
! 617: #define BGP_ATTR_AS4_AGGREGATOR 18
! 618: #define BGP_ATTR_AS_PATHLIMIT 21
! 619:
! 620: /* BGP update origin. */
! 621: #define BGP_ORIGIN_IGP 0
! 622: #define BGP_ORIGIN_EGP 1
! 623: #define BGP_ORIGIN_INCOMPLETE 2
! 624:
! 625: /* BGP notify message codes. */
! 626: #define BGP_NOTIFY_HEADER_ERR 1
! 627: #define BGP_NOTIFY_OPEN_ERR 2
! 628: #define BGP_NOTIFY_UPDATE_ERR 3
! 629: #define BGP_NOTIFY_HOLD_ERR 4
! 630: #define BGP_NOTIFY_FSM_ERR 5
! 631: #define BGP_NOTIFY_CEASE 6
! 632: #define BGP_NOTIFY_CAPABILITY_ERR 7
! 633: #define BGP_NOTIFY_MAX 8
! 634:
! 635: #define BGP_NOTIFY_SUBCODE_UNSPECIFIC 0
! 636:
! 637: /* BGP_NOTIFY_HEADER_ERR sub codes. */
! 638: #define BGP_NOTIFY_HEADER_NOT_SYNC 1
! 639: #define BGP_NOTIFY_HEADER_BAD_MESLEN 2
! 640: #define BGP_NOTIFY_HEADER_BAD_MESTYPE 3
! 641: #define BGP_NOTIFY_HEADER_MAX 4
! 642:
! 643: /* BGP_NOTIFY_OPEN_ERR sub codes. */
! 644: #define BGP_NOTIFY_OPEN_UNSUP_VERSION 1
! 645: #define BGP_NOTIFY_OPEN_BAD_PEER_AS 2
! 646: #define BGP_NOTIFY_OPEN_BAD_BGP_IDENT 3
! 647: #define BGP_NOTIFY_OPEN_UNSUP_PARAM 4
! 648: #define BGP_NOTIFY_OPEN_AUTH_FAILURE 5
! 649: #define BGP_NOTIFY_OPEN_UNACEP_HOLDTIME 6
! 650: #define BGP_NOTIFY_OPEN_UNSUP_CAPBL 7
! 651: #define BGP_NOTIFY_OPEN_MAX 8
! 652:
! 653: /* BGP_NOTIFY_UPDATE_ERR sub codes. */
! 654: #define BGP_NOTIFY_UPDATE_MAL_ATTR 1
! 655: #define BGP_NOTIFY_UPDATE_UNREC_ATTR 2
! 656: #define BGP_NOTIFY_UPDATE_MISS_ATTR 3
! 657: #define BGP_NOTIFY_UPDATE_ATTR_FLAG_ERR 4
! 658: #define BGP_NOTIFY_UPDATE_ATTR_LENG_ERR 5
! 659: #define BGP_NOTIFY_UPDATE_INVAL_ORIGIN 6
! 660: #define BGP_NOTIFY_UPDATE_AS_ROUTE_LOOP 7
! 661: #define BGP_NOTIFY_UPDATE_INVAL_NEXT_HOP 8
! 662: #define BGP_NOTIFY_UPDATE_OPT_ATTR_ERR 9
! 663: #define BGP_NOTIFY_UPDATE_INVAL_NETWORK 10
! 664: #define BGP_NOTIFY_UPDATE_MAL_AS_PATH 11
! 665: #define BGP_NOTIFY_UPDATE_MAX 12
! 666:
! 667: /* BGP_NOTIFY_CEASE sub codes (RFC 4486). */
! 668: #define BGP_NOTIFY_CEASE_MAX_PREFIX 1
! 669: #define BGP_NOTIFY_CEASE_ADMIN_SHUTDOWN 2
! 670: #define BGP_NOTIFY_CEASE_PEER_UNCONFIG 3
! 671: #define BGP_NOTIFY_CEASE_ADMIN_RESET 4
! 672: #define BGP_NOTIFY_CEASE_CONNECT_REJECT 5
! 673: #define BGP_NOTIFY_CEASE_CONFIG_CHANGE 6
! 674: #define BGP_NOTIFY_CEASE_COLLISION_RESOLUTION 7
! 675: #define BGP_NOTIFY_CEASE_OUT_OF_RESOURCE 8
! 676: #define BGP_NOTIFY_CEASE_MAX 9
! 677:
! 678: /* BGP_NOTIFY_CAPABILITY_ERR sub codes (draft-ietf-idr-dynamic-cap-02). */
! 679: #define BGP_NOTIFY_CAPABILITY_INVALID_ACTION 1
! 680: #define BGP_NOTIFY_CAPABILITY_INVALID_LENGTH 2
! 681: #define BGP_NOTIFY_CAPABILITY_MALFORMED_CODE 3
! 682: #define BGP_NOTIFY_CAPABILITY_MAX 4
! 683:
! 684: /* BGP finite state machine status. */
! 685: #define Idle 1
! 686: #define Connect 2
! 687: #define Active 3
! 688: #define OpenSent 4
! 689: #define OpenConfirm 5
! 690: #define Established 6
! 691: #define Clearing 7
! 692: #define Deleted 8
! 693: #define BGP_STATUS_MAX 9
! 694:
! 695: /* BGP finite state machine events. */
! 696: #define BGP_Start 1
! 697: #define BGP_Stop 2
! 698: #define TCP_connection_open 3
! 699: #define TCP_connection_closed 4
! 700: #define TCP_connection_open_failed 5
! 701: #define TCP_fatal_error 6
! 702: #define ConnectRetry_timer_expired 7
! 703: #define Hold_Timer_expired 8
! 704: #define KeepAlive_timer_expired 9
! 705: #define Receive_OPEN_message 10
! 706: #define Receive_KEEPALIVE_message 11
! 707: #define Receive_UPDATE_message 12
! 708: #define Receive_NOTIFICATION_message 13
! 709: #define Clearing_Completed 14
! 710: #define BGP_EVENTS_MAX 15
! 711:
! 712: /* BGP timers default value. */
! 713: #define BGP_INIT_START_TIMER 5
! 714: #define BGP_ERROR_START_TIMER 30
! 715: #define BGP_DEFAULT_HOLDTIME 180
! 716: #define BGP_DEFAULT_KEEPALIVE 60
! 717: #define BGP_DEFAULT_ASORIGINATE 15
! 718: #define BGP_DEFAULT_EBGP_ROUTEADV 30
! 719: #define BGP_DEFAULT_IBGP_ROUTEADV 5
! 720: #define BGP_CLEAR_CONNECT_RETRY 20
! 721: #define BGP_DEFAULT_CONNECT_RETRY 120
! 722:
! 723: /* BGP default local preference. */
! 724: #define BGP_DEFAULT_LOCAL_PREF 100
! 725:
! 726: /* BGP graceful restart */
! 727: #define BGP_DEFAULT_RESTART_TIME 120
! 728: #define BGP_DEFAULT_STALEPATH_TIME 360
! 729:
! 730: /* SAFI which used in open capability negotiation. */
! 731: #define BGP_SAFI_VPNV4 128
! 732: #define BGP_SAFI_VPNV6 129
! 733:
! 734: /* Max TTL value. */
! 735: #define TTL_MAX 255
! 736:
! 737: /* BGP uptime string length. */
! 738: #define BGP_UPTIME_LEN 25
! 739:
! 740: /* Default configuration settings for bgpd. */
! 741: #define BGP_VTY_PORT 2605
! 742: #define BGP_DEFAULT_CONFIG "bgpd.conf"
! 743:
! 744: /* Check AS path loop when we send NLRI. */
! 745: /* #define BGP_SEND_ASPATH_CHECK */
! 746:
! 747: /* IBGP/EBGP identifier. We also have a CONFED peer, which is to say,
! 748: a peer who's AS is part of our Confederation. */
! 749: enum
! 750: {
! 751: BGP_PEER_IBGP,
! 752: BGP_PEER_EBGP,
! 753: BGP_PEER_INTERNAL,
! 754: BGP_PEER_CONFED
! 755: };
! 756:
! 757: /* Flag for peer_clear_soft(). */
! 758: enum bgp_clear_type
! 759: {
! 760: BGP_CLEAR_SOFT_NONE,
! 761: BGP_CLEAR_SOFT_OUT,
! 762: BGP_CLEAR_SOFT_IN,
! 763: BGP_CLEAR_SOFT_BOTH,
! 764: BGP_CLEAR_SOFT_IN_ORF_PREFIX,
! 765: BGP_CLEAR_SOFT_RSCLIENT
! 766: };
! 767:
! 768: /* Macros. */
! 769: #define BGP_INPUT(P) ((P)->ibuf)
! 770: #define BGP_INPUT_PNT(P) (STREAM_PNT(BGP_INPUT(P)))
! 771:
! 772: /* Count prefix size from mask length */
! 773: #define PSIZE(a) (((a) + 7) / (8))
! 774:
! 775: /* BGP error codes. */
! 776: #define BGP_SUCCESS 0
! 777: #define BGP_ERR_INVALID_VALUE -1
! 778: #define BGP_ERR_INVALID_FLAG -2
! 779: #define BGP_ERR_INVALID_AS -3
! 780: #define BGP_ERR_INVALID_BGP -4
! 781: #define BGP_ERR_PEER_GROUP_MEMBER -5
! 782: #define BGP_ERR_MULTIPLE_INSTANCE_USED -6
! 783: #define BGP_ERR_PEER_GROUP_MEMBER_EXISTS -7
! 784: #define BGP_ERR_PEER_BELONGS_TO_GROUP -8
! 785: #define BGP_ERR_PEER_GROUP_AF_UNCONFIGURED -9
! 786: #define BGP_ERR_PEER_GROUP_NO_REMOTE_AS -10
! 787: #define BGP_ERR_PEER_GROUP_CANT_CHANGE -11
! 788: #define BGP_ERR_PEER_GROUP_MISMATCH -12
! 789: #define BGP_ERR_PEER_GROUP_PEER_TYPE_DIFFERENT -13
! 790: #define BGP_ERR_MULTIPLE_INSTANCE_NOT_SET -14
! 791: #define BGP_ERR_AS_MISMATCH -15
! 792: #define BGP_ERR_PEER_INACTIVE -16
! 793: #define BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER -17
! 794: #define BGP_ERR_PEER_GROUP_HAS_THE_FLAG -18
! 795: #define BGP_ERR_PEER_FLAG_CONFLICT -19
! 796: #define BGP_ERR_PEER_GROUP_SHUTDOWN -20
! 797: #define BGP_ERR_PEER_FILTER_CONFLICT -21
! 798: #define BGP_ERR_NOT_INTERNAL_PEER -22
! 799: #define BGP_ERR_REMOVE_PRIVATE_AS -23
! 800: #define BGP_ERR_AF_UNCONFIGURED -24
! 801: #define BGP_ERR_SOFT_RECONFIG_UNCONFIGURED -25
! 802: #define BGP_ERR_INSTANCE_MISMATCH -26
! 803: #define BGP_ERR_LOCAL_AS_ALLOWED_ONLY_FOR_EBGP -27
! 804: #define BGP_ERR_CANNOT_HAVE_LOCAL_AS_SAME_AS -28
! 805: #define BGP_ERR_TCPSIG_FAILED -29
! 806: #define BGP_ERR_NO_EBGP_MULTIHOP_WITH_TTLHACK -30
! 807: #define BGP_ERR_NO_IBGP_WITH_TTLHACK -31
! 808: #define BGP_ERR_MAX -32
! 809:
! 810: extern struct bgp_master *bm;
! 811:
! 812: extern struct thread_master *master;
! 813:
! 814: /* Prototypes. */
! 815: extern void bgp_terminate (void);
! 816: extern void bgp_reset (void);
! 817: extern time_t bgp_clock (void);
! 818: extern void bgp_zclient_reset (void);
! 819: extern int bgp_nexthop_set (union sockunion *, union sockunion *,
! 820: struct bgp_nexthop *, struct peer *);
! 821: extern struct bgp *bgp_get_default (void);
! 822: extern struct bgp *bgp_lookup (as_t, const char *);
! 823: extern struct bgp *bgp_lookup_by_name (const char *);
! 824: extern struct peer *peer_lookup (struct bgp *, union sockunion *);
! 825: extern struct peer_group *peer_group_lookup (struct bgp *, const char *);
! 826: extern struct peer_group *peer_group_get (struct bgp *, const char *);
! 827: extern struct peer *peer_lookup_with_open (union sockunion *, as_t, struct in_addr *,
! 828: int *);
! 829: extern struct peer *peer_lock (struct peer *);
! 830: extern struct peer *peer_unlock (struct peer *);
! 831: extern int peer_sort (struct peer *peer);
! 832: extern int peer_active (struct peer *);
! 833: extern int peer_active_nego (struct peer *);
! 834: extern struct peer *peer_create_accept (struct bgp *);
! 835: extern char *peer_uptime (time_t, char *, size_t);
! 836: extern int bgp_config_write (struct vty *);
! 837: extern void bgp_config_write_family_header (struct vty *, afi_t, safi_t, int *);
! 838:
! 839: extern void bgp_master_init (void);
! 840:
! 841: extern void bgp_init (void);
! 842: extern void bgp_route_map_init (void);
! 843:
! 844: extern int bgp_option_set (int);
! 845: extern int bgp_option_unset (int);
! 846: extern int bgp_option_check (int);
! 847:
! 848: extern int bgp_get (struct bgp **, as_t *, const char *);
! 849: extern int bgp_delete (struct bgp *);
! 850:
! 851: extern int bgp_flag_set (struct bgp *, int);
! 852: extern int bgp_flag_unset (struct bgp *, int);
! 853: extern int bgp_flag_check (struct bgp *, int);
! 854:
! 855: extern void bgp_lock (struct bgp *);
! 856: extern void bgp_unlock (struct bgp *);
! 857:
! 858: extern int bgp_router_id_set (struct bgp *, struct in_addr *);
! 859:
! 860: extern int bgp_cluster_id_set (struct bgp *, struct in_addr *);
! 861: extern int bgp_cluster_id_unset (struct bgp *);
! 862:
! 863: extern int bgp_confederation_id_set (struct bgp *, as_t);
! 864: extern int bgp_confederation_id_unset (struct bgp *);
! 865: extern int bgp_confederation_peers_check (struct bgp *, as_t);
! 866:
! 867: extern int bgp_confederation_peers_add (struct bgp *, as_t);
! 868: extern int bgp_confederation_peers_remove (struct bgp *, as_t);
! 869:
! 870: extern int bgp_timers_set (struct bgp *, u_int32_t, u_int32_t);
! 871: extern int bgp_timers_unset (struct bgp *);
! 872:
! 873: extern int bgp_default_local_preference_set (struct bgp *, u_int32_t);
! 874: extern int bgp_default_local_preference_unset (struct bgp *);
! 875:
! 876: extern int peer_rsclient_active (struct peer *);
! 877:
! 878: extern int peer_remote_as (struct bgp *, union sockunion *, as_t *, afi_t, safi_t);
! 879: extern int peer_group_remote_as (struct bgp *, const char *, as_t *);
! 880: extern int peer_delete (struct peer *peer);
! 881: extern int peer_group_delete (struct peer_group *);
! 882: extern int peer_group_remote_as_delete (struct peer_group *);
! 883:
! 884: extern int peer_activate (struct peer *, afi_t, safi_t);
! 885: extern int peer_deactivate (struct peer *, afi_t, safi_t);
! 886:
! 887: extern int peer_group_bind (struct bgp *, union sockunion *, struct peer_group *,
! 888: afi_t, safi_t, as_t *);
! 889: extern int peer_group_unbind (struct bgp *, struct peer *, struct peer_group *,
! 890: afi_t, safi_t);
! 891:
! 892: extern int peer_flag_set (struct peer *, u_int32_t);
! 893: extern int peer_flag_unset (struct peer *, u_int32_t);
! 894:
! 895: extern int peer_af_flag_set (struct peer *, afi_t, safi_t, u_int32_t);
! 896: extern int peer_af_flag_unset (struct peer *, afi_t, safi_t, u_int32_t);
! 897: extern int peer_af_flag_check (struct peer *, afi_t, safi_t, u_int32_t);
! 898:
! 899: extern int peer_ebgp_multihop_set (struct peer *, int);
! 900: extern int peer_ebgp_multihop_unset (struct peer *);
! 901:
! 902: extern int peer_description_set (struct peer *, char *);
! 903: extern int peer_description_unset (struct peer *);
! 904:
! 905: extern int peer_update_source_if_set (struct peer *, const char *);
! 906: extern int peer_update_source_addr_set (struct peer *, union sockunion *);
! 907: extern int peer_update_source_unset (struct peer *);
! 908:
! 909: extern int peer_default_originate_set (struct peer *, afi_t, safi_t, const char *);
! 910: extern int peer_default_originate_unset (struct peer *, afi_t, safi_t);
! 911:
! 912: extern int peer_port_set (struct peer *, u_int16_t);
! 913: extern int peer_port_unset (struct peer *);
! 914:
! 915: extern int peer_weight_set (struct peer *, u_int16_t);
! 916: extern int peer_weight_unset (struct peer *);
! 917:
! 918: extern int peer_timers_set (struct peer *, u_int32_t, u_int32_t);
! 919: extern int peer_timers_unset (struct peer *);
! 920:
! 921: extern int peer_timers_connect_set (struct peer *, u_int32_t);
! 922: extern int peer_timers_connect_unset (struct peer *);
! 923:
! 924: extern int peer_advertise_interval_set (struct peer *, u_int32_t);
! 925: extern int peer_advertise_interval_unset (struct peer *);
! 926:
! 927: extern int peer_interface_set (struct peer *, const char *);
! 928: extern int peer_interface_unset (struct peer *);
! 929:
! 930: extern int peer_distribute_set (struct peer *, afi_t, safi_t, int, const char *);
! 931: extern int peer_distribute_unset (struct peer *, afi_t, safi_t, int);
! 932:
! 933: extern int peer_allowas_in_set (struct peer *, afi_t, safi_t, int);
! 934: extern int peer_allowas_in_unset (struct peer *, afi_t, safi_t);
! 935:
! 936: extern int peer_local_as_set (struct peer *, as_t, int);
! 937: extern int peer_local_as_unset (struct peer *);
! 938:
! 939: extern int peer_prefix_list_set (struct peer *, afi_t, safi_t, int, const char *);
! 940: extern int peer_prefix_list_unset (struct peer *, afi_t, safi_t, int);
! 941:
! 942: extern int peer_aslist_set (struct peer *, afi_t, safi_t, int, const char *);
! 943: extern int peer_aslist_unset (struct peer *,afi_t, safi_t, int);
! 944:
! 945: extern int peer_route_map_set (struct peer *, afi_t, safi_t, int, const char *);
! 946: extern int peer_route_map_unset (struct peer *, afi_t, safi_t, int);
! 947:
! 948: extern int peer_unsuppress_map_set (struct peer *, afi_t, safi_t, const char *);
! 949:
! 950: extern int peer_password_set (struct peer *, const char *);
! 951: extern int peer_password_unset (struct peer *);
! 952:
! 953: extern int peer_unsuppress_map_unset (struct peer *, afi_t, safi_t);
! 954:
! 955: extern int peer_maximum_prefix_set (struct peer *, afi_t, safi_t, u_int32_t, u_char, int, u_int16_t);
! 956: extern int peer_maximum_prefix_unset (struct peer *, afi_t, safi_t);
! 957:
! 958: extern int peer_clear (struct peer *);
! 959: extern int peer_clear_soft (struct peer *, afi_t, safi_t, enum bgp_clear_type);
! 960:
! 961: extern int peer_ttl_security_hops_set (struct peer *, int);
! 962: extern int peer_ttl_security_hops_unset (struct peer *);
! 963:
! 964: #endif /* _QUAGGA_BGPD_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>