diff --git a/lif/address.go b/lif/address.go
index f9369a1..8eaddb5 100644
--- a/lif/address.go
+++ b/lif/address.go
@@ -9,9 +9,8 @@
 
 import (
 	"errors"
+	"syscall"
 	"unsafe"
-
-	"golang.org/x/sys/unix"
 )
 
 // An Addr represents an address associated with packet routing.
@@ -27,7 +26,7 @@
 }
 
 // Family implements the Family method of Addr interface.
-func (a *Inet4Addr) Family() int { return unix.AF_INET }
+func (a *Inet4Addr) Family() int { return syscall.AF_INET }
 
 // An Inet6Addr represents an internet address for IPv6.
 type Inet6Addr struct {
@@ -37,7 +36,7 @@
 }
 
 // Family implements the Family method of Addr interface.
-func (a *Inet6Addr) Family() int { return unix.AF_INET6 }
+func (a *Inet6Addr) Family() int { return syscall.AF_INET6 }
 
 // Addrs returns a list of interface addresses.
 //
@@ -64,7 +63,7 @@
 			lifr.Name[i] = int8(ll.Name[i])
 		}
 		for _, ep := range eps {
-			ioc := int64(unix.SIOCGLIFADDR)
+			ioc := int64(syscall.SIOCGLIFADDR)
 			err := ioctl(ep.s, uintptr(ioc), unsafe.Pointer(&lifr))
 			if err != nil {
 				continue
@@ -75,11 +74,11 @@
 				continue
 			}
 			switch sa.Family {
-			case unix.AF_INET:
+			case syscall.AF_INET:
 				a := &Inet4Addr{PrefixLen: l}
 				copy(a.IP[:], lifr.Lifru[4:8])
 				as = append(as, a)
-			case unix.AF_INET6:
+			case syscall.AF_INET6:
 				a := &Inet6Addr{PrefixLen: l, ZoneID: int(nativeEndian.Uint32(lifr.Lifru[24:28]))}
 				copy(a.IP[:], lifr.Lifru[8:24])
 				as = append(as, a)
diff --git a/lif/address_test.go b/lif/address_test.go
index 6128bd2..fdaa7f3 100644
--- a/lif/address_test.go
+++ b/lif/address_test.go
@@ -9,20 +9,19 @@
 
 import (
 	"fmt"
+	"syscall"
 	"testing"
-
-	"golang.org/x/sys/unix"
 )
 
 type addrFamily int
 
 func (af addrFamily) String() string {
 	switch af {
-	case unix.AF_UNSPEC:
+	case syscall.AF_UNSPEC:
 		return "unspec"
-	case unix.AF_INET:
+	case syscall.AF_INET:
 		return "inet4"
-	case unix.AF_INET6:
+	case syscall.AF_INET6:
 		return "inet6"
 	default:
 		return fmt.Sprintf("%d", af)
@@ -83,7 +82,7 @@
 func addrPacks() ([]addrPack, error) {
 	var lastErr error
 	var aps []addrPack
-	for _, af := range [...]int{unix.AF_UNSPEC, unix.AF_INET, unix.AF_INET6} {
+	for _, af := range [...]int{syscall.AF_UNSPEC, syscall.AF_INET, syscall.AF_INET6} {
 		as, err := Addrs(af, "")
 		if err != nil {
 			lastErr = err
diff --git a/lif/lif.go b/lif/lif.go
index 6bf6bd3..f1fce48 100644
--- a/lif/lif.go
+++ b/lif/lif.go
@@ -13,8 +13,6 @@
 
 import (
 	"syscall"
-
-	"golang.org/x/sys/unix"
 )
 
 type endpoint struct {
@@ -29,12 +27,12 @@
 func newEndpoints(af int) ([]endpoint, error) {
 	var lastErr error
 	var eps []endpoint
-	afs := []int{unix.AF_INET, unix.AF_INET6}
-	if af != unix.AF_UNSPEC {
+	afs := []int{syscall.AF_INET, syscall.AF_INET6}
+	if af != syscall.AF_UNSPEC {
 		afs = []int{af}
 	}
 	for _, af := range afs {
-		s, err := syscall.Socket(af, unix.SOCK_DGRAM, 0)
+		s, err := syscall.Socket(af, syscall.SOCK_DGRAM, 0)
 		if err != nil {
 			lastErr = err
 			continue
diff --git a/lif/link.go b/lif/link.go
index 6ae5174..00b7854 100644
--- a/lif/link.go
+++ b/lif/link.go
@@ -8,9 +8,8 @@
 package lif
 
 import (
+	"syscall"
 	"unsafe"
-
-	"golang.org/x/sys/unix"
 )
 
 // A Link represents logical data link information.
@@ -34,22 +33,22 @@
 	for i := 0; i < len(ll.Name); i++ {
 		lifr.Name[i] = int8(ll.Name[i])
 	}
-	ioc := int64(unix.SIOCGLIFINDEX)
+	ioc := int64(syscall.SIOCGLIFINDEX)
 	if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil {
 		ll.Index = int(nativeEndian.Uint32(lifr.Lifru[:4]))
 	}
-	ioc = int64(unix.SIOCGLIFFLAGS)
+	ioc = int64(syscall.SIOCGLIFFLAGS)
 	if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil {
 		ll.Flags = int(nativeEndian.Uint64(lifr.Lifru[:8]))
 	}
-	ioc = int64(unix.SIOCGLIFMTU)
+	ioc = int64(syscall.SIOCGLIFMTU)
 	if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil {
 		ll.MTU = int(nativeEndian.Uint32(lifr.Lifru[:4]))
 	}
 	switch ll.Type {
-	case unix.IFT_IPV4, unix.IFT_IPV6, unix.IFT_6TO4:
+	case syscall.IFT_IPV4, syscall.IFT_IPV6, syscall.IFT_6TO4:
 	default:
-		ioc = int64(unix.SIOCGLIFHWADDR)
+		ioc = int64(syscall.SIOCGLIFHWADDR)
 		if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil {
 			ll.Addr, _ = parseLinkAddr(lifr.Lifru[4:])
 		}
@@ -79,7 +78,7 @@
 	lifc := lifconf{Flags: sysLIFC_NOXMIT | sysLIFC_TEMPORARY | sysLIFC_ALLZONES | sysLIFC_UNDER_IPMP}
 	for _, ep := range eps {
 		lifn.Family = uint16(ep.af)
-		ioc := int64(unix.SIOCGLIFNUM)
+		ioc := int64(syscall.SIOCGLIFNUM)
 		if err := ioctl(ep.s, uintptr(ioc), unsafe.Pointer(&lifn)); err != nil {
 			continue
 		}
@@ -94,7 +93,7 @@
 		} else {
 			nativeEndian.PutUint32(lifc.Lifcu[:], uint32(uintptr(unsafe.Pointer(&b[0]))))
 		}
-		ioc = int64(unix.SIOCGLIFCONF)
+		ioc = int64(syscall.SIOCGLIFCONF)
 		if err := ioctl(ep.s, uintptr(ioc), unsafe.Pointer(&lifc)); err != nil {
 			continue
 		}
diff --git a/lif/link_test.go b/lif/link_test.go
index 8f2a04c..40b3f3f 100644
--- a/lif/link_test.go
+++ b/lif/link_test.go
@@ -9,9 +9,8 @@
 
 import (
 	"fmt"
+	"syscall"
 	"testing"
-
-	"golang.org/x/sys/unix"
 )
 
 func (ll *Link) String() string {
@@ -26,7 +25,7 @@
 func linkPacks() ([]linkPack, error) {
 	var lastErr error
 	var lps []linkPack
-	for _, af := range [...]int{unix.AF_UNSPEC, unix.AF_INET, unix.AF_INET6} {
+	for _, af := range [...]int{syscall.AF_UNSPEC, syscall.AF_INET, syscall.AF_INET6} {
 		lls, err := Links(af, "")
 		if err != nil {
 			lastErr = err
