MPLS VPN Functions

sth::emulation_mpls_l2vpn_pe_config

Purpose

Enables or disables a Provider-Edge Router in an Multiprotocol Label Switching (MPLS) Layer2 Virtual Private Network (VPN) network topology on a Spirent HLTAPI chassis.

MPLS Layer2 VPN network is a set of sites that are allowed to communicate with each other privately over the MPLS-based public infrastructure or Internet. The sites within the VPN are distinguished using Layer2 Encapsulation of their packets by the network devices.

MPLS Layer2 VPN network uses extended Virtual Circuit (VC) Label Switched Path (LSP) of Label Distribution Protocol (LDP) or BGP signaling in MPLS architecture to exchange Layer2 switching information of VPN sites among service provider network.

The different parts of MPLS L2 VPN are described as:

Provider (P) router
Router in the core of the provider network. P routers run MPLS switching, and do not attach VPN labels (assigned by PE routers) to routed packets between VPN sites.
Provider-Edge (PE) router
Edge router of the MPLS network that attaches the VPN label to the incoming packets based on the interface or sub-interface on which they are received. A PE router directly attaches to a Customer Edge (CE) device. VPN labels are used to direct data packets to the correct egress router of MLPS network.
Customer Edge (CE) device
Edge device on the network of VPN site that connects to the PE router on the ISP network. A CE must interface with a PE router.

Spirent HLTAPI supports different types of MPLS L2 VPN below: :

Ethernet over MPLS (EoMPLS or Martini Traffic)
Point-to-Point connection of Ethernet VPN over MPLS network.
LDP-Virtual Private LAN Services (VPLS)
LDP signaled multipoint-to-multipoint Ethernet VPN over MPLS network.
BGP- Virtual Private LAN Services(VPLS)
BGP signaled multipoint-to-multipoint Ethernet VPN over MPLS network.

Spirent HLTAPI also supports MPLS over GRE for MPLS Layer2 VPN.

Synopsis

Note

M indicates that the argument is Mandatory .

sth::emulation_mpls_l2vpn_pe_config
        [-mode  {enable|disable}  M]
        [-enable_p_router   {1|0}]
        [-handle { pe_handle }]
        [-igp_session_handle <igp_session_handle>]
        [-mpls_session_handle <mpls_session_handle>]
        [-pe_count < integer>]
        [-port_handle   <port_handle>]
        [-targeted_ldp_session_handle <targeted_ldp_session_handle>]
        [-tunnel_handle <gre_tunnel_handle>]
        [-vpls_bgp_session_handle <bgp_signal_session_handle>]
        [-vpn_type { martini_pwe | ldp_vpls | bgp_vpls }]

Arguments

-mode

Specifies the action to perform. Possible values are enable and disable. This argument is Mandatory . The modes are described below:

enable - Enables one or more PE routers. You must
        also specify some of the switches below: :

         -vpn_type
         -port_handle
         -igp_session_handle
         -targeted_ldp_session_handle
         -vpls_bgp_session_handle
         -mpls_session_handle
         -tunnel_handle

        The selections you make in the -vpn_type option
        determine which arguments you must specify..

disable - Disables one or more PE routers. You must
         specify the -handle argument.

This switch has no default value.

-enable_p_router

Specifies whether the Provider router, which the configured PE attaches to, is emulated or not. Possible values are 0 (disable) and 1 (enable). When it is set to 0, no P router would be emulated. When it is set to 1, depending on the attendance of -tunnel, different processes would be done:

  • When the -tunnel_handle argument is specified: as in this case, -mpls_session_handle would be ignored, the -igp_session_handle would be treated as working on P router, and GRE tunnel interface -tunnel_handle would be treated on P router too.
  • When the -tunnel_handle argument is not specified: the -igp_session_handle and -mpls_session_handle are both treated working on P router.
  • When you enable multiple PEs by using this command once, only one P router will be emulated and all enabled PEs will attach to the P router. The default value is 0.
-handle

Specifies the PE handle enabled by this command. This is required by -mode disable. This switch has no default value.

-igp_session_handle

Specifies the IGP Protocol session connecting to the SUT to advertise routing information of the emulated PE. Input handle value is created and returned by relevant protocol commands of Spirent HLTAPI.

When you enable multiple PE routers, input IGP session handle number based on the value of -enable_p_router. If -enable_p_router is set to 0, input IGP session handle number must equal to -pe_count. If -enable_p_router set to 1, only one IGP session handle is required to emulated IGP protocol session on one P router.

The IGP session should be controlled (started or stopped) and fetched information from by using relevant protocol’s Spirent HLTAPI commands. For example, if the IGP session is OSPF, it can be created, modified and deleted by the sth::emulation_ospf_config command, and can be controlled by the sth::emulation_ospf_control command, can be fetched information from when you use the sth::emulation_ospf_info command. This switch has no default value.

-mpls_session_handle

Specifies the MPLS session of the MPLS core network connecting to the SUT. The inputted handle is created and returned by relevant MPLS protocol commands in Spirent HLTAPI. If -tunnel_handle is specified, this switch will be ignored, and MPLS over GRE topology will be emulated. This switch is available, when the -tunnel_handle option is not specified, each input pair of MPLS session and IGP session should be created on the same emulated device.

When you enable multiple PEs by using this command once, the number of input MPLS session handles depends on the value of -enable_p_router.

  • If -enable_p_router is set to 0, input MPLS session handle number must equal to the value of -pe_count.
  • If -enable_p_router is set to 1, only one MPLS session handle is needed to emulate IGP protocol session on one P router.

The input MPLS session should be controlled (started or stopped) and fetched information from by using relevant protocol’s Spirent HLTAPI commands. For example, if the MPLS session is LDP, it can be created, modified and deleted by the sth::emulation_ldp_config function, can be controlled by the sth::emulation_ldp_control function, can be fetched information from using the sth::emulation_ldp_info command. This switch has no default value.

-pe_count

Specifies the number of PEs to be enabled at one time. The default value is 1. Possible values range from 0 to <max_int>.

-port_handle

Specifies the handle of the port on which the PE router is enabled. This argument is required only by the enable mode.

-targeted_ldp_session_handle

Specifies the Targeted LDP session connecting to the peer PE, which establishes the VC (or Pseudo Wire) LSP and assigns VPN labels. The inputted handle is created and returned by sth::emulation_ldp_config, the LDP command of Spirent HLTAPI. When you enable multiple PEs at once, the number of inputted handles must be equal to the value of the -pe_handle option.

When the -tunnel_handle switch is specified to emulate the MPLS over GRE topology, each pair of IGP session and Targeted LDP session (or BGP session for VPN) emulating one PE router should be created on the same emulated devices.

The MPLS session should be configured to advertise LDP prefix LSP with implicit null label when emulating MPLS over GRE topology.

The specified Targeted LDP session should be controlled (started or stopped) and be fetched information from by using LDP protocol’s Spirent HLTAPI commands. For example, it can be created, modified and deleted if you specify the sth::emulation_ldp_config function, can be controlled by the sth::emulation_ldp_control command, and can be fetched information from if you use the sth::emulation_ldp_info command.

This switch is required when -vpn_type set to martini_pwe or ldp_vpls. This switch has no default value.

-tunnel_handle

Specifies the GRE tunnel interface connecting to the none-MPLS provider network of the SUT. The inputted handle is created and returned by sth::emulation_gre_config that is a relevant GRE command of Spirent HLTAPI. When this switch is attended, MPLS over GRE topology will be emulated, and the -mpls_session_handle option is ignored. When this switch is specified, each inputted pair of IGP session and Targeted LDP session (or BGP session for VPN) emulating the same PE router should be created on same emulated devices.

-vpls_bgp_session_handle

Specifies the BGP session connecting to the peer PE, which establishes VPN LSP and assigns VPN labels. The inputted handle is created and returned by sth::emulation_bgp_config that is a BGP protocol command of Spirent HLTAPI. When you enable multiple PEs at one time, the number of input handles must be equal to the value of the -pe_handle argument.

When the -tunnel_handle switch is specified to emulate MPLS over GRE topology, each inputted pair of IGP session and Targeted LDP session (or BGP session for VPN) emulating one PE router should be created on the same emulated devices.

The specified BGP session should be controlled (started or stopped) and be fetched information from by using BGP protocol’s Spirent HLTAPI commands. For example, it can be created, modified and deleted using the sth::emulation_bgp_config function, can be controlled by using the sth::emulation_bgp_control command, and can be fetched information from by using the sth::emulation_bgp_info command. This argument must be specified when -vpn_type is set to bgp_vpls.

-vpn_type

Specifies the type of L2 VPN network topology, in which the PE router works. Possible values are:

martini_pwe - Indicates the Pseudo-Wire Emulation
    Edge-to-Edge (PWE3) network or the Ethernet
    over MPLS VPN, both of which use Martini
    style network topologies.

ldp_vpls - Indicates the type of L2 VPN network
    topology is LDP signaled Virtual Private LAN
    Services (VPLS) network that uses the LDP
    protocol to assign VPN labels.

bgp_vpls - Indicates that the type of L2 VPN network
    topology is BGP signaled Virtual Private LAN
    Services (VPLS) network that uses the BGP
    protocol to assign VPN labels.

Arguments Unsupported by Save as HLTAPI

The following Spirent HLTAPI arguments are currently not supported by the Save as HLTAPI function:

-tunnel_handle

Return Values

Depending on the specific language that HLTAPI uses, the function returns a keyed list/dictionary/hash (See Introduction for more information on return value formats) using the following keys (with corresponding data):

handle         The handle that identifies the PE handle enabled by the
                 ``sth::emulation_mpls_l2vpn_pe_config`` function.
status          Success (1) or failure (0) of the operation.
log            An error message (if the operation failed).

Description

The sth::emulation_mpls_l2vpn_pe_config function enables, disables the specified MPLS L2VPN PE router. Use the -mode argument to specify the action to perform. (See the -mode argument description for information about the actions.)

To enable a PE router, you must specify -mode enable and the -port_handle argument of the sth::emulation_mpls_l2vpn_pe_config function. The specified -port_handle argument indicate the Spirent HLTAPI port that the emulation will use. (The port handle value is contained in the keyed list returned by the connect function.)

Examples

#### HLTAPI for Tcl ####

The following example enables an L2VPN PE on a port:

#There must already exist a port with the handle of port_handle1, a targeted
#LDP session with the handle of ldp_handle1, and an OSPF session with
#the handle of ospf_handle1 and a GRE handle gre_handle1.

sth::emulation_mpls_l2vpn_pe_config \
      -mode enable \
      -port_handle port_handle1 \
      -vpn_type martini_pwe \
      -targeted_ldp_session_handle ldp_handle1 \
      -igp_session_handle ospf_handle1 \
      -tunnel_handle greTunnel1 \
      -pe_count 1

The following example disables an L2VPN PE on a port:

sth::emulation_mpls_l2vpn_pe_config \
      -mode disable \
      -handle $peHandle1

Sample Output:

Success: {status 1} {handle pe_handle1}

Failure: {status 0} {log XXX}

#### HLTAPI for Python ####

The following example enables an L2VPN PE on a port:

#There must already exist a port with the handle of port_handle[1], a targeted
#LDP session with the handle of targeted_ldp_session_handle, and an MPLS session with
#the handle of mpls_session_handle and an IGP session handle igp_session_handle.

 pe_router = sth.emulation_mpls_l2vpn_pe_config (
        vpn_type                    = 'ldp_vpls',
        mode                        = 'enable',
        port_handle                 = port_handle[1],
        pe_count                    = '1',
        targeted_ldp_session_handle = targeted_ldp_session_handle,
        mpls_session_handle         = mpls_session_handle,
        igp_session_handle          = igp_session_handle);

Sample Output:

{'status': '1', 'handle': 'router2'}

#### HLTAPI for Perl ####

The following example enables an L2VPN PE on a port:

#There must already exist a port with the handle of port_handle[1], a targeted
#LDP session with the handle of targeted_ldp_session_handle, and an MPLS session
#with the handle of mpls_session_handle and an IGP session handle
#igp_session_handle.

 my %pe_router = sth::emulation_mpls_l2vpn_pe_config (
         vpn_type                     => 'ldp_vpls',
         mode                         => 'enable',
         port_handle                  => "$hport[2]",
         pe_count                     => '1',
         targeted_ldp_session_handle  => "$targeted_ldp_session_handle",
         mpls_session_handle          => "$mpls_session_handle",
         igp_session_handle           => "$igp_session_handle");

Sample Output:

$VAR1 = 'handle';
$VAR2 = 'router2';
$VAR3 = 'status';
$VAR4 = '1';

End of Procedure Header

sth::emulation_mpls_l2vpn_site_config

Purpose

Creates, modifies or deletes a Customer Site of an MPLS Layer2 VPN network topology on a Spirent HLTAPI chassis. The configured Customer Site may attach to the SUT (through CE device or not) or attach to an emulated PE router enabled by the sth::emulation_mpls_l2vpn_pe_config command.

Synopsis

Note

M indicates that the argument is Mandatory .

sth::emulation_mpls_l2vpn_site_config
   [-mode {create|modify|delete}  M]
   [-port_handle <port_handle>]
   [-handle <site_handle>]
   [-mac_addr <aa:bb:cc:dd:ee:ff >]
   [-mac_addr_step <aa:bb:cc:dd:ee:ff >]
   [-mac_addr_count    < integer>]
   [-pe_handle <pe_handle>]
   [-pe_loopback_ip_addr <a.b.c.d>]
   [-pe_loopback_ip_step <a.b.c.d>]
   [-pe_loopback_ip_prefix <0 - 32 >]
   [-rd_start <admin:assigned>]
   [-rd_step <admin:assigned>]
   [-site_count <integer >]
   [-vc_type { 4 | 5 | b}]
   [-vc_id <0 - 4294967295 >]
   [-vc_id_step   <0 - 4294967295 >]
   [-vc_id_count <0 - 4294967295 >]
   [-ve_id <0 - 4294967295 >]
   [-ve_id_step   <0 - 4294967295 >]
   [-vpn_block_count <1 - 4294967295 >]
   [-ldp_fec_type {FEC_128|FEC_129}]
   [-attachment_group_id <string>]
   [-attachment_group_id_incr <string>]
   [-src_attachment_individual_id <a.b.c.d>]
   [-src_attachment_individual_id_incr <a.b.c.d>]
   [-pw_count <integer>]
   [-vpn_id <1 - 4294967295>]
   [-vpn_id_step < 1 - 4294967295 >]
   [-vlan_id <1 - 4095>]
   [-vlan_id_step <0 - 4095>]
   [-vlan_id_count <1 - 4095>]
   [-vlan_id_outer <1 - 4095>]
   [-vlan_id_outer_step <0 - 4095>]
   [-vlan_id_outer_count <1 - 4095>]
   [-vpn_type { martini_pwe | ldp_vpls | bgp_vpls }]

Arguments

-mode

Specifies the action to perform. Possible values are create, modify, and delete. This argument is Mandatory . The modes are described below:

create - Creates one or more VPN customer site(s).You
         must specify -port_handle. Besides, when you set
         the -vpn_type argument to a type, you must
         specify the options required by the certain VPN
         type.

modify - Modifies the configuration of one VPN
         customer site. You must specify the -handle
         argument when you set the -mode option to
         modify.

delete - Deletes one or more VPN customer site(s). You
         must input -handle when you set the -mode
         argument to delete.
-port_handle

Specifies the handle of the port on which to create the VPN customer site. This argument is Mandatory only for the create mode.

-handle

Specifies the VPN customer site handle created by this command. This is required by -mode modify and delete.

-mac_addr

Specifies the starting MAC address in the address pool of VPN sites. This switch has no default value. If this argument is not specified, Spirent HLTAPI will automatically configure a MAC Address using the template of 00:94:01:xx:xx:xx. The value of this argument should be in MAC address format.

-mac_addr_step

Specifies the step value of MAC address when you use multiple MAC address with in one VPN site or creating multiple VPN site one time. The default value is 00:00:00:00:00:01.

-mac_addr_count

Specifies the number of MAC addresses in the address pool within each VPN site. Possible values range from 1 to <max_int>. The default value is 1.

-pe_handle

Specifies the PE router handle which the configured VPN customer sites attach to. The specified handle is enabled and returned by the sth::emulation_mpls_l2vpn_pe_config function. If you specify this switch, the configured VPN sites will be treated as the sites attach to the emulated PE router specified by the -handle argument on Spirent HLTAPI test port; If not, the configured VPN sites will be treated as those directly attach to the SUT which works as the PE for the VPN site.

-pe_loopback_ip_addr

Specifies the loopback IP address of the PE router that the configured VPN sites attach to. This option must be specified when the -pe_handle argument is not attended. The default value is 10.1.1.1. The value of this argument must be in the IPv4 format.

-pe_loopback_ip_prefix

Specifies the loopback IP address prefix length of the PE router that the configured VPN sites attach to. Possible values range from 0 to 32.The default value is 32.

-pe_loopback_ip_step

Specifies the step value of loopback IP address of the PE router that the configured VPN sites attach to when creating multiple VPN sites. The default value is 0.0.0.0. The value of this argument must be in the format of IPv4.

-rd_start

Specifies the Route Distinguisher of VPN route for the VPN site. There are two types of Route Distinguisher (RD) value, as described below: :

If you use Type 0: The administrator sub-field is a 2 byte AS number and the assigned sub-field is a 4 byte number assigned by the service provider. The format must be “n:n (admin:assigned)”

If you use Type 1: The administrator sub-field is a 4-byte IPv4 address and assigned sub-field is a 2 byte number assigned by the service provider. The format must be “n.n.n.n:n (admin:assigned)”.

This switch is available when the -vpn_type switch is set to bgp_vpls. The default value is 0:0.

-rd_step

Specifies the step value of Route Distinguisher of VPN route for the VPN site. The format must be “admin:assigned”. This switch is applicable only when the -vpn_type switch is set to bgp_vpls. The default value is 0:0.

-site_count

Specifies the number of VPN sites to create one time. The default value is 1. Possible values range from 0 to <max_int>.

-vc_type

Specifies the type of the Virtual Circuit (VC) LSP that the VPN site uses in the provider network for VPN packer routing. This switch is applicable only when the value of the -vpn_type argument is set to martini_pwe or ldp_vpls. The default value is 5. Possible values are:

4- Remote sites are connected through Ethernet VLAN
    VC.
5- Remote sites are connected through Ethernet VC.
B- Remote sites are connected through Ethernet VPLS
    VC.
-vc_id

Specifies the starting ID of the VC LSP that the VPN site used in provider network for VPN packer routing. This switch is available when the value of the -vpn_type option is set to martini_pwe or ldp_vpls. Possible values range from 0 to 4294967295. The default value is 1.

-vc_id_step

Specifies the step value of the ID of VC LSP that the VPN site uses in the provider network for VPN packer routing, when one VPN site uses multiple VC or multiple VPN sites are created at one time. This switch is available when the value of the -vpn_type option is martini_pwe or ldp_vpls. Possible values range from 0 to 4294967295. The default value is 1.

-vc_id_count

Specifies the number of the VC LSPs that the VPN site uses in the provider network for VPN packer routing, when one VPN site uses multiple VC. This switch is available when the value of -vpn_type is set to martini_pwe or ldp_vpls. Possible values range from 1 to 4294967295. The default value is 1.

-ve_id

Specifies the starting value of VPLS Edge (VE ) Identifier for the local PE or represented u-PE(s). In Spirent HLTAPI the VE identifier represents an emulated endpoint (can be either a PE or a u-PE) that is being advertised by the BGP speaker (DUT). This switch is available when the -vpn_type switch is set to bgp_vpls. Possible values range from 0 to 65535. The default value is 1.

-ve_id_step

Specifies the step value of the VE Identifier for the local PE or represented u-PE(s). In Spirent HLTAPI the VE identifier represents an emulated endpoint (can be either a PE or a u-PE) that is being advertised by the BGP speaker (DUT). Possible values range from 0 to 65535. This switch is available when the -vpn_type switch is set to bgp_vpls. The default value is 1.

-vlan_id

Specifies the starting value of the VLAN ID for the VPN site. Possible values range from 1 to 4095. This switch has no default value. If it is specified, Spirent HLTAPI will add VLAN interface to configured VPN site; if not, no VLAN interface will be on the VPN site.

-vlan_id_step

Specifies the step value of VLAN ID for the VPN site when you create multiple VPN sites or there are multiple VLAN interfaces within one VPN site. Possible values range from 0 to 4095. The default value is 0. This switch is available when -vlan_id is inputted.

-vlan_id_count

Specifies the number of VLAN interfaces for the VPN site within one VPN site. Possible values range from 1 to 4095. The default value is 1. This switch is available when -vlan_id is inputted.

-vlan_id_outer

Specifies the first value of the outer VLAN interface IDs for the VPN site, when you use Q-in-Q encapsulation on VPN site. Possible values range from 0 to 4095. This switch has no default value. If it is specified, Spirent HLTAPI will add Q-in-Q VLAN interface to configured VPN site; If not, no Q-in-Q VLAN interface will be on the VPN site.

-vlan_id_outer_step

Specifies the step value of the outer VLAN ID for the VPN site when you create multiple VPN sites with Q-in-Q encapsulation or there are multiple Q-in-Q VLAN interfaces within one VPN site. Possible values range from 0 to 4095. The default value is 0. This switch is available when -vlan_id_outer is specified.

-vlan_id_outer_count

Specifies the number of outer VLAN interfaces within one VPN site. Possible values range from 1 to 4095. The default value is 1. This switch is applicable only when -vlan_id_outer is attended.

-vpn_block_count

Specifies the number of VPLS blocks to configure of the VPN site in the BGP signaled VPLS network. This switch is applicable when the -vpn_type switch is set to bgp_vpls. Possible values range from 1 to 4294967295. The default value is 1.

-vpn_id

Specifies the VPN ID of the VPN site. VPN ID is a global identifier of VPN in Spirent HLTAPI. Emulated customer site with the same VPN ID would be treated as those in the same VPN. Possible values range from 1 to 4294967295. The default value is 1.

-vpn_id_step

Specifies the step value of VPN ID, when you create multiple VPN sites at one time. VPN ID is a global identifier of VPN in Spirent HLTAPI. The emulated customer site with the same VPN ID would be treated as those in the same VPN. Possible values range from 1 to 4294967295. The default value is 1.

-vpn_type

Specifies the topology technology of the VPN network where the created VPN site is. Specifies the type of L2 VPN network topology, in which the PE router works. Possible values are described below:

martini_pwe - Indicates the Pseudo-Wire Emulation
    Edge-to-Edge (PWE3) network or the Ethernet
    over MPLS VPN, both of which use Martini
    style network topologies.

ldp_vpls - Indicates the type of L2 VPN network
    topology is LDP signaled VPLS network that
    uses the LDP protocol to assign VPN labels.
    This is the default value.

bgp_vpls - Indicates that the type of L2 VPN network
    topology is BGP signaled VPLS network that
    uses the BGP protocol to assign VPN labels.
-ldp_fec_type

Specifies LDP FEC type. Possible values are FEC_128 and FEC_129. The default is FEC_128.

-attachment_group_id

Specifies the attachment group identifier. This argument is only available when you set -vpn_type to ldp_vpls and -ldp_fec_type to FEC_129. The default is 100:1.

-attachment_group_id_incr

Specifies the attachment group identifier increment. This argument is only available when you set -vpn_type to ldp_vpls and -ldp_fec_type to FEC_129. The default is 0:1.

-src_attachment_individual_id

Specifies the source attachment individual identifier. This argument is only available when you set -vpn_type to ldp_vpls and -ldp_fec_type to FEC_129. The default is 192.0.0.1.

-src_attachment_individual_id_incr

Specifies the attachment group identifier increment. This argument is only available when you set -vpn_type to ldp_vpls and -ldp_fec_type to FEC_129. The default is 0.0.0.1.

-pw_count

Specifies the PW count. This argument is only available when you set -vpn_type to ldp_vpls and -ldp_fec_type to FEC_129. The default is 1.

Arguments Unsupported by Save as HLTAPI

The following Spirent HLTAPI arguments are currently not supported by the Save as HLTAPI function:

-vpn_id_step
-vc_type

Return Values

Depending on the specific language that HLTAPI uses, the function returns a keyed list/dictionary/hash (See Introduction for more information on return value formats) using the following keys (with corresponding data):

handle    The handle that identifies the VPN site handle created by the
          ``sth::emulation_mpls_l2vpn_site_config`` function.
status    Success (1) or failure (0) of the operation.
log       An error message (if the operation failed).

Description

The sth::emulation_mpls_l2vpn_site_config function creates, modifies, and deletes the specified MPLS L2VPN Customer sites. Use the -mode argument to specify the action to perform. (See the -mode argument description for information about the actions.)

To create a VPN site, you can use create mode of the function sth::emulation_mpls_l2vpn_site_config along with the -port_handle to specify the Spirent HLTAPI port that the emulation will use. (The port handle value is contained in the keyed list returned by the connect function.)

In addition to specifying the port, you must also provide one or more of the following pieces of information when you create a VPN site:

-vpn_type
-pe_handle
-pe_loopback_ip_addr
-pe_loopback_ip_prefix

Examples

#### HLTAPI for Tcl ####

The following example enables an L2 VPN site on a port:

sth::emulation_mpls_l2vpn_site_config -mode create \
     -port_handle port_handle1 \
     -pe_handle pe_handle1 \
     -pe_loopback_ip_prefix 32 \
     -site_count 5 \
     -vpn_type martini_pwe \
     -vc_id $vc_id \
     -vc_id_step $vc_step \
     -vpn_id $vpn_id \
     -vpn_id_step $vpn_step \
     -mac_addr $site_mac_addr \
     -mac_addr_count 100 \
     -mac_addr_step $site_mac_step \
     -vlan_id $vlan_id \
     -vlan_id_step 1-pe_count 5

Note

There must already exist a port with the handle of port_handle1 and a PE router session with the handle of pe_handle1.

The following example modifies an L2 VPN site:

sth::emulation_mpls_l2vpn_site_config -mode modify \
      -handle $vpnSiteHandle1 \
      -pe_loopback_ip_addr "1.10.1.2" \
      -pe_loopback_ip_prefix 32 \
      -vpn_type martini_pwe \
      -vc_id 1501 \
      -vpn_id 101 \
      -mac_addr 12:22:33:44:55:66 \
      -vlan_id 1700

The following example deletes two L2VPN sites:

sth::emulation_mpls_l2vpn_site_config\
     -mode delete \
     -handle "$vpnSiteHandle1 $vpnSiteHandle2"

Sample Output:

Success  {status 1} {handle pe_handle1}

Failure  {status 0} {log XXX}

#### HLTAPI for Python ####

The following example enables an L2 VPN site on a port:

device_ret3 = sth.emulation_mpls_l2vpn_site_config (
           mode                        = 'create',
           pe_handle                   = pe_handle,
           vpn_id                      = '100',
           vpn_type                    = 'ldp_vpls',
           pe_loopback_ip_prefix       = '32',
           vc_id                       = '1500',
           vc_id_step                  = '1',
            pe_loopback_ip_addr         = '2.2.2.4',
           vc_id_count                 = '1',
           port_handle                 = port_handle[1],
           vlan_id                     = '2071',
           vlan_id_step                = '0',
           vlan_id_count               = '1',
           mac_addr                    = '00:10:94:00:00:32',
           mac_addr_step               = '00:00:00:00:00:01',
           mac_addr_count              = '1');

Sample Output:

{'status': '1', 'handle': 'host4'}

#### HLTAPI for Perl ####

The following example enables an L2 VPN site on a port:

my %device_ret3 = sth::emulation_mpls_l2vpn_site_config (
             mode                => 'create',
             pe_handle           => "$pe_handle",
             vpn_id              => '100',
             vpn_type            => 'ldp_vpls',
             pe_loopback_ip_prefix=> '32',
             vc_id               => '1500',
             vc_id_step          => '1',
             pe_loopback_ip_addr => '2.2.2.4',
             vc_id_count         => '1',
             port_handle         => "$hport[2]",
             vlan_id             => '2071',
             vlan_id_step        => '0',
             vlan_id_count       => '1',
             mac_addr            => '00:10:94:00:00:32',
             mac_addr_step       => '00:00:00:00:00:01',
             mac_addr_count      => '1');

Sample Output:

$VAR1 = 'handle';
$VAR2 = 'host4';
$VAR3 = 'status';
$VAR4 = '1';

End of Procedure Header

sth::emulation_mpls_l3vpn_pe_config

Purpose

Enables or disables a Provider-Edge Router in an MPLS Layer3 VPN network topology on a Spirent HLTAPI chassis.

MPLS Layer3 VPN (Virtual Private Network) network is a set of sites that are allowed to communicate with each other privately over the MPLS-based public infrastructure or Internet. The sites within the VPN are distinguished using Layer3 Encapsulation of their packets by the network devices. Spirent HLTAPI support a topology of MPLS Layer3 VPN defined in RFC 2547.

MPLS Layer3 VPN network uses BGP signaling in MPLS architecture to exchange Layer3 switching information of VPN sites among service provider network.

The different parts of the MPLS VPN are described as follows:

Provider (P) router
Router in the core of the provider network. P routers run MPLS switching, and do not attach VPN labels (MPLS label in each route assigned by the PE router) to routed packets. VPN labels are used to direct data packets to the correct egress router.
PE router
Router that attaches the VPN label to incoming packets based on the interface or sub-interface on which they are received. A PE router attaches directly to a CE router.
Customer (C) router
A router in the ISP or enterprise network.
Customer edge (CE) router
Edge router on the network of the ISP that connects to the PE router on the network. A CE router must interface with a PE router.

Spirent HLTAPI also supports MPLS over GRE for MPLS Layer3 VPN.

Synopsis

Note

M indicates that the argument is Mandatory .

sth::emulation_mpls_l3vpn_pe_config
   [-mode {enable|disable}  M]
   [-bgp_session_handle <bgp_signal_session_handle>]
   [-enable_p_router   {1 | 0 }]
   [-handle { pe_handle }]
   [-igp_session_handle <igp_session_handle>]
   [-mpls_session_handle <mpls_session_handle>]
   [-pe_count < integer>]
   [-port_handle <port_handle>]
   [-tunnel_handle <gre_tunnel_handle>]

Arguments

-mode

Specifies the action to perform. Possible values are enable and disable. This argument is Mandatory . The modes are described below:

enable - Enables one or more PE routers. You must
         input -port_handle, -igp_session_handle,
         bgp_session_handle, and -mpls_session_handle
         or -tunnel_handle, depending on whether you
         want to use MPLS over GRE.

disable - Disables one or more PE routers. You must
         specify the -handle argument.
-bgp_session_handle

Specifies the BGP session connecting to the peer PE, which establishes VPN LSP and assigns VPN labels.

The handle you specified is created and returned by the BGP protocol command (sth::emulation_bgp_config) of Spirent HLTAPI. When you enable multiple PEs at one time, the number of handles must be equal to the value of the PE number (-pe_handle).

When the -tunnel_handle switch is defined to emulate MPLS over GRE topology, each pair of IGP session and BGP session that emulates one PE router for a VPN should be created on the same emulated devices.

The BGP session should be controlled (started or stopped) and be fetched information from by using Spirent HLTAPI commands of BGP protocol. For example, it can be created, modified, and deleted by the sth::emulation_bgp_config function; it can be controlled by the sth::emulation_bgp_control function; it can be fetched information from by the sth::emulation_bgp_info function.

-enable_p_router

Specifies whether the Provider router, which the configured PE attaches to, is emulated or not. Possible values are 0 (disable) and 1 (enable). When it is set to 0, no P router would be emulated. When it is set to 1, which process would be done depends on whether the -tunnel_handle argument is specified.

If -tunnel_handle is specified (as in this case, -mpls_session_handle would be ignored), the inputted -igp_session_handle would be treated as working on P router, and GRE tunnel interface (-tunnel_handle) would be treated on P router too.

If -tunnel_handle is absent: The IGP session (-igp_session_handle) and the MPLS session (-mpls_session_handle) you specified are both treated like sessions working on P router.

When you enable multiple PEs at once, only one P router is emulated and all enabled PEs will attach to that router. The default value is 0.

-handle

Specifies the PE handle enabled by this command. This is required by disable mode.

-igp_session_handle

Specifies the IGP Protocol session connecting to the SUT to advertise routing information of the emulated PE. The inputted handle value is created and returned by relevant protocol commands of Spirent HLTAPI. When you enable multiple PE routers, input IGP session handle number according to the value of the -enable_p_router option. If the -enable_p_router switch is set to 0, the number of IGP sessions must be equal to the PE number (-pe_count). If the -enable_p_router option is set to 1, only one IGP session handle is required to emulate IGP protocol session on one P router.

The IGP session should be controlled (started or stopped) and be fetched information from by using relevant protocols of Spirent HLTAPI commands. For example, if the IGP session is OSPF, it can be created, modified, and deleted by the sth::emulation_ospf_config function; it can be controlled by using the sth::emulation_ospf_control function; and it can be fetched information from by using the sth::emulation_ospf_info command.

-mpls_session_handle

Specifies the MPLS session of the MPLS core network connecting to the SUT. The Input handle is created and returned by relevant MPLS protocol commands of Spirent HLTAPI. If the -tunnel_handle is attendant, this switch will be ignored and MPLS over GRE topology will be emulated. When the -tunnel_handle option is absent, you can specify this switch. Each pair of MPLS session and IGP session should be created on the same emulated device.

When you enable multiple PEs at once, the number of MPLS session handles will be determined by the value of the -enable_p_router argument:

If the -enable_p_router option is set to 0, IGP session handle number must be equal to the PE number which is defined by the -pe_count option.

If the -enable_p_router argument is set to 1, only one IGP session handle is needed to emulated IGP protocol session on one P router.

The MPLS session should be controlled (started or stopped) and be fetched information from by using the Spirent HLTAPI commands of other relevant protocols.

For example, if the MPLS session is LDP, it can be created, modified, and deleted by using the sth::emulation_ldp_config function; it can be controlled by specifying the sth::emulation_ldp_control function; it can be fetched information from by using the sth::emulation_ldp_info command.

-pe_count

Specifies the number of PEs to be enabled at one time. Possible values range from 0 to <max_int>. The default value is 1.

-port_handle

Specifies the handle of the port on which the PE router is enabled. This argument is required only by the enable modes.

-tunnel_handle

Specifies the GRE tunnel interface connecting to the none-MPLS provider network of the SUT. The handle you specified by this argument is created and returned by the relevant GRE commands of Spirent HLTAPI (such as sth::emulation_gre_config.). When this switch is defined, MPLS over GRE topology will be emulated, and the -mpls_session_handle option is ignored. When this switch is specified, each pair of IGP session and BGP session for VPN that emulates one PE router must be created on the same emulated devices.

Arguments Unsupported by Save as HLTAPI

The following Spirent HLTAPI arguments are currently not supported by the Save as HLTAPI function:

-tunnel_handle

Return Values

Depending on the specific language that HLTAPI uses, the function returns a keyed list/dictionary/hash (See Introduction for more information on return value formats) using the following keys (with corresponding data):

handle         The handle that identifies the PE handle enabled by the
               ``sth::emulation_mpls_l3vpn_pe_config`` function.
status         Success (1) or failure (0) of the operation.
log            An error message (if the operation failed).

Description

The sth::emulation_mpls_l3vpn_pe_config function enables and disables the specified MPLS Layer3 VPN PE router. Use the -mode argument to specify the action to perform. (See the -mode argument description for information about the actions.)

To enable a PE router, you can use enable mode of the function sth::emulation_mpls_l3vpn_pe_config function along with the -port_handle argument to specify the Spirent HLTAPI port that the emulation will use. (The port handle value is contained in the keyed list returned by the connect function.)

Examples

#### HLTAPI for Tcl ####

The following example enables an Layer3 VPN PE on a port:

sth::emulation_mpls_l3vpn_pe_config \
     -mode enable \
     -port_handle port_handle1 \
     -bgp_session_handle bgp_handle1 \
     -igp_session_handle ospf_handle1 \
     -tunnel_handle greTunnel1 \
     -pe_count 1

Note

There must be an existed port with the handle of port_handle1, a BGP session handle that is bgp_handle1, an OSPF session handle that is ospf_handle1 and a GRE handle that is gre_handle1.

The following example disables an Layer3 VPN PE on a port:

sth::emulation_mpls_l3vpn_pe_config \
     -mode disable \
     -handle $peHandle1

Sample Output:

# Success
   {status 1} {handle pe_handle1}

# Failure
   {status 0} {log XXX}

#### HLTAPI for Python ####

The following example enables an Layer3 VPN PE on a port:

pe_router = sth.emulation_mpls_l3vpn_pe_config (
             mode                = 'enable',
             port_handle         = port_handle[1],
             pe_count            = '1',
             bgp_session_handle  = bgp_session_handle,
             mpls_session_handle = mpls_session_handle,
             igp_session_handle  = igp_session_handle);

Sample Output:

{'status': '1', 'handle': 'emulateddevice2'}

#### HLTAPI for Perl ####

The following example enables an Layer3 VPN PE on a port:

my %pe_router = sth::emulation_mpls_l3vpn_pe_config (
             mode                => 'enable',
             port_handle         => "$hport[2]",
             pe_count            => '1',
             bgp_session_handle  => "$bgp_session_handle",
             mpls_session_handle => "$mpls_session_handle",
             igp_session_handle  => "$igp_session_handle");

Sample Output:

$VAR1 = 'status';
$VAR2 = '1';
$VAR3 = 'handle';
$VAR4 = 'emulateddevice2';

End of Procedure Header

sth::emulation_mpls_l3vpn_site_config

Purpose

Enables or disables a Customer Site in an MPLS Layer3 VPN network topology on a Spirent HLTAPI chassis.

Synopsis

Note

M indicates that the argument is Mandatory .

sth::emulation_mpls_l3vpn_site_config
   [-mode {create|modify|delete}  M]
   [-port_handle <port_handle>]
   [-handle <site_handle>]
   [-ce_session_handle <ce_session_handle>]
   [-device_count < integer>]
   [-interface_ip_addr < a.b.c.d >]
   [-interface_ip_step < a.b.c.d >]
   [-interface_ip_prefix < 0 - 32 >]
   [-pe_handle    < pe_handle >]
   [-pe_loopback_ip_addr < a.b.c.d >]
   [-pe_loopback_ip_step < a.b.c.d >]
   [-pe_loopback_ip_prefix < 0 - 32 >]
   [-rd_start <admin:assigned>]
   [-rd_step <admin:assigned>]
   [-site_count <0-max_int>]
   [-vpn_id < 1 - 4294967295 >]
   [-vpn_id_step < 1 - 4294967295>]
   [-vlan_id < 1 - 4095>]
   [-vlan_id_step < 0 - 4095>]

Arguments

-mode

Specifies the action to perform. Possible values are create, modify, and delete. This argument is Mandatory . The modes are described below:

create - Creates one or multiple VPN customer sites.
       You must input -port_handle and other switches
       which depends on the value of the -vpn_type
       option.

modify - Modifies the configuration of one VPN
        customer site. You must specify the -handle
        argument.

delete - Deletes one or more VPN customer site. You
         must specify the -handle argument.
-port_handle

Specifies the handle of the port on which to create the VPN customer site. This argument is required only by create modes. This switch has no default value.

-handle

Specifies the VPN customer site handle created by this command. You must specify this argument when the -mode argument is set to modify or delete.

-ce_session_handle

Specifies the IGP of BGP protocol session worked on and emulated a CE device, interacting with the DUT to exchange VPN routes. The handle is created or returned by Spirent HLTAPI commands of relevant IGP or BGP protocol.

The session should also be controlled (started or stopped) and be fetched information from by using Spirent HLTAPI commands of relevant protocol. For example, if the IGP session is OSPF, it can be created, modified, and deleted by the sth::emulation_ospf_config function; it can be controlled by using the sth::emulation_ospf_control function, can be fetched information from by using the sth::emulation_ospf_info command.

-device_count

Specifies the number of hosts to be emulated within one VPN site. The default value is 1.

-interface_ip_addr

Specifies the first IP address of the address pool with in the VPN sites. The default value is 192.85.1.1.

-interface_ip_step

Specifies the step value of IP address of the VPN site when you create multiple hosts within one VPN site or create multiple VPN sites at once. The default value is 0.0.1.0.

-interface_ip_prefix

Specifies the prefix length of IP address of the address pool with in the VPN sites. Possible values range from 0 to 32. The default value is 32.

-pe_handle

Specifies the handle of the PE router which the configured VPN customer sites attach to. The handle is enabled and returned by the sth::emulation_mpls_l2vpn_pe_config function. If this switch is specified, the configured VPN sites will be treated as those attaching to the emulated PE router specified by this option. If you don’t define this argument, the configured VPN sites will be treated as that directly attaches to the SUT which works as the PE for the VPN site.

-pe_loopback_ip_addr

Specifies the loopback IP address of the PE router that the configured VPN sites attach to. You must specify this option when you don’t define the -pe_handle argument. The default value is 10.1.1.1. The value of this argument must be in IPv4 format.

-pe_loopback_ip_prefix

Specifies the loopback IP address prefix length of the PE router that the configured VPN sites attach to. Possible values range from 0 to 32.The default value is 32.

-pe_loopback_ip_step

Specifies the step value of the loopback IP address of the PE router that the configured VPN sites attach to when you create multiple VPN sites at one time. The default value is 0.0.0.0. The value of this argument must be in IPv4 format.

-rd_start

Specifies the first RD of VPN route for the VPN site. There are two types of RD value:

type 0 - The administrator sub-field is a 2 byte AS
    number and the assigned sub-field is a 4 byte
    number assigned by the service provider. The
    format should be like "n:n (admin:assigned)"

type 1 - The administrator sub-field is a 4-byte IPv4
    address and assigned sub-field is a 2 byte number
    assigned by the service provider. The format
    should be like "n.n.n.n:n (admin:assigned)".

This switch is applicable when the -vpn_type switch is set to bgp_vpls. The default value is 0:0.

-rd_step

Specifies the step value of the RD of the VPN Route for the VPN site. This switch is available when the -vpn_type switch is set to bgp_vpls. The default value is 0:0.

-site_count

Specifies the number of VPN sites to create at once. The default value is 1. Possible values range from 0 to <max-int>

-vlan_id

Specifies the first VLAN ID for the VPN site. Possible values range from 1 to 4095. If you specify this option, Spirent HLTAPI will add VLAN interface to configured VPN site; if not, no VLAN interface will be on the VPN site.

-vlan_id_step

Specifies the step value of the VLAN ID for the VPN site when you create multiple VPN sites or there are multiple VLAN interfaces within one VPN site. Possible values range from 0 to 4095. The default value is 0. This switch is applicable when the -vlan_id option is defined.

-vpn_id

Specifies the VPN ID of the VPN site. VPN ID is a global identifier of VPN in Spirent HLTAPI. The emulated customer site with the same VPN ID would be treated as in same VPN. Possible values range from 1 to 4294967295.The default value is 1.

-vpn_id_step

Specifies the step value of the VPN ID of the VPN site, when you create multiple VPN sites at one time. The VPN ID is the global identifier of a VPN in Spirent HLTAPI. Emulated customer site with same VPN ID would be treated as in same VPN. Possible values range from 1 to 4294967295. The default value is 1.

Arguments Unsupported by Save as HLTAPI

The following Spirent HLTAPI arguments are currently not supported by the Save as HLTAPI function:

-vpn_id_step

Return Values

Depending on the specific language that HLTAPI uses, the function returns a keyed list/dictionary/hash (See Introduction for more information on return value formats) using the following keys (with corresponding data):

handle         The handle that identifies the VPN site handle created
               by the ``sth::emulation_mpls_l3vpn_site_config`` function.
status         Success (1) or failure (0) of the operation.
log            An error message (if the operation failed).

Description

The sth::emulation_mpls_l3vpn_pe_config function creates, modifies, and deletes the specified MPLS L3VPN Customer sites. Use the -mode argument to specify the action to perform. (See the -mode argument description for information about the actions.)

To create a VPN site, use create mode of the function sth::emulation_mpls_l2vpn_site_config along with the -port_handle to specify the Spirent HLTAPI port that the emulation will use. (The port handle value is contained in the keyed list returned by the connect function.)

In addition to specifying the port, you must also specify one or more of the following arguments when you create a VPN site:

-vpn_type
-pe_handle
-pe_loopback_ip_addr
-pe_loopback_ip_prefix

Examples

#### HLTAPI for Tcl ####

The following example enables an Layer3 VPN site on a port:

#There must already exist a port with handle port_handle1 and a CE router
#session handle pe_handle1.
  sth::emulation_mpls_l3vpn_site_config -mode create \
     -port_handle port_handle1 \
     -pe_handle pe_handle1 \
     -pe_loopback_ip_prefix 32 \
     -site_count 5 \
     -vpn_type martini_pwe \
     -vc_id $vc_id \
     -vc_id_step $vc_step \
     -vpn_id $vpn_id \
     -vpn_id_step $vpn_step \
     -mac_addr $site_mac_addr \
     -mac_addr_count 100 \
     -mac_addr_step $site_mac_step \
     -vlan_id $vlan_id \
     -vlan_id_step 1-pe_count 5

The following example modifies an Layer3 VPN site:

#There must already exist a VPN site vpnSiteHandle1
 sth::emulation_mpls_l3vpn_site_config -mode modify \
      -handle $vpnSiteHandle1 \
      -pe_loopback_ip_addr "1.10.1.2" \
      -pe_loopback_ip_prefix 32 \
      -vpn_type martini_pwe \
      -vc_id 1501 \
      -vpn_id 101 \
      -mac_addr 12:22:33:44:55:66 \
      -vlan_id 1700

The following example deletes two L3VPN sites:

sth::emulation_mpls_l3vpn_site_config\
     -mode delete \
     -handle "$vpnSiteHandle1 $vpnSiteHandle2"

Sample Output:

Success: {status 1} {handle pe_handle1}

Failure: {status 0} {log XXX}

#### HLTAPI for Python ####

The following example enables an Layer3 VPN site on a port:

#There must already exist a port with handle port_handle[0] and a PE router
#session handle ce_session_handle.
  device_ret3 = sth.emulation_mpls_l3vpn_site_config (
               mode                = 'create',
               ce_session_handle   = ce_session_handle,
               vpn_id              = '100',
               pe_loopback_ip_prefix= '32',
               pe_loopback_ip_addr = '220.1.1.1',
               rd_start            = '123:1',
               port_handle         = port_handle[0],
               interface_ip_addr   = '13.31.0.11',
               interface_ip_prefix = '16');

Sample Output:

{'status': '1', 'handle': 'host3'}

#### HLTAPI for Perl ####

The following example enables an Layer3 VPN site on a port:

my %device_ret3 = sth::emulation_mpls_l3vpn_site_config (
             mode                => 'create',
             ce_session_handle   => "$ce_session_handle",
             vpn_id              => '100',
             pe_loopback_ip_prefix=> '32',
             pe_loopback_ip_addr => '220.1.1.1',
             rd_start            => '123:1',
             port_handle         => "$hport[1]",
             interface_ip_addr   => '13.31.0.11',
             interface_ip_prefix => '16';
Sample Output::
$VAR1 = ‘handle’; $VAR2 = ‘host3’; $VAR3 = ‘status’; $VAR4 = ‘1’;

End of Procedure Header