EXABGP.CONF(5)

NAME
exabgp.conf - Configuration file controlling the BGP configuration for exabgp(1).

DESCRIPTION

  CONFIGURATION FILE SYNTAX

    group <groupname> {
      // Most if not all the attributes under neighbor can be defined
      // at the group level as well, and the settings will be inherited
      // unless overridden in the neighbor section
      neighbor <ip-address> {
        description <text>;
        router-id <router-id>;
        local-address <ip-address>;
        local-as <asn>;
        peer-as <asn>;
        passive;
        hold-time <seconds>;
        md5-password <md5-secret>;
        ttl-security;
        group-updates;
        aigp <truthvalue>;
        route-refresh <truthvalue>;
        graceful-restart <...>;
        multi-session <truthvalue);
        add-path <path>;
        auto-flush <truthvalue>;
        adj-rib-out <truthvalue>;
        // Can also have the groups listed under group <gn> { } below:
        static {
        }
        flow {
        }
        l2vpn {
        }
        process {
        }
        family {
        }
        capability {
        }
        operational {
        }
      }
      static {
        route <ip-address>/<prefixlength> {
          next-hop <ip-address>; // only mandatory attribute
          origin ( IGP | EGP | INCOMPLETE );
          as-path [ <as-sequence-asn> | ( <as-set ) ];
          as-sequence
          med <med>;
          aigp <aigp>;
          local-preference <preference>;
          atomic-aggregate;
          aggregator <asn>:<ip-address>;
          path-information <ip-address>;
          community ( <community> | [ <community> <community> ... ] );
          large-community ( <large-community> | [ <large-community> <large-community> ... ] );
          originator-id <ip-address>;
          cluster-list ( <ip-address> | [ <ip-address> <ip-address> ... ] );
          extended-community ( <extended-community> |
    			   [ <extended-community>
    			     <extended-community> ... ] );
          split /<prefixlength>;
          label ( <label> | [ <label> <label> ... ] );
          rd  <route-distinguisher>;
          watchdog <watchdog-name>;
          bgp-prefix-sid ( [<label-index-value>] |
             [ <label-index-value>, [ ( <srgb-base_1>,<srgb-range_1> ), ... ] ]);
          withdraw;
        }
        // or alternatively
        route <ip-address>/<prefixlength> <attribute-sequence>;
        // where <attribute-sequence> is a sequence of
        // any of the attributes above
      }
      flow {
        route <route-name> {
          rd <route-distinguisher>;
          next-hop <ip-address>; // for redirect-to-nexthop
          match {
    	// one or more match terms
            source <ip-address>/<prefixlength>;
            destination <ip-address>/<prefixlength>;
            port <portnumber>;
            source-port <portnumber>;
            destination-port <portnumber-expression>;
            protocol [ udp | tcp ]; // IPv4 only
            next-header [ udp | tcp ]; // IPv6 only
            tcp-flags [ fin | syn | rst | push | ack | urg | ece | cwr | ns ];
            icmp-type [ echo-reply | echo-request | info-reply |
    		    info-request | mask-reply | mask-request |
    		    parameter-problem | redirect | router-advertisment |
    		    router-solicit | source-quench | time-exceeded |
    		    timestamp | timestamp-reply | unreachable ];
            icmp-code [ communication-prohibited-by-filtering |
    		    destination-host-prohibited |
    		    destination-host-unknown |
    		    destination-network-unknown |
    		    fragmentation-needed | host-precedence-violation |
    		    ip-header-bad | network-unreachable |
    		    network-unreachable-for-tos | port-unreachable |
    		    redirect-for-host | redirect-for-network |
    		    redirect-for-tos-and-host |
    		    redirect-for-tos-and-net |
    		    required-option-missing | source-host-isolated |
    		    source-route-failed |
    		    ttl-eq-zero-during-reassembly |
    		    ttl-eq-zero-during-transit ];
            fragment [ not-a-fragment | dont-fragment | is-fragment |
    		   first-fragment | last-fragment ];
    	// fragment is IPv4 only, poorly tested
            dscp <dscp-value>;
            traffic-class <traffic-class>;
            packet-length <packet-length-expression>;
            flow-label <flow-label-expression>; // IPv6 only
          }
          then {
    	// one action only
            accept;
            discard;
            rate-limit <ratelimit>;
            redirect ( <route-distinguisher> | <ip-address> );
            redirect-to-nexthop; // Ref. next-hop above
            redirect-to-nexthop-ietf <ip-address>;
            copy <ip-address>;
            mark <mark>;
            action ( sample | terminal | sample-terminal );
            community
            large-community
            extended-community
          }
        }
      }
      l2vpn {
        vpls <site-name> {
          next-hop <ip-address>;
          origin ( IGP | EGP | INCOMPLETE );
          as-path [ <as-sequence-asn> | ( <as-set ) ];
          med <med>;
          local-preference <preference>;
          community ( <community> | [ <community> <community> ... ] );
          large-community ( <large-community> | [ <large-community> <large-community> ... ] );
          originator-id <ip-address>;
          cluster-list [ <ip-address> <ip-address> ... ];
          extended-community ( <extended-community> |
    			   [ <extended-community>
    			     <extended-community> ... ] );
          rd <route-distinguisher>;
          withdraw;
          endpoint ( <vpls-endpoint> | <integer> );
          offset ( <block-offset> | <integer> );
          size ( <block-size> | <integer> );
          base ( <label-base> | <integer> );
          name <route-name>;
      }
      process {
        run <command> <args>;
      }
      family {
        all; // default, or a list of the below
        minimal; // use AFI/SAFI required to announce routes in config
        ipv4 unicast;
        ipv4 multicast;
        ipv4 nlri-mpls;
        ipv4 mpls-vpn;
        ipv4 flow;
        ipv4 flow-vpn;
        ipv6 unicast;
        ipv6 flow;
        ipv6 flow-vpn;
      }
      capability {
        graceful-restart <seconds>;
        asn4 ( enable | disable );
        add-path ( disable | send | receive | send/receive );
        multi-session ( enable | disable );
        operational ( enable | disable );
      }
      operational {
        // ??
      }
    }
    neighbor <ip-address> {
      // Attributes and sections as for under
      // group <groupname> { neighbor <neighbor> {
      // ref. above
    }

Please note that multi-line sections really do need to be written as multiple lines: the first one ending in "{", and ending with a line with a "}" by itself.

SEE ALSO
exabgp(1).