Skip to content

Commit 9932e51

Browse files
vifinoatomt
authored andcommitted
link: add LinkSetIP6AddrGenMode
1 parent 578e95c commit 9932e51

File tree

4 files changed

+44
-0
lines changed

4 files changed

+44
-0
lines changed

handle_unspecified.go

+4
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,10 @@ func (h *Handle) LinkSetGROIPv4MaxSize(link Link, maxSize int) error {
183183
return ErrNotImplemented
184184
}
185185

186+
func (h *Handle) LinkSetIP6AddrGenMode(link Link, mode int) error {
187+
return ErrNotImplemented
188+
}
189+
186190
func (h *Handle) setProtinfoAttr(link Link, mode bool, attr int) error {
187191
return ErrNotImplemented
188192
}

link_linux.go

+29
Original file line numberDiff line numberDiff line change
@@ -1180,6 +1180,35 @@ func (h *Handle) LinkSetGROIPv4MaxSize(link Link, maxSize int) error {
11801180
return err
11811181
}
11821182

1183+
// LinkSetIP6AddrGenMode sets the IPv6 address generation mode of the link device.
1184+
// Equivalent to: `ip link set $link addrgenmode $mode`
1185+
func LinkSetIP6AddrGenMode(link Link, mode int) error {
1186+
return pkgHandle.LinkSetIP6AddrGenMode(link, mode)
1187+
}
1188+
1189+
// LinkSetIP6AddrGenMode sets the IPv6 address generation mode of the link device.
1190+
// Equivalent to: `ip link set $link addrgenmode $mode`
1191+
func (h *Handle) LinkSetIP6AddrGenMode(link Link, mode int) error {
1192+
base := link.Attrs()
1193+
h.ensureIndex(base)
1194+
req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
1195+
1196+
msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
1197+
msg.Index = int32(base.Index)
1198+
req.AddData(msg)
1199+
1200+
b := make([]byte, 1)
1201+
b[0] = uint8(mode)
1202+
1203+
data := nl.NewRtAttr(unix.IFLA_INET6_ADDR_GEN_MODE, b)
1204+
af := nl.NewRtAttr(unix.AF_INET6, data.Serialize())
1205+
spec := nl.NewRtAttr(unix.IFLA_AF_SPEC, af.Serialize())
1206+
req.AddData(spec)
1207+
1208+
_, err := req.Execute(unix.NETLINK_ROUTE, 0)
1209+
return err
1210+
}
1211+
11831212
func boolAttr(val bool) []byte {
11841213
var v uint8
11851214
if val {

netlink_unspecified.go

+4
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,10 @@ func LinkSetGROIPv4MaxSize(link Link, maxSize int) error {
144144
return ErrNotImplemented
145145
}
146146

147+
func LinkSetIP6AddrGenMode(link Link, mode int) error {
148+
return ErrNotImplemented
149+
}
150+
147151
func LinkAdd(link Link) error {
148152
return ErrNotImplemented
149153
}

nl/link_linux.go

+7
Original file line numberDiff line numberDiff line change
@@ -814,3 +814,10 @@ const (
814814
IFLA_BAREUDP_MULTIPROTO_MODE
815815
IFLA_BAREUDP_MAX = IFLA_BAREUDP_MULTIPROTO_MODE
816816
)
817+
818+
const (
819+
IN6_ADDR_GEN_MODE_EUI64 = iota
820+
IN6_ADDR_GEN_MODE_NONE
821+
IN6_ADDR_GEN_MODE_STABLE_PRIVACY
822+
IN6_ADDR_GEN_MODE_RANDOM
823+
)

0 commit comments

Comments
 (0)