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

View File

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

View File

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

View File

@ -18,6 +18,7 @@ type Interface struct {
Name string
IPAddresses []*IPAddress
Mtu uint64
RawFlags uint32
HwAddr string
// 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,