mirror of
https://github.com/aljazceru/kata-containers.git
synced 2025-12-26 02:24:21 +01:00
Support ipvlan interfaces by setting up tc redirect rules. Fixes #591 Signed-off-by: Archana Shinde <archana.m.shinde@intel.com>
105 lines
2.6 KiB
Go
105 lines
2.6 KiB
Go
// Copyright (c) 2018 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
package virtcontainers
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
// Endpoint represents a physical or virtual network interface.
|
|
type Endpoint interface {
|
|
Properties() NetworkInfo
|
|
Name() string
|
|
HardwareAddr() string
|
|
Type() EndpointType
|
|
PciAddr() string
|
|
NetworkPair() *NetworkInterfacePair
|
|
|
|
SetProperties(NetworkInfo)
|
|
SetPciAddr(string)
|
|
Attach(hypervisor) error
|
|
Detach(netNsCreated bool, netNsPath string) error
|
|
HotAttach(h hypervisor) error
|
|
HotDetach(h hypervisor, netNsCreated bool, netNsPath string) error
|
|
}
|
|
|
|
// EndpointType identifies the type of the network endpoint.
|
|
type EndpointType string
|
|
|
|
const (
|
|
// PhysicalEndpointType is the physical network interface.
|
|
PhysicalEndpointType EndpointType = "physical"
|
|
|
|
// VethEndpointType is the virtual network interface.
|
|
VethEndpointType EndpointType = "virtual"
|
|
|
|
// VhostUserEndpointType is the vhostuser network interface.
|
|
VhostUserEndpointType EndpointType = "vhost-user"
|
|
|
|
// BridgedMacvlanEndpointType is macvlan network interface.
|
|
BridgedMacvlanEndpointType EndpointType = "macvlan"
|
|
|
|
// MacvtapEndpointType is macvtap network interface.
|
|
MacvtapEndpointType EndpointType = "macvtap"
|
|
|
|
// TapEndpointType is tap network interface.
|
|
TapEndpointType EndpointType = "tap"
|
|
|
|
// IPVlanEndpointType is ipvlan network interface.
|
|
IPVlanEndpointType EndpointType = "ipvlan"
|
|
)
|
|
|
|
// Set sets an endpoint type based on the input string.
|
|
func (endpointType *EndpointType) Set(value string) error {
|
|
switch value {
|
|
case "physical":
|
|
*endpointType = PhysicalEndpointType
|
|
return nil
|
|
case "virtual":
|
|
*endpointType = VethEndpointType
|
|
return nil
|
|
case "vhost-user":
|
|
*endpointType = VhostUserEndpointType
|
|
return nil
|
|
case "macvlan":
|
|
*endpointType = BridgedMacvlanEndpointType
|
|
return nil
|
|
case "macvtap":
|
|
*endpointType = MacvtapEndpointType
|
|
return nil
|
|
case "tap":
|
|
*endpointType = TapEndpointType
|
|
return nil
|
|
case "ipvlan":
|
|
*endpointType = IPVlanEndpointType
|
|
return nil
|
|
default:
|
|
return fmt.Errorf("Unknown endpoint type %s", value)
|
|
}
|
|
}
|
|
|
|
// String converts an endpoint type to a string.
|
|
func (endpointType *EndpointType) String() string {
|
|
switch *endpointType {
|
|
case PhysicalEndpointType:
|
|
return string(PhysicalEndpointType)
|
|
case VethEndpointType:
|
|
return string(VethEndpointType)
|
|
case VhostUserEndpointType:
|
|
return string(VhostUserEndpointType)
|
|
case BridgedMacvlanEndpointType:
|
|
return string(BridgedMacvlanEndpointType)
|
|
case MacvtapEndpointType:
|
|
return string(MacvtapEndpointType)
|
|
case TapEndpointType:
|
|
return string(TapEndpointType)
|
|
case IPVlanEndpointType:
|
|
return string(IPVlanEndpointType)
|
|
default:
|
|
return ""
|
|
}
|
|
}
|