@@ -220,12 +220,15 @@ func encodeSockaddr(endpoint net.UDPAddr) func() ([]byte, error) {
220220 return nil , fmt .Errorf ("wglinux: invalid endpoint IP: %s" , endpoint .IP .String ())
221221 }
222222
223+ // Unmap 4in6 addresses to maintain previous compatibility
224+ addr := addrPort .Addr ().Unmap ()
225+
223226 // Is this an IPv6 address?
224- if addrPort . Addr () .Is6 () {
227+ if addr .Is6 () {
225228 sa := unix.RawSockaddrInet6 {
226229 Family : unix .AF_INET6 ,
227230 Port : sockaddrPort (endpoint .Port ),
228- Addr : addrPort . Addr () .As16 (),
231+ Addr : addr .As16 (),
229232 }
230233
231234 return (* (* [unix .SizeofSockaddrInet6 ]byte )(unsafe .Pointer (& sa )))[:], nil
@@ -234,7 +237,7 @@ func encodeSockaddr(endpoint net.UDPAddr) func() ([]byte, error) {
234237 sa := unix.RawSockaddrInet4 {
235238 Family : unix .AF_INET ,
236239 Port : sockaddrPort (endpoint .Port ),
237- Addr : addrPort . Addr () .As4 (),
240+ Addr : addr .As4 (),
238241 }
239242
240243 return (* (* [unix .SizeofSockaddrInet4 ]byte )(unsafe .Pointer (& sa )))[:], nil
@@ -249,16 +252,19 @@ func encodeAllowedIPs(ipns []netip.Prefix) func(ae *netlink.AttributeEncoder) er
249252 return fmt .Errorf ("wglinux: invalid allowed IP: %s" , ipn .Addr ())
250253 }
251254
255+ // Unmap 4in6 addresses to maintain previous compatibility
256+ addr := ipn .Addr ().Unmap ()
257+
252258 family := uint16 (unix .AF_INET6 )
253- if ipn . Addr () .Is4 () {
259+ if addr .Is4 () {
254260 // Make sure address is 4 bytes if IPv4.
255261 family = unix .AF_INET
256262 }
257263
258264 // Netlink arrays use type as an array index.
259265 ae .Nested (uint16 (i ), func (nae * netlink.AttributeEncoder ) error {
260266 nae .Uint16 (unix .WGALLOWEDIP_A_FAMILY , family )
261- nae .Bytes (unix .WGALLOWEDIP_A_IPADDR , ipn . Addr () .AsSlice ())
267+ nae .Bytes (unix .WGALLOWEDIP_A_IPADDR , addr .AsSlice ())
262268
263269 ones := ipn .Bits ()
264270 nae .Uint8 (unix .WGALLOWEDIP_A_CIDR_MASK , uint8 (ones ))
0 commit comments