Matt Layher
6 years ago
committed by
Ben Kochie
10 changed files with 608 additions and 182 deletions
@ -0,0 +1,71 @@
|
||||
package netlink |
||||
|
||||
import ( |
||||
"fmt" |
||||
"log" |
||||
"os" |
||||
"strconv" |
||||
"strings" |
||||
) |
||||
|
||||
var ( |
||||
// Arguments used to create a debugger.
|
||||
debugArgs []string |
||||
) |
||||
|
||||
func init() { |
||||
// Is netlink debugging enabled?
|
||||
s := os.Getenv("NLDEBUG") |
||||
if s == "" { |
||||
return |
||||
} |
||||
|
||||
debugArgs = strings.Split(s, ",") |
||||
} |
||||
|
||||
// A debugger is used to provide debugging information about a netlink connection.
|
||||
type debugger struct { |
||||
Log *log.Logger |
||||
Level int |
||||
} |
||||
|
||||
// newDebugger creates a debugger by parsing key=value arguments.
|
||||
func newDebugger(args []string) *debugger { |
||||
d := &debugger{ |
||||
Log: log.New(os.Stderr, "nl: ", 0), |
||||
Level: 1, |
||||
} |
||||
|
||||
for _, a := range args { |
||||
kv := strings.Split(a, "=") |
||||
if len(kv) != 2 { |
||||
// Ignore malformed pairs and assume callers wants defaults.
|
||||
continue |
||||
} |
||||
|
||||
switch kv[0] { |
||||
// Select the log level for the debugger.
|
||||
case "level": |
||||
level, err := strconv.Atoi(kv[1]) |
||||
if err != nil { |
||||
panicf("netlink: invalid NLDEBUG level: %q", a) |
||||
} |
||||
|
||||
d.Level = level |
||||
} |
||||
} |
||||
|
||||
return d |
||||
} |
||||
|
||||
// debugf prints debugging information at the specified level, if d.Level is
|
||||
// high enough to print the message.
|
||||
func (d *debugger) debugf(level int, format string, v ...interface{}) { |
||||
if d.Level >= level { |
||||
d.Log.Printf(format, v...) |
||||
} |
||||
} |
||||
|
||||
func panicf(format string, a ...interface{}) { |
||||
panic(fmt.Sprintf(format, a...)) |
||||
} |
@ -1,2 +1,22 @@
|
||||
// Package netlink provides low-level access to Linux netlink sockets.
|
||||
//
|
||||
//
|
||||
// Debugging
|
||||
//
|
||||
// This package supports rudimentary netlink connection debugging support.
|
||||
// To enable this, run your binary with the NLDEBUG environment variable set.
|
||||
// Debugging information will be output to stderr with a prefix of "nl:".
|
||||
//
|
||||
// To use the debugging defaults, use:
|
||||
//
|
||||
// $ NLDEBUG=1 ./nlctl
|
||||
//
|
||||
// To configure individual aspects of the debugger, pass key/value options such
|
||||
// as:
|
||||
//
|
||||
// $ NLDEBUG=level=1 ./nlctl
|
||||
//
|
||||
// Available key/value debugger options include:
|
||||
//
|
||||
// level=N: specify the debugging level (only "1" is currently supported)
|
||||
package netlink |
||||
|
@ -0,0 +1,16 @@
|
||||
package nlenc |
||||
|
||||
import ( |
||||
"encoding/binary" |
||||
) |
||||
|
||||
// NativeEndian returns the native byte order of this system.
|
||||
func NativeEndian() binary.ByteOrder { |
||||
// Determine endianness by storing a uint16 in a byte slice.
|
||||
b := Uint16Bytes(1) |
||||
if b[0] == 1 { |
||||
return binary.LittleEndian |
||||
} |
||||
|
||||
return binary.BigEndian |
||||
} |
Loading…
Reference in new issue