mirror of
https://github.com/yggdrasil-network/water.git
synced 2025-05-19 16:35:10 +03:00
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:
parent
d2ac4607bb
commit
e3fcc2a155
4 changed files with 37 additions and 36 deletions
22
if.go
22
if.go
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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")
|
||||||
}
|
}
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue