Skip to content

Commit f3ee185

Browse files
fixup! feat: Add Cisco IOS-XR Provider and implement interface stubs
1 parent 1a40d07 commit f3ee185

File tree

3 files changed

+30
-32
lines changed

3 files changed

+30
-32
lines changed

internal/provider/cisco/iosxr/intf.go

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ type MTUs struct {
9191
}
9292

9393
type MTU struct {
94-
MTU uint16 `json:"mtu,omitzero"`
94+
MTU int32 `json:"mtu,omitzero"`
9595
Owner string `json:"owner,omitempty"`
9696
}
9797

@@ -167,17 +167,7 @@ type PhysIfState struct {
167167
Name string `json:"-,omitempty"`
168168
}
169169

170-
// func (phys *PhysIfState) DeepCopy() *gnmiext.Configurable {
171-
// if phys == nil {
172-
// return nil
173-
// }
174-
// newPhys := new(PhysIfState)
175-
// newPhys.State = phys.State
176-
// var configurable gnmiext.Configurable = newPhys
177-
// return &configurable
178-
// }
179-
180170
func (phys *PhysIfState) XPath() string {
181-
//(fixme): hardcoded route processor for the moment
171+
// (fixme): hardcoded route processor for the moment
182172
return fmt.Sprintf("Cisco-IOS-XR-ifmgr-oper:interface-properties/data-nodes/data-node[data-node-name=0/RP0/CPU0]/system-view/interfaces/interface[interface-name=%s]", phys.Name)
183173
}

internal/provider/cisco/iosxr/provider.go

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ package iosxr
22

33
import (
44
"context"
5+
"errors"
56
"fmt"
7+
"strconv"
68

79
"github.com/ironcore-dev/network-operator/internal/deviceutil"
810
"github.com/ironcore-dev/network-operator/internal/provider"
@@ -43,21 +45,22 @@ func (p *Provider) Disconnect(ctx context.Context, conn *deviceutil.Connection)
4345

4446
func (p *Provider) EnsureInterface(ctx context.Context, req *provider.InterfaceRequest) error {
4547
if p.client == nil {
46-
return fmt.Errorf("client is not connected")
48+
return errors.New("client is not connected")
4749
}
48-
var name string = req.Interface.Spec.Name
50+
var name = req.Interface.Spec.Name
4951

50-
var physif *PhisIf = NewIface(name)
52+
var physif = NewIface(name)
5153

5254
physif.Name = req.Interface.Spec.Name
5355
physif.Description = req.Interface.Spec.Description
5456

5557
physif.Statistics.LoadInterval = 30
5658
owner, err := ExractMTUOwnerFromIfaceName(name)
5759
if err != nil {
58-
return fmt.Errorf("failed to extract MTU owner from interface name %s: %w", name, err)
60+
message := "failed to extract MTU owner from interface name" + name
61+
return errors.New(message)
5962
}
60-
physif.MTUs = MTUs{MTU: []MTU{{MTU: uint16(req.Interface.Spec.MTU), Owner: string(owner)}}}
63+
physif.MTUs = MTUs{MTU: []MTU{{MTU: req.Interface.Spec.MTU, Owner: string(owner)}}}
6164

6265
// (fixme): for the moment it is enought to keep this static
6366
// option1: extend existing interface spec
@@ -66,31 +69,30 @@ func (p *Provider) EnsureInterface(ctx context.Context, req *provider.InterfaceR
6669
physif.Statistics.LoadInterval = uint8(30)
6770

6871
if len(req.Interface.Spec.IPv4.Addresses) == 0 {
69-
return fmt.Errorf("no IPv4 address configured for interface %s", name)
72+
message := "no IPv4 address configured for interface " + name
73+
return errors.New(message)
7074
}
7175

7276
if len(req.Interface.Spec.IPv4.Addresses) > 1 {
73-
return fmt.Errorf("only a single primary IPv4 address is supported for interface %s", name)
77+
message := "multiple IPv4 addresses configured for interface " + name
78+
return errors.New(message)
7479
}
7580

7681
// (fixme): support IPv6 addresses, IPv6 neighbor config
77-
ip := req.Interface.Spec.IPv4.Addresses[0].Prefix.Addr().String()
78-
ipNet := req.Interface.Spec.IPv4.Addresses[0].Prefix.Bits()
79-
if err != nil {
80-
return fmt.Errorf("failed to parse IPv4 address %s: %w", req.Interface.Spec.IPv4.Addresses[0], err)
81-
}
82+
ip := req.Interface.Spec.IPv4.Addresses[0].Addr().String()
83+
ipNet := req.Interface.Spec.IPv4.Addresses[0].Bits()
8284

8385
physif.IPv4Network = IPv4Network{
8486
Addresses: AddressesIPv4{
8587
Primary: Primary{
8688
Address: ip,
87-
Netmask: fmt.Sprintf("%d", ipNet),
89+
Netmask: strconv.Itoa(ipNet),
8890
},
8991
},
9092
}
9193

9294
// Check if interface exists otherwise patch will fail
93-
var tmpiFace *PhisIf = NewIface(name)
95+
var tmpiFace = NewIface(name)
9496
err = p.client.GetConfig(ctx, tmpiFace)
9597
if err != nil {
9698
// Interface does not exist, create it
@@ -114,7 +116,7 @@ func (p *Provider) DeleteInterface(ctx context.Context, req *provider.InterfaceR
114116
var iFace = NewIface(req.Interface.Spec.Name)
115117

116118
if p.client == nil {
117-
return fmt.Errorf("client is not connected")
119+
return errors.New("client is not connected")
118120
}
119121

120122
err := p.client.Delete(ctx, iFace)
@@ -129,7 +131,7 @@ func (p *Provider) GetInterfaceStatus(ctx context.Context, req *provider.Interfa
129131
state.Name = req.Interface.Spec.Name
130132

131133
if p.client == nil {
132-
return provider.InterfaceStatus{}, fmt.Errorf("client is not connected")
134+
return provider.InterfaceStatus{}, errors.New("client is not connected")
133135
}
134136

135137
err := p.client.GetState(ctx, state)

internal/provider/cisco/iosxr/provider_test.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,15 @@ func Test_EnsureInterface(t *testing.T) {
135135

136136
ctx := context.Background()
137137

138-
var name string = "TwentyFiveGigE0/0/0/14"
138+
var name = "TwentyFiveGigE0/0/0/14"
139139
var prefix netip.Prefix
140-
prefix, _ = netip.ParsePrefix("192.168.1.0/24")
140+
141+
prefix, err := netip.ParsePrefix("192.168.1.0/24")
142+
143+
if err != nil {
144+
t.Fatalf("Failed to parse prefix: %v", err)
145+
}
146+
141147
ipv4 := v1alpha1.InterfaceIPv4{
142148
Addresses: []v1alpha1.IPPrefix{
143149
{
@@ -159,7 +165,7 @@ func Test_EnsureInterface(t *testing.T) {
159165
},
160166
}
161167

162-
err := p.EnsureInterface(ctx, req)
168+
err = p.EnsureInterface(ctx, req)
163169
if err != nil {
164170
t.Fatalf("EnsureInterface() error = %v", err)
165171
}
@@ -180,7 +186,7 @@ func Test_GetState(t *testing.T) {
180186

181187
ctx := context.Background()
182188

183-
var name string = "TwentyFiveGigE0/0/0/14"
189+
var name = "TwentyFiveGigE0/0/0/14"
184190

185191
req := &provider.InterfaceRequest{
186192
Interface: &v1alpha1.Interface{

0 commit comments

Comments
 (0)