mirror of
https://github.com/vishvananda/netlink.git
synced 2025-10-04 23:42:54 +08: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:

committed by
Alessandro Boch

parent
66ddd91f7d
commit
aa68aabe05
13
link.go
13
link.go
@@ -456,6 +456,19 @@ func (ipvlan *IPVlan) Type() string {
|
|||||||
return "ipvlan"
|
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
|
// VlanProtocol type
|
||||||
type VlanProtocol int
|
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 := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
|
||||||
data.AddRtAttr(nl.IFLA_IPVLAN_MODE, nl.Uint16Attr(uint16(link.Mode)))
|
data.AddRtAttr(nl.IFLA_IPVLAN_MODE, nl.Uint16Attr(uint16(link.Mode)))
|
||||||
data.AddRtAttr(nl.IFLA_IPVLAN_FLAG, nl.Uint16Attr(uint16(link.Flag)))
|
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:
|
case *Macvlan:
|
||||||
if link.Mode != MACVLAN_MODE_DEFAULT {
|
if link.Mode != MACVLAN_MODE_DEFAULT {
|
||||||
data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
|
data := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)
|
||||||
@@ -1680,6 +1684,8 @@ func LinkDeserialize(hdr *unix.NlMsghdr, m []byte) (Link, error) {
|
|||||||
link = &Bond{}
|
link = &Bond{}
|
||||||
case "ipvlan":
|
case "ipvlan":
|
||||||
link = &IPVlan{}
|
link = &IPVlan{}
|
||||||
|
case "ipvtap":
|
||||||
|
link = &IPVtap{}
|
||||||
case "macvlan":
|
case "macvlan":
|
||||||
link = &Macvlan{}
|
link = &Macvlan{}
|
||||||
case "macvtap":
|
case "macvtap":
|
||||||
@@ -1731,6 +1737,8 @@ func LinkDeserialize(hdr *unix.NlMsghdr, m []byte) (Link, error) {
|
|||||||
parseBondData(link, data)
|
parseBondData(link, data)
|
||||||
case "ipvlan":
|
case "ipvlan":
|
||||||
parseIPVlanData(link, data)
|
parseIPVlanData(link, data)
|
||||||
|
case "ipvtap":
|
||||||
|
parseIPVtapData(link, data)
|
||||||
case "macvlan":
|
case "macvlan":
|
||||||
parseMacvlanData(link, data)
|
parseMacvlanData(link, data)
|
||||||
case "macvtap":
|
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) {
|
func parseMacvtapData(link Link, data []syscall.NetlinkRouteAttr) {
|
||||||
macv := link.(*Macvtap)
|
macv := link.(*Macvtap)
|
||||||
parseMacvlanData(&macv.Macvlan, data)
|
parseMacvlanData(&macv.Macvlan, data)
|
||||||
|
Reference in New Issue
Block a user