mirror of
https://github.com/vishvananda/netlink
synced 2025-03-24 12:07:01 +00:00
Add ipvtap link support
ipvtap is a similar link type as ipvlan with tap interface. This patch enables it just like macvtap. Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
This commit is contained in:
parent
66ddd91f7d
commit
aa68aabe05
13
link.go
13
link.go
@ -456,6 +456,19 @@ func (ipvlan *IPVlan) Type() string {
|
||||
return "ipvlan"
|
||||
}
|
||||
|
||||
// IPVtap - IPVtap is a virtual interfaces based on ipvlan
|
||||
type IPVtap struct {
|
||||
IPVlan
|
||||
}
|
||||
|
||||
func (ipvtap *IPVtap) Attrs() *LinkAttrs {
|
||||
return &ipvtap.LinkAttrs
|
||||
}
|
||||
|
||||
func (ipvtap IPVtap) Type() string {
|
||||
return "ipvtap"
|
||||
}
|
||||
|
||||
// VlanProtocol type
|
||||
type VlanProtocol int
|
||||
|
||||
|
@ -1409,6 +1409,10 @@ func (h *Handle) linkModify(link Link, flags int) error {
|
||||
data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
|
||||
data.AddRtAttr(nl.IFLA_IPVLAN_MODE, nl.Uint16Attr(uint16(link.Mode)))
|
||||
data.AddRtAttr(nl.IFLA_IPVLAN_FLAG, nl.Uint16Attr(uint16(link.Flag)))
|
||||
case *IPVtap:
|
||||
data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
|
||||
data.AddRtAttr(nl.IFLA_IPVLAN_MODE, nl.Uint16Attr(uint16(link.Mode)))
|
||||
data.AddRtAttr(nl.IFLA_IPVLAN_FLAG, nl.Uint16Attr(uint16(link.Flag)))
|
||||
case *Macvlan:
|
||||
if link.Mode != MACVLAN_MODE_DEFAULT {
|
||||
data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
|
||||
@ -1680,6 +1684,8 @@ func LinkDeserialize(hdr *unix.NlMsghdr, m []byte) (Link, error) {
|
||||
link = &Bond{}
|
||||
case "ipvlan":
|
||||
link = &IPVlan{}
|
||||
case "ipvtap":
|
||||
link = &IPVtap{}
|
||||
case "macvlan":
|
||||
link = &Macvlan{}
|
||||
case "macvtap":
|
||||
@ -1731,6 +1737,8 @@ func LinkDeserialize(hdr *unix.NlMsghdr, m []byte) (Link, error) {
|
||||
parseBondData(link, data)
|
||||
case "ipvlan":
|
||||
parseIPVlanData(link, data)
|
||||
case "ipvtap":
|
||||
parseIPVtapData(link, data)
|
||||
case "macvlan":
|
||||
parseMacvlanData(link, data)
|
||||
case "macvtap":
|
||||
@ -2416,6 +2424,18 @@ func parseIPVlanData(link Link, data []syscall.NetlinkRouteAttr) {
|
||||
}
|
||||
}
|
||||
|
||||
func parseIPVtapData(link Link, data []syscall.NetlinkRouteAttr) {
|
||||
ipv := link.(*IPVtap)
|
||||
for _, datum := range data {
|
||||
switch datum.Attr.Type {
|
||||
case nl.IFLA_IPVLAN_MODE:
|
||||
ipv.Mode = IPVlanMode(native.Uint32(datum.Value[0:4]))
|
||||
case nl.IFLA_IPVLAN_FLAG:
|
||||
ipv.Flag = IPVlanFlag(native.Uint32(datum.Value[0:4]))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func parseMacvtapData(link Link, data []syscall.NetlinkRouteAttr) {
|
||||
macv := link.(*Macvtap)
|
||||
parseMacvlanData(&macv.Macvlan, data)
|
||||
|
Loading…
Reference in New Issue
Block a user