network: pass network interface RawFlags to agent

In order to support NOARP in ipvlan interface, the runtime
will pass the rawflags to agent, which also apply to other
network interfaces, not just ipvlan.

Fixes: #1391

Signed-off-by: Zha Bin <zhabin@linux.alibaba.com>
This commit is contained in:
Zha Bin 2019-04-23 09:40:43 +08:00
parent 74fb9ff570
commit dd0808ae54
6 changed files with 68 additions and 28 deletions

8
Gopkg.lock generated
View File

@ -395,7 +395,7 @@
revision = "35a8fd3ca9a36461b7dcf24e3b292f6e1ea4e71a" revision = "35a8fd3ca9a36461b7dcf24e3b292f6e1ea4e71a"
[[projects]] [[projects]]
digest = "1:eaa44c90711ae244bae3ef4239edc720bbbd7dfc754bfdbd12407bdaf14d6777" digest = "1:36dfd4701e98a9d8371dd3053e32d4f29e82b07bcc9e655db82138f9273bcb0f"
name = "github.com/kata-containers/agent" name = "github.com/kata-containers/agent"
packages = [ packages = [
"pkg/types", "pkg/types",
@ -403,7 +403,7 @@
"protocols/grpc", "protocols/grpc",
] ]
pruneopts = "NUT" pruneopts = "NUT"
revision = "17192be88b2725b0e7f482a8b7616935e1b1ddf4" revision = "48dd1c031530fce9bf16b0f6a7305979cedd8fc9"
[[projects]] [[projects]]
digest = "1:04054595e5c5a35d1553a7f3464d18577caf597445d643992998643df56d4afd" digest = "1:04054595e5c5a35d1553a7f3464d18577caf597445d643992998643df56d4afd"
@ -425,11 +425,11 @@
revision = "6243d8e04c3f819e79757e8bc3faa15c3cb27003" revision = "6243d8e04c3f819e79757e8bc3faa15c3cb27003"
[[projects]] [[projects]]
digest = "1:0159dcdabe50788e5dcfb469521f8f8dcd362db3ab6b465b99a3d33a90726fc0" digest = "1:f3e11773cc8a305f97b42c276f62d92899c9b0c1c3c584a667149b18f18a530a"
name = "github.com/mdlayher/vsock" name = "github.com/mdlayher/vsock"
packages = ["."] packages = ["."]
pruneopts = "NUT" pruneopts = "NUT"
revision = "738c88d6e4cfd60e8124a5344fa10d205fd828b9" revision = "676f733b747cd6406f297a51bd086ee8ec8abdbe"
[[projects]] [[projects]]
digest = "1:6a65dcd0d14fc0595ee982afc3c59deb5b769ca374455c80c649d92f8a152930" digest = "1:6a65dcd0d14fc0595ee982afc3c59deb5b769ca374455c80c649d92f8a152930"

View File

@ -56,7 +56,7 @@
[[constraint]] [[constraint]]
name = "github.com/kata-containers/agent" name = "github.com/kata-containers/agent"
revision = "17192be88b2725b0e7f482a8b7616935e1b1ddf4" revision = "48dd1c031530fce9bf16b0f6a7305979cedd8fc9"
[[constraint]] [[constraint]]
name = "github.com/containerd/cri-containerd" name = "github.com/containerd/cri-containerd"

View File

@ -98,7 +98,8 @@ type Interface struct {
// The expected values are the one that are defined by the netlink // The expected values are the one that are defined by the netlink
// library, regarding each type of link. Here is a non exhaustive // library, regarding each type of link. Here is a non exhaustive
// list: "veth", "macvtap", "vlan", "macvlan", "tap", ... // list: "veth", "macvtap", "vlan", "macvlan", "tap", ...
Type string `protobuf:"bytes,7,opt,name=type,proto3" json:"type,omitempty"` Type string `protobuf:"bytes,7,opt,name=type,proto3" json:"type,omitempty"`
RawFlags uint32 `protobuf:"varint,8,opt,name=raw_flags,json=rawFlags,proto3" json:"raw_flags,omitempty"`
} }
func (m *Interface) Reset() { *m = Interface{} } func (m *Interface) Reset() { *m = Interface{} }
@ -155,6 +156,13 @@ func (m *Interface) GetType() string {
return "" return ""
} }
func (m *Interface) GetRawFlags() uint32 {
if m != nil {
return m.RawFlags
}
return 0
}
type Route struct { type Route struct {
Dest string `protobuf:"bytes,1,opt,name=dest,proto3" json:"dest,omitempty"` Dest string `protobuf:"bytes,1,opt,name=dest,proto3" json:"dest,omitempty"`
Gateway string `protobuf:"bytes,2,opt,name=gateway,proto3" json:"gateway,omitempty"` Gateway string `protobuf:"bytes,2,opt,name=gateway,proto3" json:"gateway,omitempty"`
@ -306,6 +314,11 @@ func (m *Interface) MarshalTo(dAtA []byte) (int, error) {
i = encodeVarintTypes(dAtA, i, uint64(len(m.Type))) i = encodeVarintTypes(dAtA, i, uint64(len(m.Type)))
i += copy(dAtA[i:], m.Type) i += copy(dAtA[i:], m.Type)
} }
if m.RawFlags != 0 {
dAtA[i] = 0x40
i++
i = encodeVarintTypes(dAtA, i, uint64(m.RawFlags))
}
return i, nil return i, nil
} }
@ -414,6 +427,9 @@ func (m *Interface) Size() (n int) {
if l > 0 { if l > 0 {
n += 1 + l + sovTypes(uint64(l)) n += 1 + l + sovTypes(uint64(l))
} }
if m.RawFlags != 0 {
n += 1 + sovTypes(uint64(m.RawFlags))
}
return n return n
} }
@ -806,6 +822,25 @@ func (m *Interface) Unmarshal(dAtA []byte) error {
} }
m.Type = string(dAtA[iNdEx:postIndex]) m.Type = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex iNdEx = postIndex
case 8:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field RawFlags", wireType)
}
m.RawFlags = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.RawFlags |= (uint32(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
default: default:
iNdEx = preIndex iNdEx = preIndex
skippy, err := skipTypes(dAtA[iNdEx:]) skippy, err := skipTypes(dAtA[iNdEx:])
@ -1120,26 +1155,27 @@ var (
func init() { proto.RegisterFile("pkg/types/types.proto", fileDescriptorTypes) } func init() { proto.RegisterFile("pkg/types/types.proto", fileDescriptorTypes) }
var fileDescriptorTypes = []byte{ var fileDescriptorTypes = []byte{
// 325 bytes of a gzipped FileDescriptorProto // 345 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x91, 0x4f, 0x6e, 0xf2, 0x30, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x91, 0xd1, 0x6a, 0xfa, 0x30,
0x10, 0xc5, 0x3f, 0x13, 0x12, 0xbe, 0x0c, 0xfd, 0x13, 0x59, 0x2d, 0xb2, 0xba, 0x40, 0x11, 0x9b, 0x14, 0xc6, 0xff, 0xb1, 0xb6, 0xda, 0xe3, 0xdf, 0xad, 0x84, 0x4d, 0xc2, 0x06, 0x52, 0xbc, 0x59,
0x46, 0x5d, 0x50, 0x89, 0x56, 0xdd, 0xb7, 0x8b, 0x4a, 0xec, 0x90, 0x6f, 0x60, 0x92, 0x81, 0x22, 0xd9, 0x85, 0x03, 0x37, 0x76, 0xbf, 0x5d, 0x08, 0xde, 0x49, 0x5e, 0x60, 0xc4, 0x36, 0x3a, 0xd1,
0x1a, 0x12, 0xc5, 0x06, 0x84, 0x7a, 0xbc, 0x6e, 0xba, 0xec, 0x11, 0x2a, 0x4e, 0x52, 0x79, 0x6c, 0xda, 0xd2, 0x44, 0x8b, 0xec, 0x05, 0x77, 0xb9, 0x47, 0x10, 0x9f, 0x64, 0xe4, 0x24, 0x8a, 0xbb,
0x10, 0xdd, 0x24, 0xef, 0x79, 0x3c, 0x9e, 0xdf, 0xb3, 0xe1, 0xba, 0x5e, 0xce, 0xef, 0xcd, 0xae, 0xd1, 0xef, 0x97, 0x93, 0xd3, 0xef, 0x7c, 0x27, 0x70, 0x5b, 0xae, 0x16, 0x4f, 0x7a, 0x5f, 0x4a,
0x46, 0xed, 0xbe, 0xc3, 0xba, 0xa9, 0x4c, 0xc5, 0x43, 0x32, 0x83, 0x29, 0xc4, 0xe3, 0xc9, 0x73, 0x65, 0x7f, 0x87, 0x65, 0x55, 0xe8, 0x82, 0xfa, 0x08, 0x83, 0x19, 0x84, 0x93, 0xe9, 0x5b, 0x96,
0x51, 0x34, 0xa8, 0x35, 0xbf, 0x85, 0x68, 0xa6, 0xca, 0xc5, 0xfb, 0x4e, 0xb0, 0x94, 0x65, 0x17, 0x55, 0x52, 0x29, 0xfa, 0x00, 0xc1, 0x5c, 0xe4, 0xcb, 0xf5, 0x9e, 0x91, 0x98, 0x24, 0x57, 0xa3,
0xa3, 0xcb, 0xa1, 0xeb, 0x18, 0x4f, 0x5e, 0x69, 0x59, 0xfa, 0x32, 0x17, 0xd0, 0x51, 0xae, 0x47, 0xeb, 0xa1, 0xed, 0x98, 0x4c, 0xc7, 0x78, 0xcc, 0x5d, 0x99, 0x32, 0x68, 0x09, 0xdb, 0xc3, 0x1a,
0xb4, 0x52, 0x96, 0xc5, 0xf2, 0x60, 0x39, 0x87, 0x76, 0xa9, 0xf4, 0x52, 0x04, 0xb4, 0x4c, 0x7a, 0x31, 0x49, 0x42, 0x7e, 0x42, 0x4a, 0xa1, 0x99, 0x0b, 0xb5, 0x62, 0x1e, 0x1e, 0xa3, 0x1e, 0x1c,
0xf0, 0xc9, 0x20, 0x1e, 0xaf, 0x0c, 0x36, 0x33, 0x95, 0x23, 0xef, 0x41, 0x54, 0xe0, 0x66, 0x91, 0x08, 0x84, 0x93, 0x8d, 0x96, 0xd5, 0x5c, 0xa4, 0x92, 0xf6, 0x20, 0xc8, 0xe4, 0x6e, 0x99, 0x4a,
0x23, 0x0d, 0x89, 0xa5, 0x77, 0xb6, 0x73, 0xa5, 0x4a, 0xf4, 0x07, 0x92, 0xe6, 0x23, 0xe8, 0x1e, 0x34, 0x09, 0xb9, 0x23, 0xd3, 0xb9, 0x11, 0xb9, 0x74, 0x1f, 0x44, 0x4d, 0x47, 0xd0, 0x39, 0x4f,
0xe9, 0x50, 0x8b, 0x20, 0x0d, 0xb2, 0xee, 0x28, 0x39, 0x52, 0xf9, 0x8a, 0x3c, 0xdd, 0xc4, 0x13, 0x27, 0x15, 0xf3, 0x62, 0x2f, 0xe9, 0x8c, 0xa2, 0xf3, 0x54, 0xae, 0xc2, 0x2f, 0x2f, 0xd1, 0x08,
0x08, 0x4a, 0xb3, 0x16, 0xed, 0x94, 0x65, 0x6d, 0x69, 0xa5, 0x9d, 0xf8, 0xb6, 0xb5, 0x1b, 0x44, 0xbc, 0x5c, 0x6f, 0x59, 0x33, 0x26, 0x49, 0x93, 0x1b, 0x69, 0x1c, 0x3f, 0x6b, 0x73, 0x81, 0xf9,
0xe8, 0x26, 0x3a, 0x67, 0x53, 0xd4, 0xf9, 0x82, 0x0a, 0x91, 0x4b, 0xe1, 0xad, 0x65, 0xb1, 0x33, 0xd6, 0xd1, 0x92, 0x49, 0x51, 0xa6, 0x4b, 0x2c, 0x04, 0x36, 0x85, 0x43, 0x33, 0x8b, 0xf1, 0x60,
0x44, 0xc7, 0xb1, 0x58, 0x3d, 0xf8, 0x80, 0x50, 0x56, 0x6b, 0x43, 0xa0, 0x05, 0x6a, 0xe3, 0xf1, 0x2d, 0x3b, 0x8b, 0xd1, 0xf4, 0x1e, 0xc2, 0x4a, 0xd4, 0x1f, 0xf3, 0xb5, 0x58, 0x28, 0xd6, 0x8e,
0x49, 0xdb, 0xa3, 0xe6, 0xca, 0xe0, 0x56, 0xed, 0x0e, 0x17, 0xe2, 0xed, 0x49, 0xdc, 0xe0, 0x4f, 0x49, 0xd2, 0xe5, 0xed, 0x4a, 0xd4, 0x63, 0xc3, 0x83, 0x2f, 0xf0, 0x79, 0xb1, 0xd5, 0x98, 0x22,
0xdc, 0x1e, 0x44, 0xba, 0x5a, 0x37, 0x39, 0x12, 0x69, 0x2c, 0xbd, 0xe3, 0x57, 0x10, 0xea, 0xbc, 0x93, 0x4a, 0xbb, 0x6c, 0xa8, 0x8d, 0xcf, 0x42, 0x68, 0x59, 0x8b, 0xfd, 0x69, 0x5b, 0x0e, 0x2f,
0xaa, 0x91, 0x58, 0xcf, 0xa5, 0x33, 0x77, 0x37, 0xf0, 0xff, 0xf0, 0x08, 0x3c, 0x82, 0xd6, 0xe6, 0x76, 0xe1, 0xfd, 0xd9, 0x45, 0x0f, 0x02, 0x55, 0x6c, 0xab, 0x54, 0x62, 0x8c, 0x90, 0x3b, 0xa2,
0x31, 0xf9, 0x47, 0xff, 0xa7, 0x84, 0xbd, 0x9c, 0x7d, 0xed, 0xfb, 0xec, 0x7b, 0xdf, 0x67, 0x3f, 0x37, 0xe0, 0xab, 0xb4, 0x28, 0x25, 0x06, 0xe9, 0x72, 0x0b, 0x8f, 0x77, 0xd0, 0x3e, 0xbd, 0x10,
0xfb, 0x3e, 0x9b, 0x46, 0xf4, 0xbc, 0x0f, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x13, 0xcc, 0x1c, 0x0d, 0xa0, 0xb1, 0x7b, 0x89, 0xfe, 0xe1, 0xff, 0x6b, 0x44, 0xde, 0xff, 0x7f, 0x1f, 0xfb, 0xe4,
0xcc, 0xf7, 0x01, 0x00, 0x00, 0xe7, 0xd8, 0x27, 0x87, 0x63, 0x9f, 0xcc, 0x02, 0x7c, 0xfb, 0xe7, 0xdf, 0x00, 0x00, 0x00, 0xff,
0xff, 0xb5, 0x52, 0x37, 0xf2, 0x14, 0x02, 0x00, 0x00,
} }

View File

@ -1789,6 +1789,7 @@ func (k *kataAgent) convertToKataAgentInterface(iface *vcTypes.Interface) *aType
Name: iface.Name, Name: iface.Name,
IPAddresses: k.convertToKataAgentIPAddresses(iface.IPAddresses), IPAddresses: k.convertToKataAgentIPAddresses(iface.IPAddresses),
Mtu: iface.Mtu, Mtu: iface.Mtu,
RawFlags: iface.RawFlags,
HwAddr: iface.HwAddr, HwAddr: iface.HwAddr,
PciAddr: iface.PciAddr, PciAddr: iface.PciAddr,
} }

View File

@ -1143,11 +1143,13 @@ func generateInterfacesAndRoutes(networkNS NetworkNamespace) ([]*vcTypes.Interfa
} }
ipAddresses = append(ipAddresses, &ipAddress) ipAddresses = append(ipAddresses, &ipAddress)
} }
noarp := endpoint.Properties().Iface.RawFlags & unix.IFF_NOARP
ifc := vcTypes.Interface{ ifc := vcTypes.Interface{
IPAddresses: ipAddresses, IPAddresses: ipAddresses,
Device: endpoint.Name(), Device: endpoint.Name(),
Name: endpoint.Name(), Name: endpoint.Name(),
Mtu: uint64(endpoint.Properties().Iface.MTU), Mtu: uint64(endpoint.Properties().Iface.MTU),
RawFlags: noarp,
HwAddr: endpoint.HardwareAddr(), HwAddr: endpoint.HardwareAddr(),
PciAddr: endpoint.PciAddr(), PciAddr: endpoint.PciAddr(),
} }

View File

@ -18,6 +18,7 @@ type Interface struct {
Name string Name string
IPAddresses []*IPAddress IPAddresses []*IPAddress
Mtu uint64 Mtu uint64
RawFlags uint32
HwAddr string HwAddr string
// pciAddr is the PCI address in the format "bridgeAddr/deviceAddr". // pciAddr is the PCI address in the format "bridgeAddr/deviceAddr".
// Here, bridgeAddr is the address at which the bridge is attached on the root bus, // Here, bridgeAddr is the address at which the bridge is attached on the root bus,