Skip to content

Commit ca8c9c5

Browse files
authored
Merge pull request #864 from s1061123/default-route-pointer
Use *[]net.IP for 'default-route' network selection element.
2 parents 18a660e + 107624c commit ca8c9c5

5 files changed

Lines changed: 114 additions & 38 deletions

File tree

pkg/multus/multus.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,7 @@ func CmdAdd(args *skel.CmdArgs, exec invoke.Exec, kubeClient *k8s.ClientInfo) (c
644644
// https://docs.google.com/document/d/1Ny03h6IDVy_e_vmElOqR7UdTPAG_RNydhVE1Kx54kFQ (4.1.2.1.9)
645645
// the list can be empty; if it is, we'll assume the CNI's config for the default gateway holds,
646646
// else we'll update the defaultgateway to the one specified.
647-
if delegate.GatewayRequest != nil && delegate.GatewayRequest[0] != nil {
647+
if delegate.GatewayRequest != nil && len(*delegate.GatewayRequest) != 0 {
648648
deleteV4gateway = true
649649
adddefaultgateway = true
650650
logging.Debugf("Detected gateway override on interface %v to %v", ifName, delegate.GatewayRequest)
@@ -660,7 +660,7 @@ func CmdAdd(args *skel.CmdArgs, exec invoke.Exec, kubeClient *k8s.ClientInfo) (c
660660
// https://docs.google.com/document/d/1Ny03h6IDVy_e_vmElOqR7UdTPAG_RNydhVE1Kx54kFQ (4.1.2.1.9)
661661
// the list can be empty; if it is, we'll assume the CNI's config for the default gateway holds,
662662
// else we'll update the defaultgateway to the one specified.
663-
if delegate.GatewayRequest != nil && delegate.GatewayRequest[0] != nil {
663+
if delegate.GatewayRequest != nil && len(*delegate.GatewayRequest) != 0 {
664664
deleteV6gateway = true
665665
adddefaultgateway = true
666666
logging.Debugf("Detected gateway override on interface %v to %v", ifName, delegate.GatewayRequest)
@@ -681,11 +681,11 @@ func CmdAdd(args *skel.CmdArgs, exec invoke.Exec, kubeClient *k8s.ClientInfo) (c
681681

682682
// Here we'll set the default gateway which specified in `default-route` network selection
683683
if adddefaultgateway {
684-
err = netutils.SetDefaultGW(args, ifName, delegate.GatewayRequest)
684+
err = netutils.SetDefaultGW(args, ifName, *delegate.GatewayRequest)
685685
if err != nil {
686686
return nil, cmdErr(k8sArgs, "error setting default gateway: %v", err)
687687
}
688-
err = netutils.AddDefaultGWCache(n.CNIDir, rt, netName, ifName, delegate.GatewayRequest)
688+
err = netutils.AddDefaultGWCache(n.CNIDir, rt, netName, ifName, *delegate.GatewayRequest)
689689
if err != nil {
690690
return nil, cmdErr(k8sArgs, "error setting default gateway in cache: %v", err)
691691
}

pkg/multus/multus_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ type fakeExec struct {
6868
delIndex int
6969
chkIndex int
7070
expectedDelSkip int
71-
plugins map[string]*fakePlugin
71+
plugins map[string]*fakePlugin
7272
}
7373

7474
func newFakeExec() *fakeExec {

pkg/types/conf.go

Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ func LoadDelegateNetConfList(bytes []byte, delegateConf *DelegateNetConf) error
6060
}
6161

6262
// LoadDelegateNetConf converts raw CNI JSON into a DelegateNetConf structure
63-
func LoadDelegateNetConf(bytes []byte, net *NetworkSelectionElement, deviceID string, resourceName string) (*DelegateNetConf, error) {
63+
func LoadDelegateNetConf(bytes []byte, netElement *NetworkSelectionElement, deviceID string, resourceName string) (*DelegateNetConf, error) {
6464
var err error
65-
logging.Debugf("LoadDelegateNetConf: %s, %v, %s", string(bytes), net, deviceID)
65+
logging.Debugf("LoadDelegateNetConf: %s, %v, %s", string(bytes), netElement, deviceID)
6666

6767
delegateConf := &DelegateNetConf{}
6868
if err := json.Unmarshal(bytes, &delegateConf.Conf); err != nil {
@@ -83,8 +83,8 @@ func LoadDelegateNetConf(bytes []byte, net *NetworkSelectionElement, deviceID st
8383
delegateConf.ResourceName = resourceName
8484
delegateConf.DeviceID = deviceID
8585
}
86-
if net != nil && net.CNIArgs != nil {
87-
bytes, err = addCNIArgsInConfList(bytes, net.CNIArgs)
86+
if netElement != nil && netElement.CNIArgs != nil {
87+
bytes, err = addCNIArgsInConfList(bytes, netElement.CNIArgs)
8888
if err != nil {
8989
return nil, logging.Errorf("LoadDelegateNetConf(): failed to add cni-args in NetConfList bytes: %v", err)
9090
}
@@ -99,45 +99,51 @@ func LoadDelegateNetConf(bytes []byte, net *NetworkSelectionElement, deviceID st
9999
delegateConf.ResourceName = resourceName
100100
delegateConf.DeviceID = deviceID
101101
}
102-
if net != nil && net.CNIArgs != nil {
103-
bytes, err = addCNIArgsInConfig(bytes, net.CNIArgs)
102+
if netElement != nil && netElement.CNIArgs != nil {
103+
bytes, err = addCNIArgsInConfig(bytes, netElement.CNIArgs)
104104
if err != nil {
105105
return nil, logging.Errorf("LoadDelegateNetConf(): failed to add cni-args in NetConfList bytes: %v", err)
106106
}
107107
}
108108
}
109109

110-
if net != nil {
111-
if net.Name != "" {
110+
if netElement != nil {
111+
if netElement.Name != "" {
112112
// Overwrite CNI config name with net-attach-def name
113-
delegateConf.Name = fmt.Sprintf("%s/%s", net.Namespace, net.Name)
113+
delegateConf.Name = fmt.Sprintf("%s/%s", netElement.Namespace, netElement.Name)
114114
}
115-
if net.InterfaceRequest != "" {
116-
delegateConf.IfnameRequest = net.InterfaceRequest
115+
if netElement.InterfaceRequest != "" {
116+
delegateConf.IfnameRequest = netElement.InterfaceRequest
117117
}
118-
if net.MacRequest != "" {
119-
delegateConf.MacRequest = net.MacRequest
118+
if netElement.MacRequest != "" {
119+
delegateConf.MacRequest = netElement.MacRequest
120120
}
121-
if net.IPRequest != nil {
122-
delegateConf.IPRequest = net.IPRequest
121+
if netElement.IPRequest != nil {
122+
delegateConf.IPRequest = netElement.IPRequest
123123
}
124-
if net.BandwidthRequest != nil {
125-
delegateConf.BandwidthRequest = net.BandwidthRequest
124+
if netElement.BandwidthRequest != nil {
125+
delegateConf.BandwidthRequest = netElement.BandwidthRequest
126126
}
127-
if net.PortMappingsRequest != nil {
128-
delegateConf.PortMappingsRequest = net.PortMappingsRequest
127+
if netElement.PortMappingsRequest != nil {
128+
delegateConf.PortMappingsRequest = netElement.PortMappingsRequest
129129
}
130-
if net.GatewayRequest != nil {
131-
delegateConf.GatewayRequest = append(delegateConf.GatewayRequest, net.GatewayRequest...)
130+
if netElement.GatewayRequest != nil {
131+
var list []net.IP
132+
if delegateConf.GatewayRequest != nil {
133+
list = append(*delegateConf.GatewayRequest, *netElement.GatewayRequest...)
134+
} else {
135+
list = *netElement.GatewayRequest
136+
}
137+
delegateConf.GatewayRequest = &list
132138
}
133-
if net.InfinibandGUIDRequest != "" {
134-
delegateConf.InfinibandGUIDRequest = net.InfinibandGUIDRequest
139+
if netElement.InfinibandGUIDRequest != "" {
140+
delegateConf.InfinibandGUIDRequest = netElement.InfinibandGUIDRequest
135141
}
136-
if net.DeviceID != "" {
142+
if netElement.DeviceID != "" {
137143
if deviceID != "" {
138144
logging.Debugf("Warning: Both RuntimeConfig and ResourceMap provide deviceID. Ignoring RuntimeConfig")
139145
} else {
140-
delegateConf.DeviceID = net.DeviceID
146+
delegateConf.DeviceID = netElement.DeviceID
141147
}
142148
}
143149
}
@@ -547,11 +553,13 @@ func CheckGatewayConfig(delegates []*DelegateNetConf) error {
547553

548554
// Check the gateway
549555
for _, delegate := range delegates {
550-
for _, gw := range delegate.GatewayRequest {
551-
if gw.To4() != nil {
552-
v4Gateways++
553-
} else {
554-
v6Gateways++
556+
if delegate.GatewayRequest != nil {
557+
for _, gw := range *delegate.GatewayRequest {
558+
if gw.To4() != nil {
559+
v4Gateways++
560+
} else {
561+
v6Gateways++
562+
}
555563
}
556564
}
557565
}
@@ -567,7 +575,7 @@ func CheckGatewayConfig(delegates []*DelegateNetConf) error {
567575
delegates[i].IsFilterV4Gateway = true
568576
delegates[i].IsFilterV6Gateway = true
569577
} else {
570-
for _, gw := range delegate.GatewayRequest {
578+
for _, gw := range *delegate.GatewayRequest {
571579
if gw.To4() != nil {
572580
delegates[i].IsFilterV6Gateway = true
573581
} else {

pkg/types/conf_test.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -909,4 +909,72 @@ var _ = Describe("config operations", func() {
909909
Expect(n.Delegates[0].Name).To(Equal("weave-list"))
910910
})
911911

912+
It("test LoadDelegateNetConf keeps without GatewayRequest", func() {
913+
conf := `{
914+
"name": "node-cni-network",
915+
"type": "multus",
916+
"kubeconfig": "/etc/kubernetes/node-kubeconfig.yaml",
917+
"delegates": [{
918+
"name": "weave-list",
919+
"plugins": [ {"type" :"weave"} ]
920+
}]
921+
}`
922+
923+
nsJSON := `{ "name": "foobar" }`
924+
ns := &NetworkSelectionElement{}
925+
926+
err := json.Unmarshal([]byte(nsJSON), ns)
927+
Expect(err).NotTo(HaveOccurred())
928+
929+
netconf, err := LoadDelegateNetConf([]byte(conf), ns, "", "")
930+
Expect(err).NotTo(HaveOccurred())
931+
Expect(netconf.GatewayRequest).To(BeNil())
932+
})
933+
934+
It("test LoadDelegateNetConf keeps empty GatewayRequest", func() {
935+
conf := `{
936+
"name": "node-cni-network",
937+
"type": "multus",
938+
"kubeconfig": "/etc/kubernetes/node-kubeconfig.yaml",
939+
"delegates": [{
940+
"name": "weave-list",
941+
"plugins": [ {"type" :"weave"} ]
942+
}]
943+
}`
944+
945+
nsJSON := `{ "name": "foobar", "default-route": [] }`
946+
ns := &NetworkSelectionElement{}
947+
948+
err := json.Unmarshal([]byte(nsJSON), ns)
949+
Expect(err).NotTo(HaveOccurred())
950+
951+
netconf, err := LoadDelegateNetConf([]byte(conf), ns, "", "")
952+
Expect(err).NotTo(HaveOccurred())
953+
Expect(netconf.GatewayRequest).NotTo(BeNil())
954+
Expect(len(*netconf.GatewayRequest)).To(BeEquivalentTo(0))
955+
})
956+
957+
It("test LoadDelegateNetConf keeps GatewayRequest", func() {
958+
conf := `{
959+
"name": "node-cni-network",
960+
"type": "multus",
961+
"kubeconfig": "/etc/kubernetes/node-kubeconfig.yaml",
962+
"delegates": [{
963+
"name": "weave-list",
964+
"plugins": [ {"type" :"weave"} ]
965+
}]
966+
}`
967+
968+
nsJSON := `{ "name": "foobar", "default-route": [ "10.1.1.1" ] }`
969+
ns := &NetworkSelectionElement{}
970+
971+
err := json.Unmarshal([]byte(nsJSON), ns)
972+
Expect(err).NotTo(HaveOccurred())
973+
974+
netconf, err := LoadDelegateNetConf([]byte(conf), ns, "", "")
975+
Expect(err).NotTo(HaveOccurred())
976+
Expect(netconf.GatewayRequest).NotTo(BeNil())
977+
Expect(len(*netconf.GatewayRequest)).To(BeEquivalentTo(1))
978+
})
979+
912980
})

pkg/types/types.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ type DelegateNetConf struct {
9999
IPRequest []string `json:"ipRequest,omitempty"`
100100
PortMappingsRequest []*PortMapEntry `json:"-"`
101101
BandwidthRequest *BandwidthEntry `json:"-"`
102-
GatewayRequest []net.IP `json:"default-route,omitempty"`
102+
GatewayRequest *[]net.IP `json:"default-route,omitempty"`
103103
IsFilterV4Gateway bool
104104
IsFilterV6Gateway bool
105105
// MasterPlugin is only used internal housekeeping
@@ -150,7 +150,7 @@ type NetworkSelectionElement struct {
150150
// CNIArgs contains additional CNI arguments for the network interface
151151
CNIArgs *map[string]interface{} `json:"cni-args"`
152152
// GatewayRequest contains default route IP address for the pod
153-
GatewayRequest []net.IP `json:"default-route,omitempty"`
153+
GatewayRequest *[]net.IP `json:"default-route,omitempty"`
154154
}
155155

156156
// K8sArgs is the valid CNI_ARGS used for Kubernetes

0 commit comments

Comments
 (0)