diff options
| author | Ondřej Surý <ondrej@sury.org> | 2011-06-30 15:34:22 +0200 | 
|---|---|---|
| committer | Ondřej Surý <ondrej@sury.org> | 2011-06-30 15:34:22 +0200 | 
| commit | d39f5aa373a4422f7a5f3ee764fb0f6b0b719d61 (patch) | |
| tree | 1833f8b72a4b3a8f00d0d143b079a8fcad01c6ae /src/pkg/net/interface.go | |
| parent | 8652e6c371b8905498d3d314491d36c58d5f68d5 (diff) | |
| download | golang-d39f5aa373a4422f7a5f3ee764fb0f6b0b719d61.tar.gz | |
Imported Upstream version 58upstream/58
Diffstat (limited to 'src/pkg/net/interface.go')
| -rw-r--r-- | src/pkg/net/interface.go | 89 | 
1 files changed, 89 insertions, 0 deletions
| diff --git a/src/pkg/net/interface.go b/src/pkg/net/interface.go new file mode 100644 index 000000000..f622487ab --- /dev/null +++ b/src/pkg/net/interface.go @@ -0,0 +1,89 @@ +// 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. + +// Network interface identification + +package net + +import ( +	"bytes" +	"fmt" +	"os" +) + +// A HardwareAddr represents a physical hardware address. +type HardwareAddr []byte + +func (a HardwareAddr) String() string { +	var buf bytes.Buffer +	for i, b := range a { +		if i > 0 { +			buf.WriteByte(':') +		} +		fmt.Fprintf(&buf, "%02x", b) +	} +	return buf.String() +} + +// 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 +	rawFlags     int +} + +// Addrs returns interface addresses for a specific interface. +func (ifi *Interface) Addrs() ([]Addr, os.Error) { +	if ifi == nil { +		return nil, os.NewError("net: invalid interface") +	} +	return interfaceAddrTable(ifi.Index) +} + +// Interfaces returns a list of the systems's network interfaces. +func Interfaces() ([]Interface, os.Error) { +	return interfaceTable(0) +} + +// InterfaceAddrs returns a list of the system's network interface +// addresses. +func InterfaceAddrs() ([]Addr, os.Error) { +	return interfaceAddrTable(0) +} + +// InterfaceByIndex returns the interface specified by index. +func InterfaceByIndex(index int) (*Interface, os.Error) { +	if index <= 0 { +		return nil, os.NewError("net: invalid interface index") +	} +	ift, err := interfaceTable(index) +	if err != nil { +		return nil, err +	} +	for _, ifi := range ift { +		return &ifi, nil +	} +	return nil, os.NewError("net: no such interface") +} + +// InterfaceByName returns the interface specified by name. +func InterfaceByName(name string) (*Interface, os.Error) { +	if name == "" { +		return nil, os.NewError("net: invalid interface name") +	} +	ift, err := interfaceTable(0) +	if err != nil { +		return nil, err +	} +	for _, ifi := range ift { +		if name == ifi.Name { +			return &ifi, nil +		} +	} +	return nil, os.NewError("net: no such interface") +} | 
