Moved linux specific code to the syscalls_linux.go file. Also removed unneeded constants from the syscalls_other.go file.

This commit is contained in:
Harshal Sheth 2015-11-07 19:20:00 -05:00
parent d2ac4607bb
commit e3fcc2a155
4 changed files with 37 additions and 36 deletions

22
if.go
View file

@ -15,32 +15,14 @@ type Interface struct {
// If ifName is empty, a default name (tap0, tap1, ... ) will be assigned. // If ifName is empty, a default name (tap0, tap1, ... ) will be assigned.
// ifName should not exceed 16 bytes. // ifName should not exceed 16 bytes.
func NewTAP(ifName string) (ifce *Interface, err error) { func NewTAP(ifName string) (ifce *Interface, err error) {
file, err := os.OpenFile("/dev/net/tun", os.O_RDWR, 0) return newTAP(ifName)
if err != nil {
return nil, err
}
name, err := createInterface(file.Fd(), ifName, cIFF_TAP|cIFF_NO_PI)
if err != nil {
return nil, err
}
ifce = &Interface{isTAP: true, file: file, name: name}
return
} }
// Create a new TUN interface whose name is ifName. // Create a new TUN interface whose name is ifName.
// If ifName is empty, a default name (tap0, tap1, ... ) will be assigned. // If ifName is empty, a default name (tap0, tap1, ... ) will be assigned.
// ifName should not exceed 16 bytes. // ifName should not exceed 16 bytes.
func NewTUN(ifName string) (ifce *Interface, err error) { func NewTUN(ifName string) (ifce *Interface, err error) {
file, err := os.OpenFile("/dev/net/tun", os.O_RDWR, 0) return newTUN(ifName)
if err != nil {
return nil, err
}
name, err := createInterface(file.Fd(), ifName, cIFF_TUN|cIFF_NO_PI)
if err != nil {
return nil, err
}
ifce = &Interface{isTAP: false, file: file, name: name}
return
} }
// Returns true if ifce is a TUN interface, otherwise returns false; // Returns true if ifce is a TUN interface, otherwise returns false;

View file

@ -3,6 +3,7 @@
package water package water
import ( import (
"os"
"strings" "strings"
"syscall" "syscall"
"unsafe" "unsafe"
@ -20,6 +21,32 @@ type ifReq struct {
pad [0x28 - 0x10 - 2]byte pad [0x28 - 0x10 - 2]byte
} }
func newTAP(ifName string) (ifce *Interface, err error) {
file, err := os.OpenFile("/dev/net/tun", os.O_RDWR, 0)
if err != nil {
return nil, err
}
name, err := createInterface(file.Fd(), ifName, cIFF_TAP|cIFF_NO_PI)
if err != nil {
return nil, err
}
ifce = &Interface{isTAP: true, file: file, name: name}
return
}
func newTUN(ifName string) (ifce *Interface, err error) {
file, err := os.OpenFile("/dev/net/tun", os.O_RDWR, 0)
if err != nil {
return nil, err
}
name, err := createInterface(file.Fd(), ifName, cIFF_TUN|cIFF_NO_PI)
if err != nil {
return nil, err
}
ifce = &Interface{isTAP: false, file: file, name: name}
return
}
func createInterface(fd uintptr, ifName string, flags uint16) (createdIFName string, err error) { func createInterface(fd uintptr, ifName string, flags uint16) (createdIFName string, err error) {
var req ifReq var req ifReq
req.Flags = flags req.Flags = flags

View file

@ -2,18 +2,10 @@
package water package water
const ( func newTAP(ifName string) (ifce *Interface, err error) {
cIFF_TUN = 0 panic("water: tap interface not implemented on this platform")
cIFF_TAP = 0
cIFF_NO_PI = 0
)
type ifReq struct {
Name [0]byte
Flags uint16
pad [0]byte
} }
func createInterface(fd uintptr, ifName string, flags uint16) (createdIFName string, err error) { func newTUN(ifName string) (ifce *Interface, err error) {
panic("water: createInterface not implemented on this platform") panic("water: tap interface not implemented on this platform")
} }

View file

@ -8,10 +8,10 @@ TAP - MAC Frame:
+----------------------------------------------------------------------------- +-----------------------------------------------------------------------------
| Octet |00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|... | Octet |00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|...
+----------------------------------------------------------------------------- +-----------------------------------------------------------------------------
| Field | MAC Destination | MAC Source |EType| Payload | Field | MAC Destination | MAC Source |EType| Payload
+----------------------------------------------------------------------------- +-----------------------------------------------------------------------------
Single-Tagged -- Octets [12,13] == {0x81, 0x00} Single-Tagged -- Octets [12,13] == {0x81, 0x00}
+----------------------------------------------------------------------------- +-----------------------------------------------------------------------------
| Octet |00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|... | Octet |00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|...
+----------------------------------------------------------------------------- +-----------------------------------------------------------------------------
@ -22,7 +22,7 @@ TAP - MAC Frame:
+----------------------------------------------------------------------------- +-----------------------------------------------------------------------------
| Octet |00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|... | Octet |00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|...
+----------------------------------------------------------------------------- +-----------------------------------------------------------------------------
| Field | MAC Destination | MAC Source | Outer Tag | Inner Tag | Payload | Field | MAC Destination | MAC Source | Outer Tag | Inner Tag | Payload
+----------------------------------------------------------------------------- +-----------------------------------------------------------------------------
TUN - IPv4 Packet: TUN - IPv4 Packet: