Neutron/sdnapi
Contents
L3VPN Information Model
Overview
UML Model
- Example.jpg
High Level L3VPN Architecture
Elements Description
The L3 VPN model contains multiple VPN Instances.
L3VPN Instance
====UML Model====]
- Example.jpg
L3VPN Instance Model
L3VPN Instance Attributes
| Attribute | Type | Required | CRUD | Default Value | Constraints | Note |
|---|---|---|---|---|---|---|
| instanceName | String | Yes | CRD | N/A | Maxlength = 64 Pattern = ([^?]*) | L3VPN instance name |
| serviceType | String enum | No | CRUD | full-mesh | full-mesh or hub-spoke | Topology type |
| afType | String enum | No | CRUD | ipv4uni | ipv4uni or ipv6uni | Address family type: IPv4 or IPv6 |
| acIf Id | String | Yes | CRD | N/A | Length= 1~63 | Access interface ID |
| acIfAddr | String | No | CRUD | N/A | Length = 0~255 | Access interface address, IPv4 or IPv6 |
| acIfMask | Unsigned byte | No | CRUD | N/A | 0 ~ 128 | IP address mask length |
| role | String enum | No | CRUD | edge-if | edge-if or center-if | center-if is only available in hub-spoke mode; center-if is the interface in hub node |
| userName | String | No | CRUD | N/A | Maxlength = 64 Pattern = ([^?]*) | User name for this access interface |
| userPassword | String | No | CRUD | N/A | Maxlength = 64 Pattern = ([^?]*) | User password for the access interface |
| phyNodeId | String | No | CRUD | N/A | Maxlength = 64 Pattern = ([^?]*) | Physical node ID |
| phyAcIf | String | No | CRUD | N/A | Maxlength = 64 Pattern = ([^?]*) | hysical access interface |
| protocolType | String enum | No | CRUD | ospf | bgp, ospf, or isis | Protocol type |
| protocolId | Unsigned int | No | CRUD | 0 | N/A | Valid only when protocol is IGP; it can be AS number |
| remoteAsNumber | String | No | CRUD | N/A | Length = 1 ~ 11 | Valid only when protocol is BGP |
| remotePeerAddr | String | No | CRUD | N/A | Length = 0~255 | Valid only when protocol is BGP |
L3VPN API example
Restful API
L3VPN Instance
POST
POST URI/netl3vpn/l3vpninstances
<l3vpninstances>
<l3vpninstance>
<instancename>vpninstance1</instancename>
<servicetype>full-mesh</servicetype>
<aftype>ipv4uni</aftype>
<acifs>
<acif>
<acifid>vpninstance1:port1</acifid>
<acifaddr>20.1.1.1</acifaddr>
<acifmask>24</acifmask>
<role>edge-if</role>
<username>user1</username>
<userpassword>userpass</userpassword>
<phynodeid>Node1</phynodeid>
<phyacif>Node1:Ethernet0/0/1</phyacif>
<protocol>
<protocoltype>ospf</protocoltype>
<igpattr>
<protocolid>1000</protocolid>
</igpattr>
</protocol>
</acif>
<acif>
……
</acif>
</acifs>
</l3vpninstance>
<l3vpninstance>
……
</l3vpninstance>
</l3vpninstances>
GET
- To get all instances
GET URI/netl3vpn/l3vpninstances. No HTTP message body.
- To get a single VPN instance
GET URI/netl3vpn/l3vpninstances/{instancename}. No HTTP message body.
- To get one or more VPN instances at a time
GET URI/netl3vpn/l3vpninstances
<l3vpninstances>
<l3vpninstance>
<instancename>vpninstance1</instancename>
</l3vpninstance>
<l3vpninstance>
……
</l3vpninstance>
</l3vpninstances>
- Response
<l3vpninstances>
<l3vpninstance>
<instancename>vpninstance1</instancename>
<servicetype>full-mesh</servicetype>
<aftype>ipv4uni</aftype>
<acifs>
<acif>
<acifid>vpninstance1:port1</acifid>
<acifaddr>20.1.1.1</acifaddr>
<acifmask>24</acifmask>
<role>edge-if</role>
<username>user1</username>
<userpassword>userpass</userpassword>
<phynodeid>Node1</phynodeid>
<phyacif>Node1:Ethernet0/0/1</phyacif>
<protocol>
<protocoltype>ospf</protocoltype>
<igpattr>
<protocolid>1000</protocolid>
</igpattr>
</protocol>
</acif>
<acif>
……
</acif>
</acifs>
</l3vpninstance>
<l3vpninstance>
……
</l3vpninstance>
</l3vpninstances>
PUT
PUT URI/netl3vpn/l3vpninstances
<l3vpninstances>
<l3vpninstance>
<instancename>vpninstance1</instancename>
<servicetype>full-mesh</servicetype>
<aftype>ipv4uni</aftype>
<acifs>
<acif>
<acifid>vpninstance1:port1</acifid>
<acifaddr>20.1.1.1</acifaddr>
<acifmask>24</acifmask>
<role>edge-if</role>
<username>user1</username>
<userpassword>userpass</userpassword>
<phynodeid>Node1</phynodeid>
<phyacif>Node1:Ethernet0/0/1</phyacif>
<protocol>
<protocoltype>ospf</protocoltype>
<igpattr>
<protocolid>1000</protocolid>
</igpattr>
</protocol>
</acif>
<acif>
……
</acif>
</acifs>
</l3vpninstance>
<l3vpninstance>
……
</l3vpninstance>
</l3vpninstances>
DELETE
- To delete a single VPN instance
DELETE URI/netl3vpn/l3vpninstances/{instancename}. No HTTP message body.
- To delete one or more instances
DELETE URI/netl3vpn/l3vpninstances
<l3vpninstances>
<l3vpninstance>
<instancename>vpninstance1</instancename>
</l3vpninstance>
<l3vpninstance>
……
</l3vpninstance>
</l3vpninstances>
Access Interface
POST
POST URI/netl3vpn/l3vpninstances/{instancename}/acifs
<acifs>
<acif>
<acifid>vpninstance1:port1</acifid>
<acifaddr>20.1.1.1</acifaddr>
<acifmask>24</acifmask>
<role>edge-if</role>
<username>user1</username>
<userpassword>userpass</userpassword>
<phynodeid>Node1</phynodeid>
<phyacif>Node1:Ethernet0/0/1</phyacif>
<protocol>
<protocoltype>ospf</protocoltype>
<igpattr>
<protocolid>1000</protocolid>
</igpattr>
</protocol>
</acif>
<acif>
……
</acif>
</acifs>
GET
- To get a single access interface
GET URI/netl3vpn/l3vpninstances/{instancename}/acifs/{acifid}. No HTTP message body.
- To get one or more access interfaces
GET URI/netl3vpn/l3vpninstances/{instancename}/acifs
<acifs>
<acif>
<acifid>vpninstance1:port1</acifid>
</acif>
<acif>
……
</acif>
</acifs>
- Response
<acifs>
<acif>
<acifid>vpninstance1:port1</acifid>
<acifaddr>20.1.1.1</acifaddr>
<acifmask>24</acifmask>
<role>edge-if</role>
<username>user1</username>
<userpassword>userpass</userpassword>
<phynodeid>Node1</phynodeid>
<phyacif>Node1:Ethernet0/0/1</phyacif>
<protocol>
<protocoltype>ospf</protocoltype>
<igpattr>
<protocolid>1000</protocolid>
</igpattr>
</protocol>
</acif>
<acif>
……
</acif>
</acifs>
PUT
PUT URI/netl3vpn/l3vpninstances/{instancename}/acifs
<acifs>
<acif>
<acifid>vpninstance1:port1</acifid>
<acifaddr>20.1.1.1</acifaddr>
<acifmask>24</acifmask>
<role>edge-if</role>
<username>user1</username>
<userpassword>userpass</userpassword>
<phynodeid>Node1</phynodeid>
<phyacif>Node1:Ethernet0/0/1</phyacif>
<protocol>
<protocoltype>ospf</protocoltype>
<igpattr>
<protocolid>1000</protocolid>
</igpattr>
</protocol>
</acif>
<acif>
……
</acif>
</acifs>
DELETE
- To delete a single access interface
DELETE URI/netl3vpn/l3vpninstances/{instancename}/acifs/{acifid}. No HTTP message body.
- To delete one or more access interfaces
DELETE URI/netl3vpn/l3vpninstances/{instancename}/acifs
<acifs>
<acif>
<acifid>vpninstance1:port1</acifid>
</acif>
<acif>
……
</acif>
</acifs>
L2VPN Information Model
Overview
UML Model
- Example.jpg
High Level L2VPN Architecture
Elements Description
The L2VPN model contains multiple VPN Instances.
L2VPN Instance Attributes
| Attribute | Type | Required | CRUD | Default Value | Constraints | Note |
|---|---|---|---|---|---|---|
| instanceName | Stringe | Yes | CRD | N/A | Maxlength = 32 Pattern = ([^?]*) | L2VPN instance name |
| instanceOperStatus | String enum | No | R | N/A | Up or down | Instance Operation Status |
| instanceType | String enum | No | CRU | 2PE | 2PE or 3PE | Instance type |
L2VPN PW Attributes
| Attribute | Type | Required | CRUD | Default Value | Constraints | Note |
|---|---|---|---|---|---|---|
| pwRole | String enum | Yes | CR | primary | primary or backup or bypas | Pw role |
| pwOperStatus | Unsigned byte | No | R | N/A | Up or down | Pw Operation Status |
L2VPN PW CX Attributes
| Attribute | Type | Required | CRUD | Default Value | Constraints | Note |
|---|---|---|---|---|---|---|
| FPID | String | Yes | CRD | N/A | Length = 0~255 | Forward Point ID |
| ForwardPeerID | String | No | CRD | N/A | Length = 0~255 | Forward peer |
| ForwardInLabel | String | No | CRD | N/A | 17~2^20 | Forward in label |
| ForwardOutLabel | String | No | CRD | N/A | 17~2^20 | Forward out labe |
| backwardPeerID | String | No | CRD | N/A | Length = 0~255 | Backward peer |
| BackwardInLabel | String | No | CRD | N/A | 17~2^20 | Backward in label |
| BackwardOutLabel | String | No | CRD | N/A | 17~2^20 | Backward out label |
| TunnelId | String | No | CRUD | N/A | Length = 0~32 | Tunnel of the PW |
L2VPN AC Attributes
| Attribute | Type | Required | CRUD | Default Value | Constraints | Note |
|---|---|---|---|---|---|---|
| FPID | Stringe | Yes | CRD | N/A | Length = 0~255 | Forward Point ID |
| Interface | String | Yes | CRD | N/A | Length = 0~32 | Interface access the l2vpn |
L2VPN API example
Restful API
L2VPN Instance
POST
POST URI/netL2VPN/vpws/netL2VPNinstances
<netL2vpnInstances>
<netL2vpnInstance>
<instancename>vpninstance1</instancename>
<instanceType>2PE</instanceType>
<pws>
<pw>
<pwRole>primary</pwRole>
<cxs>
<cx>
<FPID>1.1.1.1</FPID>
<backwardPeerID>2.2.2.2</backwardPeerID>
<BackwardInLabel>1024</BackwardInLabel>
<BackwardOutLabel>1025</BackwardOutLabel>
<FPID>2.2.2.2</FPID>
<forwardPeerID>1.1.1.1</forwardPeerID>
<forwardInLabel>1025</forwardInLabel>
<forwardOutLabel>1024</forwardOutLabel>
</cx>
</cxs>
</pw>
</pws>
<acs>
<ac>
<FPID>1.1.1.1</FPID>
<Interface> Ethernet0/0/1</Interface>
</ac>
</acs>
</L2VPNinstance>
<L2VPNinstance>
……
</L2VPNinstance>
</L2VPNinstances>
GET
- To get all instances
GET URI/netL2vpn/vpws/nstL2vpnInstances. No HTTP message body.
- To get a single VPN instance
GET URI/netL2vpn/vpws/nstL2vpnInstances /{instancename}. No HTTP message body.
- To get one or more VPN instances at a time
GET URI/netL2VPN/L2VPNinstances
<netL2vpnInstances>
<netL2vpnInstance>
<instancename>vpninstance1</instancename>
</netL2vpnInstance>
<netL2vpnInstance>
……
</netL2vpnInstance>
</netL2vpnInstances>
- Response
<netL2vpnInstances>
<netL2vpnInstance>
<instancename>vpninstance1</instancename>
<instanceType>2PE</instanceType>
<instanceOperStatus>up</instanceOperStatus>
<pws>
<pw>
<pwRole>primary</pwRole>
<pwOperStatus>up</pwOperStatus>
<cxs>
<cx>
<FPID>1.1.1.1</FPID>
<backwardPeerID>2.2.2.2</backwardPeerID>
<BackwardInLabel>1024</BackwardInLabel>
<BackwardOutLabel>1025</BackwardOutLabel>
<FPID>2.2.2.2</FPID>
<forwardPeerID>1.1.1.1</forwardPeerID>
<forwardInLabel>1025</forwardInLabel>
<forwardOutLabel>1024</forwardOutLabel>
</cx>
</cxs>
</pw>
</pws>
<acs>
<ac>
<FPID>1.1.1.1</FPID>
<Interface>Ethernet0/0/1</Interface>
</ac>
</acs>
</L2VPNinstance>
<L2VPNinstance>
……
</L2VPNinstance>
</L2VPNinstances>
DELETE
- To delete a single VPN instance
DELETE URI/netL2vpn/vpws/netL2vpnInstances/{instancename} No HTTP message body.
- To delete one or more instances
DELETE URI/netL2vpn/vpws/netL2vpnInstances/
<netL2vpnInstances>
<netL2vpnInstance>
<netL2vpnInstance>vpninstance1</netL2vpnInstance>
</netL2vpnInstance>
<netL2vpnInstance>
……
</netL2vpnInstance>
</netL2vpnInstances>
AC
POST
POST URI/netL2VPN/vpws/netL2vpnInstances/{instancename}/acs/ac
<netL2vpnInstances>
<netL2vpnInstance>
<instancename>vpninstance1</instancename>
<acs>
<ac>
<FPID>1.1.1.1</FPID>
<Interface>Ethernet0/0/1</Interface>
</ac>
<ac>
……
</ac>
</acs>
</netL2vpnInstance>
</netL2vpnInstances>
GET
- To get a single access interface
GET URI/netL2VPN/vpws/netL2vpnInstances/{instancename}/acs/ac. No HTTP message body.
- To get one or more access interfaces
GET URI/netL2VPN/L2VPNinstances/{instancename}/acifs
<acifs>
<acif>
<acifid>vpninstance1:port1</acifid>
</acif>
<acif>
……
</acif>
</acifs>
- Response
<acifs>
<acif>
<acifid>vpninstance1:port1</acifid>
<acifaddr>20.1.1.1</acifaddr>
<acifmask>24</acifmask>
<role>edge-if</role>
<username>user1</username>
<userpassword>userpass</userpassword>
<phynodeid>Node1</phynodeid>
<phyacif>Node1:Ethernet0/0/1</phyacif>
<protocol>
<protocoltype>ospf</protocoltype>
<igpattr>
<protocolid>1000</protocolid>
</igpattr>
</protocol>
</acif>
<acif>
……
</acif>
</acifs>
PUT
PUT URI/netL2VPN/L2VPNinstances/{instancename}/acifs
<acifs>
<acif>
<acifid>vpninstance1:port1</acifid>
<acifaddr>20.1.1.1</acifaddr>
<acifmask>24</acifmask>
<role>edge-if</role>
<username>user1</username>
<userpassword>userpass</userpassword>
<phynodeid>Node1</phynodeid>
<phyacif>Node1:Ethernet0/0/1</phyacif>
<protocol>
<protocoltype>ospf</protocoltype>
<igpattr>
<protocolid>1000</protocolid>
</igpattr>
</protocol>
</acif>
<acif>
……
</acif>
</acifs>
DELETE
- To delete a single access interface
DELETE URI/netL2VPN/L2VPNinstances/{instancename}/acifs/{acifid}. No HTTP message body.
- To delete one or more access interfaces
DELETE URI/netL2VPN/L2VPNinstances/{instancename}/acifs
<acifs>
<acif>
<acifid>vpninstance1:port1</acifid>
</acif>
<acif>
……
</acif>
</acifs>