Skip to content

Commit

Permalink
Use netip package
Browse files Browse the repository at this point in the history
  • Loading branch information
Motok1 committed Feb 2, 2023
1 parent cda1d73 commit df3d675
Show file tree
Hide file tree
Showing 11 changed files with 159 additions and 131 deletions.
39 changes: 26 additions & 13 deletions cmd/pola/grpc_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ package main
import (
"context"
"errors"
"net"
"net/netip"
"time"

"github.com/golang/protobuf/ptypes/empty"
Expand All @@ -17,26 +17,27 @@ import (
)

type srPolicyInfo struct {
peerAddr net.IP //TODO: Change to ("loopback addr" or "router name")
peerAddr netip.Addr //TODO: Change to ("loopback addr" or "router name")
name string
path []uint32
srcAddr net.IP
dstAddr net.IP
srcAddr netip.Addr
dstAddr netip.Addr
color uint32
preference uint32
}

func getSessionAddrList(client pb.PceServiceClient) ([]net.IP, error) {
func getSessionAddrList(client pb.PceServiceClient) ([]netip.Addr, error) {
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
var empty empty.Empty
ret, err := client.GetPeerAddrList(ctx, &empty)
if err != nil {
return nil, err
}
var peerAddrList []net.IP
var peerAddrList []netip.Addr
for _, peerAddr := range ret.GetPeerAddrs() {
peerAddrList = append(peerAddrList, net.IP(peerAddr))
peer, _ := netip.AddrFromSlice(peerAddr)
peerAddrList = append(peerAddrList, peer)
}
return peerAddrList, nil
}
Expand All @@ -51,11 +52,14 @@ func getSrPolicyList(client pb.PceServiceClient) ([]srPolicyInfo, error) {
}
srPolicyList := []srPolicyInfo{}
for _, lsp := range ret.GetSrPolicies() {
peerAddr, _ := netip.AddrFromSlice(lsp.GetPcepSessionAddr())
srcAddr, _ := netip.AddrFromSlice(lsp.GetSrcAddr())
dstAddr, _ := netip.AddrFromSlice(lsp.GetDstAddr())
tmp := srPolicyInfo{
name: lsp.PolicyName,
peerAddr: net.IP(lsp.GetPcepSessionAddr()),
srcAddr: net.IP(lsp.GetSrcAddr()),
dstAddr: net.IP(lsp.GetDstAddr()),
peerAddr: peerAddr,
srcAddr: srcAddr,
dstAddr: dstAddr,
color: lsp.Color,
preference: lsp.Preference,
}
Expand Down Expand Up @@ -123,8 +127,14 @@ func getTed(client pb.PceServiceClient) (*table.LsTed, error) {
for _, link := range node.LsLinks {
lsLink := table.NewLsLink(ted.Nodes[link.LocalAsn][link.LocalRouterId], ted.Nodes[link.RemoteAsn][link.RemoteRouterId])
lsLink.AdjSid = link.GetAdjSid()
lsLink.LocalIP = net.ParseIP(link.GetLocalIp())
lsLink.RemoteIP = net.ParseIP(link.GetRemoteIp())
lsLink.LocalIP, err = netip.ParseAddr(link.GetLocalIp())
if err != nil {
return nil, err
}
lsLink.RemoteIP, err = netip.ParseAddr(link.GetRemoteIp())
if err != nil {
return nil, err
}
for _, metricInfo := range link.GetMetrics() {
var metric *table.Metric
switch metricInfo.GetType().String() {
Expand All @@ -146,7 +156,10 @@ func getTed(client pb.PceServiceClient) (*table.LsTed, error) {

for _, prefix := range node.LsPrefixes {
lsPrefix := table.NewLsPrefixV4(ted.Nodes[node.GetAsn()][node.GetRouterId()])
_, lsPrefix.Prefix, _ = net.ParseCIDR(prefix.GetPrefix())
lsPrefix.Prefix, err = netip.ParsePrefix(prefix.GetPrefix())
if err != nil {
return nil, err
}
lsPrefix.SidIndex = prefix.GetSidIndex()
ted.Nodes[node.GetAsn()][node.GetRouterId()].Prefixes = append(ted.Nodes[node.GetAsn()][node.GetRouterId()].Prefixes, lsPrefix)
}
Expand Down
5 changes: 2 additions & 3 deletions cmd/pola/session.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ package main
import (
"encoding/json"
"fmt"
"net"

"github.com/spf13/cobra"
)
Expand Down Expand Up @@ -37,7 +36,7 @@ func showSession(jsonFlag bool) error {
peerAddrs := []map[string]string{}
for _, peerAddr := range sessionAddrList {
peerAddrInfo := map[string]string{
"address": net.IP(peerAddr).String(),
"address": peerAddr.String(),
"status": "active",
}
peerAddrs = append(peerAddrs, peerAddrInfo)
Expand All @@ -53,7 +52,7 @@ func showSession(jsonFlag bool) error {
} else {
//output user-friendly format
for i, peerAddr := range sessionAddrList {
fmt.Printf("sessionAddr(%d): %v\n", i, net.IP(peerAddr))
fmt.Printf("sessionAddr(%d): %s\n", i, peerAddr.String())
}
}
return nil
Expand Down
11 changes: 5 additions & 6 deletions cmd/pola/sr_policy_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ package main
import (
"encoding/json"
"fmt"
"net"

"github.com/spf13/cobra"
)
Expand Down Expand Up @@ -41,8 +40,8 @@ func showSrPolicyList(jsonFlag bool) error {
tmp := map[string]interface{}{ // TODO: Fix format according to readme
"peerAddr": lsp.peerAddr.String(),
"policyName": lsp.name,
"srcAddr": net.IP(lsp.srcAddr).String(),
"dstAddr": net.IP(lsp.dstAddr).String(),
"srcAddr": lsp.srcAddr.String(),
"dstAddr": lsp.dstAddr.String(),
"color": lsp.color,
"preference": lsp.preference,
"segmentList": lsp.path,
Expand All @@ -67,11 +66,11 @@ func showSrPolicyList(jsonFlag bool) error {
fmt.Printf("LSP(%d): \n", i)
fmt.Printf(" PcepSessionAddr: %s\n", lsp.peerAddr)
fmt.Printf(" PolicyName: %s\n", lsp.name)
fmt.Printf(" SrcAddr: %s\n", net.IP(lsp.srcAddr))
fmt.Printf(" DstAddr: %s\n", net.IP(lsp.dstAddr))
fmt.Printf(" SrcAddr: %s\n", lsp.srcAddr.String())
fmt.Printf(" DstAddr: %s\n", lsp.dstAddr.String())
fmt.Printf(" Color: %d\n", lsp.color)
fmt.Printf(" Preference: %d\n", lsp.preference)
fmt.Printf(" DstAddr: %s\n", net.IP(lsp.dstAddr))
fmt.Printf(" DstAddr: %s\n", lsp.dstAddr.String())
fmt.Printf(" SegmentList: ")

if len(lsp.path) == 0 {
Expand Down
8 changes: 4 additions & 4 deletions internal/pkg/cspf/cspf.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ package cspf

import (
"errors"
"net"
"net/netip"

"github.com/nttcom/pola/internal/pkg/table"
"github.com/nttcom/pola/pkg/packet/pcep"
Expand All @@ -19,10 +19,10 @@ type node struct {
cost uint32
prevNode string
nodeSid uint32
LoAddr net.IP
LoAddr netip.Addr
}

func newNode(id string, cost uint32, nodeSid uint32, loAddr net.IP) *node {
func newNode(id string, cost uint32, nodeSid uint32, loAddr netip.Addr) *node {
node := &node{
id: id,
cost: cost,
Expand Down Expand Up @@ -105,7 +105,7 @@ func spf(srcRouterId string, dstRouterId string, metric table.MetricType, networ
for pathNode := calculatingNodes[dstRouterId]; pathNode.id != srcRouterId; pathNode = calculatingNodes[pathNode.prevNode] {
segment := pcep.Label{
Sid: pathNode.nodeSid,
LoAddr: pathNode.LoAddr.To4(),
LoAddr: pathNode.LoAddr,
}
if len(segmentList) == 0 {
segmentList = append(segmentList, segment)
Expand Down
15 changes: 10 additions & 5 deletions internal/pkg/gobgp/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
"encoding/hex"
"errors"
"io"
"net"
"net/netip"
"strings"

"github.com/nttcom/pola/internal/pkg/table"
Expand Down Expand Up @@ -127,9 +127,14 @@ func ConvertToTedElem(dst *api.Destination) ([]table.TedElem, error) {
localNodeAsn := typedLinkStateNlri.GetLocalNode().GetAsn()
remoteNodeId := typedLinkStateNlri.GetRemoteNode().GetIgpRouterId()
remoteNodeAsn := typedLinkStateNlri.GetRemoteNode().GetAsn()
localIP := net.ParseIP(typedLinkStateNlri.GetLinkDescriptor().GetInterfaceAddrIpv4())
remoteIP := net.ParseIP(typedLinkStateNlri.GetLinkDescriptor().GetNeighborAddrIpv4())

localIP, err := netip.ParseAddr(typedLinkStateNlri.GetLinkDescriptor().GetInterfaceAddrIpv4())
if err != nil {
return nil, err
}
remoteIP, err := netip.ParseAddr(typedLinkStateNlri.GetLinkDescriptor().GetNeighborAddrIpv4())
if err != nil {
return nil, err
}
localNode := table.NewLsNode(localNodeAsn, localNodeId)
remoteNode := table.NewLsNode(remoteNodeAsn, remoteNodeId)
lsLink := table.NewLsLink(localNode, remoteNode)
Expand Down Expand Up @@ -191,7 +196,7 @@ func ConvertToTedElem(dst *api.Destination) ([]table.TedElem, error) {
if len(prefixV4) != 1 {
return nil, errors.New("invalid prefix length")
}
_, lsPrefixV4.Prefix, _ = net.ParseCIDR(prefixV4[0])
lsPrefixV4.Prefix, _ = netip.ParsePrefix(prefixV4[0])
tedElems = append(tedElems, lsPrefixV4)
}
}
Expand Down
26 changes: 13 additions & 13 deletions internal/pkg/table/ted.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ package table
import (
"errors"
"fmt"
"net"
"net/netip"
)

type LsTed struct {
Expand Down Expand Up @@ -110,14 +110,14 @@ func (node LsNode) NodeSid() (uint32, error) {
return 0, errors.New("node doesn't have node-sid")
}

func (node LsNode) LoopbackAddr() (net.IP, error) {
func (node LsNode) LoopbackAddr() (netip.Addr, error) {
for _, prefix := range node.Prefixes {
// If it's a loopback prefix, it should be non-zero.
if prefix.SidIndex != 0 {
return prefix.Prefix.IP, nil
return prefix.Prefix.Addr(), nil
}
}
return nil, errors.New("node doesn't have loopback addr")
return netip.Addr{}, errors.New("node doesn't have loopback addr")
}

func (lsNode *LsNode) UpdateTed(ted *LsTed) {
Expand All @@ -136,12 +136,12 @@ func (lsNode *LsNode) UpdateTed(ted *LsTed) {
}

type LsLink struct {
LocalNode *LsNode // primary key, in MP_REACH_NLRI Attr
RemoteNode *LsNode // primary key, in MP_REACH_NLRI Attr
LocalIP net.IP // in MP_REACH_NLRI Attr
RemoteIP net.IP // in MP_REACH_NLRI Attr
Metrics []*Metric // in BGP-LS Attr
AdjSid uint32 // in BGP-LS Attr
LocalNode *LsNode // primary key, in MP_REACH_NLRI Attr
RemoteNode *LsNode // primary key, in MP_REACH_NLRI Attr
LocalIP netip.Addr // in MP_REACH_NLRI Attr
RemoteIP netip.Addr // in MP_REACH_NLRI Attr
Metrics []*Metric // in BGP-LS Attr
AdjSid uint32 // in BGP-LS Attr
}

func NewLsLink(localNode *LsNode, remoteNode *LsNode) *LsLink {
Expand Down Expand Up @@ -178,9 +178,9 @@ func (lsLink *LsLink) UpdateTed(ted *LsTed) {
}

type LsPrefixV4 struct {
LocalNode *LsNode // primary key, in MP_REACH_NLRI Attr
Prefix *net.IPNet // in MP_REACH_NLRI Attr
SidIndex uint32 // in BGP-LS Attr (only for Lo Address Prefix)
LocalNode *LsNode // primary key, in MP_REACH_NLRI Attr
Prefix netip.Prefix // in MP_REACH_NLRI Attr
SidIndex uint32 // in BGP-LS Attr (only for Lo Address Prefix)
}

func NewLsPrefixV4(localNode *LsNode) *LsPrefixV4 {
Expand Down
13 changes: 8 additions & 5 deletions pkg/packet/pcep/message.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@

package pcep

import "fmt"
import (
"fmt"
"net/netip"
)

// Open Message
type OpenMessage struct {
Expand Down Expand Up @@ -153,7 +156,7 @@ type PCInitiateMessage struct {
VendorInformationObject *VendorInformationObject
}

func NewPCInitiateMessage(srpId uint32, lspName string, labels []Label, color uint32, preference uint32, srcIPv4 []uint8, dstIPv4 []uint8, opt ...Opt) (PCInitiateMessage, error) {
func NewPCInitiateMessage(srpId uint32, lspName string, labels []Label, color uint32, preference uint32, srcAddr netip.Addr, dstAddr netip.Addr, opt ...Opt) (PCInitiateMessage, error) {
opts := optParams{
pccType: RFC_COMPLIANT,
}
Expand All @@ -165,18 +168,18 @@ func NewPCInitiateMessage(srpId uint32, lspName string, labels []Label, color ui
var pcInitiateMessage PCInitiateMessage
pcInitiateMessage.SrpObject = NewSrpObject(srpId, false)
pcInitiateMessage.LspObject = NewLspObject(lspName, 0) // PLSP-ID = 0
pcInitiateMessage.EndpointsObject = NewEndpointsObject(1, dstIPv4, srcIPv4) // objectType = 1 (IPv4)
pcInitiateMessage.EndpointsObject = NewEndpointsObject(1, dstAddr, srcAddr) // objectType = 1 (IPv4)
var err error
pcInitiateMessage.EroObject, err = NewEroObject(labels)
if err != nil {
return pcInitiateMessage, err
}
if opts.pccType == JUNIPER_LEGACY {
pcInitiateMessage.AssociationObject = NewAssociationObject(srcIPv4, dstIPv4, color, preference, VendorSpecific(opts.pccType))
pcInitiateMessage.AssociationObject = NewAssociationObject(srcAddr, dstAddr, color, preference, VendorSpecific(opts.pccType))
} else if opts.pccType == CISCO_LEGACY {
pcInitiateMessage.VendorInformationObject = NewVendorInformationObject(CISCO_LEGACY, color, preference)
} else if opts.pccType == RFC_COMPLIANT {
pcInitiateMessage.AssociationObject = NewAssociationObject(srcIPv4, dstIPv4, color, preference)
pcInitiateMessage.AssociationObject = NewAssociationObject(srcAddr, dstAddr, color, preference)
// FRRouting is treated as an RFC compliant
pcInitiateMessage.VendorInformationObject = NewVendorInformationObject(CISCO_LEGACY, color, preference)
}
Expand Down

0 comments on commit df3d675

Please sign in to comment.