diff --git a/pkg/ip/link_linux.go b/pkg/ip/link_linux.go index f8781cf1..68b2a35b 100644 --- a/pkg/ip/link_linux.go +++ b/pkg/ip/link_linux.go @@ -25,7 +25,6 @@ import ( "github.com/vishvananda/netlink" "github.com/containernetworking/plugins/pkg/ns" - "github.com/containernetworking/plugins/pkg/utils/hwaddr" "github.com/containernetworking/plugins/pkg/utils/sysctl" ) @@ -225,33 +224,6 @@ func DelLinkByNameAddr(ifName string) ([]*net.IPNet, error) { return out, nil } -func SetHWAddrByIP(ifName string, ip4 net.IP, ip6 net.IP) error { - iface, err := netlink.LinkByName(ifName) - if err != nil { - return fmt.Errorf("failed to lookup %q: %v", ifName, err) - } - - switch { - case ip4 == nil && ip6 == nil: - return fmt.Errorf("neither ip4 or ip6 specified") - - case ip4 != nil: - { - hwAddr, err := hwaddr.GenerateHardwareAddr4(ip4, hwaddr.PrivateMACPrefix) - if err != nil { - return fmt.Errorf("failed to generate hardware addr: %v", err) - } - if err = netlink.LinkSetHardwareAddr(iface, hwAddr); err != nil { - return fmt.Errorf("failed to add hardware addr to %q: %v", ifName, err) - } - } - case ip6 != nil: - // TODO: IPv6 - } - - return nil -} - // GetVethPeerIfindex returns the veth link object, the peer ifindex of the // veth, or an error. This peer ifindex will only be valid in the peer's // network namespace. diff --git a/pkg/ip/link_linux_test.go b/pkg/ip/link_linux_test.go index 7249c9ef..3c118e9f 100644 --- a/pkg/ip/link_linux_test.go +++ b/pkg/ip/link_linux_test.go @@ -51,8 +51,6 @@ var _ = Describe("Link", func() { hostVethName string containerVethName string - ip4one = net.ParseIP("1.1.1.1") - ip4two = net.ParseIP("1.1.1.2") originalRandReader = rand.Reader ) @@ -270,41 +268,4 @@ var _ = Describe("Link", func() { return nil }) }) - - It("SetHWAddrByIP must change the interface hwaddr and be predictable", func() { - - _ = containerNetNS.Do(func(ns.NetNS) error { - defer GinkgoRecover() - - var err error - hwaddrBefore := getHwAddr(containerVethName) - - err = ip.SetHWAddrByIP(containerVethName, ip4one, nil) - Expect(err).NotTo(HaveOccurred()) - hwaddrAfter1 := getHwAddr(containerVethName) - - Expect(hwaddrBefore).NotTo(Equal(hwaddrAfter1)) - Expect(hwaddrAfter1).To(Equal(ip4onehwaddr)) - - return nil - }) - }) - - It("SetHWAddrByIP must be injective", func() { - - _ = containerNetNS.Do(func(ns.NetNS) error { - defer GinkgoRecover() - - err := ip.SetHWAddrByIP(containerVethName, ip4one, nil) - Expect(err).NotTo(HaveOccurred()) - hwaddrAfter1 := getHwAddr(containerVethName) - - err = ip.SetHWAddrByIP(containerVethName, ip4two, nil) - Expect(err).NotTo(HaveOccurred()) - hwaddrAfter2 := getHwAddr(containerVethName) - - Expect(hwaddrAfter1).NotTo(Equal(hwaddrAfter2)) - return nil - }) - }) }) diff --git a/pkg/utils/hwaddr/hwaddr.go b/pkg/utils/hwaddr/hwaddr.go deleted file mode 100644 index aaf3b8a0..00000000 --- a/pkg/utils/hwaddr/hwaddr.go +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2016 CNI authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package hwaddr - -import ( - "fmt" - "net" -) - -const ( - ipRelevantByteLen = 4 - PrivateMACPrefixString = "0a:58" -) - -var ( - // private mac prefix safe to use - PrivateMACPrefix = []byte{0x0a, 0x58} -) - -type SupportIp4OnlyErr struct{ msg string } - -func (e SupportIp4OnlyErr) Error() string { return e.msg } - -type MacParseErr struct{ msg string } - -func (e MacParseErr) Error() string { return e.msg } - -type InvalidPrefixLengthErr struct{ msg string } - -func (e InvalidPrefixLengthErr) Error() string { return e.msg } - -// GenerateHardwareAddr4 generates 48 bit virtual mac addresses based on the IP4 input. -func GenerateHardwareAddr4(ip net.IP, prefix []byte) (net.HardwareAddr, error) { - switch { - - case ip.To4() == nil: - return nil, SupportIp4OnlyErr{msg: "GenerateHardwareAddr4 only supports valid IPv4 address as input"} - - case len(prefix) != len(PrivateMACPrefix): - return nil, InvalidPrefixLengthErr{msg: fmt.Sprintf( - "Prefix has length %d instead of %d", len(prefix), len(PrivateMACPrefix)), - } - } - - ipByteLen := len(ip) - return (net.HardwareAddr)( - append( - prefix, - ip[ipByteLen-ipRelevantByteLen:ipByteLen]...), - ), nil -} diff --git a/pkg/utils/hwaddr/hwaddr_suite_test.go b/pkg/utils/hwaddr/hwaddr_suite_test.go deleted file mode 100644 index d5e7f169..00000000 --- a/pkg/utils/hwaddr/hwaddr_suite_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2016 CNI authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package hwaddr_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestHwaddr(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "pkg/utils/hwaddr") -} diff --git a/pkg/utils/hwaddr/hwaddr_test.go b/pkg/utils/hwaddr/hwaddr_test.go deleted file mode 100644 index ab89a58e..00000000 --- a/pkg/utils/hwaddr/hwaddr_test.go +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2016 CNI authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package hwaddr_test - -import ( - "net" - - "github.com/containernetworking/plugins/pkg/utils/hwaddr" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Hwaddr", func() { - Context("Generate Hardware Address", func() { - It("generate hardware address based on ipv4 address", func() { - testCases := []struct { - ip net.IP - expectedMAC net.HardwareAddr - }{ - { - ip: net.ParseIP("10.0.0.2"), - expectedMAC: (net.HardwareAddr)(append(hwaddr.PrivateMACPrefix, 0x0a, 0x00, 0x00, 0x02)), - }, - { - ip: net.ParseIP("10.250.0.244"), - expectedMAC: (net.HardwareAddr)(append(hwaddr.PrivateMACPrefix, 0x0a, 0xfa, 0x00, 0xf4)), - }, - { - ip: net.ParseIP("172.17.0.2"), - expectedMAC: (net.HardwareAddr)(append(hwaddr.PrivateMACPrefix, 0xac, 0x11, 0x00, 0x02)), - }, - { - ip: net.IPv4(byte(172), byte(17), byte(0), byte(2)), - expectedMAC: (net.HardwareAddr)(append(hwaddr.PrivateMACPrefix, 0xac, 0x11, 0x00, 0x02)), - }, - } - - for _, tc := range testCases { - mac, err := hwaddr.GenerateHardwareAddr4(tc.ip, hwaddr.PrivateMACPrefix) - Expect(err).NotTo(HaveOccurred()) - Expect(mac).To(Equal(tc.expectedMAC)) - } - }) - - It("return error if input is not ipv4 address", func() { - testCases := []net.IP{ - net.ParseIP(""), - net.ParseIP("2001:db8:0:1:1:1:1:1"), - } - for _, tc := range testCases { - _, err := hwaddr.GenerateHardwareAddr4(tc, hwaddr.PrivateMACPrefix) - Expect(err).To(BeAssignableToTypeOf(hwaddr.SupportIp4OnlyErr{})) - } - }) - - It("return error if prefix is invalid", func() { - _, err := hwaddr.GenerateHardwareAddr4(net.ParseIP("10.0.0.2"), []byte{0x58}) - Expect(err).To(BeAssignableToTypeOf(hwaddr.InvalidPrefixLengthErr{})) - }) - }) -})