Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions translib/transformer/interfaces_openconfig_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -452,11 +452,23 @@ func Test_openconfig_subintf_ipv6(t *testing.T) {
t.Run("Test Get/Verify Patch IPv6 address at subinterfaces addresses", processGetRequest(url, nil, expected_get_json, false))
time.Sleep(1 * time.Second)

pre_req_map = map[string]interface{}{"INTF_TABLE": map[string]interface{}{"Ethernet0:a::e/64": map[string]interface{}{"NULL": "NULL"}}}
loadDB(db.ApplDB, pre_req_map)

t.Log("\n\n--- Verify PATCH IPv6 address at addresses address level ---")
url = "/openconfig-interfaces:interfaces/interface[name=Ethernet0]/subinterfaces/subinterface[index=0]/openconfig-if-ip:ipv6/addresses/address[ip=a::e]"
expected_get_json = "{\"openconfig-if-ip:address\":[{\"config\":{\"ip\":\"a::e\",\"prefix-length\":64},\"ip\":\"a::e\", \"state\":{\"ip\":\"a::e\",\"prefix-length\":64}}]}"
t.Run("Test Get/Verify Patch IPv6 address at subinterfaces addresses address", processGetRequest(url, nil, expected_get_json, false))
time.Sleep(1 * time.Second)

t.Log("\n\n--- Delete IPv6 address at subinterfaces addresses level---")
url = "/openconfig-interfaces:interfaces/interface[name=Ethernet0]/subinterfaces/subinterface[index=0]/openconfig-if-ip:ipv6/addresses"
t.Run("Test Delete IPv6 address at subinterfaces addresses level", processDeleteRequest(url, true))
time.Sleep(1 * time.Second)

cleanuptbl = map[string]interface{}{"INTF_TABLE": map[string]interface{}{"Ethernet0:a::e/64": ""}}
unloadDB(db.ApplDB, cleanuptbl)

t.Log("\n\n--- Verify Delete IPv6 address at subinterfaces addresses ---")
url = "/openconfig-interfaces:interfaces/interface[name=Ethernet0]/subinterfaces/subinterface[index=0]/ipv6/addresses"
expected_get_json = "{}"
Expand Down Expand Up @@ -498,8 +510,53 @@ func Test_openconfig_subintf_ipv6(t *testing.T) {
t.Run("Test Get IPv6 address at subinterfaces", processGetRequest(url, nil, expected_get_json, false))
time.Sleep(1 * time.Second)

//-------------------------------------------------------------------------------------------------------------------------------------------
t.Log("\n\n--- PATCH IPv6 address at addresses ---")
url = "/openconfig-interfaces:interfaces/interface[name=Ethernet4]/subinterfaces/subinterface[index=0]/openconfig-if-ip:ipv6/addresses"
url_input_body_json = "{\"openconfig-if-ip:addresses\": {\"address\": [{\"ip\": \"2001:0db8:abcd:0016::1\", \"openconfig-if-ip:config\": {\"ip\": \"2001:0db8:abcd:0016::1\", \"prefix-length\": 64}}]}}"

time.Sleep(1 * time.Second)
t.Run("Test Patch/Set IPv6 address on subinterfaces addresses", processSetRequest(url, url_input_body_json, "PATCH", false, nil))
time.Sleep(1 * time.Second)

t.Log("\n\n--- Verify PATCH IPv6 address at addresses level ---")
url = "/openconfig-interfaces:interfaces/interface[name=Ethernet4]/subinterfaces/subinterface[index=0]/openconfig-if-ip:ipv6/addresses"
expected_get_json = "{\"openconfig-if-ip:addresses\":{\"address\":[{\"config\":{\"ip\":\"2001:db8:abcd:16::1\",\"prefix-length\":64},\"ip\":\"2001:db8:abcd:16::1\"}]}}"
t.Run("Test Get/Verify Patch IPv6 address at subinterfaces addresses", processGetRequest(url, nil, expected_get_json, false))
time.Sleep(1 * time.Second)

pre_req_map = map[string]interface{}{"INTF_TABLE": map[string]interface{}{"Ethernet4:2001:db8:abcd:16::1/64": map[string]interface{}{"NULL": "NULL"}}}
loadDB(db.ApplDB, pre_req_map)

t.Log("\n\n--- Verify PATCH IPv6 address at addresses address level ---")
url = "/openconfig-interfaces:interfaces/interface[name=Ethernet4]/subinterfaces/subinterface[index=0]/openconfig-if-ip:ipv6/addresses/address[ip=2001:db8:abcd:16::1]"
expected_get_json = "{\"openconfig-if-ip:address\":[{\"config\":{\"ip\":\"2001:db8:abcd:16::1\",\"prefix-length\":64},\"ip\":\"2001:db8:abcd:16::1\", \"state\":{\"ip\":\"2001:db8:abcd:16::1\",\"prefix-length\":64}}]}"
t.Run("Test Get/Verify Patch IPv6 address at subinterfaces addresses address", processGetRequest(url, nil, expected_get_json, false))
time.Sleep(1 * time.Second)

t.Log("\n\n-Verify Db for iPv6 PATCH--\n\n")
url = "/openconfig-interfaces:interfaces/interface[name=Ethernet4]/subinterfaces/subinterface[index=0]/openconfig-if-ip:ipv6/addresses/address[ip=2001:db8:abcd:16::1]"
expected_map := map[string]interface{}{"INTERFACE": map[string]interface{}{"Ethernet4": map[string]interface{}{"family": "IPv6"}}}
t.Run("Verify Db for IPv6 PATCH", verifyDbResult(rclient, "INTERFACE|Ethernet4|2001:db8:abcd:16::1/64", expected_map, false))

t.Log("\n\n--- Delete IPv6 address at subinterfaces addresses level---")
url = "/openconfig-interfaces:interfaces/interface[name=Ethernet4]/subinterfaces/subinterface[index=0]/openconfig-if-ip:ipv6/addresses"
t.Run("Test Delete IPv6 address at subinterfaces addresses level", processDeleteRequest(url, false))
time.Sleep(1 * time.Second)

cleanuptbl = map[string]interface{}{"INTF_TABLE": map[string]interface{}{"Ethernet4:2001:db8:abcd:16::1/64": ""}}
unloadDB(db.ApplDB, cleanuptbl)

t.Log("\n\n--- Verify Delete IPv6 address at subinterfaces addresses ---")
url = "/openconfig-interfaces:interfaces/interface[name=Ethernet4]/subinterfaces/subinterface[index=0]/ipv6/addresses"
expected_get_json = "{}"
t.Run("Test Get/Verify Delete IPv6 address at subinterfaces addresses", processGetRequest(url, nil, expected_get_json, false))
time.Sleep(1 * time.Second)

t.Log("\n\n+++++++++++++ DONE CONFIGURING AND REMOVING IPV6 ADDRESSES ON SUBINTERFACES ++++++++++++")


//------------------------------------------------------------------------------------------------------
t.Log("\n\n+++++++++++++ ENABLE AND DISABLE IPV6 LINK LOCAL ON SUBINTERFACES ++++++++++++")
t.Log("\n\n--- Get IPv6 link local value (enabled) at config level ---")
url = "/openconfig-interfaces:interfaces/interface[name=Ethernet0]/subinterfaces/subinterface[index=0]/ipv6/config"
Expand Down
22 changes: 18 additions & 4 deletions translib/transformer/xfmr_intf.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ package transformer
import (
"errors"
"fmt"
"net"
"reflect"
"regexp"
"sort"
Expand Down Expand Up @@ -1768,11 +1769,16 @@ var YangToDb_subintf_ip_addr_key_xfmr KeyXfmrYangToDb = func(inParams XfmrParams
log.Info("Entering YangToDb_subintf_ip_addr_key_xfmr")
}
var err error
var inst_key string
pathInfo := NewPathInfo(inParams.uri)
inst_key = pathInfo.Var("ip")
log.Infof("URI:%v Interface IP:%v", inParams.uri, inst_key)
return inst_key, err
rawIP := pathInfo.Var("ip")
ip := net.ParseIP(rawIP)
if ip == nil {
return "", tlerr.InvalidArgs("Invalid IP address: %v", rawIP)
}
compressedIP := ip.String()

log.Infof("URI:%v Interface IP: %v => Compressed: %v", inParams.uri, rawIP, compressedIP)
return compressedIP, err
}
var DbToYang_subintf_ip_addr_key_xfmr KeyXfmrDbToYang = func(inParams XfmrParams) (map[string]interface{}, error) {
if log.V(3) {
Expand Down Expand Up @@ -2305,6 +2311,10 @@ var YangToDb_intf_ip_addr_xfmr SubTreeXfmrYangToDb = func(inParams XfmrParams) (
addr.Config.Ip = new(string)
*addr.Config.Ip = ip
}
parsedIP := net.ParseIP(*addr.Config.Ip)
if parsedIP != nil {
*addr.Config.Ip = parsedIP.String()
}
log.Info("Ip:=", *addr.Config.Ip)
if addr.Config.PrefixLength == nil {
log.Error("Prefix Length empty!")
Expand Down Expand Up @@ -2358,6 +2368,10 @@ var YangToDb_intf_ip_addr_xfmr SubTreeXfmrYangToDb = func(inParams XfmrParams) (
addr.Config.Ip = new(string)
*addr.Config.Ip = ip
}
parsedIP := net.ParseIP(*addr.Config.Ip)
if parsedIP != nil {
*addr.Config.Ip = parsedIP.String()
}
log.Info("Ipv6 IP:=", *addr.Config.Ip)
if addr.Config.PrefixLength == nil {
log.Error("Prefix Length empty!")
Expand Down