Merge branch 'master' into find_cert

This commit is contained in:
Boshi LIAN
2021-02-04 10:46:19 -08:00
20 changed files with 1779 additions and 61 deletions

102
execabs/execabs.go Normal file
View File

@@ -0,0 +1,102 @@
// Copyright 2020 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 execabs is a drop-in replacement for os/exec
// that requires PATH lookups to find absolute paths.
// That is, execabs.Command("cmd") runs the same PATH lookup
// as exec.Command("cmd"), but if the result is a path
// which is relative, the Run and Start methods will report
// an error instead of running the executable.
//
// See https://blog.golang.org/path-security for more information
// about when it may be necessary or appropriate to use this package.
package execabs
import (
"context"
"fmt"
"os/exec"
"path/filepath"
"reflect"
"unsafe"
)
// ErrNotFound is the error resulting if a path search failed to find an executable file.
// It is an alias for exec.ErrNotFound.
var ErrNotFound = exec.ErrNotFound
// Cmd represents an external command being prepared or run.
// It is an alias for exec.Cmd.
type Cmd = exec.Cmd
// Error is returned by LookPath when it fails to classify a file as an executable.
// It is an alias for exec.Error.
type Error = exec.Error
// An ExitError reports an unsuccessful exit by a command.
// It is an alias for exec.ExitError.
type ExitError = exec.ExitError
func relError(file, path string) error {
return fmt.Errorf("%s resolves to executable in current directory (.%c%s)", file, filepath.Separator, path)
}
// LookPath searches for an executable named file in the directories
// named by the PATH environment variable. If file contains a slash,
// it is tried directly and the PATH is not consulted. The result will be
// an absolute path.
//
// LookPath differs from exec.LookPath in its handling of PATH lookups,
// which are used for file names without slashes. If exec.LookPath's
// PATH lookup would have returned an executable from the current directory,
// LookPath instead returns an error.
func LookPath(file string) (string, error) {
path, err := exec.LookPath(file)
if err != nil {
return "", err
}
if filepath.Base(file) == file && !filepath.IsAbs(path) {
return "", relError(file, path)
}
return path, nil
}
func fixCmd(name string, cmd *exec.Cmd) {
if filepath.Base(name) == name && !filepath.IsAbs(cmd.Path) {
// exec.Command was called with a bare binary name and
// exec.LookPath returned a path which is not absolute.
// Set cmd.lookPathErr and clear cmd.Path so that it
// cannot be run.
lookPathErr := (*error)(unsafe.Pointer(reflect.ValueOf(cmd).Elem().FieldByName("lookPathErr").Addr().Pointer()))
if *lookPathErr == nil {
*lookPathErr = relError(name, cmd.Path)
}
cmd.Path = ""
}
}
// CommandContext is like Command but includes a context.
//
// The provided context is used to kill the process (by calling os.Process.Kill)
// if the context becomes done before the command completes on its own.
func CommandContext(ctx context.Context, name string, arg ...string) *exec.Cmd {
cmd := exec.CommandContext(ctx, name, arg...)
fixCmd(name, cmd)
return cmd
}
// Command returns the Cmd struct to execute the named program with the given arguments.
// See exec.Command for most details.
//
// Command differs from exec.Command in its handling of PATH lookups,
// which are used when the program name contains no slashes.
// If exec.Command would have returned an exec.Cmd configured to run an
// executable from the current directory, Command instead
// returns an exec.Cmd that will return an error from Start or Run.
func Command(name string, arg ...string) *exec.Cmd {
cmd := exec.Command(name, arg...)
fixCmd(name, cmd)
return cmd
}

132
execabs/execabs_test.go Normal file
View File

@@ -0,0 +1,132 @@
// Copyright 2020 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 execabs
import (
"context"
"fmt"
"io/ioutil"
"os"
"os/exec"
"path/filepath"
"runtime"
"testing"
)
// hasExec reports whether the current system can start new processes
// using os.StartProcess or (more commonly) exec.Command.
// Copied from internal/testenv.HasExec
func hasExec() bool {
switch runtime.GOOS {
case "js", "ios":
return false
}
return true
}
// mustHaveExec checks that the current system can start new processes
// using os.StartProcess or (more commonly) exec.Command.
// If not, mustHaveExec calls t.Skip with an explanation.
// Copied from internal/testenv.MustHaveExec
func mustHaveExec(t testing.TB) {
if !hasExec() {
t.Skipf("skipping test: cannot exec subprocess on %s/%s", runtime.GOOS, runtime.GOARCH)
}
}
func TestFixCmd(t *testing.T) {
cmd := &exec.Cmd{Path: "hello"}
fixCmd("hello", cmd)
if cmd.Path != "" {
t.Errorf("fixCmd didn't clear cmd.Path")
}
expectedErr := fmt.Sprintf("hello resolves to executable in current directory (.%chello)", filepath.Separator)
if err := cmd.Run(); err == nil {
t.Fatal("Command.Run didn't fail")
} else if err.Error() != expectedErr {
t.Fatalf("Command.Run returned unexpected error: want %q, got %q", expectedErr, err.Error())
}
}
func TestCommand(t *testing.T) {
mustHaveExec(t)
for _, cmd := range []func(string) *Cmd{
func(s string) *Cmd { return Command(s) },
func(s string) *Cmd { return CommandContext(context.Background(), s) },
} {
tmpDir, err := ioutil.TempDir("", "execabs-test")
if err != nil {
t.Fatalf("ioutil.TempDir failed: %s", err)
}
defer os.RemoveAll(tmpDir)
executable := "execabs-test"
if runtime.GOOS == "windows" {
executable += ".exe"
}
if err = ioutil.WriteFile(filepath.Join(tmpDir, executable), []byte{1, 2, 3}, 0111); err != nil {
t.Fatalf("ioutil.WriteFile failed: %s", err)
}
cwd, err := os.Getwd()
if err != nil {
t.Fatalf("os.Getwd failed: %s", err)
}
defer os.Chdir(cwd)
if err = os.Chdir(tmpDir); err != nil {
t.Fatalf("os.Chdir failed: %s", err)
}
if runtime.GOOS != "windows" {
// add "." to PATH so that exec.LookPath looks in the current directory on
// non-windows platforms as well
origPath := os.Getenv("PATH")
defer os.Setenv("PATH", origPath)
os.Setenv("PATH", fmt.Sprintf(".:%s", origPath))
}
expectedErr := fmt.Sprintf("execabs-test resolves to executable in current directory (.%c%s)", filepath.Separator, executable)
if err = cmd("execabs-test").Run(); err == nil {
t.Fatalf("Command.Run didn't fail when exec.LookPath returned a relative path")
} else if err.Error() != expectedErr {
t.Errorf("Command.Run returned unexpected error: want %q, got %q", expectedErr, err.Error())
}
}
}
func TestLookPath(t *testing.T) {
mustHaveExec(t)
tmpDir, err := ioutil.TempDir("", "execabs-test")
if err != nil {
t.Fatalf("ioutil.TempDir failed: %s", err)
}
defer os.RemoveAll(tmpDir)
executable := "execabs-test"
if runtime.GOOS == "windows" {
executable += ".exe"
}
if err = ioutil.WriteFile(filepath.Join(tmpDir, executable), []byte{1, 2, 3}, 0111); err != nil {
t.Fatalf("ioutil.WriteFile failed: %s", err)
}
cwd, err := os.Getwd()
if err != nil {
t.Fatalf("os.Getwd failed: %s", err)
}
defer os.Chdir(cwd)
if err = os.Chdir(tmpDir); err != nil {
t.Fatalf("os.Chdir failed: %s", err)
}
if runtime.GOOS != "windows" {
// add "." to PATH so that exec.LookPath looks in the current directory on
// non-windows platforms as well
origPath := os.Getenv("PATH")
defer os.Setenv("PATH", origPath)
os.Setenv("PATH", fmt.Sprintf(".:%s", origPath))
}
expectedErr := fmt.Sprintf("execabs-test resolves to executable in current directory (.%c%s)", filepath.Separator, executable)
if _, err := LookPath("execabs-test"); err == nil {
t.Fatalf("LookPath didn't fail when finding a non-relative path")
} else if err.Error() != expectedErr {
t.Errorf("LookPath returned unexpected error: want %q, got %q", expectedErr, err.Error())
}
}

View File

@@ -88,6 +88,8 @@ struct termios2 {
#include <linux/devlink.h>
#include <linux/dm-ioctl.h>
#include <linux/errqueue.h>
#include <linux/ethtool.h>
#include <linux/ethtool_netlink.h>
#include <linux/fanotify.h>
#include <linux/filter.h>
#include <linux/fs.h>
@@ -3166,3 +3168,468 @@ const (
MPLS_IPTUNNEL_TTL = C.MPLS_IPTUNNEL_TTL
MPLS_IPTUNNEL_MAX = C.MPLS_IPTUNNEL_MAX
)
// ethtool and its netlink interface, generated using:
//
// perl -nlE '/^\s*(ETHTOOL_\w+)/ && say "$1 = C.$1"' ethtool.h
// perl -nlE '/^\s*(ETHTOOL_\w+)/ && say "$1 = C.$1"' ethtool_netlink.h
//
// Note that a couple of constants produced by this command will be duplicated
// by mkerrors.sh, so some manual pruning was necessary.
const (
ETHTOOL_ID_UNSPEC = C.ETHTOOL_ID_UNSPEC
ETHTOOL_RX_COPYBREAK = C.ETHTOOL_RX_COPYBREAK
ETHTOOL_TX_COPYBREAK = C.ETHTOOL_TX_COPYBREAK
ETHTOOL_PFC_PREVENTION_TOUT = C.ETHTOOL_PFC_PREVENTION_TOUT
ETHTOOL_TUNABLE_UNSPEC = C.ETHTOOL_TUNABLE_UNSPEC
ETHTOOL_TUNABLE_U8 = C.ETHTOOL_TUNABLE_U8
ETHTOOL_TUNABLE_U16 = C.ETHTOOL_TUNABLE_U16
ETHTOOL_TUNABLE_U32 = C.ETHTOOL_TUNABLE_U32
ETHTOOL_TUNABLE_U64 = C.ETHTOOL_TUNABLE_U64
ETHTOOL_TUNABLE_STRING = C.ETHTOOL_TUNABLE_STRING
ETHTOOL_TUNABLE_S8 = C.ETHTOOL_TUNABLE_S8
ETHTOOL_TUNABLE_S16 = C.ETHTOOL_TUNABLE_S16
ETHTOOL_TUNABLE_S32 = C.ETHTOOL_TUNABLE_S32
ETHTOOL_TUNABLE_S64 = C.ETHTOOL_TUNABLE_S64
ETHTOOL_PHY_ID_UNSPEC = C.ETHTOOL_PHY_ID_UNSPEC
ETHTOOL_PHY_DOWNSHIFT = C.ETHTOOL_PHY_DOWNSHIFT
ETHTOOL_PHY_FAST_LINK_DOWN = C.ETHTOOL_PHY_FAST_LINK_DOWN
ETHTOOL_PHY_EDPD = C.ETHTOOL_PHY_EDPD
ETHTOOL_LINK_EXT_STATE_AUTONEG = C.ETHTOOL_LINK_EXT_STATE_AUTONEG
ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE = C.ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE
ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH = C.ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH
ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY = C.ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY
ETHTOOL_LINK_EXT_STATE_NO_CABLE = C.ETHTOOL_LINK_EXT_STATE_NO_CABLE
ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE = C.ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE
ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE = C.ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE
ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE = C.ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE
ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED = C.ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED
ETHTOOL_LINK_EXT_STATE_OVERHEAT = C.ETHTOOL_LINK_EXT_STATE_OVERHEAT
ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED = C.ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED
ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED = C.ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED
ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED = C.ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED
ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE = C.ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE
ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE = C.ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE
ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD = C.ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD
ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED = C.ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED
ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT = C.ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT
ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY = C.ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY
ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT = C.ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT
ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK = C.ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK
ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK = C.ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK
ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS = C.ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS
ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED = C.ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED
ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED = C.ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED
ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = C.ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS
ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE = C.ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE
ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE = C.ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE
ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE = C.ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE
ETHTOOL_FLASH_ALL_REGIONS = C.ETHTOOL_FLASH_ALL_REGIONS
ETHTOOL_F_UNSUPPORTED__BIT = C.ETHTOOL_F_UNSUPPORTED__BIT
ETHTOOL_F_WISH__BIT = C.ETHTOOL_F_WISH__BIT
ETHTOOL_F_COMPAT__BIT = C.ETHTOOL_F_COMPAT__BIT
ETHTOOL_FEC_NONE_BIT = C.ETHTOOL_FEC_NONE_BIT
ETHTOOL_FEC_AUTO_BIT = C.ETHTOOL_FEC_AUTO_BIT
ETHTOOL_FEC_OFF_BIT = C.ETHTOOL_FEC_OFF_BIT
ETHTOOL_FEC_RS_BIT = C.ETHTOOL_FEC_RS_BIT
ETHTOOL_FEC_BASER_BIT = C.ETHTOOL_FEC_BASER_BIT
ETHTOOL_FEC_LLRS_BIT = C.ETHTOOL_FEC_LLRS_BIT
ETHTOOL_LINK_MODE_10baseT_Half_BIT = C.ETHTOOL_LINK_MODE_10baseT_Half_BIT
ETHTOOL_LINK_MODE_10baseT_Full_BIT = C.ETHTOOL_LINK_MODE_10baseT_Full_BIT
ETHTOOL_LINK_MODE_100baseT_Half_BIT = C.ETHTOOL_LINK_MODE_100baseT_Half_BIT
ETHTOOL_LINK_MODE_100baseT_Full_BIT = C.ETHTOOL_LINK_MODE_100baseT_Full_BIT
ETHTOOL_LINK_MODE_1000baseT_Half_BIT = C.ETHTOOL_LINK_MODE_1000baseT_Half_BIT
ETHTOOL_LINK_MODE_1000baseT_Full_BIT = C.ETHTOOL_LINK_MODE_1000baseT_Full_BIT
ETHTOOL_LINK_MODE_Autoneg_BIT = C.ETHTOOL_LINK_MODE_Autoneg_BIT
ETHTOOL_LINK_MODE_TP_BIT = C.ETHTOOL_LINK_MODE_TP_BIT
ETHTOOL_LINK_MODE_AUI_BIT = C.ETHTOOL_LINK_MODE_AUI_BIT
ETHTOOL_LINK_MODE_MII_BIT = C.ETHTOOL_LINK_MODE_MII_BIT
ETHTOOL_LINK_MODE_FIBRE_BIT = C.ETHTOOL_LINK_MODE_FIBRE_BIT
ETHTOOL_LINK_MODE_BNC_BIT = C.ETHTOOL_LINK_MODE_BNC_BIT
ETHTOOL_LINK_MODE_10000baseT_Full_BIT = C.ETHTOOL_LINK_MODE_10000baseT_Full_BIT
ETHTOOL_LINK_MODE_Pause_BIT = C.ETHTOOL_LINK_MODE_Pause_BIT
ETHTOOL_LINK_MODE_Asym_Pause_BIT = C.ETHTOOL_LINK_MODE_Asym_Pause_BIT
ETHTOOL_LINK_MODE_2500baseX_Full_BIT = C.ETHTOOL_LINK_MODE_2500baseX_Full_BIT
ETHTOOL_LINK_MODE_Backplane_BIT = C.ETHTOOL_LINK_MODE_Backplane_BIT
ETHTOOL_LINK_MODE_1000baseKX_Full_BIT = C.ETHTOOL_LINK_MODE_1000baseKX_Full_BIT
ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = C.ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT
ETHTOOL_LINK_MODE_10000baseKR_Full_BIT = C.ETHTOOL_LINK_MODE_10000baseKR_Full_BIT
ETHTOOL_LINK_MODE_10000baseR_FEC_BIT = C.ETHTOOL_LINK_MODE_10000baseR_FEC_BIT
ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = C.ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT
ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = C.ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT
ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = C.ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT
ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = C.ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT
ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = C.ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT
ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = C.ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT
ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = C.ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT
ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = C.ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT
ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = C.ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT
ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = C.ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT
ETHTOOL_LINK_MODE_25000baseCR_Full_BIT = C.ETHTOOL_LINK_MODE_25000baseCR_Full_BIT
ETHTOOL_LINK_MODE_25000baseKR_Full_BIT = C.ETHTOOL_LINK_MODE_25000baseKR_Full_BIT
ETHTOOL_LINK_MODE_25000baseSR_Full_BIT = C.ETHTOOL_LINK_MODE_25000baseSR_Full_BIT
ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT = C.ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT
ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT = C.ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT
ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT = C.ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT
ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT = C.ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT
ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT = C.ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT
ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT = C.ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT
ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT = C.ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT
ETHTOOL_LINK_MODE_1000baseX_Full_BIT = C.ETHTOOL_LINK_MODE_1000baseX_Full_BIT
ETHTOOL_LINK_MODE_10000baseCR_Full_BIT = C.ETHTOOL_LINK_MODE_10000baseCR_Full_BIT
ETHTOOL_LINK_MODE_10000baseSR_Full_BIT = C.ETHTOOL_LINK_MODE_10000baseSR_Full_BIT
ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = C.ETHTOOL_LINK_MODE_10000baseLR_Full_BIT
ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = C.ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT
ETHTOOL_LINK_MODE_10000baseER_Full_BIT = C.ETHTOOL_LINK_MODE_10000baseER_Full_BIT
ETHTOOL_LINK_MODE_2500baseT_Full_BIT = C.ETHTOOL_LINK_MODE_2500baseT_Full_BIT
ETHTOOL_LINK_MODE_5000baseT_Full_BIT = C.ETHTOOL_LINK_MODE_5000baseT_Full_BIT
ETHTOOL_LINK_MODE_FEC_NONE_BIT = C.ETHTOOL_LINK_MODE_FEC_NONE_BIT
ETHTOOL_LINK_MODE_FEC_RS_BIT = C.ETHTOOL_LINK_MODE_FEC_RS_BIT
ETHTOOL_LINK_MODE_FEC_BASER_BIT = C.ETHTOOL_LINK_MODE_FEC_BASER_BIT
ETHTOOL_LINK_MODE_50000baseKR_Full_BIT = C.ETHTOOL_LINK_MODE_50000baseKR_Full_BIT
ETHTOOL_LINK_MODE_50000baseSR_Full_BIT = C.ETHTOOL_LINK_MODE_50000baseSR_Full_BIT
ETHTOOL_LINK_MODE_50000baseCR_Full_BIT = C.ETHTOOL_LINK_MODE_50000baseCR_Full_BIT
ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = C.ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT
ETHTOOL_LINK_MODE_50000baseDR_Full_BIT = C.ETHTOOL_LINK_MODE_50000baseDR_Full_BIT
ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = C.ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT
ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = C.ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT
ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = C.ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT
ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = C.ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT
ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = C.ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT
ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = C.ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT
ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = C.ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT
ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = C.ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT
ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = C.ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT
ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = C.ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT
ETHTOOL_LINK_MODE_100baseT1_Full_BIT = C.ETHTOOL_LINK_MODE_100baseT1_Full_BIT
ETHTOOL_LINK_MODE_1000baseT1_Full_BIT = C.ETHTOOL_LINK_MODE_1000baseT1_Full_BIT
ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT = C.ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT
ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT = C.ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT
ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = C.ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT
ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = C.ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT
ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = C.ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT
ETHTOOL_LINK_MODE_FEC_LLRS_BIT = C.ETHTOOL_LINK_MODE_FEC_LLRS_BIT
ETHTOOL_LINK_MODE_100000baseKR_Full_BIT = C.ETHTOOL_LINK_MODE_100000baseKR_Full_BIT
ETHTOOL_LINK_MODE_100000baseSR_Full_BIT = C.ETHTOOL_LINK_MODE_100000baseSR_Full_BIT
ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = C.ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT
ETHTOOL_LINK_MODE_100000baseCR_Full_BIT = C.ETHTOOL_LINK_MODE_100000baseCR_Full_BIT
ETHTOOL_LINK_MODE_100000baseDR_Full_BIT = C.ETHTOOL_LINK_MODE_100000baseDR_Full_BIT
ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = C.ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT
ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = C.ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT
ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = C.ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT
ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = C.ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT
ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = C.ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT
ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = C.ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT
ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = C.ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT
ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = C.ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT
ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = C.ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT
ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = C.ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT
ETHTOOL_LINK_MODE_100baseFX_Half_BIT = C.ETHTOOL_LINK_MODE_100baseFX_Half_BIT
ETHTOOL_LINK_MODE_100baseFX_Full_BIT = C.ETHTOOL_LINK_MODE_100baseFX_Full_BIT
ETHTOOL_MSG_USER_NONE = C.ETHTOOL_MSG_USER_NONE
ETHTOOL_MSG_STRSET_GET = C.ETHTOOL_MSG_STRSET_GET
ETHTOOL_MSG_LINKINFO_GET = C.ETHTOOL_MSG_LINKINFO_GET
ETHTOOL_MSG_LINKINFO_SET = C.ETHTOOL_MSG_LINKINFO_SET
ETHTOOL_MSG_LINKMODES_GET = C.ETHTOOL_MSG_LINKMODES_GET
ETHTOOL_MSG_LINKMODES_SET = C.ETHTOOL_MSG_LINKMODES_SET
ETHTOOL_MSG_LINKSTATE_GET = C.ETHTOOL_MSG_LINKSTATE_GET
ETHTOOL_MSG_DEBUG_GET = C.ETHTOOL_MSG_DEBUG_GET
ETHTOOL_MSG_DEBUG_SET = C.ETHTOOL_MSG_DEBUG_SET
ETHTOOL_MSG_WOL_GET = C.ETHTOOL_MSG_WOL_GET
ETHTOOL_MSG_WOL_SET = C.ETHTOOL_MSG_WOL_SET
ETHTOOL_MSG_FEATURES_GET = C.ETHTOOL_MSG_FEATURES_GET
ETHTOOL_MSG_FEATURES_SET = C.ETHTOOL_MSG_FEATURES_SET
ETHTOOL_MSG_PRIVFLAGS_GET = C.ETHTOOL_MSG_PRIVFLAGS_GET
ETHTOOL_MSG_PRIVFLAGS_SET = C.ETHTOOL_MSG_PRIVFLAGS_SET
ETHTOOL_MSG_RINGS_GET = C.ETHTOOL_MSG_RINGS_GET
ETHTOOL_MSG_RINGS_SET = C.ETHTOOL_MSG_RINGS_SET
ETHTOOL_MSG_CHANNELS_GET = C.ETHTOOL_MSG_CHANNELS_GET
ETHTOOL_MSG_CHANNELS_SET = C.ETHTOOL_MSG_CHANNELS_SET
ETHTOOL_MSG_COALESCE_GET = C.ETHTOOL_MSG_COALESCE_GET
ETHTOOL_MSG_COALESCE_SET = C.ETHTOOL_MSG_COALESCE_SET
ETHTOOL_MSG_PAUSE_GET = C.ETHTOOL_MSG_PAUSE_GET
ETHTOOL_MSG_PAUSE_SET = C.ETHTOOL_MSG_PAUSE_SET
ETHTOOL_MSG_EEE_GET = C.ETHTOOL_MSG_EEE_GET
ETHTOOL_MSG_EEE_SET = C.ETHTOOL_MSG_EEE_SET
ETHTOOL_MSG_TSINFO_GET = C.ETHTOOL_MSG_TSINFO_GET
ETHTOOL_MSG_CABLE_TEST_ACT = C.ETHTOOL_MSG_CABLE_TEST_ACT
ETHTOOL_MSG_CABLE_TEST_TDR_ACT = C.ETHTOOL_MSG_CABLE_TEST_TDR_ACT
ETHTOOL_MSG_TUNNEL_INFO_GET = C.ETHTOOL_MSG_TUNNEL_INFO_GET
ETHTOOL_MSG_USER_MAX = C.ETHTOOL_MSG_USER_MAX
ETHTOOL_MSG_KERNEL_NONE = C.ETHTOOL_MSG_KERNEL_NONE
ETHTOOL_MSG_STRSET_GET_REPLY = C.ETHTOOL_MSG_STRSET_GET_REPLY
ETHTOOL_MSG_LINKINFO_GET_REPLY = C.ETHTOOL_MSG_LINKINFO_GET_REPLY
ETHTOOL_MSG_LINKINFO_NTF = C.ETHTOOL_MSG_LINKINFO_NTF
ETHTOOL_MSG_LINKMODES_GET_REPLY = C.ETHTOOL_MSG_LINKMODES_GET_REPLY
ETHTOOL_MSG_LINKMODES_NTF = C.ETHTOOL_MSG_LINKMODES_NTF
ETHTOOL_MSG_LINKSTATE_GET_REPLY = C.ETHTOOL_MSG_LINKSTATE_GET_REPLY
ETHTOOL_MSG_DEBUG_GET_REPLY = C.ETHTOOL_MSG_DEBUG_GET_REPLY
ETHTOOL_MSG_DEBUG_NTF = C.ETHTOOL_MSG_DEBUG_NTF
ETHTOOL_MSG_WOL_GET_REPLY = C.ETHTOOL_MSG_WOL_GET_REPLY
ETHTOOL_MSG_WOL_NTF = C.ETHTOOL_MSG_WOL_NTF
ETHTOOL_MSG_FEATURES_GET_REPLY = C.ETHTOOL_MSG_FEATURES_GET_REPLY
ETHTOOL_MSG_FEATURES_SET_REPLY = C.ETHTOOL_MSG_FEATURES_SET_REPLY
ETHTOOL_MSG_FEATURES_NTF = C.ETHTOOL_MSG_FEATURES_NTF
ETHTOOL_MSG_PRIVFLAGS_GET_REPLY = C.ETHTOOL_MSG_PRIVFLAGS_GET_REPLY
ETHTOOL_MSG_PRIVFLAGS_NTF = C.ETHTOOL_MSG_PRIVFLAGS_NTF
ETHTOOL_MSG_RINGS_GET_REPLY = C.ETHTOOL_MSG_RINGS_GET_REPLY
ETHTOOL_MSG_RINGS_NTF = C.ETHTOOL_MSG_RINGS_NTF
ETHTOOL_MSG_CHANNELS_GET_REPLY = C.ETHTOOL_MSG_CHANNELS_GET_REPLY
ETHTOOL_MSG_CHANNELS_NTF = C.ETHTOOL_MSG_CHANNELS_NTF
ETHTOOL_MSG_COALESCE_GET_REPLY = C.ETHTOOL_MSG_COALESCE_GET_REPLY
ETHTOOL_MSG_COALESCE_NTF = C.ETHTOOL_MSG_COALESCE_NTF
ETHTOOL_MSG_PAUSE_GET_REPLY = C.ETHTOOL_MSG_PAUSE_GET_REPLY
ETHTOOL_MSG_PAUSE_NTF = C.ETHTOOL_MSG_PAUSE_NTF
ETHTOOL_MSG_EEE_GET_REPLY = C.ETHTOOL_MSG_EEE_GET_REPLY
ETHTOOL_MSG_EEE_NTF = C.ETHTOOL_MSG_EEE_NTF
ETHTOOL_MSG_TSINFO_GET_REPLY = C.ETHTOOL_MSG_TSINFO_GET_REPLY
ETHTOOL_MSG_CABLE_TEST_NTF = C.ETHTOOL_MSG_CABLE_TEST_NTF
ETHTOOL_MSG_CABLE_TEST_TDR_NTF = C.ETHTOOL_MSG_CABLE_TEST_TDR_NTF
ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = C.ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY
ETHTOOL_MSG_KERNEL_MAX = C.ETHTOOL_MSG_KERNEL_MAX
ETHTOOL_A_HEADER_UNSPEC = C.ETHTOOL_A_HEADER_UNSPEC
ETHTOOL_A_HEADER_DEV_INDEX = C.ETHTOOL_A_HEADER_DEV_INDEX
ETHTOOL_A_HEADER_DEV_NAME = C.ETHTOOL_A_HEADER_DEV_NAME
ETHTOOL_A_HEADER_FLAGS = C.ETHTOOL_A_HEADER_FLAGS
ETHTOOL_A_HEADER_MAX = C.ETHTOOL_A_HEADER_MAX
ETHTOOL_A_BITSET_BIT_UNSPEC = C.ETHTOOL_A_BITSET_BIT_UNSPEC
ETHTOOL_A_BITSET_BIT_INDEX = C.ETHTOOL_A_BITSET_BIT_INDEX
ETHTOOL_A_BITSET_BIT_NAME = C.ETHTOOL_A_BITSET_BIT_NAME
ETHTOOL_A_BITSET_BIT_VALUE = C.ETHTOOL_A_BITSET_BIT_VALUE
ETHTOOL_A_BITSET_BIT_MAX = C.ETHTOOL_A_BITSET_BIT_MAX
ETHTOOL_A_BITSET_BITS_UNSPEC = C.ETHTOOL_A_BITSET_BITS_UNSPEC
ETHTOOL_A_BITSET_BITS_BIT = C.ETHTOOL_A_BITSET_BITS_BIT
ETHTOOL_A_BITSET_BITS_MAX = C.ETHTOOL_A_BITSET_BITS_MAX
ETHTOOL_A_BITSET_UNSPEC = C.ETHTOOL_A_BITSET_UNSPEC
ETHTOOL_A_BITSET_NOMASK = C.ETHTOOL_A_BITSET_NOMASK
ETHTOOL_A_BITSET_SIZE = C.ETHTOOL_A_BITSET_SIZE
ETHTOOL_A_BITSET_BITS = C.ETHTOOL_A_BITSET_BITS
ETHTOOL_A_BITSET_VALUE = C.ETHTOOL_A_BITSET_VALUE
ETHTOOL_A_BITSET_MASK = C.ETHTOOL_A_BITSET_MASK
ETHTOOL_A_BITSET_MAX = C.ETHTOOL_A_BITSET_MAX
ETHTOOL_A_STRING_UNSPEC = C.ETHTOOL_A_STRING_UNSPEC
ETHTOOL_A_STRING_INDEX = C.ETHTOOL_A_STRING_INDEX
ETHTOOL_A_STRING_VALUE = C.ETHTOOL_A_STRING_VALUE
ETHTOOL_A_STRING_MAX = C.ETHTOOL_A_STRING_MAX
ETHTOOL_A_STRINGS_UNSPEC = C.ETHTOOL_A_STRINGS_UNSPEC
ETHTOOL_A_STRINGS_STRING = C.ETHTOOL_A_STRINGS_STRING
ETHTOOL_A_STRINGS_MAX = C.ETHTOOL_A_STRINGS_MAX
ETHTOOL_A_STRINGSET_UNSPEC = C.ETHTOOL_A_STRINGSET_UNSPEC
ETHTOOL_A_STRINGSET_ID = C.ETHTOOL_A_STRINGSET_ID
ETHTOOL_A_STRINGSET_COUNT = C.ETHTOOL_A_STRINGSET_COUNT
ETHTOOL_A_STRINGSET_STRINGS = C.ETHTOOL_A_STRINGSET_STRINGS
ETHTOOL_A_STRINGSET_MAX = C.ETHTOOL_A_STRINGSET_MAX
ETHTOOL_A_STRINGSETS_UNSPEC = C.ETHTOOL_A_STRINGSETS_UNSPEC
ETHTOOL_A_STRINGSETS_STRINGSET = C.ETHTOOL_A_STRINGSETS_STRINGSET
ETHTOOL_A_STRINGSETS_MAX = C.ETHTOOL_A_STRINGSETS_MAX
ETHTOOL_A_STRSET_UNSPEC = C.ETHTOOL_A_STRSET_UNSPEC
ETHTOOL_A_STRSET_HEADER = C.ETHTOOL_A_STRSET_HEADER
ETHTOOL_A_STRSET_STRINGSETS = C.ETHTOOL_A_STRSET_STRINGSETS
ETHTOOL_A_STRSET_COUNTS_ONLY = C.ETHTOOL_A_STRSET_COUNTS_ONLY
ETHTOOL_A_STRSET_MAX = C.ETHTOOL_A_STRSET_MAX
ETHTOOL_A_LINKINFO_UNSPEC = C.ETHTOOL_A_LINKINFO_UNSPEC
ETHTOOL_A_LINKINFO_HEADER = C.ETHTOOL_A_LINKINFO_HEADER
ETHTOOL_A_LINKINFO_PORT = C.ETHTOOL_A_LINKINFO_PORT
ETHTOOL_A_LINKINFO_PHYADDR = C.ETHTOOL_A_LINKINFO_PHYADDR
ETHTOOL_A_LINKINFO_TP_MDIX = C.ETHTOOL_A_LINKINFO_TP_MDIX
ETHTOOL_A_LINKINFO_TP_MDIX_CTRL = C.ETHTOOL_A_LINKINFO_TP_MDIX_CTRL
ETHTOOL_A_LINKINFO_TRANSCEIVER = C.ETHTOOL_A_LINKINFO_TRANSCEIVER
ETHTOOL_A_LINKINFO_MAX = C.ETHTOOL_A_LINKINFO_MAX
ETHTOOL_A_LINKMODES_UNSPEC = C.ETHTOOL_A_LINKMODES_UNSPEC
ETHTOOL_A_LINKMODES_HEADER = C.ETHTOOL_A_LINKMODES_HEADER
ETHTOOL_A_LINKMODES_AUTONEG = C.ETHTOOL_A_LINKMODES_AUTONEG
ETHTOOL_A_LINKMODES_OURS = C.ETHTOOL_A_LINKMODES_OURS
ETHTOOL_A_LINKMODES_PEER = C.ETHTOOL_A_LINKMODES_PEER
ETHTOOL_A_LINKMODES_SPEED = C.ETHTOOL_A_LINKMODES_SPEED
ETHTOOL_A_LINKMODES_DUPLEX = C.ETHTOOL_A_LINKMODES_DUPLEX
ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG = C.ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG
ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE = C.ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE
ETHTOOL_A_LINKMODES_MAX = C.ETHTOOL_A_LINKMODES_MAX
ETHTOOL_A_LINKSTATE_UNSPEC = C.ETHTOOL_A_LINKSTATE_UNSPEC
ETHTOOL_A_LINKSTATE_HEADER = C.ETHTOOL_A_LINKSTATE_HEADER
ETHTOOL_A_LINKSTATE_LINK = C.ETHTOOL_A_LINKSTATE_LINK
ETHTOOL_A_LINKSTATE_SQI = C.ETHTOOL_A_LINKSTATE_SQI
ETHTOOL_A_LINKSTATE_SQI_MAX = C.ETHTOOL_A_LINKSTATE_SQI_MAX
ETHTOOL_A_LINKSTATE_EXT_STATE = C.ETHTOOL_A_LINKSTATE_EXT_STATE
ETHTOOL_A_LINKSTATE_EXT_SUBSTATE = C.ETHTOOL_A_LINKSTATE_EXT_SUBSTATE
ETHTOOL_A_LINKSTATE_MAX = C.ETHTOOL_A_LINKSTATE_MAX
ETHTOOL_A_DEBUG_UNSPEC = C.ETHTOOL_A_DEBUG_UNSPEC
ETHTOOL_A_DEBUG_HEADER = C.ETHTOOL_A_DEBUG_HEADER
ETHTOOL_A_DEBUG_MSGMASK = C.ETHTOOL_A_DEBUG_MSGMASK
ETHTOOL_A_DEBUG_MAX = C.ETHTOOL_A_DEBUG_MAX
ETHTOOL_A_WOL_UNSPEC = C.ETHTOOL_A_WOL_UNSPEC
ETHTOOL_A_WOL_HEADER = C.ETHTOOL_A_WOL_HEADER
ETHTOOL_A_WOL_MODES = C.ETHTOOL_A_WOL_MODES
ETHTOOL_A_WOL_SOPASS = C.ETHTOOL_A_WOL_SOPASS
ETHTOOL_A_WOL_MAX = C.ETHTOOL_A_WOL_MAX
ETHTOOL_A_FEATURES_UNSPEC = C.ETHTOOL_A_FEATURES_UNSPEC
ETHTOOL_A_FEATURES_HEADER = C.ETHTOOL_A_FEATURES_HEADER
ETHTOOL_A_FEATURES_HW = C.ETHTOOL_A_FEATURES_HW
ETHTOOL_A_FEATURES_WANTED = C.ETHTOOL_A_FEATURES_WANTED
ETHTOOL_A_FEATURES_ACTIVE = C.ETHTOOL_A_FEATURES_ACTIVE
ETHTOOL_A_FEATURES_NOCHANGE = C.ETHTOOL_A_FEATURES_NOCHANGE
ETHTOOL_A_FEATURES_MAX = C.ETHTOOL_A_FEATURES_MAX
ETHTOOL_A_PRIVFLAGS_UNSPEC = C.ETHTOOL_A_PRIVFLAGS_UNSPEC
ETHTOOL_A_PRIVFLAGS_HEADER = C.ETHTOOL_A_PRIVFLAGS_HEADER
ETHTOOL_A_PRIVFLAGS_FLAGS = C.ETHTOOL_A_PRIVFLAGS_FLAGS
ETHTOOL_A_PRIVFLAGS_MAX = C.ETHTOOL_A_PRIVFLAGS_MAX
ETHTOOL_A_RINGS_UNSPEC = C.ETHTOOL_A_RINGS_UNSPEC
ETHTOOL_A_RINGS_HEADER = C.ETHTOOL_A_RINGS_HEADER
ETHTOOL_A_RINGS_RX_MAX = C.ETHTOOL_A_RINGS_RX_MAX
ETHTOOL_A_RINGS_RX_MINI_MAX = C.ETHTOOL_A_RINGS_RX_MINI_MAX
ETHTOOL_A_RINGS_RX_JUMBO_MAX = C.ETHTOOL_A_RINGS_RX_JUMBO_MAX
ETHTOOL_A_RINGS_TX_MAX = C.ETHTOOL_A_RINGS_TX_MAX
ETHTOOL_A_RINGS_RX = C.ETHTOOL_A_RINGS_RX
ETHTOOL_A_RINGS_RX_MINI = C.ETHTOOL_A_RINGS_RX_MINI
ETHTOOL_A_RINGS_RX_JUMBO = C.ETHTOOL_A_RINGS_RX_JUMBO
ETHTOOL_A_RINGS_TX = C.ETHTOOL_A_RINGS_TX
ETHTOOL_A_RINGS_MAX = C.ETHTOOL_A_RINGS_MAX
ETHTOOL_A_CHANNELS_UNSPEC = C.ETHTOOL_A_CHANNELS_UNSPEC
ETHTOOL_A_CHANNELS_HEADER = C.ETHTOOL_A_CHANNELS_HEADER
ETHTOOL_A_CHANNELS_RX_MAX = C.ETHTOOL_A_CHANNELS_RX_MAX
ETHTOOL_A_CHANNELS_TX_MAX = C.ETHTOOL_A_CHANNELS_TX_MAX
ETHTOOL_A_CHANNELS_OTHER_MAX = C.ETHTOOL_A_CHANNELS_OTHER_MAX
ETHTOOL_A_CHANNELS_COMBINED_MAX = C.ETHTOOL_A_CHANNELS_COMBINED_MAX
ETHTOOL_A_CHANNELS_RX_COUNT = C.ETHTOOL_A_CHANNELS_RX_COUNT
ETHTOOL_A_CHANNELS_TX_COUNT = C.ETHTOOL_A_CHANNELS_TX_COUNT
ETHTOOL_A_CHANNELS_OTHER_COUNT = C.ETHTOOL_A_CHANNELS_OTHER_COUNT
ETHTOOL_A_CHANNELS_COMBINED_COUNT = C.ETHTOOL_A_CHANNELS_COMBINED_COUNT
ETHTOOL_A_CHANNELS_MAX = C.ETHTOOL_A_CHANNELS_MAX
ETHTOOL_A_COALESCE_UNSPEC = C.ETHTOOL_A_COALESCE_UNSPEC
ETHTOOL_A_COALESCE_HEADER = C.ETHTOOL_A_COALESCE_HEADER
ETHTOOL_A_COALESCE_RX_USECS = C.ETHTOOL_A_COALESCE_RX_USECS
ETHTOOL_A_COALESCE_RX_MAX_FRAMES = C.ETHTOOL_A_COALESCE_RX_MAX_FRAMES
ETHTOOL_A_COALESCE_RX_USECS_IRQ = C.ETHTOOL_A_COALESCE_RX_USECS_IRQ
ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ = C.ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ
ETHTOOL_A_COALESCE_TX_USECS = C.ETHTOOL_A_COALESCE_TX_USECS
ETHTOOL_A_COALESCE_TX_MAX_FRAMES = C.ETHTOOL_A_COALESCE_TX_MAX_FRAMES
ETHTOOL_A_COALESCE_TX_USECS_IRQ = C.ETHTOOL_A_COALESCE_TX_USECS_IRQ
ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ = C.ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ
ETHTOOL_A_COALESCE_STATS_BLOCK_USECS = C.ETHTOOL_A_COALESCE_STATS_BLOCK_USECS
ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX = C.ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX
ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX = C.ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX
ETHTOOL_A_COALESCE_PKT_RATE_LOW = C.ETHTOOL_A_COALESCE_PKT_RATE_LOW
ETHTOOL_A_COALESCE_RX_USECS_LOW = C.ETHTOOL_A_COALESCE_RX_USECS_LOW
ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW = C.ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW
ETHTOOL_A_COALESCE_TX_USECS_LOW = C.ETHTOOL_A_COALESCE_TX_USECS_LOW
ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW = C.ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW
ETHTOOL_A_COALESCE_PKT_RATE_HIGH = C.ETHTOOL_A_COALESCE_PKT_RATE_HIGH
ETHTOOL_A_COALESCE_RX_USECS_HIGH = C.ETHTOOL_A_COALESCE_RX_USECS_HIGH
ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH = C.ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH
ETHTOOL_A_COALESCE_TX_USECS_HIGH = C.ETHTOOL_A_COALESCE_TX_USECS_HIGH
ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH = C.ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH
ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = C.ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL
ETHTOOL_A_COALESCE_MAX = C.ETHTOOL_A_COALESCE_MAX
ETHTOOL_A_PAUSE_UNSPEC = C.ETHTOOL_A_PAUSE_UNSPEC
ETHTOOL_A_PAUSE_HEADER = C.ETHTOOL_A_PAUSE_HEADER
ETHTOOL_A_PAUSE_AUTONEG = C.ETHTOOL_A_PAUSE_AUTONEG
ETHTOOL_A_PAUSE_RX = C.ETHTOOL_A_PAUSE_RX
ETHTOOL_A_PAUSE_TX = C.ETHTOOL_A_PAUSE_TX
ETHTOOL_A_PAUSE_STATS = C.ETHTOOL_A_PAUSE_STATS
ETHTOOL_A_PAUSE_MAX = C.ETHTOOL_A_PAUSE_MAX
ETHTOOL_A_PAUSE_STAT_UNSPEC = C.ETHTOOL_A_PAUSE_STAT_UNSPEC
ETHTOOL_A_PAUSE_STAT_PAD = C.ETHTOOL_A_PAUSE_STAT_PAD
ETHTOOL_A_PAUSE_STAT_TX_FRAMES = C.ETHTOOL_A_PAUSE_STAT_TX_FRAMES
ETHTOOL_A_PAUSE_STAT_RX_FRAMES = C.ETHTOOL_A_PAUSE_STAT_RX_FRAMES
ETHTOOL_A_PAUSE_STAT_MAX = C.ETHTOOL_A_PAUSE_STAT_MAX
ETHTOOL_A_EEE_UNSPEC = C.ETHTOOL_A_EEE_UNSPEC
ETHTOOL_A_EEE_HEADER = C.ETHTOOL_A_EEE_HEADER
ETHTOOL_A_EEE_MODES_OURS = C.ETHTOOL_A_EEE_MODES_OURS
ETHTOOL_A_EEE_MODES_PEER = C.ETHTOOL_A_EEE_MODES_PEER
ETHTOOL_A_EEE_ACTIVE = C.ETHTOOL_A_EEE_ACTIVE
ETHTOOL_A_EEE_ENABLED = C.ETHTOOL_A_EEE_ENABLED
ETHTOOL_A_EEE_TX_LPI_ENABLED = C.ETHTOOL_A_EEE_TX_LPI_ENABLED
ETHTOOL_A_EEE_TX_LPI_TIMER = C.ETHTOOL_A_EEE_TX_LPI_TIMER
ETHTOOL_A_EEE_MAX = C.ETHTOOL_A_EEE_MAX
ETHTOOL_A_TSINFO_UNSPEC = C.ETHTOOL_A_TSINFO_UNSPEC
ETHTOOL_A_TSINFO_HEADER = C.ETHTOOL_A_TSINFO_HEADER
ETHTOOL_A_TSINFO_TIMESTAMPING = C.ETHTOOL_A_TSINFO_TIMESTAMPING
ETHTOOL_A_TSINFO_TX_TYPES = C.ETHTOOL_A_TSINFO_TX_TYPES
ETHTOOL_A_TSINFO_RX_FILTERS = C.ETHTOOL_A_TSINFO_RX_FILTERS
ETHTOOL_A_TSINFO_PHC_INDEX = C.ETHTOOL_A_TSINFO_PHC_INDEX
ETHTOOL_A_TSINFO_MAX = C.ETHTOOL_A_TSINFO_MAX
ETHTOOL_A_CABLE_TEST_UNSPEC = C.ETHTOOL_A_CABLE_TEST_UNSPEC
ETHTOOL_A_CABLE_TEST_HEADER = C.ETHTOOL_A_CABLE_TEST_HEADER
ETHTOOL_A_CABLE_TEST_MAX = C.ETHTOOL_A_CABLE_TEST_MAX
ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC = C.ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC
ETHTOOL_A_CABLE_RESULT_CODE_OK = C.ETHTOOL_A_CABLE_RESULT_CODE_OK
ETHTOOL_A_CABLE_RESULT_CODE_OPEN = C.ETHTOOL_A_CABLE_RESULT_CODE_OPEN
ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT = C.ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT
ETHTOOL_A_CABLE_RESULT_CODE_CROSS_SHORT = C.ETHTOOL_A_CABLE_RESULT_CODE_CROSS_SHORT
ETHTOOL_A_CABLE_PAIR_A = C.ETHTOOL_A_CABLE_PAIR_A
ETHTOOL_A_CABLE_PAIR_B = C.ETHTOOL_A_CABLE_PAIR_B
ETHTOOL_A_CABLE_PAIR_C = C.ETHTOOL_A_CABLE_PAIR_C
ETHTOOL_A_CABLE_PAIR_D = C.ETHTOOL_A_CABLE_PAIR_D
ETHTOOL_A_CABLE_RESULT_UNSPEC = C.ETHTOOL_A_CABLE_RESULT_UNSPEC
ETHTOOL_A_CABLE_RESULT_PAIR = C.ETHTOOL_A_CABLE_RESULT_PAIR
ETHTOOL_A_CABLE_RESULT_CODE = C.ETHTOOL_A_CABLE_RESULT_CODE
ETHTOOL_A_CABLE_RESULT_MAX = C.ETHTOOL_A_CABLE_RESULT_MAX
ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC = C.ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC
ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR = C.ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR
ETHTOOL_A_CABLE_FAULT_LENGTH_CM = C.ETHTOOL_A_CABLE_FAULT_LENGTH_CM
ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = C.ETHTOOL_A_CABLE_FAULT_LENGTH_MAX
ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC = C.ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC
ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED = C.ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED
ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = C.ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED
ETHTOOL_A_CABLE_NEST_UNSPEC = C.ETHTOOL_A_CABLE_NEST_UNSPEC
ETHTOOL_A_CABLE_NEST_RESULT = C.ETHTOOL_A_CABLE_NEST_RESULT
ETHTOOL_A_CABLE_NEST_FAULT_LENGTH = C.ETHTOOL_A_CABLE_NEST_FAULT_LENGTH
ETHTOOL_A_CABLE_NEST_MAX = C.ETHTOOL_A_CABLE_NEST_MAX
ETHTOOL_A_CABLE_TEST_NTF_UNSPEC = C.ETHTOOL_A_CABLE_TEST_NTF_UNSPEC
ETHTOOL_A_CABLE_TEST_NTF_HEADER = C.ETHTOOL_A_CABLE_TEST_NTF_HEADER
ETHTOOL_A_CABLE_TEST_NTF_STATUS = C.ETHTOOL_A_CABLE_TEST_NTF_STATUS
ETHTOOL_A_CABLE_TEST_NTF_NEST = C.ETHTOOL_A_CABLE_TEST_NTF_NEST
ETHTOOL_A_CABLE_TEST_NTF_MAX = C.ETHTOOL_A_CABLE_TEST_NTF_MAX
ETHTOOL_A_CABLE_TEST_TDR_CFG_UNSPEC = C.ETHTOOL_A_CABLE_TEST_TDR_CFG_UNSPEC
ETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST = C.ETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST
ETHTOOL_A_CABLE_TEST_TDR_CFG_LAST = C.ETHTOOL_A_CABLE_TEST_TDR_CFG_LAST
ETHTOOL_A_CABLE_TEST_TDR_CFG_STEP = C.ETHTOOL_A_CABLE_TEST_TDR_CFG_STEP
ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR = C.ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR
ETHTOOL_A_CABLE_TEST_TDR_CFG_MAX = C.ETHTOOL_A_CABLE_TEST_TDR_CFG_MAX
ETHTOOL_A_CABLE_TEST_TDR_UNSPEC = C.ETHTOOL_A_CABLE_TEST_TDR_UNSPEC
ETHTOOL_A_CABLE_TEST_TDR_HEADER = C.ETHTOOL_A_CABLE_TEST_TDR_HEADER
ETHTOOL_A_CABLE_TEST_TDR_CFG = C.ETHTOOL_A_CABLE_TEST_TDR_CFG
ETHTOOL_A_CABLE_TEST_TDR_MAX = C.ETHTOOL_A_CABLE_TEST_TDR_MAX
ETHTOOL_A_CABLE_AMPLITUDE_UNSPEC = C.ETHTOOL_A_CABLE_AMPLITUDE_UNSPEC
ETHTOOL_A_CABLE_AMPLITUDE_PAIR = C.ETHTOOL_A_CABLE_AMPLITUDE_PAIR
ETHTOOL_A_CABLE_AMPLITUDE_mV = C.ETHTOOL_A_CABLE_AMPLITUDE_mV
ETHTOOL_A_CABLE_AMPLITUDE_MAX = C.ETHTOOL_A_CABLE_AMPLITUDE_MAX
ETHTOOL_A_CABLE_PULSE_UNSPEC = C.ETHTOOL_A_CABLE_PULSE_UNSPEC
ETHTOOL_A_CABLE_PULSE_mV = C.ETHTOOL_A_CABLE_PULSE_mV
ETHTOOL_A_CABLE_PULSE_MAX = C.ETHTOOL_A_CABLE_PULSE_MAX
ETHTOOL_A_CABLE_STEP_UNSPEC = C.ETHTOOL_A_CABLE_STEP_UNSPEC
ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE = C.ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE
ETHTOOL_A_CABLE_STEP_LAST_DISTANCE = C.ETHTOOL_A_CABLE_STEP_LAST_DISTANCE
ETHTOOL_A_CABLE_STEP_STEP_DISTANCE = C.ETHTOOL_A_CABLE_STEP_STEP_DISTANCE
ETHTOOL_A_CABLE_STEP_MAX = C.ETHTOOL_A_CABLE_STEP_MAX
ETHTOOL_A_CABLE_TDR_NEST_UNSPEC = C.ETHTOOL_A_CABLE_TDR_NEST_UNSPEC
ETHTOOL_A_CABLE_TDR_NEST_STEP = C.ETHTOOL_A_CABLE_TDR_NEST_STEP
ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE = C.ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE
ETHTOOL_A_CABLE_TDR_NEST_PULSE = C.ETHTOOL_A_CABLE_TDR_NEST_PULSE
ETHTOOL_A_CABLE_TDR_NEST_MAX = C.ETHTOOL_A_CABLE_TDR_NEST_MAX
ETHTOOL_A_CABLE_TEST_TDR_NTF_UNSPEC = C.ETHTOOL_A_CABLE_TEST_TDR_NTF_UNSPEC
ETHTOOL_A_CABLE_TEST_TDR_NTF_HEADER = C.ETHTOOL_A_CABLE_TEST_TDR_NTF_HEADER
ETHTOOL_A_CABLE_TEST_TDR_NTF_STATUS = C.ETHTOOL_A_CABLE_TEST_TDR_NTF_STATUS
ETHTOOL_A_CABLE_TEST_TDR_NTF_NEST = C.ETHTOOL_A_CABLE_TEST_TDR_NTF_NEST
ETHTOOL_A_CABLE_TEST_TDR_NTF_MAX = C.ETHTOOL_A_CABLE_TEST_TDR_NTF_MAX
ETHTOOL_UDP_TUNNEL_TYPE_VXLAN = C.ETHTOOL_UDP_TUNNEL_TYPE_VXLAN
ETHTOOL_UDP_TUNNEL_TYPE_GENEVE = C.ETHTOOL_UDP_TUNNEL_TYPE_GENEVE
ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE = C.ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE
ETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC = C.ETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC
ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT = C.ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT
ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE = C.ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE
ETHTOOL_A_TUNNEL_UDP_ENTRY_MAX = C.ETHTOOL_A_TUNNEL_UDP_ENTRY_MAX
ETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC = C.ETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC
ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE = C.ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE
ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES = C.ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES
ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY = C.ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY
ETHTOOL_A_TUNNEL_UDP_TABLE_MAX = C.ETHTOOL_A_TUNNEL_UDP_TABLE_MAX
ETHTOOL_A_TUNNEL_UDP_UNSPEC = C.ETHTOOL_A_TUNNEL_UDP_UNSPEC
ETHTOOL_A_TUNNEL_UDP_TABLE = C.ETHTOOL_A_TUNNEL_UDP_TABLE
ETHTOOL_A_TUNNEL_UDP_MAX = C.ETHTOOL_A_TUNNEL_UDP_MAX
ETHTOOL_A_TUNNEL_INFO_UNSPEC = C.ETHTOOL_A_TUNNEL_INFO_UNSPEC
ETHTOOL_A_TUNNEL_INFO_HEADER = C.ETHTOOL_A_TUNNEL_INFO_HEADER
ETHTOOL_A_TUNNEL_INFO_UDP_PORTS = C.ETHTOOL_A_TUNNEL_INFO_UDP_PORTS
ETHTOOL_A_TUNNEL_INFO_MAX = C.ETHTOOL_A_TUNNEL_INFO_MAX
)

View File

@@ -204,6 +204,7 @@ struct ltchars {
#include <linux/devlink.h>
#include <linux/dm-ioctl.h>
#include <linux/errqueue.h>
#include <linux/ethtool_netlink.h>
#include <linux/falloc.h>
#include <linux/fanotify.h>
#include <linux/filter.h>
@@ -563,6 +564,7 @@ ccflags="$@"
$2 ~ /^TIPC_/ ||
$2 !~ "DEVLINK_RELOAD_LIMITS_VALID_MASK" &&
$2 ~ /^DEVLINK_/ ||
$2 ~ /^ETHTOOL_/ ||
$2 ~ /^LWTUNNEL_IP/ ||
$2 !~ "WMESGLEN" &&
$2 ~ /^W[A-Z0-9]+$/ ||

View File

@@ -119,13 +119,16 @@ type attrList struct {
Forkattr uint32
}
//sysnb pipe() (r int, w int, err error)
//sysnb pipe(p *[2]int32) (err error)
func Pipe(p []int) (err error) {
if len(p) != 2 {
return EINVAL
}
p[0], p[1], err = pipe()
var x [2]int32
err = pipe(&x)
p[0] = int(x[0])
p[1] = int(x[1])
return
}

View File

@@ -75,16 +75,3 @@ func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {
}
return
}
//sysnb pipe2(p *[2]_C_int, flags int) (err error)
func Pipe2(p []int, flags int) error {
if len(p) != 2 {
return EINVAL
}
var pp [2]_C_int
err := pipe2(&pp, flags)
p[0] = int(pp[0])
p[1] = int(pp[1])
return err
}

View File

@@ -68,6 +68,19 @@ func Pipe(p []int) (err error) {
return nil
}
//sysnb pipe2(p *[2]_C_int, flags int) (err error)
func Pipe2(p []int, flags int) error {
if len(p) != 2 {
return EINVAL
}
var pp [2]_C_int
err := pipe2(&pp, flags)
p[0] = int(pp[0])
p[1] = int(pp[1])
return err
}
func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
if sa.Port < 0 || sa.Port > 0xFFFF {
return nil, 0, EINVAL

View File

@@ -13,6 +13,48 @@ import (
"golang.org/x/sys/unix"
)
func TestPipe2(t *testing.T) {
const s = "hello"
var pipes [2]int
err := unix.Pipe2(pipes[:], 0)
if err != nil {
t.Fatalf("pipe2: %v", err)
}
r := pipes[0]
w := pipes[1]
go func() {
n, err := unix.Write(w, []byte(s))
if err != nil {
t.Errorf("bad write: %v", err)
return
}
if n != len(s) {
t.Errorf("bad write count: %d", n)
return
}
err = unix.Close(w)
if err != nil {
t.Errorf("bad close: %v", err)
return
}
}()
var buf [10 + len(s)]byte
n, err := unix.Read(r, buf[:])
if err != nil {
t.Fatalf("bad read: %v", err)
}
if n != len(s) {
t.Fatalf("bad read count: %d", n)
}
if string(buf[:n]) != s {
t.Fatalf("bad contents: %s", string(buf[:n]))
}
err = unix.Close(r)
if err != nil {
t.Fatalf("bad close: %v", err)
}
}
func TestStatvfs(t *testing.T) {
if err := unix.Statvfs("", nil); err == nil {
t.Fatal(`Statvfs("") expected failure`)

View File

@@ -896,3 +896,42 @@ func chtmpdir(t *testing.T) func() {
os.RemoveAll(d)
}
}
func TestPipe(t *testing.T) {
const s = "hello"
var pipes [2]int
unix.Pipe(pipes[:])
r := pipes[0]
w := pipes[1]
go func() {
n, err := unix.Write(w, []byte(s))
if err != nil {
t.Errorf("bad write: %s\n", err)
return
}
if n != len(s) {
t.Errorf("bad write count: %d\n", n)
return
}
err = unix.Close(w)
if err != nil {
t.Errorf("bad close: %s\n", err)
return
}
}()
var buf [10 + len(s)]byte
n, err := unix.Read(r, buf[:])
if err != nil {
t.Fatalf("bad read: %s\n", err)
}
if n != len(s) {
t.Fatalf("bad read count: %d\n", n)
}
if string(buf[:n]) != s {
t.Fatalf("bad contents: %s\n", string(buf[:n]))
}
err = unix.Close(r)
if err != nil {
t.Fatalf("bad close: %s\n", err)
}
}

View File

@@ -527,6 +527,119 @@ const (
EPOLL_CTL_DEL = 0x2
EPOLL_CTL_MOD = 0x3
EROFS_SUPER_MAGIC_V1 = 0xe0f5e1e2
ESP_V4_FLOW = 0xa
ESP_V6_FLOW = 0xc
ETHER_FLOW = 0x12
ETHTOOL_BUSINFO_LEN = 0x20
ETHTOOL_EROMVERS_LEN = 0x20
ETHTOOL_FEC_AUTO = 0x2
ETHTOOL_FEC_BASER = 0x10
ETHTOOL_FEC_LLRS = 0x20
ETHTOOL_FEC_NONE = 0x1
ETHTOOL_FEC_OFF = 0x4
ETHTOOL_FEC_RS = 0x8
ETHTOOL_FLAG_ALL = 0x7
ETHTOOL_FLAG_COMPACT_BITSETS = 0x1
ETHTOOL_FLAG_OMIT_REPLY = 0x2
ETHTOOL_FLAG_STATS = 0x4
ETHTOOL_FLASHDEV = 0x33
ETHTOOL_FLASH_MAX_FILENAME = 0x80
ETHTOOL_FWVERS_LEN = 0x20
ETHTOOL_F_COMPAT = 0x4
ETHTOOL_F_UNSUPPORTED = 0x1
ETHTOOL_F_WISH = 0x2
ETHTOOL_GCHANNELS = 0x3c
ETHTOOL_GCOALESCE = 0xe
ETHTOOL_GDRVINFO = 0x3
ETHTOOL_GEEE = 0x44
ETHTOOL_GEEPROM = 0xb
ETHTOOL_GENL_NAME = "ethtool"
ETHTOOL_GENL_VERSION = 0x1
ETHTOOL_GET_DUMP_DATA = 0x40
ETHTOOL_GET_DUMP_FLAG = 0x3f
ETHTOOL_GET_TS_INFO = 0x41
ETHTOOL_GFEATURES = 0x3a
ETHTOOL_GFECPARAM = 0x50
ETHTOOL_GFLAGS = 0x25
ETHTOOL_GGRO = 0x2b
ETHTOOL_GGSO = 0x23
ETHTOOL_GLINK = 0xa
ETHTOOL_GLINKSETTINGS = 0x4c
ETHTOOL_GMODULEEEPROM = 0x43
ETHTOOL_GMODULEINFO = 0x42
ETHTOOL_GMSGLVL = 0x7
ETHTOOL_GPAUSEPARAM = 0x12
ETHTOOL_GPERMADDR = 0x20
ETHTOOL_GPFLAGS = 0x27
ETHTOOL_GPHYSTATS = 0x4a
ETHTOOL_GREGS = 0x4
ETHTOOL_GRINGPARAM = 0x10
ETHTOOL_GRSSH = 0x46
ETHTOOL_GRXCLSRLALL = 0x30
ETHTOOL_GRXCLSRLCNT = 0x2e
ETHTOOL_GRXCLSRULE = 0x2f
ETHTOOL_GRXCSUM = 0x14
ETHTOOL_GRXFH = 0x29
ETHTOOL_GRXFHINDIR = 0x38
ETHTOOL_GRXNTUPLE = 0x36
ETHTOOL_GRXRINGS = 0x2d
ETHTOOL_GSET = 0x1
ETHTOOL_GSG = 0x18
ETHTOOL_GSSET_INFO = 0x37
ETHTOOL_GSTATS = 0x1d
ETHTOOL_GSTRINGS = 0x1b
ETHTOOL_GTSO = 0x1e
ETHTOOL_GTUNABLE = 0x48
ETHTOOL_GTXCSUM = 0x16
ETHTOOL_GUFO = 0x21
ETHTOOL_GWOL = 0x5
ETHTOOL_MCGRP_MONITOR_NAME = "monitor"
ETHTOOL_NWAY_RST = 0x9
ETHTOOL_PERQUEUE = 0x4b
ETHTOOL_PHYS_ID = 0x1c
ETHTOOL_PHY_EDPD_DFLT_TX_MSECS = 0xffff
ETHTOOL_PHY_EDPD_DISABLE = 0x0
ETHTOOL_PHY_EDPD_NO_TX = 0xfffe
ETHTOOL_PHY_FAST_LINK_DOWN_OFF = 0xff
ETHTOOL_PHY_FAST_LINK_DOWN_ON = 0x0
ETHTOOL_PHY_GTUNABLE = 0x4e
ETHTOOL_PHY_STUNABLE = 0x4f
ETHTOOL_RESET = 0x34
ETHTOOL_RXNTUPLE_ACTION_CLEAR = -0x2
ETHTOOL_RXNTUPLE_ACTION_DROP = -0x1
ETHTOOL_RX_FLOW_SPEC_RING = 0xffffffff
ETHTOOL_RX_FLOW_SPEC_RING_VF = 0xff00000000
ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF = 0x20
ETHTOOL_SCHANNELS = 0x3d
ETHTOOL_SCOALESCE = 0xf
ETHTOOL_SEEE = 0x45
ETHTOOL_SEEPROM = 0xc
ETHTOOL_SET_DUMP = 0x3e
ETHTOOL_SFEATURES = 0x3b
ETHTOOL_SFECPARAM = 0x51
ETHTOOL_SFLAGS = 0x26
ETHTOOL_SGRO = 0x2c
ETHTOOL_SGSO = 0x24
ETHTOOL_SLINKSETTINGS = 0x4d
ETHTOOL_SMSGLVL = 0x8
ETHTOOL_SPAUSEPARAM = 0x13
ETHTOOL_SPFLAGS = 0x28
ETHTOOL_SRINGPARAM = 0x11
ETHTOOL_SRSSH = 0x47
ETHTOOL_SRXCLSRLDEL = 0x31
ETHTOOL_SRXCLSRLINS = 0x32
ETHTOOL_SRXCSUM = 0x15
ETHTOOL_SRXFH = 0x2a
ETHTOOL_SRXFHINDIR = 0x39
ETHTOOL_SRXNTUPLE = 0x35
ETHTOOL_SSET = 0x2
ETHTOOL_SSG = 0x19
ETHTOOL_STSO = 0x1f
ETHTOOL_STUNABLE = 0x49
ETHTOOL_STXCSUM = 0x17
ETHTOOL_SUFO = 0x22
ETHTOOL_SWOL = 0x6
ETHTOOL_TEST = 0x1a
ETH_P_1588 = 0x88f7
ETH_P_8021AD = 0x88a8
ETH_P_8021AH = 0x88e7
@@ -996,6 +1109,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
IPV6_FLOW = 0x11
IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
@@ -1045,6 +1159,7 @@ const (
IPV6_TRANSPARENT = 0x4b
IPV6_UNICAST_HOPS = 0x10
IPV6_UNICAST_IF = 0x4c
IPV6_USER_FLOW = 0xe
IPV6_V6ONLY = 0x1a
IPV6_XFRM_POLICY = 0x23
IP_ADD_MEMBERSHIP = 0x23
@@ -1101,6 +1216,7 @@ const (
IP_TTL = 0x2
IP_UNBLOCK_SOURCE = 0x25
IP_UNICAST_IF = 0x32
IP_USER_FLOW = 0xd
IP_XFRM_POLICY = 0x11
ISOFS_SUPER_MAGIC = 0x9660
ISTRIP = 0x20
@@ -2340,6 +2456,8 @@ const (
TCP_TX_DELAY = 0x25
TCP_ULP = 0x1f
TCP_USER_TIMEOUT = 0x12
TCP_V4_FLOW = 0x1
TCP_V6_FLOW = 0x5
TCP_WINDOW_CLAMP = 0xa
TCP_ZEROCOPY_RECEIVE = 0x23
TFD_TIMER_ABSTIME = 0x1
@@ -2466,6 +2584,7 @@ const (
VM_SOCKETS_INVALID_VERSION = 0xffffffff
VQUIT = 0x1
VT0 = 0x0
WAKE_MAGIC = 0x20
WALL = 0x40000000
WCLONE = 0x80000000
WCONTINUED = 0x8

View File

@@ -462,10 +462,8 @@ func libc_munlockall_trampoline()
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func pipe() (r int, w int, err error) {
r0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0)
r = int(r0)
w = int(r1)
func pipe(p *[2]int32) (err error) {
_, _, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), uintptr(unsafe.Pointer(p)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}

View File

@@ -462,10 +462,8 @@ func libc_munlockall_trampoline()
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func pipe() (r int, w int, err error) {
r0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0)
r = int(r0)
w = int(r1)
func pipe(p *[2]int32) (err error) {
_, _, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), uintptr(unsafe.Pointer(p)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}

View File

@@ -462,10 +462,8 @@ func libc_munlockall_trampoline()
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func pipe() (r int, w int, err error) {
r0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0)
r = int(r0)
w = int(r1)
func pipe(p *[2]int32) (err error) {
_, _, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), uintptr(unsafe.Pointer(p)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}

View File

@@ -462,10 +462,8 @@ func libc_munlockall_trampoline()
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func pipe() (r int, w int, err error) {
r0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0)
r = int(r0)
w = int(r1)
func pipe(p *[2]int32) (err error) {
_, _, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), uintptr(unsafe.Pointer(p)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}

View File

@@ -14,22 +14,19 @@ import (
//go:cgo_import_dynamic libc_writev writev "libc.so"
//go:cgo_import_dynamic libc_pwritev pwritev "libc.so"
//go:cgo_import_dynamic libc_accept4 accept4 "libsocket.so"
//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so"
//go:linkname procreadv libc_readv
//go:linkname procpreadv libc_preadv
//go:linkname procwritev libc_writev
//go:linkname procpwritev libc_pwritev
//go:linkname procaccept4 libc_accept4
//go:linkname procpipe2 libc_pipe2
var (
procreadv,
procpreadv,
procwritev,
procpwritev,
procaccept4,
procpipe2 syscallFunc
procaccept4 syscallFunc
)
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
@@ -102,13 +99,3 @@ func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int,
}
return
}
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func pipe2(p *[2]_C_int, flags int) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe2)), 2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0, 0, 0, 0)
if e1 != 0 {
err = e1
}
return
}

View File

@@ -11,6 +11,7 @@ import (
)
//go:cgo_import_dynamic libc_pipe pipe "libc.so"
//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so"
//go:cgo_import_dynamic libc_getsockname getsockname "libsocket.so"
//go:cgo_import_dynamic libc_getcwd getcwd "libc.so"
//go:cgo_import_dynamic libc_getgroups getgroups "libc.so"
@@ -140,6 +141,7 @@ import (
//go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so"
//go:linkname procpipe libc_pipe
//go:linkname procpipe2 libc_pipe2
//go:linkname procgetsockname libc_getsockname
//go:linkname procGetcwd libc_getcwd
//go:linkname procgetgroups libc_getgroups
@@ -270,6 +272,7 @@ import (
var (
procpipe,
procpipe2,
procgetsockname,
procGetcwd,
procgetgroups,
@@ -412,6 +415,16 @@ func pipe(p *[2]_C_int) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func pipe2(p *[2]_C_int, flags int) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe2)), 2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0, 0, 0, 0)
if e1 != 0 {
err = e1
}
return
}
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
if e1 != 0 {

View File

@@ -3222,3 +3222,461 @@ const (
MPLS_IPTUNNEL_TTL = 0x2
MPLS_IPTUNNEL_MAX = 0x2
)
const (
ETHTOOL_ID_UNSPEC = 0x0
ETHTOOL_RX_COPYBREAK = 0x1
ETHTOOL_TX_COPYBREAK = 0x2
ETHTOOL_PFC_PREVENTION_TOUT = 0x3
ETHTOOL_TUNABLE_UNSPEC = 0x0
ETHTOOL_TUNABLE_U8 = 0x1
ETHTOOL_TUNABLE_U16 = 0x2
ETHTOOL_TUNABLE_U32 = 0x3
ETHTOOL_TUNABLE_U64 = 0x4
ETHTOOL_TUNABLE_STRING = 0x5
ETHTOOL_TUNABLE_S8 = 0x6
ETHTOOL_TUNABLE_S16 = 0x7
ETHTOOL_TUNABLE_S32 = 0x8
ETHTOOL_TUNABLE_S64 = 0x9
ETHTOOL_PHY_ID_UNSPEC = 0x0
ETHTOOL_PHY_DOWNSHIFT = 0x1
ETHTOOL_PHY_FAST_LINK_DOWN = 0x2
ETHTOOL_PHY_EDPD = 0x3
ETHTOOL_LINK_EXT_STATE_AUTONEG = 0x0
ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE = 0x1
ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH = 0x2
ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY = 0x3
ETHTOOL_LINK_EXT_STATE_NO_CABLE = 0x4
ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE = 0x5
ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE = 0x6
ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE = 0x7
ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED = 0x8
ETHTOOL_LINK_EXT_STATE_OVERHEAT = 0x9
ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED = 0x1
ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED = 0x2
ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED = 0x3
ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE = 0x4
ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE = 0x5
ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD = 0x6
ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED = 0x1
ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT = 0x2
ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY = 0x3
ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT = 0x4
ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK = 0x1
ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK = 0x2
ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS = 0x3
ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED = 0x4
ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED = 0x5
ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 0x1
ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE = 0x2
ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE = 0x1
ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE = 0x2
ETHTOOL_FLASH_ALL_REGIONS = 0x0
ETHTOOL_F_UNSUPPORTED__BIT = 0x0
ETHTOOL_F_WISH__BIT = 0x1
ETHTOOL_F_COMPAT__BIT = 0x2
ETHTOOL_FEC_NONE_BIT = 0x0
ETHTOOL_FEC_AUTO_BIT = 0x1
ETHTOOL_FEC_OFF_BIT = 0x2
ETHTOOL_FEC_RS_BIT = 0x3
ETHTOOL_FEC_BASER_BIT = 0x4
ETHTOOL_FEC_LLRS_BIT = 0x5
ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0x0
ETHTOOL_LINK_MODE_10baseT_Full_BIT = 0x1
ETHTOOL_LINK_MODE_100baseT_Half_BIT = 0x2
ETHTOOL_LINK_MODE_100baseT_Full_BIT = 0x3
ETHTOOL_LINK_MODE_1000baseT_Half_BIT = 0x4
ETHTOOL_LINK_MODE_1000baseT_Full_BIT = 0x5
ETHTOOL_LINK_MODE_Autoneg_BIT = 0x6
ETHTOOL_LINK_MODE_TP_BIT = 0x7
ETHTOOL_LINK_MODE_AUI_BIT = 0x8
ETHTOOL_LINK_MODE_MII_BIT = 0x9
ETHTOOL_LINK_MODE_FIBRE_BIT = 0xa
ETHTOOL_LINK_MODE_BNC_BIT = 0xb
ETHTOOL_LINK_MODE_10000baseT_Full_BIT = 0xc
ETHTOOL_LINK_MODE_Pause_BIT = 0xd
ETHTOOL_LINK_MODE_Asym_Pause_BIT = 0xe
ETHTOOL_LINK_MODE_2500baseX_Full_BIT = 0xf
ETHTOOL_LINK_MODE_Backplane_BIT = 0x10
ETHTOOL_LINK_MODE_1000baseKX_Full_BIT = 0x11
ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = 0x12
ETHTOOL_LINK_MODE_10000baseKR_Full_BIT = 0x13
ETHTOOL_LINK_MODE_10000baseR_FEC_BIT = 0x14
ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = 0x15
ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = 0x16
ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = 0x17
ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = 0x18
ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = 0x19
ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = 0x1a
ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = 0x1b
ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = 0x1c
ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = 0x1d
ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = 0x1e
ETHTOOL_LINK_MODE_25000baseCR_Full_BIT = 0x1f
ETHTOOL_LINK_MODE_25000baseKR_Full_BIT = 0x20
ETHTOOL_LINK_MODE_25000baseSR_Full_BIT = 0x21
ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT = 0x22
ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT = 0x23
ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT = 0x24
ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT = 0x25
ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT = 0x26
ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT = 0x27
ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT = 0x28
ETHTOOL_LINK_MODE_1000baseX_Full_BIT = 0x29
ETHTOOL_LINK_MODE_10000baseCR_Full_BIT = 0x2a
ETHTOOL_LINK_MODE_10000baseSR_Full_BIT = 0x2b
ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 0x2c
ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 0x2d
ETHTOOL_LINK_MODE_10000baseER_Full_BIT = 0x2e
ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 0x2f
ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 0x30
ETHTOOL_LINK_MODE_FEC_NONE_BIT = 0x31
ETHTOOL_LINK_MODE_FEC_RS_BIT = 0x32
ETHTOOL_LINK_MODE_FEC_BASER_BIT = 0x33
ETHTOOL_LINK_MODE_50000baseKR_Full_BIT = 0x34
ETHTOOL_LINK_MODE_50000baseSR_Full_BIT = 0x35
ETHTOOL_LINK_MODE_50000baseCR_Full_BIT = 0x36
ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = 0x37
ETHTOOL_LINK_MODE_50000baseDR_Full_BIT = 0x38
ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = 0x39
ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = 0x3a
ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = 0x3b
ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 0x3c
ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = 0x3d
ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = 0x3e
ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = 0x3f
ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 0x40
ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 0x41
ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 0x42
ETHTOOL_LINK_MODE_100baseT1_Full_BIT = 0x43
ETHTOOL_LINK_MODE_1000baseT1_Full_BIT = 0x44
ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT = 0x45
ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT = 0x46
ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = 0x47
ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 0x48
ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 0x49
ETHTOOL_LINK_MODE_FEC_LLRS_BIT = 0x4a
ETHTOOL_LINK_MODE_100000baseKR_Full_BIT = 0x4b
ETHTOOL_LINK_MODE_100000baseSR_Full_BIT = 0x4c
ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = 0x4d
ETHTOOL_LINK_MODE_100000baseCR_Full_BIT = 0x4e
ETHTOOL_LINK_MODE_100000baseDR_Full_BIT = 0x4f
ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = 0x50
ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = 0x51
ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 0x52
ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = 0x53
ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = 0x54
ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = 0x55
ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = 0x56
ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 0x57
ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 0x58
ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 0x59
ETHTOOL_LINK_MODE_100baseFX_Half_BIT = 0x5a
ETHTOOL_LINK_MODE_100baseFX_Full_BIT = 0x5b
ETHTOOL_MSG_USER_NONE = 0x0
ETHTOOL_MSG_STRSET_GET = 0x1
ETHTOOL_MSG_LINKINFO_GET = 0x2
ETHTOOL_MSG_LINKINFO_SET = 0x3
ETHTOOL_MSG_LINKMODES_GET = 0x4
ETHTOOL_MSG_LINKMODES_SET = 0x5
ETHTOOL_MSG_LINKSTATE_GET = 0x6
ETHTOOL_MSG_DEBUG_GET = 0x7
ETHTOOL_MSG_DEBUG_SET = 0x8
ETHTOOL_MSG_WOL_GET = 0x9
ETHTOOL_MSG_WOL_SET = 0xa
ETHTOOL_MSG_FEATURES_GET = 0xb
ETHTOOL_MSG_FEATURES_SET = 0xc
ETHTOOL_MSG_PRIVFLAGS_GET = 0xd
ETHTOOL_MSG_PRIVFLAGS_SET = 0xe
ETHTOOL_MSG_RINGS_GET = 0xf
ETHTOOL_MSG_RINGS_SET = 0x10
ETHTOOL_MSG_CHANNELS_GET = 0x11
ETHTOOL_MSG_CHANNELS_SET = 0x12
ETHTOOL_MSG_COALESCE_GET = 0x13
ETHTOOL_MSG_COALESCE_SET = 0x14
ETHTOOL_MSG_PAUSE_GET = 0x15
ETHTOOL_MSG_PAUSE_SET = 0x16
ETHTOOL_MSG_EEE_GET = 0x17
ETHTOOL_MSG_EEE_SET = 0x18
ETHTOOL_MSG_TSINFO_GET = 0x19
ETHTOOL_MSG_CABLE_TEST_ACT = 0x1a
ETHTOOL_MSG_CABLE_TEST_TDR_ACT = 0x1b
ETHTOOL_MSG_TUNNEL_INFO_GET = 0x1c
ETHTOOL_MSG_USER_MAX = 0x1c
ETHTOOL_MSG_KERNEL_NONE = 0x0
ETHTOOL_MSG_STRSET_GET_REPLY = 0x1
ETHTOOL_MSG_LINKINFO_GET_REPLY = 0x2
ETHTOOL_MSG_LINKINFO_NTF = 0x3
ETHTOOL_MSG_LINKMODES_GET_REPLY = 0x4
ETHTOOL_MSG_LINKMODES_NTF = 0x5
ETHTOOL_MSG_LINKSTATE_GET_REPLY = 0x6
ETHTOOL_MSG_DEBUG_GET_REPLY = 0x7
ETHTOOL_MSG_DEBUG_NTF = 0x8
ETHTOOL_MSG_WOL_GET_REPLY = 0x9
ETHTOOL_MSG_WOL_NTF = 0xa
ETHTOOL_MSG_FEATURES_GET_REPLY = 0xb
ETHTOOL_MSG_FEATURES_SET_REPLY = 0xc
ETHTOOL_MSG_FEATURES_NTF = 0xd
ETHTOOL_MSG_PRIVFLAGS_GET_REPLY = 0xe
ETHTOOL_MSG_PRIVFLAGS_NTF = 0xf
ETHTOOL_MSG_RINGS_GET_REPLY = 0x10
ETHTOOL_MSG_RINGS_NTF = 0x11
ETHTOOL_MSG_CHANNELS_GET_REPLY = 0x12
ETHTOOL_MSG_CHANNELS_NTF = 0x13
ETHTOOL_MSG_COALESCE_GET_REPLY = 0x14
ETHTOOL_MSG_COALESCE_NTF = 0x15
ETHTOOL_MSG_PAUSE_GET_REPLY = 0x16
ETHTOOL_MSG_PAUSE_NTF = 0x17
ETHTOOL_MSG_EEE_GET_REPLY = 0x18
ETHTOOL_MSG_EEE_NTF = 0x19
ETHTOOL_MSG_TSINFO_GET_REPLY = 0x1a
ETHTOOL_MSG_CABLE_TEST_NTF = 0x1b
ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 0x1c
ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 0x1d
ETHTOOL_MSG_KERNEL_MAX = 0x1d
ETHTOOL_A_HEADER_UNSPEC = 0x0
ETHTOOL_A_HEADER_DEV_INDEX = 0x1
ETHTOOL_A_HEADER_DEV_NAME = 0x2
ETHTOOL_A_HEADER_FLAGS = 0x3
ETHTOOL_A_HEADER_MAX = 0x3
ETHTOOL_A_BITSET_BIT_UNSPEC = 0x0
ETHTOOL_A_BITSET_BIT_INDEX = 0x1
ETHTOOL_A_BITSET_BIT_NAME = 0x2
ETHTOOL_A_BITSET_BIT_VALUE = 0x3
ETHTOOL_A_BITSET_BIT_MAX = 0x3
ETHTOOL_A_BITSET_BITS_UNSPEC = 0x0
ETHTOOL_A_BITSET_BITS_BIT = 0x1
ETHTOOL_A_BITSET_BITS_MAX = 0x1
ETHTOOL_A_BITSET_UNSPEC = 0x0
ETHTOOL_A_BITSET_NOMASK = 0x1
ETHTOOL_A_BITSET_SIZE = 0x2
ETHTOOL_A_BITSET_BITS = 0x3
ETHTOOL_A_BITSET_VALUE = 0x4
ETHTOOL_A_BITSET_MASK = 0x5
ETHTOOL_A_BITSET_MAX = 0x5
ETHTOOL_A_STRING_UNSPEC = 0x0
ETHTOOL_A_STRING_INDEX = 0x1
ETHTOOL_A_STRING_VALUE = 0x2
ETHTOOL_A_STRING_MAX = 0x2
ETHTOOL_A_STRINGS_UNSPEC = 0x0
ETHTOOL_A_STRINGS_STRING = 0x1
ETHTOOL_A_STRINGS_MAX = 0x1
ETHTOOL_A_STRINGSET_UNSPEC = 0x0
ETHTOOL_A_STRINGSET_ID = 0x1
ETHTOOL_A_STRINGSET_COUNT = 0x2
ETHTOOL_A_STRINGSET_STRINGS = 0x3
ETHTOOL_A_STRINGSET_MAX = 0x3
ETHTOOL_A_STRINGSETS_UNSPEC = 0x0
ETHTOOL_A_STRINGSETS_STRINGSET = 0x1
ETHTOOL_A_STRINGSETS_MAX = 0x1
ETHTOOL_A_STRSET_UNSPEC = 0x0
ETHTOOL_A_STRSET_HEADER = 0x1
ETHTOOL_A_STRSET_STRINGSETS = 0x2
ETHTOOL_A_STRSET_COUNTS_ONLY = 0x3
ETHTOOL_A_STRSET_MAX = 0x3
ETHTOOL_A_LINKINFO_UNSPEC = 0x0
ETHTOOL_A_LINKINFO_HEADER = 0x1
ETHTOOL_A_LINKINFO_PORT = 0x2
ETHTOOL_A_LINKINFO_PHYADDR = 0x3
ETHTOOL_A_LINKINFO_TP_MDIX = 0x4
ETHTOOL_A_LINKINFO_TP_MDIX_CTRL = 0x5
ETHTOOL_A_LINKINFO_TRANSCEIVER = 0x6
ETHTOOL_A_LINKINFO_MAX = 0x6
ETHTOOL_A_LINKMODES_UNSPEC = 0x0
ETHTOOL_A_LINKMODES_HEADER = 0x1
ETHTOOL_A_LINKMODES_AUTONEG = 0x2
ETHTOOL_A_LINKMODES_OURS = 0x3
ETHTOOL_A_LINKMODES_PEER = 0x4
ETHTOOL_A_LINKMODES_SPEED = 0x5
ETHTOOL_A_LINKMODES_DUPLEX = 0x6
ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG = 0x7
ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE = 0x8
ETHTOOL_A_LINKMODES_MAX = 0x8
ETHTOOL_A_LINKSTATE_UNSPEC = 0x0
ETHTOOL_A_LINKSTATE_HEADER = 0x1
ETHTOOL_A_LINKSTATE_LINK = 0x2
ETHTOOL_A_LINKSTATE_SQI = 0x3
ETHTOOL_A_LINKSTATE_SQI_MAX = 0x4
ETHTOOL_A_LINKSTATE_EXT_STATE = 0x5
ETHTOOL_A_LINKSTATE_EXT_SUBSTATE = 0x6
ETHTOOL_A_LINKSTATE_MAX = 0x6
ETHTOOL_A_DEBUG_UNSPEC = 0x0
ETHTOOL_A_DEBUG_HEADER = 0x1
ETHTOOL_A_DEBUG_MSGMASK = 0x2
ETHTOOL_A_DEBUG_MAX = 0x2
ETHTOOL_A_WOL_UNSPEC = 0x0
ETHTOOL_A_WOL_HEADER = 0x1
ETHTOOL_A_WOL_MODES = 0x2
ETHTOOL_A_WOL_SOPASS = 0x3
ETHTOOL_A_WOL_MAX = 0x3
ETHTOOL_A_FEATURES_UNSPEC = 0x0
ETHTOOL_A_FEATURES_HEADER = 0x1
ETHTOOL_A_FEATURES_HW = 0x2
ETHTOOL_A_FEATURES_WANTED = 0x3
ETHTOOL_A_FEATURES_ACTIVE = 0x4
ETHTOOL_A_FEATURES_NOCHANGE = 0x5
ETHTOOL_A_FEATURES_MAX = 0x5
ETHTOOL_A_PRIVFLAGS_UNSPEC = 0x0
ETHTOOL_A_PRIVFLAGS_HEADER = 0x1
ETHTOOL_A_PRIVFLAGS_FLAGS = 0x2
ETHTOOL_A_PRIVFLAGS_MAX = 0x2
ETHTOOL_A_RINGS_UNSPEC = 0x0
ETHTOOL_A_RINGS_HEADER = 0x1
ETHTOOL_A_RINGS_RX_MAX = 0x2
ETHTOOL_A_RINGS_RX_MINI_MAX = 0x3
ETHTOOL_A_RINGS_RX_JUMBO_MAX = 0x4
ETHTOOL_A_RINGS_TX_MAX = 0x5
ETHTOOL_A_RINGS_RX = 0x6
ETHTOOL_A_RINGS_RX_MINI = 0x7
ETHTOOL_A_RINGS_RX_JUMBO = 0x8
ETHTOOL_A_RINGS_TX = 0x9
ETHTOOL_A_RINGS_MAX = 0x9
ETHTOOL_A_CHANNELS_UNSPEC = 0x0
ETHTOOL_A_CHANNELS_HEADER = 0x1
ETHTOOL_A_CHANNELS_RX_MAX = 0x2
ETHTOOL_A_CHANNELS_TX_MAX = 0x3
ETHTOOL_A_CHANNELS_OTHER_MAX = 0x4
ETHTOOL_A_CHANNELS_COMBINED_MAX = 0x5
ETHTOOL_A_CHANNELS_RX_COUNT = 0x6
ETHTOOL_A_CHANNELS_TX_COUNT = 0x7
ETHTOOL_A_CHANNELS_OTHER_COUNT = 0x8
ETHTOOL_A_CHANNELS_COMBINED_COUNT = 0x9
ETHTOOL_A_CHANNELS_MAX = 0x9
ETHTOOL_A_COALESCE_UNSPEC = 0x0
ETHTOOL_A_COALESCE_HEADER = 0x1
ETHTOOL_A_COALESCE_RX_USECS = 0x2
ETHTOOL_A_COALESCE_RX_MAX_FRAMES = 0x3
ETHTOOL_A_COALESCE_RX_USECS_IRQ = 0x4
ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ = 0x5
ETHTOOL_A_COALESCE_TX_USECS = 0x6
ETHTOOL_A_COALESCE_TX_MAX_FRAMES = 0x7
ETHTOOL_A_COALESCE_TX_USECS_IRQ = 0x8
ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ = 0x9
ETHTOOL_A_COALESCE_STATS_BLOCK_USECS = 0xa
ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX = 0xb
ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX = 0xc
ETHTOOL_A_COALESCE_PKT_RATE_LOW = 0xd
ETHTOOL_A_COALESCE_RX_USECS_LOW = 0xe
ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW = 0xf
ETHTOOL_A_COALESCE_TX_USECS_LOW = 0x10
ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW = 0x11
ETHTOOL_A_COALESCE_PKT_RATE_HIGH = 0x12
ETHTOOL_A_COALESCE_RX_USECS_HIGH = 0x13
ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH = 0x14
ETHTOOL_A_COALESCE_TX_USECS_HIGH = 0x15
ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH = 0x16
ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 0x17
ETHTOOL_A_COALESCE_MAX = 0x17
ETHTOOL_A_PAUSE_UNSPEC = 0x0
ETHTOOL_A_PAUSE_HEADER = 0x1
ETHTOOL_A_PAUSE_AUTONEG = 0x2
ETHTOOL_A_PAUSE_RX = 0x3
ETHTOOL_A_PAUSE_TX = 0x4
ETHTOOL_A_PAUSE_STATS = 0x5
ETHTOOL_A_PAUSE_MAX = 0x5
ETHTOOL_A_PAUSE_STAT_UNSPEC = 0x0
ETHTOOL_A_PAUSE_STAT_PAD = 0x1
ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 0x2
ETHTOOL_A_PAUSE_STAT_RX_FRAMES = 0x3
ETHTOOL_A_PAUSE_STAT_MAX = 0x3
ETHTOOL_A_EEE_UNSPEC = 0x0
ETHTOOL_A_EEE_HEADER = 0x1
ETHTOOL_A_EEE_MODES_OURS = 0x2
ETHTOOL_A_EEE_MODES_PEER = 0x3
ETHTOOL_A_EEE_ACTIVE = 0x4
ETHTOOL_A_EEE_ENABLED = 0x5
ETHTOOL_A_EEE_TX_LPI_ENABLED = 0x6
ETHTOOL_A_EEE_TX_LPI_TIMER = 0x7
ETHTOOL_A_EEE_MAX = 0x7
ETHTOOL_A_TSINFO_UNSPEC = 0x0
ETHTOOL_A_TSINFO_HEADER = 0x1
ETHTOOL_A_TSINFO_TIMESTAMPING = 0x2
ETHTOOL_A_TSINFO_TX_TYPES = 0x3
ETHTOOL_A_TSINFO_RX_FILTERS = 0x4
ETHTOOL_A_TSINFO_PHC_INDEX = 0x5
ETHTOOL_A_TSINFO_MAX = 0x5
ETHTOOL_A_CABLE_TEST_UNSPEC = 0x0
ETHTOOL_A_CABLE_TEST_HEADER = 0x1
ETHTOOL_A_CABLE_TEST_MAX = 0x1
ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC = 0x0
ETHTOOL_A_CABLE_RESULT_CODE_OK = 0x1
ETHTOOL_A_CABLE_RESULT_CODE_OPEN = 0x2
ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT = 0x3
ETHTOOL_A_CABLE_RESULT_CODE_CROSS_SHORT = 0x4
ETHTOOL_A_CABLE_PAIR_A = 0x0
ETHTOOL_A_CABLE_PAIR_B = 0x1
ETHTOOL_A_CABLE_PAIR_C = 0x2
ETHTOOL_A_CABLE_PAIR_D = 0x3
ETHTOOL_A_CABLE_RESULT_UNSPEC = 0x0
ETHTOOL_A_CABLE_RESULT_PAIR = 0x1
ETHTOOL_A_CABLE_RESULT_CODE = 0x2
ETHTOOL_A_CABLE_RESULT_MAX = 0x2
ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC = 0x0
ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR = 0x1
ETHTOOL_A_CABLE_FAULT_LENGTH_CM = 0x2
ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 0x2
ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC = 0x0
ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED = 0x1
ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = 0x2
ETHTOOL_A_CABLE_NEST_UNSPEC = 0x0
ETHTOOL_A_CABLE_NEST_RESULT = 0x1
ETHTOOL_A_CABLE_NEST_FAULT_LENGTH = 0x2
ETHTOOL_A_CABLE_NEST_MAX = 0x2
ETHTOOL_A_CABLE_TEST_NTF_UNSPEC = 0x0
ETHTOOL_A_CABLE_TEST_NTF_HEADER = 0x1
ETHTOOL_A_CABLE_TEST_NTF_STATUS = 0x2
ETHTOOL_A_CABLE_TEST_NTF_NEST = 0x3
ETHTOOL_A_CABLE_TEST_NTF_MAX = 0x3
ETHTOOL_A_CABLE_TEST_TDR_CFG_UNSPEC = 0x0
ETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST = 0x1
ETHTOOL_A_CABLE_TEST_TDR_CFG_LAST = 0x2
ETHTOOL_A_CABLE_TEST_TDR_CFG_STEP = 0x3
ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR = 0x4
ETHTOOL_A_CABLE_TEST_TDR_CFG_MAX = 0x4
ETHTOOL_A_CABLE_TEST_TDR_UNSPEC = 0x0
ETHTOOL_A_CABLE_TEST_TDR_HEADER = 0x1
ETHTOOL_A_CABLE_TEST_TDR_CFG = 0x2
ETHTOOL_A_CABLE_TEST_TDR_MAX = 0x2
ETHTOOL_A_CABLE_AMPLITUDE_UNSPEC = 0x0
ETHTOOL_A_CABLE_AMPLITUDE_PAIR = 0x1
ETHTOOL_A_CABLE_AMPLITUDE_mV = 0x2
ETHTOOL_A_CABLE_AMPLITUDE_MAX = 0x2
ETHTOOL_A_CABLE_PULSE_UNSPEC = 0x0
ETHTOOL_A_CABLE_PULSE_mV = 0x1
ETHTOOL_A_CABLE_PULSE_MAX = 0x1
ETHTOOL_A_CABLE_STEP_UNSPEC = 0x0
ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE = 0x1
ETHTOOL_A_CABLE_STEP_LAST_DISTANCE = 0x2
ETHTOOL_A_CABLE_STEP_STEP_DISTANCE = 0x3
ETHTOOL_A_CABLE_STEP_MAX = 0x3
ETHTOOL_A_CABLE_TDR_NEST_UNSPEC = 0x0
ETHTOOL_A_CABLE_TDR_NEST_STEP = 0x1
ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE = 0x2
ETHTOOL_A_CABLE_TDR_NEST_PULSE = 0x3
ETHTOOL_A_CABLE_TDR_NEST_MAX = 0x3
ETHTOOL_A_CABLE_TEST_TDR_NTF_UNSPEC = 0x0
ETHTOOL_A_CABLE_TEST_TDR_NTF_HEADER = 0x1
ETHTOOL_A_CABLE_TEST_TDR_NTF_STATUS = 0x2
ETHTOOL_A_CABLE_TEST_TDR_NTF_NEST = 0x3
ETHTOOL_A_CABLE_TEST_TDR_NTF_MAX = 0x3
ETHTOOL_UDP_TUNNEL_TYPE_VXLAN = 0x0
ETHTOOL_UDP_TUNNEL_TYPE_GENEVE = 0x1
ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE = 0x2
ETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC = 0x0
ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT = 0x1
ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE = 0x2
ETHTOOL_A_TUNNEL_UDP_ENTRY_MAX = 0x2
ETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC = 0x0
ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE = 0x1
ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES = 0x2
ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY = 0x3
ETHTOOL_A_TUNNEL_UDP_TABLE_MAX = 0x3
ETHTOOL_A_TUNNEL_UDP_UNSPEC = 0x0
ETHTOOL_A_TUNNEL_UDP_TABLE = 0x1
ETHTOOL_A_TUNNEL_UDP_MAX = 0x1
ETHTOOL_A_TUNNEL_INFO_UNSPEC = 0x0
ETHTOOL_A_TUNNEL_INFO_HEADER = 0x1
ETHTOOL_A_TUNNEL_INFO_UDP_PORTS = 0x2
ETHTOOL_A_TUNNEL_INFO_MAX = 0x2
)

View File

@@ -18,9 +18,11 @@ import (
)
type Handle uintptr
type HWND uintptr
const (
InvalidHandle = ^Handle(0)
InvalidHWND = ^HWND(0)
// Flags for DefineDosDevice.
DDD_EXACT_MATCH_ON_REMOVE = 0x00000004
@@ -214,6 +216,10 @@ func NewCallbackCDecl(fn interface{}) uintptr {
//sys CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) = CreateProcessW
//sys OpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) (handle Handle, err error)
//sys ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int32) (err error) [failretval<=32] = shell32.ShellExecuteW
//sys GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) = user32.GetWindowThreadProcessId
//sys GetShellWindow() (shellWindow HWND) = user32.GetShellWindow
//sys MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) [failretval==0] = user32.MessageBoxW
//sys ExitWindowsEx(flags uint32, reason uint32) (err error) = user32.ExitWindowsEx
//sys shGetKnownFolderPath(id *KNOWNFOLDERID, flags uint32, token Token, path **uint16) (ret error) = shell32.SHGetKnownFolderPath
//sys TerminateProcess(handle Handle, exitcode uint32) (err error)
//sys GetExitCodeProcess(handle Handle, exitcode *uint32) (err error)
@@ -259,22 +265,32 @@ func NewCallbackCDecl(fn interface{}) uintptr {
//sys VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) = kernel32.VirtualProtect
//sys TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) = mswsock.TransmitFile
//sys ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) = kernel32.ReadDirectoryChangesW
//sys FindFirstChangeNotification(path string, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.FindFirstChangeNotificationW
//sys FindNextChangeNotification(handle Handle) (err error)
//sys FindCloseChangeNotification(handle Handle) (err error)
//sys CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) = crypt32.CertOpenSystemStoreW
//sys CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) = crypt32.CertOpenStore
//sys CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) = crypt32.CertOpenStore
//sys CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) [failretval==nil] = crypt32.CertEnumCertificatesInStore
//sys CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) = crypt32.CertAddCertificateContextToStore
//sys CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) = crypt32.CertAddCertificateContextToStore
//sys CertCloseStore(store Handle, flags uint32) (err error) = crypt32.CertCloseStore
//sys CertDeleteCertificateFromStore(certContext *CertContext) (err error) = crypt32.CertDeleteCertificateFromStore
//sys CertDuplicateCertificateContext(certContext *CertContext) (dupContext *CertContext) = crypt32.CertDuplicateCertificateContext
//sys PFXImportCertStore(pfx *CryptDataBlob, password *uint16, flags uint32) (store Handle, err error) = crypt32.PFXImportCertStore
//sys CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) = crypt32.CertGetCertificateChain
//sys CertFreeCertificateChain(ctx *CertChainContext) = crypt32.CertFreeCertificateChain
//sys CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) [failretval==nil] = crypt32.CertCreateCertificateContext
//sys CertFreeCertificateContext(ctx *CertContext) (err error) = crypt32.CertFreeCertificateContext
//sys CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) = crypt32.CertVerifyCertificateChainPolicy
//sys PFXImportCertStore(pfx *CryptDataBlob, password *uint16, flags uint32) (store Handle, err error) = crypt32.PFXImportCertStore
//sys CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) = crypt32.CertGetCertificateChain
//sys CertFreeCertificateChain(ctx *CertChainContext) = crypt32.CertFreeCertificateChain
//sys CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) [failretval==nil] = crypt32.CertCreateCertificateContext
//sys CertFreeCertificateContext(ctx *CertContext) (err error) = crypt32.CertFreeCertificateContext
//sys CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) = crypt32.CertVerifyCertificateChainPolicy
//sys CertGetNameString(certContext *CertContext, nameType uint32, flags uint32, typePara unsafe.Pointer, name *uint16, size uint32) (chars uint32) = crypt32.CertGetNameStringW
//sys CertFindExtension(objId *byte, countExtensions uint32, extensions *CertExtension) (ret *CertExtension) = crypt32.CertFindExtension
//sys CertFindCertificateInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevCertContext *CertContext) (cert *CertContext, err error) [failretval==nil] = crypt32.CertFindCertificateInStore
//sys CertFindChainInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevChainContext *CertChainContext) (certchain *CertChainContext, err error) [failretval==nil] = crypt32.CertFindChainInStore
//sys CryptAcquireCertificatePrivateKey(cert *CertContext, flags uint32, parameters unsafe.Pointer, cryptProvOrNCryptKey *Handle, keySpec *uint32, callerFreeProvOrNCryptKey *bool) (err error) = crypt32.CryptAcquireCertificatePrivateKey
//sys CryptQueryObject(objectType uint32, object unsafe.Pointer, expectedContentTypeFlags uint32, expectedFormatTypeFlags uint32, flags uint32, msgAndCertEncodingType *uint32, contentType *uint32, formatType *uint32, certStore *Handle, msg *Handle, context *unsafe.Pointer) (err error) = crypt32.CryptQueryObject
//sys CryptDecodeObject(encodingType uint32, structType *byte, encodedBytes *byte, lenEncodedBytes uint32, flags uint32, decoded unsafe.Pointer, decodedLen *uint32) (err error) = crypt32.CryptDecodeObject
//sys CryptProtectData(dataIn *DataBlob, name *uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) = crypt32.CryptProtectData
//sys CryptUnprotectData(dataIn *DataBlob, name **uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) = crypt32.CryptUnprotectData
//sys WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) = wintrust.WinVerifyTrustEx
//sys RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) = advapi32.RegOpenKeyExW
//sys RegCloseKey(key Handle) (regerrno error) = advapi32.RegCloseKey
//sys RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen *uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegQueryInfoKeyW
@@ -347,8 +363,6 @@ func NewCallbackCDecl(fn interface{}) uintptr {
//sys QueryDosDevice(deviceName *uint16, targetPath *uint16, max uint32) (n uint32, err error) [failretval==0] = QueryDosDeviceW
//sys SetVolumeLabel(rootPathName *uint16, volumeName *uint16) (err error) = SetVolumeLabelW
//sys SetVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16) (err error) = SetVolumeMountPointW
//sys MessageBox(hwnd Handle, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) [failretval==0] = user32.MessageBoxW
//sys ExitWindowsEx(flags uint32, reason uint32) (err error) = user32.ExitWindowsEx
//sys InitiateSystemShutdownEx(machineName *uint16, message *uint16, timeout uint32, forceAppsClosed bool, rebootAfterShutdown bool, reason uint32) (err error) = advapi32.InitiateSystemShutdownExW
//sys SetProcessShutdownParameters(level uint32, flags uint32) (err error) = kernel32.SetProcessShutdownParameters
//sys GetProcessShutdownParameters(level *uint32, flags *uint32) (err error) = kernel32.GetProcessShutdownParameters

View File

@@ -227,7 +227,7 @@ const (
)
const (
// filters for ReadDirectoryChangesW
// filters for ReadDirectoryChangesW and FindFirstChangeNotificationW
FILE_NOTIFY_CHANGE_FILE_NAME = 0x001
FILE_NOTIFY_CHANGE_DIR_NAME = 0x002
FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x004
@@ -538,6 +538,67 @@ const (
CERT_CLOSE_STORE_FORCE_FLAG = 0x00000001
CERT_CLOSE_STORE_CHECK_FLAG = 0x00000002
/* CryptQueryObject object type */
CERT_QUERY_OBJECT_FILE = 1
CERT_QUERY_OBJECT_BLOB = 2
/* CryptQueryObject content type flags */
CERT_QUERY_CONTENT_CERT = 1
CERT_QUERY_CONTENT_CTL = 2
CERT_QUERY_CONTENT_CRL = 3
CERT_QUERY_CONTENT_SERIALIZED_STORE = 4
CERT_QUERY_CONTENT_SERIALIZED_CERT = 5
CERT_QUERY_CONTENT_SERIALIZED_CTL = 6
CERT_QUERY_CONTENT_SERIALIZED_CRL = 7
CERT_QUERY_CONTENT_PKCS7_SIGNED = 8
CERT_QUERY_CONTENT_PKCS7_UNSIGNED = 9
CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED = 10
CERT_QUERY_CONTENT_PKCS10 = 11
CERT_QUERY_CONTENT_PFX = 12
CERT_QUERY_CONTENT_CERT_PAIR = 13
CERT_QUERY_CONTENT_PFX_AND_LOAD = 14
CERT_QUERY_CONTENT_FLAG_CERT = (1 << CERT_QUERY_CONTENT_CERT)
CERT_QUERY_CONTENT_FLAG_CTL = (1 << CERT_QUERY_CONTENT_CTL)
CERT_QUERY_CONTENT_FLAG_CRL = (1 << CERT_QUERY_CONTENT_CRL)
CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE = (1 << CERT_QUERY_CONTENT_SERIALIZED_STORE)
CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT = (1 << CERT_QUERY_CONTENT_SERIALIZED_CERT)
CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL = (1 << CERT_QUERY_CONTENT_SERIALIZED_CTL)
CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL = (1 << CERT_QUERY_CONTENT_SERIALIZED_CRL)
CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED = (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED)
CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED = (1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED)
CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED = (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED)
CERT_QUERY_CONTENT_FLAG_PKCS10 = (1 << CERT_QUERY_CONTENT_PKCS10)
CERT_QUERY_CONTENT_FLAG_PFX = (1 << CERT_QUERY_CONTENT_PFX)
CERT_QUERY_CONTENT_FLAG_CERT_PAIR = (1 << CERT_QUERY_CONTENT_CERT_PAIR)
CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD = (1 << CERT_QUERY_CONTENT_PFX_AND_LOAD)
CERT_QUERY_CONTENT_FLAG_ALL = (CERT_QUERY_CONTENT_FLAG_CERT | CERT_QUERY_CONTENT_FLAG_CTL | CERT_QUERY_CONTENT_FLAG_CRL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | CERT_QUERY_CONTENT_FLAG_PKCS10 | CERT_QUERY_CONTENT_FLAG_PFX | CERT_QUERY_CONTENT_FLAG_CERT_PAIR)
CERT_QUERY_CONTENT_FLAG_ALL_ISSUER_CERT = (CERT_QUERY_CONTENT_FLAG_CERT | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED)
/* CryptQueryObject format type flags */
CERT_QUERY_FORMAT_BINARY = 1
CERT_QUERY_FORMAT_BASE64_ENCODED = 2
CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED = 3
CERT_QUERY_FORMAT_FLAG_BINARY = (1 << CERT_QUERY_FORMAT_BINARY)
CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED = (1 << CERT_QUERY_FORMAT_BASE64_ENCODED)
CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED = (1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED)
CERT_QUERY_FORMAT_FLAG_ALL = (CERT_QUERY_FORMAT_FLAG_BINARY | CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED)
/* CertGetNameString name types */
CERT_NAME_EMAIL_TYPE = 1
CERT_NAME_RDN_TYPE = 2
CERT_NAME_ATTR_TYPE = 3
CERT_NAME_SIMPLE_DISPLAY_TYPE = 4
CERT_NAME_FRIENDLY_DISPLAY_TYPE = 5
CERT_NAME_DNS_TYPE = 6
CERT_NAME_URL_TYPE = 7
CERT_NAME_UPN_TYPE = 8
/* CertGetNameString flags */
CERT_NAME_ISSUER_FLAG = 0x1
CERT_NAME_DISABLE_IE4_UTF8_FLAG = 0x10000
CERT_NAME_SEARCH_ALL_NAMES_FLAG = 0x2
CERT_NAME_STR_ENABLE_PUNYCODE_FLAG = 0x00200000
/* AuthType values for SSLExtraCertChainPolicyPara struct */
AUTHTYPE_CLIENT = 1
AUTHTYPE_SERVER = 2
@@ -548,6 +609,22 @@ const (
SECURITY_FLAG_IGNORE_WRONG_USAGE = 0x00000200
SECURITY_FLAG_IGNORE_CERT_CN_INVALID = 0x00001000
SECURITY_FLAG_IGNORE_CERT_DATE_INVALID = 0x00002000
/* Flags for Crypt[Un]ProtectData */
CRYPTPROTECT_UI_FORBIDDEN = 0x1
CRYPTPROTECT_LOCAL_MACHINE = 0x4
CRYPTPROTECT_CRED_SYNC = 0x8
CRYPTPROTECT_AUDIT = 0x10
CRYPTPROTECT_NO_RECOVERY = 0x20
CRYPTPROTECT_VERIFY_PROTECTION = 0x40
CRYPTPROTECT_CRED_REGENERATE = 0x80
/* Flags for CryptProtectPromptStruct */
CRYPTPROTECT_PROMPT_ON_UNPROTECT = 1
CRYPTPROTECT_PROMPT_ON_PROTECT = 2
CRYPTPROTECT_PROMPT_RESERVED = 4
CRYPTPROTECT_PROMPT_STRONG = 8
CRYPTPROTECT_PROMPT_REQUIRE_STRONG = 16
)
const (
@@ -570,10 +647,58 @@ const (
REALTIME_PRIORITY_CLASS = 0x00000100
)
/* wintrust.h constants for WinVerifyTrustEx */
const (
WTD_UI_ALL = 1
WTD_UI_NONE = 2
WTD_UI_NOBAD = 3
WTD_UI_NOGOOD = 4
WTD_REVOKE_NONE = 0
WTD_REVOKE_WHOLECHAIN = 1
WTD_CHOICE_FILE = 1
WTD_CHOICE_CATALOG = 2
WTD_CHOICE_BLOB = 3
WTD_CHOICE_SIGNER = 4
WTD_CHOICE_CERT = 5
WTD_STATEACTION_IGNORE = 0x00000000
WTD_STATEACTION_VERIFY = 0x00000010
WTD_STATEACTION_CLOSE = 0x00000002
WTD_STATEACTION_AUTO_CACHE = 0x00000003
WTD_STATEACTION_AUTO_CACHE_FLUSH = 0x00000004
WTD_USE_IE4_TRUST_FLAG = 0x1
WTD_NO_IE4_CHAIN_FLAG = 0x2
WTD_NO_POLICY_USAGE_FLAG = 0x4
WTD_REVOCATION_CHECK_NONE = 0x10
WTD_REVOCATION_CHECK_END_CERT = 0x20
WTD_REVOCATION_CHECK_CHAIN = 0x40
WTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT = 0x80
WTD_SAFER_FLAG = 0x100
WTD_HASH_ONLY_FLAG = 0x200
WTD_USE_DEFAULT_OSVER_CHECK = 0x400
WTD_LIFETIME_SIGNING_FLAG = 0x800
WTD_CACHE_ONLY_URL_RETRIEVAL = 0x1000
WTD_DISABLE_MD2_MD4 = 0x2000
WTD_MOTW = 0x4000
WTD_UICONTEXT_EXECUTE = 0
WTD_UICONTEXT_INSTALL = 1
)
var (
OID_PKIX_KP_SERVER_AUTH = []byte("1.3.6.1.5.5.7.3.1\x00")
OID_SERVER_GATED_CRYPTO = []byte("1.3.6.1.4.1.311.10.3.3\x00")
OID_SGC_NETSCAPE = []byte("2.16.840.1.113730.4.1\x00")
WINTRUST_ACTION_GENERIC_VERIFY_V2 = GUID{
Data1: 0xaac56b,
Data2: 0xcd44,
Data3: 0x11d0,
Data4: [8]byte{0x8c, 0xc2, 0x0, 0xc0, 0x4f, 0xc2, 0x95, 0xee},
}
)
// Pointer represents a pointer to an arbitrary Windows type.
@@ -1162,7 +1287,57 @@ type MibIfRow struct {
}
type CertInfo struct {
// Not implemented
Version uint32
SerialNumber CryptIntegerBlob
SignatureAlgorithm CryptAlgorithmIdentifier
Issuer CertNameBlob
NotBefore Filetime
NotAfter Filetime
Subject CertNameBlob
SubjectPublicKeyInfo CertPublicKeyInfo
IssuerUniqueId CryptBitBlob
SubjectUniqueId CryptBitBlob
CountExtensions uint32
Extensions *CertExtension
}
type CertExtension struct {
ObjId *byte
Critical int32
Value CryptObjidBlob
}
type CryptAlgorithmIdentifier struct {
ObjId *byte
Parameters CryptObjidBlob
}
type CertPublicKeyInfo struct {
Algorithm CryptAlgorithmIdentifier
PublicKey CryptBitBlob
}
type DataBlob struct {
Size uint32
Data *byte
}
type CryptIntegerBlob DataBlob
type CryptUintBlob DataBlob
type CryptObjidBlob DataBlob
type CertNameBlob DataBlob
type CertRdnValueBlob DataBlob
type CertBlob DataBlob
type CrlBlob DataBlob
type CryptDataBlob DataBlob
type CryptHashBlob DataBlob
type CryptDigestBlob DataBlob
type CryptDerBlob DataBlob
type CryptAttrBlob DataBlob
type CryptBitBlob struct {
Size uint32
Data *byte
UnusedBits uint32
}
type CertContext struct {
@@ -1268,6 +1443,34 @@ type CertChainPolicyStatus struct {
ExtraPolicyStatus Pointer
}
type CertPolicyInfo struct {
Identifier *byte
CountQualifiers uint32
Qualifiers *CertPolicyQualifierInfo
}
type CertPoliciesInfo struct {
Count uint32
PolicyInfos *CertPolicyInfo
}
type CertPolicyQualifierInfo struct {
// Not implemented
}
type CertStrongSignPara struct {
Size uint32
InfoChoice uint32
InfoOrSerializedInfoOrOID unsafe.Pointer
}
type CryptProtectPromptStruct struct {
Size uint32
PromptFlags uint32
App HWND
Prompt *uint16
}
type CertChainFindByIssuerPara struct {
Size uint32
UsageIdentifier *byte
@@ -1279,9 +1482,36 @@ type CertChainFindByIssuerPara struct {
FindArg Pointer
}
type CryptDataBlob struct {
Size uint32
Data *byte
type WinTrustData struct {
Size uint32
PolicyCallbackData uintptr
SIPClientData uintptr
UIChoice uint32
RevocationChecks uint32
UnionChoice uint32
FileOrCatalogOrBlobOrSgnrOrCert unsafe.Pointer
StateAction uint32
StateData Handle
URLReference *uint16
ProvFlags uint32
UIContext uint32
SignatureSettings *WinTrustSignatureSettings
}
type WinTrustFileInfo struct {
Size uint32
FilePath *uint16
File Handle
KnownSubject *GUID
}
type WinTrustSignatureSettings struct {
Size uint32
Index uint32
Flags uint32
SecondarySigs uint32
VerifiedSigIndex uint32
CryptoPolicy *CertStrongSignPara
}
const (

View File

@@ -51,6 +51,7 @@ var (
modshell32 = NewLazySystemDLL("shell32.dll")
moduser32 = NewLazySystemDLL("user32.dll")
moduserenv = NewLazySystemDLL("userenv.dll")
modwintrust = NewLazySystemDLL("wintrust.dll")
modws2_32 = NewLazySystemDLL("ws2_32.dll")
modwtsapi32 = NewLazySystemDLL("wtsapi32.dll")
@@ -147,13 +148,19 @@ var (
procCertEnumCertificatesInStore = modcrypt32.NewProc("CertEnumCertificatesInStore")
procCertFindCertificateInStore = modcrypt32.NewProc("CertFindCertificateInStore")
procCertFindChainInStore = modcrypt32.NewProc("CertFindChainInStore")
procCertFindExtension = modcrypt32.NewProc("CertFindExtension")
procCertFreeCertificateChain = modcrypt32.NewProc("CertFreeCertificateChain")
procCertFreeCertificateContext = modcrypt32.NewProc("CertFreeCertificateContext")
procCertGetCertificateChain = modcrypt32.NewProc("CertGetCertificateChain")
procCertGetNameStringW = modcrypt32.NewProc("CertGetNameStringW")
procCertOpenStore = modcrypt32.NewProc("CertOpenStore")
procCertOpenSystemStoreW = modcrypt32.NewProc("CertOpenSystemStoreW")
procCertVerifyCertificateChainPolicy = modcrypt32.NewProc("CertVerifyCertificateChainPolicy")
procCryptAcquireCertificatePrivateKey = modcrypt32.NewProc("CryptAcquireCertificatePrivateKey")
procCryptDecodeObject = modcrypt32.NewProc("CryptDecodeObject")
procCryptProtectData = modcrypt32.NewProc("CryptProtectData")
procCryptQueryObject = modcrypt32.NewProc("CryptQueryObject")
procCryptUnprotectData = modcrypt32.NewProc("CryptUnprotectData")
procPFXImportCertStore = modcrypt32.NewProc("PFXImportCertStore")
procDnsNameCompare_W = moddnsapi.NewProc("DnsNameCompare_W")
procDnsQuery_W = moddnsapi.NewProc("DnsQuery_W")
@@ -186,9 +193,12 @@ var (
procDuplicateHandle = modkernel32.NewProc("DuplicateHandle")
procExitProcess = modkernel32.NewProc("ExitProcess")
procFindClose = modkernel32.NewProc("FindClose")
procFindCloseChangeNotification = modkernel32.NewProc("FindCloseChangeNotification")
procFindFirstChangeNotificationW = modkernel32.NewProc("FindFirstChangeNotificationW")
procFindFirstFileW = modkernel32.NewProc("FindFirstFileW")
procFindFirstVolumeMountPointW = modkernel32.NewProc("FindFirstVolumeMountPointW")
procFindFirstVolumeW = modkernel32.NewProc("FindFirstVolumeW")
procFindNextChangeNotification = modkernel32.NewProc("FindNextChangeNotification")
procFindNextFileW = modkernel32.NewProc("FindNextFileW")
procFindNextVolumeMountPointW = modkernel32.NewProc("FindNextVolumeMountPointW")
procFindNextVolumeW = modkernel32.NewProc("FindNextVolumeW")
@@ -344,10 +354,13 @@ var (
procSHGetKnownFolderPath = modshell32.NewProc("SHGetKnownFolderPath")
procShellExecuteW = modshell32.NewProc("ShellExecuteW")
procExitWindowsEx = moduser32.NewProc("ExitWindowsEx")
procGetShellWindow = moduser32.NewProc("GetShellWindow")
procGetWindowThreadProcessId = moduser32.NewProc("GetWindowThreadProcessId")
procMessageBoxW = moduser32.NewProc("MessageBoxW")
procCreateEnvironmentBlock = moduserenv.NewProc("CreateEnvironmentBlock")
procDestroyEnvironmentBlock = moduserenv.NewProc("DestroyEnvironmentBlock")
procGetUserProfileDirectoryW = moduserenv.NewProc("GetUserProfileDirectoryW")
procWinVerifyTrustEx = modwintrust.NewProc("WinVerifyTrustEx")
procFreeAddrInfoW = modws2_32.NewProc("FreeAddrInfoW")
procGetAddrInfoW = modws2_32.NewProc("GetAddrInfoW")
procWSACleanup = modws2_32.NewProc("WSACleanup")
@@ -1218,6 +1231,12 @@ func CertFindChainInStore(store Handle, certEncodingType uint32, findFlags uint3
return
}
func CertFindExtension(objId *byte, countExtensions uint32, extensions *CertExtension) (ret *CertExtension) {
r0, _, _ := syscall.Syscall(procCertFindExtension.Addr(), 3, uintptr(unsafe.Pointer(objId)), uintptr(countExtensions), uintptr(unsafe.Pointer(extensions)))
ret = (*CertExtension)(unsafe.Pointer(r0))
return
}
func CertFreeCertificateChain(ctx *CertChainContext) {
syscall.Syscall(procCertFreeCertificateChain.Addr(), 1, uintptr(unsafe.Pointer(ctx)), 0, 0)
return
@@ -1239,6 +1258,12 @@ func CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, a
return
}
func CertGetNameString(certContext *CertContext, nameType uint32, flags uint32, typePara unsafe.Pointer, name *uint16, size uint32) (chars uint32) {
r0, _, _ := syscall.Syscall6(procCertGetNameStringW.Addr(), 6, uintptr(unsafe.Pointer(certContext)), uintptr(nameType), uintptr(flags), uintptr(typePara), uintptr(unsafe.Pointer(name)), uintptr(size))
chars = uint32(r0)
return
}
func CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) {
r0, _, e1 := syscall.Syscall6(procCertOpenStore.Addr(), 5, uintptr(storeProvider), uintptr(msgAndCertEncodingType), uintptr(cryptProv), uintptr(flags), uintptr(para), 0)
handle = Handle(r0)
@@ -1278,6 +1303,38 @@ func CryptAcquireCertificatePrivateKey(cert *CertContext, flags uint32, paramete
return
}
func CryptDecodeObject(encodingType uint32, structType *byte, encodedBytes *byte, lenEncodedBytes uint32, flags uint32, decoded unsafe.Pointer, decodedLen *uint32) (err error) {
r1, _, e1 := syscall.Syscall9(procCryptDecodeObject.Addr(), 7, uintptr(encodingType), uintptr(unsafe.Pointer(structType)), uintptr(unsafe.Pointer(encodedBytes)), uintptr(lenEncodedBytes), uintptr(flags), uintptr(decoded), uintptr(unsafe.Pointer(decodedLen)), 0, 0)
if r1 == 0 {
err = errnoErr(e1)
}
return
}
func CryptProtectData(dataIn *DataBlob, name *uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) {
r1, _, e1 := syscall.Syscall9(procCryptProtectData.Addr(), 7, uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut)), 0, 0)
if r1 == 0 {
err = errnoErr(e1)
}
return
}
func CryptQueryObject(objectType uint32, object unsafe.Pointer, expectedContentTypeFlags uint32, expectedFormatTypeFlags uint32, flags uint32, msgAndCertEncodingType *uint32, contentType *uint32, formatType *uint32, certStore *Handle, msg *Handle, context *unsafe.Pointer) (err error) {
r1, _, e1 := syscall.Syscall12(procCryptQueryObject.Addr(), 11, uintptr(objectType), uintptr(object), uintptr(expectedContentTypeFlags), uintptr(expectedFormatTypeFlags), uintptr(flags), uintptr(unsafe.Pointer(msgAndCertEncodingType)), uintptr(unsafe.Pointer(contentType)), uintptr(unsafe.Pointer(formatType)), uintptr(unsafe.Pointer(certStore)), uintptr(unsafe.Pointer(msg)), uintptr(unsafe.Pointer(context)), 0)
if r1 == 0 {
err = errnoErr(e1)
}
return
}
func CryptUnprotectData(dataIn *DataBlob, name **uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) {
r1, _, e1 := syscall.Syscall9(procCryptUnprotectData.Addr(), 7, uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut)), 0, 0)
if r1 == 0 {
err = errnoErr(e1)
}
return
}
func PFXImportCertStore(pfx *CryptDataBlob, password *uint16, flags uint32) (store Handle, err error) {
r0, _, e1 := syscall.Syscall(procPFXImportCertStore.Addr(), 3, uintptr(unsafe.Pointer(pfx)), uintptr(unsafe.Pointer(password)), uintptr(flags))
store = Handle(r0)
@@ -1557,6 +1614,36 @@ func FindClose(handle Handle) (err error) {
return
}
func FindCloseChangeNotification(handle Handle) (err error) {
r1, _, e1 := syscall.Syscall(procFindCloseChangeNotification.Addr(), 1, uintptr(handle), 0, 0)
if r1 == 0 {
err = errnoErr(e1)
}
return
}
func FindFirstChangeNotification(path string, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) {
var _p0 *uint16
_p0, err = syscall.UTF16PtrFromString(path)
if err != nil {
return
}
return _FindFirstChangeNotification(_p0, watchSubtree, notifyFilter)
}
func _FindFirstChangeNotification(path *uint16, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) {
var _p1 uint32
if watchSubtree {
_p1 = 1
}
r0, _, e1 := syscall.Syscall(procFindFirstChangeNotificationW.Addr(), 3, uintptr(unsafe.Pointer(path)), uintptr(_p1), uintptr(notifyFilter))
handle = Handle(r0)
if handle == InvalidHandle {
err = errnoErr(e1)
}
return
}
func findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) {
r0, _, e1 := syscall.Syscall(procFindFirstFileW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(data)), 0)
handle = Handle(r0)
@@ -1584,6 +1671,14 @@ func FindFirstVolume(volumeName *uint16, bufferLength uint32) (handle Handle, er
return
}
func FindNextChangeNotification(handle Handle) (err error) {
r1, _, e1 := syscall.Syscall(procFindNextChangeNotification.Addr(), 1, uintptr(handle), 0, 0)
if r1 == 0 {
err = errnoErr(e1)
}
return
}
func findNextFile1(handle Handle, data *win32finddata1) (err error) {
r1, _, e1 := syscall.Syscall(procFindNextFileW.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(data)), 0)
if r1 == 0 {
@@ -2930,7 +3025,22 @@ func ExitWindowsEx(flags uint32, reason uint32) (err error) {
return
}
func MessageBox(hwnd Handle, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) {
func GetShellWindow() (shellWindow HWND) {
r0, _, _ := syscall.Syscall(procGetShellWindow.Addr(), 0, 0, 0, 0)
shellWindow = HWND(r0)
return
}
func GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) {
r0, _, e1 := syscall.Syscall(procGetWindowThreadProcessId.Addr(), 2, uintptr(hwnd), uintptr(unsafe.Pointer(pid)), 0)
tid = uint32(r0)
if tid == 0 {
err = errnoErr(e1)
}
return
}
func MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) {
r0, _, e1 := syscall.Syscall6(procMessageBoxW.Addr(), 4, uintptr(hwnd), uintptr(unsafe.Pointer(text)), uintptr(unsafe.Pointer(caption)), uintptr(boxtype), 0, 0)
ret = int32(r0)
if ret == 0 {
@@ -2967,6 +3077,14 @@ func GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) {
return
}
func WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) {
r0, _, _ := syscall.Syscall(procWinVerifyTrustEx.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(actionId)), uintptr(unsafe.Pointer(data)))
if r0 != 0 {
ret = syscall.Errno(r0)
}
return
}
func FreeAddrInfoW(addrinfo *AddrinfoW) {
syscall.Syscall(procFreeAddrInfoW.Addr(), 1, uintptr(unsafe.Pointer(addrinfo)), 0, 0)
return