From d87ff838eb0174559c189616c5e6b09c988a5fb1 Mon Sep 17 00:00:00 2001 From: soypat Date: Sat, 9 Oct 2021 17:42:26 -0300 Subject: [PATCH] net: add bare Interface implementation --- src/net/interface.go | 252 ++++++++++++++++++++++++++++++++++++ src/net/interface_tinygo.go | 53 ++++++++ 2 files changed, 305 insertions(+) create mode 100644 src/net/interface.go create mode 100644 src/net/interface_tinygo.go diff --git a/src/net/interface.go b/src/net/interface.go new file mode 100644 index 00000000..74a2650c --- /dev/null +++ b/src/net/interface.go @@ -0,0 +1,252 @@ +// The following is copied from Go 1.16 official implementation. + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package net + +import ( + "errors" + "sync" + "time" +) + +var ( + errInvalidInterface = errors.New("invalid network interface") + errInvalidInterfaceIndex = errors.New("invalid network interface index") + errInvalidInterfaceName = errors.New("invalid network interface name") + errNoSuchInterface = errors.New("no such network interface") + errNoSuchMulticastInterface = errors.New("no such multicast network interface") +) + +// Interface represents a mapping between network interface name +// and index. It also represents network interface facility +// information. +type Interface struct { + Index int // positive integer that starts at one, zero is never used + MTU int // maximum transmission unit + Name string // e.g., "en0", "lo0", "eth0.100" + HardwareAddr HardwareAddr // IEEE MAC-48, EUI-48 and EUI-64 form + Flags Flags // e.g., FlagUp, FlagLoopback, FlagMulticast +} + +type Flags uint + +const ( + FlagUp Flags = 1 << iota // interface is up + FlagBroadcast // interface supports broadcast access capability + FlagLoopback // interface is a loopback interface + FlagPointToPoint // interface belongs to a point-to-point link + FlagMulticast // interface supports multicast access capability +) + +var flagNames = []string{ + "up", + "broadcast", + "loopback", + "pointtopoint", + "multicast", +} + +func (f Flags) String() string { + s := "" + for i, name := range flagNames { + if f&(1<