Skip to content
Snippets Groups Projects
Commit 1ddd68dd authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

NBI component - IETF L3VPN:

- Added missing data files
- Updated test files
- Corrected config rules to store address of neighbor devices
parent b2bc478e
No related branches found
No related tags found
2 merge requests!235Release TeraFlowSDN 3.0,!199Resolve "(CTTC) Implement Service Handler for L3 services using ACTN SBI driver"
...@@ -55,7 +55,7 @@ def process_vpn_service( ...@@ -55,7 +55,7 @@ def process_vpn_service(
def update_service_endpoint( def update_service_endpoint(
service_uuid : str, site_id : str, device_uuid : str, endpoint_uuid : str, service_uuid : str, site_id : str, device_uuid : str, endpoint_uuid : str,
vlan_tag : int, ipv4_address : str, ipv4_prefix_length : int, vlan_tag : int, ipv4_address : str, neighbor_ipv4_address : str, ipv4_prefix_length : int,
capacity_gbps : Optional[float] = None, e2e_latency_ms : Optional[float] = None, capacity_gbps : Optional[float] = None, e2e_latency_ms : Optional[float] = None,
availability : Optional[float] = None, mtu : Optional[int] = None, availability : Optional[float] = None, mtu : Optional[int] = None,
static_routing : Optional[Dict[Tuple[str, str], str]] = None, static_routing : Optional[Dict[Tuple[str, str], str]] = None,
...@@ -94,9 +94,10 @@ def update_service_endpoint( ...@@ -94,9 +94,10 @@ def update_service_endpoint(
ENDPOINT_SETTINGS_KEY = '/device[{:s}]/endpoint[{:s}]/vlan[{:d}]/settings' ENDPOINT_SETTINGS_KEY = '/device[{:s}]/endpoint[{:s}]/vlan[{:d}]/settings'
endpoint_settings_key = ENDPOINT_SETTINGS_KEY.format(device_uuid, endpoint_uuid, vlan_tag) endpoint_settings_key = ENDPOINT_SETTINGS_KEY.format(device_uuid, endpoint_uuid, vlan_tag)
field_updates = {} field_updates = {}
if vlan_tag is not None: field_updates['vlan_tag' ] = (vlan_tag, True) if vlan_tag is not None: field_updates['vlan_tag' ] = (vlan_tag, True)
if ipv4_address is not None: field_updates['ip_address' ] = (ipv4_address, True) if ipv4_address is not None: field_updates['ip_address' ] = (ipv4_address, True)
if ipv4_prefix_length is not None: field_updates['prefix_length'] = (ipv4_prefix_length, True) if neighbor_ipv4_address is not None: field_updates['neighbor_address'] = (neighbor_ipv4_address, True)
if ipv4_prefix_length is not None: field_updates['prefix_length' ] = (ipv4_prefix_length, True)
update_config_rule_custom(config_rules, endpoint_settings_key, field_updates) update_config_rule_custom(config_rules, endpoint_settings_key, field_updates)
try: try:
...@@ -131,7 +132,7 @@ def process_site_network_access( ...@@ -131,7 +132,7 @@ def process_site_network_access(
raise NotImplementedError(MSG.format(str(ipv4_allocation['address-allocation-type']))) raise NotImplementedError(MSG.format(str(ipv4_allocation['address-allocation-type'])))
ipv4_allocation_addresses = ipv4_allocation['addresses'] ipv4_allocation_addresses = ipv4_allocation['addresses']
ipv4_provider_address = ipv4_allocation_addresses['provider-address'] ipv4_provider_address = ipv4_allocation_addresses['provider-address']
#ipv4_customer_address = ipv4_allocation_addresses['customer-address'] ipv4_customer_address = ipv4_allocation_addresses['customer-address']
ipv4_prefix_length = ipv4_allocation_addresses['prefix-length' ] ipv4_prefix_length = ipv4_allocation_addresses['prefix-length' ]
vlan_tag = None vlan_tag = None
...@@ -176,7 +177,8 @@ def process_site_network_access( ...@@ -176,7 +177,8 @@ def process_site_network_access(
availability = qos_profile_class['bandwidth']['guaranteed-bw-percent'] availability = qos_profile_class['bandwidth']['guaranteed-bw-percent']
exc = update_service_endpoint( exc = update_service_endpoint(
service_uuid, site_id, device_uuid, endpoint_uuid, vlan_tag, ipv4_provider_address, ipv4_prefix_length, service_uuid, site_id, device_uuid, endpoint_uuid,
vlan_tag, ipv4_customer_address, ipv4_provider_address, ipv4_prefix_length,
capacity_gbps=service_bandwidth_gbps, e2e_latency_ms=max_e2e_latency_ms, availability=availability, capacity_gbps=service_bandwidth_gbps, e2e_latency_ms=max_e2e_latency_ms, availability=availability,
mtu=service_mtu, static_routing=site_static_routing mtu=service_mtu, static_routing=site_static_routing
) )
......
module: ietf-l3vpn-svc
+--rw l3vpn-svc
+--rw vpn-profiles
| +--rw valid-provider-identifiers
| +--rw cloud-identifier* [id] {cloud-access}?
| | +--rw id string
| +--rw encryption-profile-identifier* [id]
| | +--rw id string
| +--rw qos-profile-identifier* [id]
| | +--rw id string
| +--rw bfd-profile-identifier* [id]
| +--rw id string
+--rw vpn-services
| +--rw vpn-service* [vpn-id]
| +--rw vpn-id svc-id
| +--rw customer-name? string
| +--rw vpn-service-topology? identityref
| +--rw cloud-accesses {cloud-access}?
| | +--rw cloud-access* [cloud-identifier]
| | +--rw cloud-identifier -> /l3vpn-svc/vpn-profiles/valid-provider-identifiers/cloud-identifier/id
| | +--rw (list-flavor)?
| | | +--:(permit-any)
| | | | +--rw permit-any? empty
| | | +--:(deny-any-except)
| | | | +--rw permit-site* -> /l3vpn-svc/sites/site/site-id
| | | +--:(permit-any-except)
| | | +--rw deny-site* -> /l3vpn-svc/sites/site/site-id
| | +--rw address-translation
| | +--rw nat44
| | +--rw enabled? boolean
| | +--rw nat44-customer-address? inet:ipv4-address
| +--rw multicast {multicast}?
| | +--rw enabled? boolean
| | +--rw customer-tree-flavors
| | | +--rw tree-flavor* identityref
| | +--rw rp
| | +--rw rp-group-mappings
| | | +--rw rp-group-mapping* [id]
| | | +--rw id uint16
| | | +--rw provider-managed
| | | | +--rw enabled? boolean
| | | | +--rw rp-redundancy? boolean
| | | | +--rw optimal-traffic-delivery? boolean
| | | +--rw rp-address inet:ip-address
| | | +--rw groups
| | | +--rw group* [id]
| | | +--rw id uint16
| | | +--rw (group-format)
| | | +--:(singleaddress)
| | | | +--rw group-address? inet:ip-address
| | | +--:(startend)
| | | +--rw group-start? inet:ip-address
| | | +--rw group-end? inet:ip-address
| | +--rw rp-discovery
| | +--rw rp-discovery-type? identityref
| | +--rw bsr-candidates
| | +--rw bsr-candidate-address* inet:ip-address
| +--rw carrierscarrier? boolean {carrierscarrier}?
| +--rw extranet-vpns {extranet-vpn}?
| +--rw extranet-vpn* [vpn-id]
| +--rw vpn-id svc-id
| +--rw local-sites-role? identityref
+--rw sites
+--rw site* [site-id]
+--rw site-id svc-id
+--rw requested-site-start? yang:date-and-time
+--rw requested-site-stop? yang:date-and-time
+--rw locations
| +--rw location* [location-id]
| +--rw location-id svc-id
| +--rw address? string
| +--rw postal-code? string
| +--rw state? string
| +--rw city? string
| +--rw country-code? string
+--rw devices
| +--rw device* [device-id]
| +--rw device-id svc-id
| +--rw location -> ../../../locations/location/location-id
| +--rw management
| +--rw address-family? address-family
| +--rw address inet:ip-address
+--rw site-diversity {site-diversity}?
| +--rw groups
| +--rw group* [group-id]
| +--rw group-id string
+--rw management
| +--rw type identityref
+--rw vpn-policies
| +--rw vpn-policy* [vpn-policy-id]
| +--rw vpn-policy-id svc-id
| +--rw entries* [id]
| +--rw id svc-id
| +--rw filters
| | +--rw filter* [type]
| | +--rw type identityref
| | +--rw lan-tag* string {lan-tag}?
| | +--rw ipv4-lan-prefix* inet:ipv4-prefix {ipv4}?
| | +--rw ipv6-lan-prefix* inet:ipv6-prefix {ipv6}?
| +--rw vpn* [vpn-id]
| +--rw vpn-id -> /l3vpn-svc/vpn-services/vpn-service/vpn-id
| +--rw site-role? identityref
+--rw site-vpn-flavor? identityref
+--rw maximum-routes
| +--rw address-family* [af]
| +--rw af address-family
| +--rw maximum-routes? uint32
+--rw security
| +--rw authentication
| +--rw encryption {encryption}?
| +--rw enabled? boolean
| +--rw layer? enumeration
| +--rw encryption-profile
| +--rw (profile)?
| +--:(provider-profile)
| | +--rw profile-name? -> /l3vpn-svc/vpn-profiles/valid-provider-identifiers/encryption-profile-identifier/id
| +--:(customer-profile)
| +--rw algorithm? string
| +--rw (key-type)?
| +--:(psk)
| +--rw preshared-key? string
+--rw service
| +--rw qos {qos}?
| | +--rw qos-classification-policy
| | | +--rw rule* [id]
| | | +--rw id string
| | | +--rw (match-type)?
| | | | +--:(match-flow)
| | | | | +--rw match-flow
| | | | | +--rw dscp? inet:dscp
| | | | | +--rw dot1p? uint8
| | | | | +--rw ipv4-src-prefix? inet:ipv4-prefix
| | | | | +--rw ipv6-src-prefix? inet:ipv6-prefix
| | | | | +--rw ipv4-dst-prefix? inet:ipv4-prefix
| | | | | +--rw ipv6-dst-prefix? inet:ipv6-prefix
| | | | | +--rw l4-src-port? inet:port-number
| | | | | +--rw target-sites* svc-id {target-sites}?
| | | | | +--rw l4-src-port-range
| | | | | | +--rw lower-port? inet:port-number
| | | | | | +--rw upper-port? inet:port-number
| | | | | +--rw l4-dst-port? inet:port-number
| | | | | +--rw l4-dst-port-range
| | | | | | +--rw lower-port? inet:port-number
| | | | | | +--rw upper-port? inet:port-number
| | | | | +--rw protocol-field? union
| | | | +--:(match-application)
| | | | +--rw match-application? identityref
| | | +--rw target-class-id? string
| | +--rw qos-profile
| | +--rw (qos-profile)?
| | +--:(standard)
| | | +--rw profile? -> /l3vpn-svc/vpn-profiles/valid-provider-identifiers/qos-profile-identifier/id
| | +--:(custom)
| | +--rw classes {qos-custom}?
| | +--rw class* [class-id]
| | +--rw class-id string
| | +--rw direction? identityref
| | +--rw rate-limit? decimal64
| | +--rw latency
| | | +--rw (flavor)?
| | | +--:(lowest)
| | | | +--rw use-lowest-latency? empty
| | | +--:(boundary)
| | | +--rw latency-boundary? uint16
| | +--rw jitter
| | | +--rw (flavor)?
| | | +--:(lowest)
| | | | +--rw use-lowest-jitter? empty
| | | +--:(boundary)
| | | +--rw latency-boundary? uint32
| | +--rw bandwidth
| | +--rw guaranteed-bw-percent decimal64
| | +--rw end-to-end? empty
| +--rw carrierscarrier {carrierscarrier}?
| | +--rw signalling-type? enumeration
| +--rw multicast {multicast}?
| +--rw multicast-site-type? enumeration
| +--rw multicast-address-family
| | +--rw ipv4? boolean {ipv4}?
| | +--rw ipv6? boolean {ipv6}?
| +--rw protocol-type? enumeration
+--rw traffic-protection {fast-reroute}?
| +--rw enabled? boolean
+--rw routing-protocols
| +--rw routing-protocol* [type]
| +--rw type identityref
| +--rw ospf {rtg-ospf}?
| | +--rw address-family* address-family
| | +--rw area-address yang:dotted-quad
| | +--rw metric? uint16
| | +--rw sham-links {rtg-ospf-sham-link}?
| | +--rw sham-link* [target-site]
| | +--rw target-site svc-id
| | +--rw metric? uint16
| +--rw bgp {rtg-bgp}?
| | +--rw autonomous-system uint32
| | +--rw address-family* address-family
| +--rw static
| | +--rw cascaded-lan-prefixes
| | +--rw ipv4-lan-prefixes* [lan next-hop] {ipv4}?
| | | +--rw lan inet:ipv4-prefix
| | | +--rw next-hop inet:ipv4-address
| | | +--rw lan-tag? string
| | +--rw ipv6-lan-prefixes* [lan next-hop] {ipv6}?
| | +--rw lan inet:ipv6-prefix
| | +--rw next-hop inet:ipv6-address
| | +--rw lan-tag? string
| +--rw rip {rtg-rip}?
| | +--rw address-family* address-family
| +--rw vrrp {rtg-vrrp}?
| +--rw address-family* address-family
+--ro actual-site-start? yang:date-and-time
+--ro actual-site-stop? yang:date-and-time
+--rw site-network-accesses
+--rw site-network-access* [site-network-access-id]
+--rw site-network-access-id svc-id
+--rw site-network-access-type? identityref
+--rw (location-flavor)
| +--:(location)
| | +--rw location-reference? -> ../../../locations/location/location-id
| +--:(device)
| +--rw device-reference? -> ../../../devices/device/device-id
+--rw access-diversity {site-diversity}?
| +--rw groups
| | +--rw group* [group-id]
| | +--rw group-id string
| +--rw constraints
| +--rw constraint* [constraint-type]
| +--rw constraint-type identityref
| +--rw target
| +--rw (target-flavor)?
| +--:(id)
| | +--rw group* [group-id]
| | +--rw group-id string
| +--:(all-accesses)
| | +--rw all-other-accesses? empty
| +--:(all-groups)
| +--rw all-other-groups? empty
+--rw bearer
| +--rw requested-type {requested-type}?
| | +--rw requested-type? string
| | +--rw strict? boolean
| +--rw always-on? boolean {always-on}?
| +--rw bearer-reference? string {bearer-reference}?
+--rw ip-connection
| +--rw ipv4 {ipv4}?
| | +--rw address-allocation-type? identityref
| | +--rw provider-dhcp
| | | +--rw provider-address? inet:ipv4-address
| | | +--rw prefix-length? uint8
| | | +--rw (address-assign)?
| | | +--:(number)
| | | | +--rw number-of-dynamic-address? uint16
| | | +--:(explicit)
| | | +--rw customer-addresses
| | | +--rw address-group* [group-id]
| | | +--rw group-id string
| | | +--rw start-address? inet:ipv4-address
| | | +--rw end-address? inet:ipv4-address
| | +--rw dhcp-relay
| | | +--rw provider-address? inet:ipv4-address
| | | +--rw prefix-length? uint8
| | | +--rw customer-dhcp-servers
| | | +--rw server-ip-address* inet:ipv4-address
| | +--rw addresses
| | +--rw provider-address? inet:ipv4-address
| | +--rw customer-address? inet:ipv4-address
| | +--rw prefix-length? uint8
| +--rw ipv6 {ipv6}?
| | +--rw address-allocation-type? identityref
| | +--rw provider-dhcp
| | | +--rw provider-address? inet:ipv6-address
| | | +--rw prefix-length? uint8
| | | +--rw (address-assign)?
| | | +--:(number)
| | | | +--rw number-of-dynamic-address? uint16
| | | +--:(explicit)
| | | +--rw customer-addresses
| | | +--rw address-group* [group-id]
| | | +--rw group-id string
| | | +--rw start-address? inet:ipv6-address
| | | +--rw end-address? inet:ipv6-address
| | +--rw dhcp-relay
| | | +--rw provider-address? inet:ipv6-address
| | | +--rw prefix-length? uint8
| | | +--rw customer-dhcp-servers
| | | +--rw server-ip-address* inet:ipv6-address
| | +--rw addresses
| | +--rw provider-address? inet:ipv6-address
| | +--rw customer-address? inet:ipv6-address
| | +--rw prefix-length? uint8
| +--rw oam
| +--rw bfd {bfd}?
| +--rw enabled? boolean
| +--rw (holdtime)?
| +--:(fixed)
| | +--rw fixed-value? uint32
| +--:(profile)
| +--rw profile-name? -> /l3vpn-svc/vpn-profiles/valid-provider-identifiers/bfd-profile-identifier/id
+--rw security
| +--rw authentication
| +--rw encryption {encryption}?
| +--rw enabled? boolean
| +--rw layer? enumeration
| +--rw encryption-profile
| +--rw (profile)?
| +--:(provider-profile)
| | +--rw profile-name? -> /l3vpn-svc/vpn-profiles/valid-provider-identifiers/encryption-profile-identifier/id
| +--:(customer-profile)
| +--rw algorithm? string
| +--rw (key-type)?
| +--:(psk)
| +--rw preshared-key? string
+--rw service
| +--rw svc-input-bandwidth uint64
| +--rw svc-output-bandwidth uint64
| +--rw svc-mtu uint16
| +--rw qos {qos}?
| | +--rw qos-classification-policy
| | | +--rw rule* [id]
| | | +--rw id string
| | | +--rw (match-type)?
| | | | +--:(match-flow)
| | | | | +--rw match-flow
| | | | | +--rw dscp? inet:dscp
| | | | | +--rw dot1p? uint8
| | | | | +--rw ipv4-src-prefix? inet:ipv4-prefix
| | | | | +--rw ipv6-src-prefix? inet:ipv6-prefix
| | | | | +--rw ipv4-dst-prefix? inet:ipv4-prefix
| | | | | +--rw ipv6-dst-prefix? inet:ipv6-prefix
| | | | | +--rw l4-src-port? inet:port-number
| | | | | +--rw target-sites* svc-id {target-sites}?
| | | | | +--rw l4-src-port-range
| | | | | | +--rw lower-port? inet:port-number
| | | | | | +--rw upper-port? inet:port-number
| | | | | +--rw l4-dst-port? inet:port-number
| | | | | +--rw l4-dst-port-range
| | | | | | +--rw lower-port? inet:port-number
| | | | | | +--rw upper-port? inet:port-number
| | | | | +--rw protocol-field? union
| | | | +--:(match-application)
| | | | +--rw match-application? identityref
| | | +--rw target-class-id? string
| | +--rw qos-profile
| | +--rw (qos-profile)?
| | +--:(standard)
| | | +--rw profile? -> /l3vpn-svc/vpn-profiles/valid-provider-identifiers/qos-profile-identifier/id
| | +--:(custom)
| | +--rw classes {qos-custom}?
| | +--rw class* [class-id]
| | +--rw class-id string
| | +--rw direction? identityref
| | +--rw rate-limit? decimal64
| | +--rw latency
| | | +--rw (flavor)?
| | | +--:(lowest)
| | | | +--rw use-lowest-latency? empty
| | | +--:(boundary)
| | | +--rw latency-boundary? uint16
| | +--rw jitter
| | | +--rw (flavor)?
| | | +--:(lowest)
| | | | +--rw use-lowest-jitter? empty
| | | +--:(boundary)
| | | +--rw latency-boundary? uint32
| | +--rw bandwidth
| | +--rw guaranteed-bw-percent decimal64
| | +--rw end-to-end? empty
| +--rw carrierscarrier {carrierscarrier}?
| | +--rw signalling-type? enumeration
| +--rw multicast {multicast}?
| +--rw multicast-site-type? enumeration
| +--rw multicast-address-family
| | +--rw ipv4? boolean {ipv4}?
| | +--rw ipv6? boolean {ipv6}?
| +--rw protocol-type? enumeration
+--rw routing-protocols
| +--rw routing-protocol* [type]
| +--rw type identityref
| +--rw ospf {rtg-ospf}?
| | +--rw address-family* address-family
| | +--rw area-address yang:dotted-quad
| | +--rw metric? uint16
| | +--rw sham-links {rtg-ospf-sham-link}?
| | +--rw sham-link* [target-site]
| | +--rw target-site svc-id
| | +--rw metric? uint16
| +--rw bgp {rtg-bgp}?
| | +--rw autonomous-system uint32
| | +--rw address-family* address-family
| +--rw static
| | +--rw cascaded-lan-prefixes
| | +--rw ipv4-lan-prefixes* [lan next-hop] {ipv4}?
| | | +--rw lan inet:ipv4-prefix
| | | +--rw next-hop inet:ipv4-address
| | | +--rw lan-tag? string
| | +--rw ipv6-lan-prefixes* [lan next-hop] {ipv6}?
| | +--rw lan inet:ipv6-prefix
| | +--rw next-hop inet:ipv6-address
| | +--rw lan-tag? string
| +--rw rip {rtg-rip}?
| | +--rw address-family* address-family
| +--rw vrrp {rtg-vrrp}?
| +--rw address-family* address-family
+--rw availability
| +--rw access-priority? uint32
+--rw vpn-attachment
+--rw (attachment-flavor)
+--:(vpn-policy-id)
| +--rw vpn-policy-id? -> ../../../../vpn-policies/vpn-policy/vpn-policy-id
+--:(vpn-id)
+--rw vpn-id? -> /l3vpn-svc/vpn-services/vpn-service/vpn-id
+--rw site-role? identityref
...@@ -39,12 +39,12 @@ ...@@ -39,12 +39,12 @@
{ {
"lan": "128.32.10.1/24", "lan": "128.32.10.1/24",
"lan-tag": "vlan21", "lan-tag": "vlan21",
"next-hop": "128.32.33.5" "next-hop": "128.32.33.2"
}, },
{ {
"lan": "128.32.20.1/24", "lan": "128.32.20.1/24",
"lan-tag": "vlan21", "lan-tag": "vlan21",
"next-hop": "128.32.33.5" "next-hop": "128.32.33.2"
} }
] ]
} }
...@@ -82,7 +82,7 @@ ...@@ -82,7 +82,7 @@
{ {
"lan": "172.1.101.1/24", "lan": "172.1.101.1/24",
"lan-tag": "vlan21", "lan-tag": "vlan21",
"next-hop": "10.0.10.1" "next-hop": "128.32.33.254"
} }
] ]
} }
...@@ -147,7 +147,7 @@ ...@@ -147,7 +147,7 @@
{ {
"lan": "172.1.101.1/24", "lan": "172.1.101.1/24",
"lan-tag": "vlan101", "lan-tag": "vlan101",
"next-hop": "172.10.33.5" "next-hop": "172.10.33.2"
} }
] ]
} }
...@@ -185,12 +185,12 @@ ...@@ -185,12 +185,12 @@
{ {
"lan": "128.32.10.1/24", "lan": "128.32.10.1/24",
"lan-tag": "vlan101", "lan-tag": "vlan101",
"next-hop": "10.0.30.1" "next-hop": "172.10.33.254"
}, },
{ {
"lan": "128.32.20.1/24", "lan": "128.32.20.1/24",
"lan-tag": "vlan101", "lan-tag": "vlan101",
"next-hop": "10.0.30.1" "next-hop": "172.10.33.254"
} }
] ]
} }
......
...@@ -39,12 +39,12 @@ ...@@ -39,12 +39,12 @@
{ {
"lan": "128.32.10.1/24", "lan": "128.32.10.1/24",
"lan-tag": "vlan31", "lan-tag": "vlan31",
"next-hop": "128.32.33.5" "next-hop": "128.32.33.2"
}, },
{ {
"lan": "128.32.20.1/24", "lan": "128.32.20.1/24",
"lan-tag": "vlan31", "lan-tag": "vlan31",
"next-hop": "128.32.33.5" "next-hop": "128.32.33.2"
} }
] ]
} }
...@@ -82,7 +82,7 @@ ...@@ -82,7 +82,7 @@
{ {
"lan": "172.1.101.1/24", "lan": "172.1.101.1/24",
"lan-tag": "vlan31", "lan-tag": "vlan31",
"next-hop": "10.0.10.1" "next-hop": "128.32.33.254"
} }
] ]
} }
...@@ -147,7 +147,7 @@ ...@@ -147,7 +147,7 @@
{ {
"lan": "172.1.101.1/24", "lan": "172.1.101.1/24",
"lan-tag": "vlan201", "lan-tag": "vlan201",
"next-hop": "172.10.33.1" "next-hop": "172.10.33.2"
} }
] ]
} }
...@@ -185,12 +185,12 @@ ...@@ -185,12 +185,12 @@
{ {
"lan": "128.32.10.1/24", "lan": "128.32.10.1/24",
"lan-tag": "vlan201", "lan-tag": "vlan201",
"next-hop": "10.0.30.1" "next-hop": "172.10.33.254"
}, },
{ {
"lan": "128.32.20.1/24", "lan": "128.32.20.1/24",
"lan-tag": "vlan201", "lan-tag": "vlan201",
"next-hop": "10.0.30.1" "next-hop": "172.10.33.254"
} }
] ]
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment