# salt.modules.napalm_bgp

## NAPALM BGP

Manages BGP configuration on network devices and provides statistics.

codeauthor:

  Mircea Ulinic <ping@mirceaulinic.net> & Jerome Fleury <jf@cloudflare.com>

maturity:

  new

depends:

  napalm

platform:

  unix

### Dependencies

- `napalm proxy minion`

New in version 2016.11.0.

salt.modules.napalm_bgp.config(group=None, neighbor=None, **kwargs)

  Provides the BGP configuration on the device.

  Parameters:

    - group -- Name of the group selected to display the configuration.

    - neighbor -- IP Address of the neighbor to display the configuration. If the group parameter is not specified, the neighbor setting will be ignored.

  Returns:

    A dictionary containing the BGP configuration from the network device. The keys of the main dictionary are the group names.

  Each group has the following properties:

  > - type (string)

  > - description (string)

  > - apply_groups (string list)

  > - multihop_ttl (int)

  > - multipath (True/False)

  > - local_address (string)

  > - local_as (int)

  > - remote_as (int)

  > - import_policy (string)

  > - export_policy (string)

  > - remove_private_as (True/False)

  > - prefix_limit (dictionary)

  > - neighbors (dictionary)

  Each neighbor in the dictionary of neighbors provides:

  > - description (string)

  > - import_policy (string)

  > - export_policy (string)

  > - local_address (string)

  > - local_as (int)

  > - remote_as (int)

  > - authentication_key (string)

  > - prefix_limit (dictionary)

  > - route_reflector_client (True/False)

  > - nhs (True/False)

  CLI Example:

      salt '*' bgp.config # entire BGP config
      salt '*' bgp.config PEERS-GROUP-NAME # provides detail only about BGP group PEERS-GROUP-NAME
      salt '*' bgp.config PEERS-GROUP-NAME 172.17.17.1 # provides details only about BGP neighbor 172.17.17.1,
      # configured in the group PEERS-GROUP-NAME

  Output Example:

      {
          'PEERS-GROUP-NAME':{
              'type'          : 'external',
              'description'   : 'Here we should have a nice description',
              'apply_groups'  : ['BGP-PREFIX-LIMIT'],
              'import_policy' : 'PUBLIC-PEER-IN',
              'export_policy' : 'PUBLIC-PEER-OUT',
              'remove_private': True,
              'multipath'     : True,
              'multihop_ttl'  : 30,
              'neighbors'     : {
                  '192.168.0.1': {
                      'description'   : 'Facebook [CDN]',
                      'prefix_limit'  : {
                          'inet': {
                              'unicast': {
                                  'limit': 100,
                                  'teardown': {
                                      'threshold' : 95,
                                      'timeout'   : 5
                                  }
                              }
                          }
                      }
                      'peer-as'        : 32934,
                      'route_reflector': False,
                      'nhs'            : True
                  },
                  '172.17.17.1': {
                      'description'   : 'Twitter [CDN]',
                      'prefix_limit'  : {
                          'inet': {
                              'unicast': {
                                  'limit': 500,
                                  'no-validate': 'IMPORT-FLOW-ROUTES'
                              }
                          }
                      }
                      'peer_as'        : 13414
                      'route_reflector': False,
                      'nhs'            : False
                  }
              }
          }
      }

salt.modules.napalm_bgp.neighbors(neighbor=None, **kwargs)

  Provides details regarding the BGP sessions configured on the network device.

  Parameters:

    neighbor -- IP Address of a specific neighbor.

  Returns:

    A dictionary with the statistics of the all/selected BGP neighbors. Outer dictionary keys represent the VRF name. Keys of inner dictionary represent the AS numbers, while the values are lists of dictionaries, having the following keys:

    - up (True/False)

    - local_as (int)

    - remote_as (int)

    - local_address (string)

    - routing_table (string)

    - local_address_configured (True/False)

    - local_port (int)

    - remote_address (string)

    - remote_port (int)

    - multihop (True/False)

    - multipath (True/False)

    - remove_private_as (True/False)

    - import_policy (string)

    - export_policy (string)

    - input_messages (int)

    - output_messages (int)

    - input_updates (int)

    - output_updates (int)

    - messages_queued_out (int)

    - connection_state (string)

    - previous_connection_state (string)

    - last_event (string)

    - suppress_4byte_as (True/False)

    - local_as_prepend (True/False)

    - holdtime (int)

    - configured_holdtime (int)

    - keepalive (int)

    - configured_keepalive (int)

    - active_prefix_count (int)

    - received_prefix_count (int)

    - accepted_prefix_count (int)

    - suppressed_prefix_count (int)

    - advertised_prefix_count (int)

    - flap_count (int)

  CLI Example:

      salt '*' bgp.neighbors  # all neighbors
      salt '*' bgp.neighbors 172.17.17.1  # only session with BGP neighbor(s) 172.17.17.1

  Output Example:

      {
          'default': {
              8121: [
                  {
                      'up'                        : True,
                      'local_as'                  : 13335,
                      'remote_as'                 : 8121,
                      'local_address'             : '172.101.76.1',
                      'local_address_configured'  : True,
                      'local_port'                : 179,
                      'remote_address'            : '192.247.78.0',
                      'router_id'                 : '192.168.0.1',
                      'remote_port'               : 58380,
                      'multihop'                  : False,
                      'import_policy'             : '4-NTT-TRANSIT-IN',
                      'export_policy'             : '4-NTT-TRANSIT-OUT',
                      'input_messages'            : 123,
                      'output_messages'           : 13,
                      'input_updates'             : 123,
                      'output_updates'            : 5,
                      'messages_queued_out'       : 23,
                      'connection_state'          : 'Established',
                      'previous_connection_state' : 'EstabSync',
                      'last_event'                : 'RecvKeepAlive',
                      'suppress_4byte_as'         : False,
                      'local_as_prepend'          : False,
                      'holdtime'                  : 90,
                      'configured_holdtime'       : 90,
                      'keepalive'                 : 30,
                      'configured_keepalive'      : 30,
                      'active_prefix_count'       : 132808,
                      'received_prefix_count'     : 566739,
                      'accepted_prefix_count'     : 566479,
                      'suppressed_prefix_count'   : 0,
                      'advertise_prefix_count'    : 0,
                      'flap_count'                : 27
                  }
              ]
          }
      }