diff --git a/syscalls_darwin.go b/syscalls_darwin.go index df2b285..3bdbc50 100644 --- a/syscalls_darwin.go +++ b/syscalls_darwin.go @@ -159,7 +159,16 @@ func (t *tunReadCloser) Write(from []byte) (int, error) { } t.wBuf = t.wBuf[:len(from)+4] - t.wBuf[3] = 2 // Family: IP (2) + // Determine the IP Family for the NULL L2 Header + ipVer := from[0] >> 4 + if ipVer == 4 { + t.wBuf[3] = syscall.AF_INET + } else if ipVer == 6 { + t.wBuf[3] = syscall.AF_INET6 + } else { + return 0, errors.New("Unable to determine IP version from packet.") + } + copy(t.wBuf[4:], from) n, err := t.f.Write(t.wBuf)