()
| 108 | } |
| 109 | |
| 110 | func createNetlinkSocket() (int, error) { |
| 111 | sock, err := unix.Socket(unix.AF_NETLINK, unix.SOCK_RAW|unix.SOCK_CLOEXEC, unix.NETLINK_ROUTE) |
| 112 | if err != nil { |
| 113 | return -1, err |
| 114 | } |
| 115 | saddr := &unix.SockaddrNetlink{ |
| 116 | Family: unix.AF_NETLINK, |
| 117 | Groups: unix.RTMGRP_LINK | unix.RTMGRP_IPV4_IFADDR | unix.RTMGRP_IPV6_IFADDR, |
| 118 | } |
| 119 | err = unix.Bind(sock, saddr) |
| 120 | if err != nil { |
| 121 | return -1, err |
| 122 | } |
| 123 | return sock, nil |
| 124 | } |
| 125 | |
| 126 | func (tun *NativeTun) routineNetlinkListener() { |
| 127 | defer func() { |
no test coverage detected