@@ -3,10 +3,7 @@ package srv6
33import (
44 "errors"
55 "fmt"
6- "net"
7- "strings"
86
9- "github.com/kenshaw/baseconv"
107 "github.com/vishvananda/netlink"
118
129 "github.com/datum-cloud/galactic-agent/srv6/neighborproxy"
@@ -20,15 +17,15 @@ func RouteIngressAdd(ipStr string) error {
2017 if err != nil {
2118 return fmt .Errorf ("invalid ip: %w" , err )
2219 }
23- vpc , vpcAttachment , err := util .ExtractVPCFromSRv6Endpoint (ip )
20+ vpc , vpcAttachment , err := util .DecodeSRv6Endpoint (ip )
2421 if err != nil {
2522 return fmt .Errorf ("could not extract SRv6 endpoint: %w" , err )
2623 }
27- vpc , err = ToBase62 (vpc )
24+ vpc , err = util . HexToBase62 (vpc )
2825 if err != nil {
2926 return fmt .Errorf ("invalid vpc: %w" , err )
3027 }
31- vpcAttachment , err = ToBase62 (vpcAttachment )
28+ vpcAttachment , err = util . HexToBase62 (vpcAttachment )
3229 if err != nil {
3330 return fmt .Errorf ("invalid vpcattachment: %w" , err )
3431 }
@@ -44,15 +41,15 @@ func RouteIngressDel(ipStr string) error {
4441 if err != nil {
4542 return fmt .Errorf ("invalid ip: %w" , err )
4643 }
47- vpc , vpcAttachment , err := util .ExtractVPCFromSRv6Endpoint (ip )
44+ vpc , vpcAttachment , err := util .DecodeSRv6Endpoint (ip )
4845 if err != nil {
4946 return fmt .Errorf ("could not extract SRv6 endpoint: %w" , err )
5047 }
51- vpc , err = ToBase62 (vpc )
48+ vpc , err = util . HexToBase62 (vpc )
5249 if err != nil {
5350 return fmt .Errorf ("invalid vpc: %w" , err )
5451 }
55- vpcAttachment , err = ToBase62 (vpcAttachment )
52+ vpcAttachment , err = util . HexToBase62 (vpcAttachment )
5653 if err != nil {
5754 return fmt .Errorf ("invalid vpcattachment: %w" , err )
5855 }
@@ -72,26 +69,26 @@ func RouteEgressAdd(prefixStr, srcStr string, segmentsStr []string) error {
7269 if err != nil {
7370 return fmt .Errorf ("invalid src: %w" , err )
7471 }
75- segments , err := ParseSegments (segmentsStr )
72+ segments , err := util . ParseSegments (segmentsStr )
7673 if err != nil {
7774 return fmt .Errorf ("invalid segments: %w" , err )
7875 }
7976
80- vpc , vpcAttachment , err := util .ExtractVPCFromSRv6Endpoint (src )
77+ vpc , vpcAttachment , err := util .DecodeSRv6Endpoint (src )
8178 if err != nil {
8279 return fmt .Errorf ("could not extract SRv6 endpoint: %w" , err )
8380 }
84- vpc , err = ToBase62 (vpc )
81+ vpc , err = util . HexToBase62 (vpc )
8582 if err != nil {
8683 return fmt .Errorf ("invalid vpc: %w" , err )
8784 }
88- vpcAttachment , err = ToBase62 (vpcAttachment )
85+ vpcAttachment , err = util . HexToBase62 (vpcAttachment )
8986 if err != nil {
9087 return fmt .Errorf ("invalid vpcattachment: %w" , err )
9188 }
9289
9390 var errs []error
94- if IsHost (prefix ) {
91+ if util . IsHost (prefix ) {
9592 if err := neighborproxy .Add (prefix , vpc , vpcAttachment ); err != nil {
9693 errs = append (errs , fmt .Errorf ("neighborproxy add failed: %w" , err ))
9794 }
@@ -114,26 +111,26 @@ func RouteEgressDel(prefixStr, srcStr string, segmentsStr []string) error {
114111 if err != nil {
115112 return fmt .Errorf ("invalid src: %w" , err )
116113 }
117- segments , err := ParseSegments (segmentsStr )
114+ segments , err := util . ParseSegments (segmentsStr )
118115 if err != nil {
119116 return fmt .Errorf ("invalid segments: %w" , err )
120117 }
121118
122- vpc , vpcAttachment , err := util .ExtractVPCFromSRv6Endpoint (src )
119+ vpc , vpcAttachment , err := util .DecodeSRv6Endpoint (src )
123120 if err != nil {
124121 return fmt .Errorf ("could not extract SRv6 endpoint: %w" , err )
125122 }
126- vpc , err = ToBase62 (vpc )
123+ vpc , err = util . HexToBase62 (vpc )
127124 if err != nil {
128125 return fmt .Errorf ("invalid vpc: %w" , err )
129126 }
130- vpcAttachment , err = ToBase62 (vpcAttachment )
127+ vpcAttachment , err = util . HexToBase62 (vpcAttachment )
131128 if err != nil {
132129 return fmt .Errorf ("invalid vpcattachment: %w" , err )
133130 }
134131
135132 var errs []error
136- if IsHost (prefix ) {
133+ if util . IsHost (prefix ) {
137134 if err := neighborproxy .Delete (prefix , vpc , vpcAttachment ); err != nil {
138135 errs = append (errs , fmt .Errorf ("neighborproxy delete failed: %w" , err ))
139136 }
@@ -146,31 +143,3 @@ func RouteEgressDel(prefixStr, srcStr string, segmentsStr []string) error {
146143 }
147144 return nil
148145}
149-
150- func ToBase62 (value string ) (string , error ) {
151- return baseconv .Convert (strings .ToLower (value ), baseconv .DigitsHex , baseconv .Digits62 )
152- }
153-
154- func IsHost (ipNet * net.IPNet ) bool {
155- ones , bits := ipNet .Mask .Size ()
156- // host if mask is full length: /32 for IPv4, /128 for IPv6
157- return ones == bits
158- }
159-
160- func ParseSegments (input []string ) ([]net.IP , error ) {
161- var segments []net.IP
162- for _ , ipStr := range input {
163- ip , err := util .ParseIP (ipStr )
164- if err != nil {
165- return nil , fmt .Errorf ("could not parse ip (%s): %v" , ipStr , err )
166- }
167- if ip .To4 () != nil {
168- return nil , fmt .Errorf ("not an ipv6 address: %s" , ipStr )
169- }
170- segments = append ([]net.IP {ip }, segments ... )
171- }
172- if len (segments ) == 0 {
173- return nil , fmt .Errorf ("no segments parsed: %v" , input )
174- }
175- return segments , nil
176- }
0 commit comments