mirror of
https://github.com/yggdrasil-network/water.git
synced 2025-06-15 21:55:09 +03:00
Merge pull request #24 from ArroyoNetworks/master
darwin: Detect IP Version for NULL Header on Write
This commit is contained in:
commit
b85af41468
1 changed files with 15 additions and 1 deletions
|
@ -151,6 +151,11 @@ func (t *tunReadCloser) Read(to []byte) (int, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *tunReadCloser) Write(from []byte) (int, error) {
|
func (t *tunReadCloser) Write(from []byte) (int, error) {
|
||||||
|
|
||||||
|
if len(from) == 0 {
|
||||||
|
return 0, syscall.EIO
|
||||||
|
}
|
||||||
|
|
||||||
t.wMu.Lock()
|
t.wMu.Lock()
|
||||||
defer t.wMu.Unlock()
|
defer t.wMu.Unlock()
|
||||||
|
|
||||||
|
@ -159,7 +164,16 @@ func (t *tunReadCloser) Write(from []byte) (int, error) {
|
||||||
}
|
}
|
||||||
t.wBuf = t.wBuf[:len(from)+4]
|
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)
|
copy(t.wBuf[4:], from)
|
||||||
|
|
||||||
n, err := t.f.Write(t.wBuf)
|
n, err := t.f.Write(t.wBuf)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue