Merge branch 'master' into patch-1
This commit is contained in:
commit
c443a71f63
38
CHANGELOG.md
38
CHANGELOG.md
|
@ -1,27 +1,29 @@
|
|||
## 0.12.7 (Unreleased)
|
||||
## 0.12.8 (Unreleased)
|
||||
## 0.12.7 (August 22, 2019)
|
||||
|
||||
NEW FEATURES:
|
||||
* New functions `regex` and `regexall` allow applying a regular expression pattern to a string and retrieving any matching substring(s) [GH-22353]
|
||||
* New functions `regex` and `regexall` allow applying a regular expression pattern to a string and retrieving any matching substring(s) ([#22353](https://github.com/hashicorp/terraform/issues/22353))
|
||||
|
||||
ENHANCEMENTS:
|
||||
* lang/funcs: `lookup()` can work with maps of lists, maps and objects [GH-22269]
|
||||
* SDK: helper/acctest: Add function to return random IP address [GH-22312]
|
||||
* SDK: httpclient: Introduce composable `UserAgent(version)` [GH-22272]
|
||||
* connection/ssh: Support certificate authentication [GH-22156]
|
||||
* lang/funcs: `lookup()` can work with maps of lists, maps and objects ([#22269](https://github.com/hashicorp/terraform/issues/22269))
|
||||
* SDK: helper/acctest: Add function to return random IP address ([#22312](https://github.com/hashicorp/terraform/issues/22312))
|
||||
* SDK: httpclient: Introduce composable `UserAgent(version)` ([#22272](https://github.com/hashicorp/terraform/issues/22272))
|
||||
* connection/ssh: Support certificate authentication ([#22156](https://github.com/hashicorp/terraform/issues/22156))
|
||||
|
||||
BUG FIXES:
|
||||
* config: reduce MinItems and MaxItems validation during decoding, to allow for use of dynamic blocks [GH-22530]
|
||||
* config: don't validate MinItems and MaxItems in CoerceValue, allowing providers to set incomplete values [GH-22478]
|
||||
* config: fix panic on tuples with `for_each` [GH-22279]
|
||||
* config: fix references to `each` of `for_each` in provisioners [GH-22289]
|
||||
* config: fix panic when using nested dynamic blocks [GH-22314]
|
||||
* config: ensure consistent evaluation when moving between single resources and `for_each` in addressing [GH-22454]
|
||||
* command: fix issue where commands occasionally exited before the error message printed [GH-22373]
|
||||
* command/0.12upgrade: use user-supplied plugin-dir [GH-22306]
|
||||
* command/hook_ui: Truncate the ID considering multibyte characters [GH-18823]
|
||||
* command/fmt: Terraform fmt no longer inserts spaces after % [GH-22356]
|
||||
* command/state: Allow moving resources to modules not yet in state [GH-22299]
|
||||
* backend/google: Now using the OAuth2 token endpoint on `googleapis.com` instead of `google.com`. These endpoints are equivalent in functionality but `googleapis.com` hosts are resolvable from private Google Cloud Platform VPCs where other connectivity is restricted. [GH-22451]
|
||||
* config: reduce MinItems and MaxItems validation during decoding, to allow for use of dynamic blocks ([#22530](https://github.com/hashicorp/terraform/issues/22530))
|
||||
* config: don't validate MinItems and MaxItems in CoerceValue, allowing providers to set incomplete values ([#22478](https://github.com/hashicorp/terraform/issues/22478))
|
||||
* config: fix panic on tuples with `for_each` ([#22279](https://github.com/hashicorp/terraform/issues/22279))
|
||||
* config: fix references to `each` of `for_each` in provisioners ([#22289](https://github.com/hashicorp/terraform/issues/22289))
|
||||
* config: fix panic when using nested dynamic blocks ([#22314](https://github.com/hashicorp/terraform/issues/22314))
|
||||
* config: ensure consistent evaluation when moving between single resources and `for_each` in addressing ([#22454](https://github.com/hashicorp/terraform/issues/22454))
|
||||
* core: only start a single instance of each required provisioner ([#22553](https://github.com/hashicorp/terraform/issues/22553))
|
||||
* command: fix issue where commands occasionally exited before the error message printed ([#22373](https://github.com/hashicorp/terraform/issues/22373))
|
||||
* command/0.12upgrade: use user-supplied plugin-dir ([#22306](https://github.com/hashicorp/terraform/issues/22306))
|
||||
* command/hook_ui: Truncate the ID considering multibyte characters ([#18823](https://github.com/hashicorp/terraform/issues/18823))
|
||||
* command/fmt: Terraform fmt no longer inserts spaces after % ([#22356](https://github.com/hashicorp/terraform/issues/22356))
|
||||
* command/state: Allow moving resources to modules not yet in state ([#22299](https://github.com/hashicorp/terraform/issues/22299))
|
||||
* backend/google: Now using the OAuth2 token endpoint on `googleapis.com` instead of `google.com`. These endpoints are equivalent in functionality but `googleapis.com` hosts are resolvable from private Google Cloud Platform VPCs where other connectivity is restricted. ([#22451](https://github.com/hashicorp/terraform/issues/22451))
|
||||
|
||||
## 0.12.6 (July 31, 2019)
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ package oss
|
|||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
|
||||
"github.com/aliyun/alibaba-cloud-sdk-go/services/sts"
|
||||
|
@ -9,7 +10,9 @@ import (
|
|||
"github.com/hashicorp/terraform/backend"
|
||||
"github.com/hashicorp/terraform/helper/schema"
|
||||
"github.com/hashicorp/terraform/helper/validation"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"runtime"
|
||||
"strings"
|
||||
|
||||
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
|
||||
|
@ -134,6 +137,17 @@ func New() backend.Backend {
|
|||
},
|
||||
|
||||
"assume_role": assumeRoleSchema(),
|
||||
"shared_credentials_file": {
|
||||
Type: schema.TypeString,
|
||||
Optional: true,
|
||||
Description: "This is the path to the shared credentials file. If this is not set and a profile is specified, `~/.aliyun/config.json` will be used.",
|
||||
},
|
||||
"profile": {
|
||||
Type: schema.TypeString,
|
||||
Optional: true,
|
||||
Description: "This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the `ALICLOUD_PROFILE` environment variable.",
|
||||
DefaultFunc: schema.EnvDefaultFunc("ALICLOUD_PROFILE", ""),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -159,7 +173,7 @@ func assumeRoleSchema() *schema.Schema {
|
|||
Type: schema.TypeString,
|
||||
Optional: true,
|
||||
Description: "The session name to use when assuming the role.",
|
||||
DefaultFunc: schema.EnvDefaultFunc("ALICLOUD_ASSUME_ROLE_SESSION_NAME", "terraform"),
|
||||
DefaultFunc: schema.EnvDefaultFunc("ALICLOUD_ASSUME_ROLE_SESSION_NAME", ""),
|
||||
},
|
||||
"policy": {
|
||||
Type: schema.TypeString,
|
||||
|
@ -171,7 +185,6 @@ func assumeRoleSchema() *schema.Schema {
|
|||
Optional: true,
|
||||
Description: "The time after which the established session for assuming role expires.",
|
||||
ValidateFunc: validation.IntBetween(900, 3600),
|
||||
DefaultFunc: schema.EnvDefaultFunc("ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION", 3600),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -209,28 +222,68 @@ func (b *Backend) configure(ctx context.Context) error {
|
|||
b.serverSideEncryption = d.Get("encrypt").(bool)
|
||||
b.acl = d.Get("acl").(string)
|
||||
|
||||
accessKey := d.Get("access_key").(string)
|
||||
secretKey := d.Get("secret_key").(string)
|
||||
securityToken := d.Get("security_token").(string)
|
||||
region := d.Get("region").(string)
|
||||
var getBackendConfig = func(str string, key string) string {
|
||||
if str == "" {
|
||||
value, err := getConfigFromProfile(d, key)
|
||||
if err == nil && value != nil {
|
||||
str = value.(string)
|
||||
}
|
||||
}
|
||||
return str
|
||||
}
|
||||
|
||||
accessKey := getBackendConfig(d.Get("access_key").(string), "access_key_id")
|
||||
secretKey := getBackendConfig(d.Get("secret_key").(string), "access_key_secret")
|
||||
securityToken := getBackendConfig(d.Get("security_token").(string), "sts_token")
|
||||
region := getBackendConfig(d.Get("region").(string), "region_id")
|
||||
|
||||
endpoint := d.Get("endpoint").(string)
|
||||
schma := "https"
|
||||
|
||||
roleArn := getBackendConfig("", "ram_role_arn")
|
||||
sessionName := getBackendConfig("", "ram_session_name")
|
||||
var policy string
|
||||
var sessionExpiration int
|
||||
expiredSeconds, err := getConfigFromProfile(d, "expired_seconds")
|
||||
if err == nil && expiredSeconds != nil {
|
||||
sessionExpiration = (int)(expiredSeconds.(float64))
|
||||
}
|
||||
|
||||
if v, ok := d.GetOk("assume_role"); ok {
|
||||
for _, v := range v.(*schema.Set).List() {
|
||||
assumeRole := v.(map[string]interface{})
|
||||
roleArn := assumeRole["role_arn"].(string)
|
||||
sessionName := assumeRole["session_name"].(string)
|
||||
policy := assumeRole["policy"].(string)
|
||||
sessionExpiration := assumeRole["session_expiration"].(int)
|
||||
subAccessKeyId, subAccessKeySecret, subSecurityToken, err := getAssumeRoleAK(accessKey, secretKey, region, roleArn, sessionName, policy, sessionExpiration)
|
||||
if err != nil {
|
||||
return err
|
||||
if assumeRole["role_arn"].(string) != "" {
|
||||
roleArn = assumeRole["role_arn"].(string)
|
||||
}
|
||||
if assumeRole["session_name"].(string) != "" {
|
||||
sessionName = assumeRole["session_name"].(string)
|
||||
}
|
||||
if sessionName == "" {
|
||||
sessionName = "terraform"
|
||||
}
|
||||
policy = assumeRole["policy"].(string)
|
||||
sessionExpiration = assumeRole["session_expiration"].(int)
|
||||
if sessionExpiration == 0 {
|
||||
if v := os.Getenv("ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION"); v != "" {
|
||||
if expiredSeconds, err := strconv.Atoi(v); err == nil {
|
||||
sessionExpiration = expiredSeconds
|
||||
}
|
||||
}
|
||||
if sessionExpiration == 0 {
|
||||
sessionExpiration = 3600
|
||||
}
|
||||
}
|
||||
accessKey, secretKey, securityToken = subAccessKeyId, subAccessKeySecret, subSecurityToken
|
||||
}
|
||||
}
|
||||
|
||||
if roleArn != "" {
|
||||
subAccessKeyId, subAccessKeySecret, subSecurityToken, err := getAssumeRoleAK(accessKey, secretKey, region, roleArn, sessionName, policy, sessionExpiration)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
accessKey, secretKey, securityToken = subAccessKeyId, subAccessKeySecret, subSecurityToken
|
||||
}
|
||||
|
||||
if endpoint == "" {
|
||||
endpointItem, _ := b.getOSSEndpointByRegion(accessKey, secretKey, securityToken, region)
|
||||
if endpointItem != nil && len(endpointItem.Endpoint) > 0 {
|
||||
|
@ -382,3 +435,71 @@ func (a *Invoker) Run(f func() error) error {
|
|||
}
|
||||
return err
|
||||
}
|
||||
|
||||
var providerConfig map[string]interface{}
|
||||
|
||||
func getConfigFromProfile(d *schema.ResourceData, ProfileKey string) (interface{}, error) {
|
||||
|
||||
if providerConfig == nil {
|
||||
if v, ok := d.GetOk("profile"); !ok || v.(string) == "" {
|
||||
return nil, nil
|
||||
}
|
||||
current := d.Get("profile").(string)
|
||||
profilePath := d.Get("shared_credentials_file").(string)
|
||||
if profilePath == "" {
|
||||
profilePath = fmt.Sprintf("%s/.aliyun/config.json", os.Getenv("HOME"))
|
||||
if runtime.GOOS == "windows" {
|
||||
profilePath = fmt.Sprintf("%s/.aliyun/config.json", os.Getenv("USERPROFILE"))
|
||||
}
|
||||
}
|
||||
providerConfig = make(map[string]interface{})
|
||||
_, err := os.Stat(profilePath)
|
||||
if !os.IsNotExist(err) {
|
||||
data, err := ioutil.ReadFile(profilePath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
config := map[string]interface{}{}
|
||||
err = json.Unmarshal(data, &config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range config["profiles"].([]interface{}) {
|
||||
if current == v.(map[string]interface{})["name"] {
|
||||
providerConfig = v.(map[string]interface{})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mode := ""
|
||||
if v, ok := providerConfig["mode"]; ok {
|
||||
mode = v.(string)
|
||||
} else {
|
||||
return v, nil
|
||||
}
|
||||
switch ProfileKey {
|
||||
case "access_key_id", "access_key_secret":
|
||||
if mode == "EcsRamRole" {
|
||||
return "", nil
|
||||
}
|
||||
case "ram_role_name":
|
||||
if mode != "EcsRamRole" {
|
||||
return "", nil
|
||||
}
|
||||
case "sts_token":
|
||||
if mode != "StsToken" {
|
||||
return "", nil
|
||||
}
|
||||
case "ram_role_arn", "ram_session_name":
|
||||
if mode != "RamRoleArn" {
|
||||
return "", nil
|
||||
}
|
||||
case "expired_seconds":
|
||||
if mode != "RamRoleArn" {
|
||||
return float64(0), nil
|
||||
}
|
||||
}
|
||||
|
||||
return providerConfig[ProfileKey], nil
|
||||
}
|
||||
|
|
|
@ -63,6 +63,41 @@ func TestBackendConfig(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestBackendConfigProfile(t *testing.T) {
|
||||
testACC(t)
|
||||
config := map[string]interface{}{
|
||||
"region": "cn-beijing",
|
||||
"bucket": "terraform-backend-oss-test",
|
||||
"prefix": "mystate",
|
||||
"key": "first.tfstate",
|
||||
"tablestore_endpoint": "https://terraformstate.cn-beijing.ots.aliyuncs.com",
|
||||
"tablestore_table": "TableStore",
|
||||
"profile": "default",
|
||||
}
|
||||
|
||||
b := backend.TestBackendConfig(t, New(), backend.TestWrapConfig(config)).(*Backend)
|
||||
|
||||
if !strings.HasPrefix(b.ossClient.Config.Endpoint, "https://oss-cn-beijing") {
|
||||
t.Fatalf("Incorrect region was provided")
|
||||
}
|
||||
if b.bucketName != "terraform-backend-oss-test" {
|
||||
t.Fatalf("Incorrect bucketName was provided")
|
||||
}
|
||||
if b.statePrefix != "mystate" {
|
||||
t.Fatalf("Incorrect state file path was provided")
|
||||
}
|
||||
if b.stateKey != "first.tfstate" {
|
||||
t.Fatalf("Incorrect keyName was provided")
|
||||
}
|
||||
|
||||
if b.ossClient.Config.AccessKeyID == "" {
|
||||
t.Fatalf("No Access Key Id was provided")
|
||||
}
|
||||
if b.ossClient.Config.AccessKeySecret == "" {
|
||||
t.Fatalf("No Secret Access Key was provided")
|
||||
}
|
||||
}
|
||||
|
||||
func TestBackendConfig_invalidKey(t *testing.T) {
|
||||
testACC(t)
|
||||
cfg := hcl2shim.HCL2ValueFromConfigValue(map[string]interface{}{
|
||||
|
|
|
@ -2,7 +2,9 @@ package s3
|
|||
|
||||
import (
|
||||
"context"
|
||||
"encoding/base64"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
|
@ -185,6 +187,21 @@ func New() backend.Backend {
|
|||
Default: false,
|
||||
},
|
||||
|
||||
"sse_customer_key": {
|
||||
Type: schema.TypeString,
|
||||
Optional: true,
|
||||
Description: "The base64-encoded encryption key to use for server-side encryption with customer-provided keys (SSE-C).",
|
||||
DefaultFunc: schema.EnvDefaultFunc("AWS_SSE_CUSTOMER_KEY", ""),
|
||||
Sensitive: true,
|
||||
ValidateFunc: func(v interface{}, s string) ([]string, []error) {
|
||||
key := v.(string)
|
||||
if key != "" && len(key) != 44 {
|
||||
return nil, []error{errors.New("sse_customer_key must be 44 characters in length (256 bits, base64 encoded)")}
|
||||
}
|
||||
return nil, nil
|
||||
},
|
||||
},
|
||||
|
||||
"role_arn": {
|
||||
Type: schema.TypeString,
|
||||
Optional: true,
|
||||
|
@ -255,13 +272,14 @@ type Backend struct {
|
|||
s3Client *s3.S3
|
||||
dynClient *dynamodb.DynamoDB
|
||||
|
||||
bucketName string
|
||||
keyName string
|
||||
serverSideEncryption bool
|
||||
acl string
|
||||
kmsKeyID string
|
||||
ddbTable string
|
||||
workspaceKeyPrefix string
|
||||
bucketName string
|
||||
keyName string
|
||||
serverSideEncryption bool
|
||||
customerEncryptionKey []byte
|
||||
acl string
|
||||
kmsKeyID string
|
||||
ddbTable string
|
||||
workspaceKeyPrefix string
|
||||
}
|
||||
|
||||
func (b *Backend) configure(ctx context.Context) error {
|
||||
|
@ -280,10 +298,23 @@ func (b *Backend) configure(ctx context.Context) error {
|
|||
|
||||
b.bucketName = data.Get("bucket").(string)
|
||||
b.keyName = data.Get("key").(string)
|
||||
b.serverSideEncryption = data.Get("encrypt").(bool)
|
||||
b.acl = data.Get("acl").(string)
|
||||
b.kmsKeyID = data.Get("kms_key_id").(string)
|
||||
b.workspaceKeyPrefix = data.Get("workspace_key_prefix").(string)
|
||||
b.serverSideEncryption = data.Get("encrypt").(bool)
|
||||
b.kmsKeyID = data.Get("kms_key_id").(string)
|
||||
|
||||
customerKeyString := data.Get("sse_customer_key").(string)
|
||||
if customerKeyString != "" {
|
||||
if b.kmsKeyID != "" {
|
||||
return errors.New(encryptionKeyConflictError)
|
||||
}
|
||||
|
||||
var err error
|
||||
b.customerEncryptionKey, err = base64.StdEncoding.DecodeString(customerKeyString)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to decode sse_customer_key: %s", err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
b.ddbTable = data.Get("dynamodb_table").(string)
|
||||
if b.ddbTable == "" {
|
||||
|
@ -330,3 +361,9 @@ func (b *Backend) configure(ctx context.Context) error {
|
|||
|
||||
return nil
|
||||
}
|
||||
|
||||
const encryptionKeyConflictError = `Cannot have both kms_key_id and sse_customer_key set.
|
||||
|
||||
The kms_key_id is used for encryption with KMS-Managed Keys (SSE-KMS)
|
||||
while sse_customer_key is used for encryption with customer-managed keys (SSE-C).
|
||||
Please choose one or the other.`
|
||||
|
|
|
@ -108,14 +108,15 @@ func (b *Backend) remoteClient(name string) (*RemoteClient, error) {
|
|||
}
|
||||
|
||||
client := &RemoteClient{
|
||||
s3Client: b.s3Client,
|
||||
dynClient: b.dynClient,
|
||||
bucketName: b.bucketName,
|
||||
path: b.path(name),
|
||||
serverSideEncryption: b.serverSideEncryption,
|
||||
acl: b.acl,
|
||||
kmsKeyID: b.kmsKeyID,
|
||||
ddbTable: b.ddbTable,
|
||||
s3Client: b.s3Client,
|
||||
dynClient: b.dynClient,
|
||||
bucketName: b.bucketName,
|
||||
path: b.path(name),
|
||||
serverSideEncryption: b.serverSideEncryption,
|
||||
customerEncryptionKey: b.customerEncryptionKey,
|
||||
acl: b.acl,
|
||||
kmsKeyID: b.kmsKeyID,
|
||||
ddbTable: b.ddbTable,
|
||||
}
|
||||
|
||||
return client, nil
|
||||
|
|
|
@ -82,6 +82,58 @@ func TestBackendConfig_invalidKey(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestBackendConfig_invalidSSECustomerKeyLength(t *testing.T) {
|
||||
testACC(t)
|
||||
cfg := hcl2shim.HCL2ValueFromConfigValue(map[string]interface{}{
|
||||
"region": "us-west-1",
|
||||
"bucket": "tf-test",
|
||||
"encrypt": true,
|
||||
"key": "state",
|
||||
"dynamodb_table": "dynamoTable",
|
||||
"sse_customer_key": "key",
|
||||
})
|
||||
|
||||
_, diags := New().PrepareConfig(cfg)
|
||||
if !diags.HasErrors() {
|
||||
t.Fatal("expected error for invalid sse_customer_key length")
|
||||
}
|
||||
}
|
||||
|
||||
func TestBackendConfig_invalidSSECustomerKeyEncoding(t *testing.T) {
|
||||
testACC(t)
|
||||
cfg := hcl2shim.HCL2ValueFromConfigValue(map[string]interface{}{
|
||||
"region": "us-west-1",
|
||||
"bucket": "tf-test",
|
||||
"encrypt": true,
|
||||
"key": "state",
|
||||
"dynamodb_table": "dynamoTable",
|
||||
"sse_customer_key": "====CT70aTYB2JGff7AjQtwbiLkwH4npICay1PWtmdka",
|
||||
})
|
||||
|
||||
diags := New().Configure(cfg)
|
||||
if !diags.HasErrors() {
|
||||
t.Fatal("expected error for failing to decode sse_customer_key")
|
||||
}
|
||||
}
|
||||
|
||||
func TestBackendConfig_conflictingEncryptionSchema(t *testing.T) {
|
||||
testACC(t)
|
||||
cfg := hcl2shim.HCL2ValueFromConfigValue(map[string]interface{}{
|
||||
"region": "us-west-1",
|
||||
"bucket": "tf-test",
|
||||
"key": "state",
|
||||
"encrypt": true,
|
||||
"dynamodb_table": "dynamoTable",
|
||||
"sse_customer_key": "1hwbcNPGWL+AwDiyGmRidTWAEVmCWMKbEHA+Es8w75o=",
|
||||
"kms_key_id": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
|
||||
})
|
||||
|
||||
diags := New().Configure(cfg)
|
||||
if !diags.HasErrors() {
|
||||
t.Fatal("expected error for simultaneous usage of kms_key_id and sse_customer_key")
|
||||
}
|
||||
}
|
||||
|
||||
func TestBackend(t *testing.T) {
|
||||
testACC(t)
|
||||
|
||||
|
@ -129,6 +181,23 @@ func TestBackendLocked(t *testing.T) {
|
|||
backend.TestBackendStateForceUnlock(t, b1, b2)
|
||||
}
|
||||
|
||||
func TestBackendSSECustomerKey(t *testing.T) {
|
||||
testACC(t)
|
||||
bucketName := fmt.Sprintf("terraform-remote-s3-test-%x", time.Now().Unix())
|
||||
|
||||
b := backend.TestBackendConfig(t, New(), backend.TestWrapConfig(map[string]interface{}{
|
||||
"bucket": bucketName,
|
||||
"encrypt": true,
|
||||
"key": "test-SSE-C",
|
||||
"sse_customer_key": "4Dm1n4rphuFgawxuzY/bEfvLf6rYK0gIjfaDSLlfXNk=",
|
||||
})).(*Backend)
|
||||
|
||||
createS3Bucket(t, b.s3Client, bucketName)
|
||||
defer deleteS3Bucket(t, b.s3Client, bucketName)
|
||||
|
||||
backend.TestBackendStates(t, b)
|
||||
}
|
||||
|
||||
// add some extra junk in S3 to try and confuse the env listing.
|
||||
func TestBackendExtraPaths(t *testing.T) {
|
||||
testACC(t)
|
||||
|
|
|
@ -3,6 +3,7 @@ package s3
|
|||
import (
|
||||
"bytes"
|
||||
"crypto/md5"
|
||||
"encoding/base64"
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
|
@ -23,19 +24,21 @@ import (
|
|||
|
||||
// Store the last saved serial in dynamo with this suffix for consistency checks.
|
||||
const (
|
||||
s3EncryptionAlgorithm = "AES256"
|
||||
stateIDSuffix = "-md5"
|
||||
s3ErrCodeInternalError = "InternalError"
|
||||
)
|
||||
|
||||
type RemoteClient struct {
|
||||
s3Client *s3.S3
|
||||
dynClient *dynamodb.DynamoDB
|
||||
bucketName string
|
||||
path string
|
||||
serverSideEncryption bool
|
||||
acl string
|
||||
kmsKeyID string
|
||||
ddbTable string
|
||||
s3Client *s3.S3
|
||||
dynClient *dynamodb.DynamoDB
|
||||
bucketName string
|
||||
path string
|
||||
serverSideEncryption bool
|
||||
customerEncryptionKey []byte
|
||||
acl string
|
||||
kmsKeyID string
|
||||
ddbTable string
|
||||
}
|
||||
|
||||
var (
|
||||
|
@ -98,10 +101,18 @@ func (c *RemoteClient) get() (*remote.Payload, error) {
|
|||
var output *s3.GetObjectOutput
|
||||
var err error
|
||||
|
||||
output, err = c.s3Client.GetObject(&s3.GetObjectInput{
|
||||
input := &s3.GetObjectInput{
|
||||
Bucket: &c.bucketName,
|
||||
Key: &c.path,
|
||||
})
|
||||
}
|
||||
|
||||
if c.serverSideEncryption && c.customerEncryptionKey != nil {
|
||||
input.SetSSECustomerKey(string(c.customerEncryptionKey))
|
||||
input.SetSSECustomerAlgorithm(s3EncryptionAlgorithm)
|
||||
input.SetSSECustomerKeyMD5(c.getSSECustomerKeyMD5())
|
||||
}
|
||||
|
||||
output, err = c.s3Client.GetObject(input)
|
||||
|
||||
if err != nil {
|
||||
if awserr, ok := err.(awserr.Error); ok {
|
||||
|
@ -152,8 +163,12 @@ func (c *RemoteClient) Put(data []byte) error {
|
|||
if c.kmsKeyID != "" {
|
||||
i.SSEKMSKeyId = &c.kmsKeyID
|
||||
i.ServerSideEncryption = aws.String("aws:kms")
|
||||
} else if c.customerEncryptionKey != nil {
|
||||
i.SetSSECustomerKey(string(c.customerEncryptionKey))
|
||||
i.SetSSECustomerAlgorithm(s3EncryptionAlgorithm)
|
||||
i.SetSSECustomerKeyMD5(c.getSSECustomerKeyMD5())
|
||||
} else {
|
||||
i.ServerSideEncryption = aws.String("AES256")
|
||||
i.ServerSideEncryption = aws.String(s3EncryptionAlgorithm)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -383,6 +398,11 @@ func (c *RemoteClient) lockPath() string {
|
|||
return fmt.Sprintf("%s/%s", c.bucketName, c.path)
|
||||
}
|
||||
|
||||
func (c *RemoteClient) getSSECustomerKeyMD5() string {
|
||||
b := md5.Sum(c.customerEncryptionKey)
|
||||
return base64.StdEncoding.EncodeToString(b[:])
|
||||
}
|
||||
|
||||
const errBadChecksumFmt = `state data in S3 does not have the expected content.
|
||||
|
||||
This may be caused by unusually long delays in S3 processing a previous state
|
||||
|
|
|
@ -17,7 +17,6 @@ import (
|
|||
|
||||
"github.com/hashicorp/hcl"
|
||||
|
||||
"github.com/hashicorp/terraform/command"
|
||||
"github.com/hashicorp/terraform/svchost"
|
||||
"github.com/hashicorp/terraform/tfdiags"
|
||||
)
|
||||
|
@ -62,10 +61,6 @@ type ConfigCredentialsHelper struct {
|
|||
// can be overridden by user configurations.
|
||||
var BuiltinConfig Config
|
||||
|
||||
// PluginOverrides are paths that override discovered plugins, set from
|
||||
// the config file.
|
||||
var PluginOverrides command.PluginOverrides
|
||||
|
||||
// ConfigFile returns the default path to the configuration file.
|
||||
//
|
||||
// On Unix-like systems this is the ".terraformrc" file in the home directory.
|
||||
|
|
|
@ -50,3 +50,8 @@ func homeDir() (string, error) {
|
|||
|
||||
return user.HomeDir, nil
|
||||
}
|
||||
|
||||
func replaceFileAtomic(source, destination string) error {
|
||||
// On Unix systems, a rename is sufficiently atomic.
|
||||
return os.Rename(source, destination)
|
||||
}
|
||||
|
|
|
@ -3,9 +3,12 @@
|
|||
package cliconfig
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"syscall"
|
||||
"unsafe"
|
||||
|
||||
"golang.org/x/sys/windows"
|
||||
)
|
||||
|
||||
var (
|
||||
|
@ -44,3 +47,25 @@ func homeDir() (string, error) {
|
|||
|
||||
return syscall.UTF16ToString(b), nil
|
||||
}
|
||||
|
||||
func replaceFileAtomic(source, destination string) error {
|
||||
// On Windows, renaming one file over another is not atomic and certain
|
||||
// error conditions can result in having only the source file and nothing
|
||||
// at the destination file. Instead, we need to call into the MoveFileEx
|
||||
// Windows API function.
|
||||
srcPtr, err := syscall.UTF16PtrFromString(source)
|
||||
if err != nil {
|
||||
return &os.LinkError{"replace", source, destination, err}
|
||||
}
|
||||
destPtr, err := syscall.UTF16PtrFromString(destination)
|
||||
if err != nil {
|
||||
return &os.LinkError{"replace", source, destination, err}
|
||||
}
|
||||
|
||||
flags := uint32(windows.MOVEFILE_REPLACE_EXISTING | windows.MOVEFILE_WRITE_THROUGH)
|
||||
err = windows.MoveFileEx(srcPtr, destPtr, flags)
|
||||
if err != nil {
|
||||
return &os.LinkError{"replace", source, destination, err}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -0,0 +1,429 @@
|
|||
package cliconfig
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/zclconf/go-cty/cty"
|
||||
ctyjson "github.com/zclconf/go-cty/cty/json"
|
||||
|
||||
"github.com/hashicorp/terraform/configs/hcl2shim"
|
||||
pluginDiscovery "github.com/hashicorp/terraform/plugin/discovery"
|
||||
"github.com/hashicorp/terraform/svchost"
|
||||
svcauth "github.com/hashicorp/terraform/svchost/auth"
|
||||
)
|
||||
|
||||
// credentialsConfigFile returns the path for the special configuration file
|
||||
// that the credentials source will use when asked to save or forget credentials
|
||||
// and when a "credentials helper" program is not active.
|
||||
func credentialsConfigFile() (string, error) {
|
||||
configDir, err := ConfigDir()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return filepath.Join(configDir, "credentials.tfrc.json"), nil
|
||||
}
|
||||
|
||||
// CredentialsSource creates and returns a service credentials source whose
|
||||
// behavior depends on which "credentials" and "credentials_helper" blocks,
|
||||
// if any, are present in the receiving config.
|
||||
func (c *Config) CredentialsSource(helperPlugins pluginDiscovery.PluginMetaSet) (*CredentialsSource, error) {
|
||||
credentialsFilePath, err := credentialsConfigFile()
|
||||
if err != nil {
|
||||
// If we managed to load a Config object at all then we would already
|
||||
// have located this file, so this error is very unlikely.
|
||||
return nil, fmt.Errorf("can't locate credentials file: %s", err)
|
||||
}
|
||||
|
||||
var helper svcauth.CredentialsSource
|
||||
var helperType string
|
||||
for givenType, givenConfig := range c.CredentialsHelpers {
|
||||
available := helperPlugins.WithName(givenType)
|
||||
if available.Count() == 0 {
|
||||
log.Printf("[ERROR] Unable to find credentials helper %q; ignoring", helperType)
|
||||
break
|
||||
}
|
||||
|
||||
selected := available.Newest()
|
||||
|
||||
helperSource := svcauth.HelperProgramCredentialsSource(selected.Path, givenConfig.Args...)
|
||||
helper = svcauth.CachingCredentialsSource(helperSource) // cached because external operation may be slow/expensive
|
||||
helperType = givenType
|
||||
|
||||
// There should only be zero or one "credentials_helper" blocks. We
|
||||
// assume that the config was validated earlier and so we don't check
|
||||
// for extras here.
|
||||
break
|
||||
}
|
||||
|
||||
return c.credentialsSource(helperType, helper, credentialsFilePath), nil
|
||||
}
|
||||
|
||||
// credentialsSource is an internal factory for the credentials source which
|
||||
// allows overriding the credentials file path, which allows setting it to
|
||||
// a temporary file location when testing.
|
||||
func (c *Config) credentialsSource(helperType string, helper svcauth.CredentialsSource, credentialsFilePath string) *CredentialsSource {
|
||||
configured := map[svchost.Hostname]cty.Value{}
|
||||
for userHost, creds := range c.Credentials {
|
||||
host, err := svchost.ForComparison(userHost)
|
||||
if err != nil {
|
||||
// We expect the config was already validated by the time we get
|
||||
// here, so we'll just ignore invalid hostnames.
|
||||
continue
|
||||
}
|
||||
|
||||
// For now our CLI config continues to use HCL 1.0, so we'll shim it
|
||||
// over to HCL 2.0 types. In future we will hopefully migrate it to
|
||||
// HCL 2.0 instead, and so it'll be a cty.Value already.
|
||||
credsV := hcl2shim.HCL2ValueFromConfigValue(creds)
|
||||
configured[host] = credsV
|
||||
}
|
||||
|
||||
writableLocal := readHostsInCredentialsFile(credentialsFilePath)
|
||||
unwritableLocal := map[svchost.Hostname]cty.Value{}
|
||||
for host, v := range configured {
|
||||
if _, exists := writableLocal[host]; !exists {
|
||||
unwritableLocal[host] = v
|
||||
}
|
||||
}
|
||||
|
||||
return &CredentialsSource{
|
||||
configured: configured,
|
||||
unwritable: unwritableLocal,
|
||||
credentialsFilePath: credentialsFilePath,
|
||||
helper: helper,
|
||||
helperType: helperType,
|
||||
}
|
||||
}
|
||||
|
||||
// CredentialsSource is an implementation of svcauth.CredentialsSource
|
||||
// that can read and write the CLI configuration, and possibly also delegate
|
||||
// to a credentials helper when configured.
|
||||
type CredentialsSource struct {
|
||||
// configured describes the credentials explicitly configured in the CLI
|
||||
// config via "credentials" blocks. This map will also change to reflect
|
||||
// any writes to the special credentials.tfrc.json file.
|
||||
configured map[svchost.Hostname]cty.Value
|
||||
|
||||
// unwritable describes any credentials explicitly configured in the
|
||||
// CLI config in any file other than credentials.tfrc.json. We cannot update
|
||||
// these automatically because only credentials.tfrc.json is subject to
|
||||
// editing by this credentials source.
|
||||
unwritable map[svchost.Hostname]cty.Value
|
||||
|
||||
// credentialsFilePath is the full path to the credentials.tfrc.json file
|
||||
// that we'll update if any changes to credentials are requested and if
|
||||
// a credentials helper isn't available to use instead.
|
||||
//
|
||||
// (This is a field here rather than just calling credentialsConfigFile
|
||||
// directly just so that we can use temporary file location instead during
|
||||
// testing.)
|
||||
credentialsFilePath string
|
||||
|
||||
// helper is the credentials source representing the configured credentials
|
||||
// helper, if any. When this is non-nil, it will be consulted for any
|
||||
// hostnames not explicitly represented in "configured". Any writes to
|
||||
// the credentials store will also be sent to a configured helper instead
|
||||
// of the credentials.tfrc.json file.
|
||||
helper svcauth.CredentialsSource
|
||||
|
||||
// helperType is the name of the type of credentials helper that is
|
||||
// referenced in "helper", or the empty string if "helper" is nil.
|
||||
helperType string
|
||||
}
|
||||
|
||||
// Assertion that credentialsSource implements CredentialsSource
|
||||
var _ svcauth.CredentialsSource = (*CredentialsSource)(nil)
|
||||
|
||||
func (s *CredentialsSource) ForHost(host svchost.Hostname) (svcauth.HostCredentials, error) {
|
||||
v, ok := s.configured[host]
|
||||
if ok {
|
||||
return svcauth.HostCredentialsFromObject(v), nil
|
||||
}
|
||||
|
||||
if s.helper != nil {
|
||||
return s.helper.ForHost(host)
|
||||
}
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (s *CredentialsSource) StoreForHost(host svchost.Hostname, credentials svcauth.HostCredentialsWritable) error {
|
||||
return s.updateHostCredentials(host, credentials)
|
||||
}
|
||||
|
||||
func (s *CredentialsSource) ForgetForHost(host svchost.Hostname) error {
|
||||
return s.updateHostCredentials(host, nil)
|
||||
}
|
||||
|
||||
// HostCredentialsLocation returns a value indicating what type of storage is
|
||||
// currently used for the credentials for the given hostname.
|
||||
//
|
||||
// The current location of credentials determines whether updates are possible
|
||||
// at all and, if they are, where any updates will be written.
|
||||
func (s *CredentialsSource) HostCredentialsLocation(host svchost.Hostname) CredentialsLocation {
|
||||
if _, unwritable := s.unwritable[host]; unwritable {
|
||||
return CredentialsInOtherFile
|
||||
}
|
||||
if _, exists := s.configured[host]; exists {
|
||||
return CredentialsInPrimaryFile
|
||||
}
|
||||
if s.helper != nil {
|
||||
return CredentialsViaHelper
|
||||
}
|
||||
return CredentialsNotAvailable
|
||||
}
|
||||
|
||||
// CredentialsFilePath returns the full path to the local credentials
|
||||
// configuration file, so that a caller can mention this path in order to
|
||||
// be transparent about where credentials will be stored.
|
||||
//
|
||||
// This file will be used for writes only if HostCredentialsLocation for the
|
||||
// relevant host returns CredentialsInPrimaryFile or CredentialsNotAvailable.
|
||||
//
|
||||
// The credentials file path is found relative to the current user's home
|
||||
// directory, so this function will return an error in the unlikely event that
|
||||
// we cannot determine a suitable home directory to resolve relative to.
|
||||
func (s *CredentialsSource) CredentialsFilePath() (string, error) {
|
||||
return s.credentialsFilePath, nil
|
||||
}
|
||||
|
||||
// CredentialsHelperType returns the name of the configured credentials helper
|
||||
// type, or an empty string if no credentials helper is configured.
|
||||
func (s *CredentialsSource) CredentialsHelperType() string {
|
||||
return s.helperType
|
||||
}
|
||||
|
||||
func (s *CredentialsSource) updateHostCredentials(host svchost.Hostname, new svcauth.HostCredentialsWritable) error {
|
||||
switch loc := s.HostCredentialsLocation(host); loc {
|
||||
case CredentialsInOtherFile:
|
||||
return ErrUnwritableHostCredentials(host)
|
||||
case CredentialsInPrimaryFile, CredentialsNotAvailable:
|
||||
// If the host already has credentials stored locally then we'll update
|
||||
// them locally too, even if there's a credentials helper configured,
|
||||
// because the user might be intentionally retaining this particular
|
||||
// host locally for some reason, e.g. if the credentials helper is
|
||||
// talking to some shared remote service like HashiCorp Vault.
|
||||
return s.updateLocalHostCredentials(host, new)
|
||||
case CredentialsViaHelper:
|
||||
// Delegate entirely to the helper, then.
|
||||
if new == nil {
|
||||
return s.helper.ForgetForHost(host)
|
||||
}
|
||||
return s.helper.StoreForHost(host, new)
|
||||
default:
|
||||
// Should never happen because the above cases are exhaustive
|
||||
return fmt.Errorf("invalid credentials location %#v", loc)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *CredentialsSource) updateLocalHostCredentials(host svchost.Hostname, new svcauth.HostCredentialsWritable) error {
|
||||
// This function updates the local credentials file in particular,
|
||||
// regardless of whether a credentials helper is active. It should be
|
||||
// called only indirectly via updateHostCredentials.
|
||||
|
||||
filename, err := s.CredentialsFilePath()
|
||||
if err != nil {
|
||||
return fmt.Errorf("unable to determine credentials file path: %s", err)
|
||||
}
|
||||
|
||||
oldSrc, err := ioutil.ReadFile(filename)
|
||||
if err != nil && !os.IsNotExist(err) {
|
||||
return fmt.Errorf("cannot read %s: %s", filename, err)
|
||||
}
|
||||
|
||||
var raw map[string]interface{}
|
||||
|
||||
if len(oldSrc) > 0 {
|
||||
// When decoding we use a custom decoder so we can decode any numbers as
|
||||
// json.Number and thus avoid losing any accuracy in our round-trip.
|
||||
dec := json.NewDecoder(bytes.NewReader(oldSrc))
|
||||
dec.UseNumber()
|
||||
err = dec.Decode(&raw)
|
||||
if err != nil {
|
||||
return fmt.Errorf("cannot read %s: %s", filename, err)
|
||||
}
|
||||
} else {
|
||||
raw = make(map[string]interface{})
|
||||
}
|
||||
|
||||
rawCredsI, ok := raw["credentials"]
|
||||
if !ok {
|
||||
rawCredsI = make(map[string]interface{})
|
||||
raw["credentials"] = rawCredsI
|
||||
}
|
||||
rawCredsMap, ok := rawCredsI.(map[string]interface{})
|
||||
if !ok {
|
||||
return fmt.Errorf("credentials file %s has invalid value for \"credentials\" property: must be a JSON object", filename)
|
||||
}
|
||||
|
||||
// We use display-oriented hostnames in our file to mimick how a human user
|
||||
// would write it, so we need to search for and remove any key that
|
||||
// normalizes to our target hostname so we won't generate something invalid
|
||||
// when the existing entry is slightly different.
|
||||
for givenHost := range rawCredsMap {
|
||||
canonHost, err := svchost.ForComparison(givenHost)
|
||||
if err == nil && canonHost == host {
|
||||
delete(rawCredsMap, givenHost)
|
||||
}
|
||||
}
|
||||
|
||||
// If we have a new object to store we'll write it in now. If the previous
|
||||
// object had the hostname written in a different way then this will
|
||||
// appear to change it into our canonical display form, with all the
|
||||
// letters in lowercase and other transforms from the Internationalized
|
||||
// Domain Names specification.
|
||||
if new != nil {
|
||||
toStore := new.ToStore()
|
||||
rawCredsMap[host.ForDisplay()] = ctyjson.SimpleJSONValue{
|
||||
Value: toStore,
|
||||
}
|
||||
}
|
||||
|
||||
newSrc, err := json.MarshalIndent(raw, "", " ")
|
||||
if err != nil {
|
||||
return fmt.Errorf("cannot serialize updated credentials file: %s", err)
|
||||
}
|
||||
|
||||
// Now we'll write our new content over the top of the existing file.
|
||||
// Because we updated the data structure surgically here we should not
|
||||
// have disturbed the meaning of any other content in the file, but it
|
||||
// might have a different JSON layout than before.
|
||||
// We'll create a new file with a different name first and then rename
|
||||
// it over the old file in order to make the change as atomically as
|
||||
// the underlying OS/filesystem will allow.
|
||||
{
|
||||
dir, file := filepath.Split(filename)
|
||||
f, err := ioutil.TempFile(dir, file)
|
||||
if err != nil {
|
||||
return fmt.Errorf("cannot create temporary file to update credentials: %s", err)
|
||||
}
|
||||
tmpName := f.Name()
|
||||
moved := false
|
||||
defer func(f *os.File, name string) {
|
||||
// Always close our file, and remove it if it's still at its
|
||||
// temporary name. We're ignoring errors here because there's
|
||||
// nothing we can do about them anyway.
|
||||
f.Close()
|
||||
if !moved {
|
||||
os.Remove(name)
|
||||
}
|
||||
}(f, tmpName)
|
||||
|
||||
// Credentials file should be readable only by its owner. (This may
|
||||
// not be effective on all platforms, but should at least work on
|
||||
// Unix-like targets and should be harmless elsewhere.)
|
||||
if err := f.Chmod(0600); err != nil {
|
||||
return fmt.Errorf("cannot set mode for temporary file %s: %s", tmpName, err)
|
||||
}
|
||||
|
||||
_, err = f.Write(newSrc)
|
||||
if err != nil {
|
||||
return fmt.Errorf("cannot write to temporary file %s: %s", tmpName, err)
|
||||
}
|
||||
|
||||
// Temporary file now replaces the original file, as atomically as
|
||||
// possible. (At the very least, we should not end up with a file
|
||||
// containing only a partial JSON object.)
|
||||
err = replaceFileAtomic(tmpName, filename)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to replace %s with temporary file %s: %s", filename, tmpName, err)
|
||||
}
|
||||
moved = true
|
||||
}
|
||||
|
||||
if new != nil {
|
||||
s.configured[host] = new.ToStore()
|
||||
} else {
|
||||
delete(s.configured, host)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// readHostsInCredentialsFile discovers which hosts have credentials configured
|
||||
// in the credentials file specifically, as opposed to in any other CLI
|
||||
// config file.
|
||||
//
|
||||
// If the credentials file isn't present or is unreadable for any reason then
|
||||
// this returns an empty set, reflecting that effectively no credentials are
|
||||
// stored there.
|
||||
func readHostsInCredentialsFile(filename string) map[svchost.Hostname]struct{} {
|
||||
src, err := ioutil.ReadFile(filename)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
var raw map[string]interface{}
|
||||
err = json.Unmarshal(src, &raw)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
rawCredsI, ok := raw["credentials"]
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
rawCredsMap, ok := rawCredsI.(map[string]interface{})
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
ret := make(map[svchost.Hostname]struct{})
|
||||
for givenHost := range rawCredsMap {
|
||||
host, err := svchost.ForComparison(givenHost)
|
||||
if err != nil {
|
||||
// We expect the config was already validated by the time we get
|
||||
// here, so we'll just ignore invalid hostnames.
|
||||
continue
|
||||
}
|
||||
ret[host] = struct{}{}
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
// ErrUnwritableHostCredentials is an error type that is returned when a caller
|
||||
// tries to write credentials for a host that has existing credentials configured
|
||||
// in a file that we cannot automatically update.
|
||||
type ErrUnwritableHostCredentials svchost.Hostname
|
||||
|
||||
func (err ErrUnwritableHostCredentials) Error() string {
|
||||
return fmt.Sprintf("cannot change credentials for %s: existing manually-configured credentials in a CLI config file", svchost.Hostname(err).ForDisplay())
|
||||
}
|
||||
|
||||
// Hostname returns the host that could not be written.
|
||||
func (err ErrUnwritableHostCredentials) Hostname() svchost.Hostname {
|
||||
return svchost.Hostname(err)
|
||||
}
|
||||
|
||||
// CredentialsLocation describes a type of storage used for the credentials
|
||||
// for a particular hostname.
|
||||
type CredentialsLocation rune
|
||||
|
||||
const (
|
||||
// CredentialsNotAvailable means that we know that there are no credential
|
||||
// available for the host.
|
||||
//
|
||||
// Note that CredentialsViaHelper might also lead to no credentials being
|
||||
// available, depending on how the helper answers when we request credentials
|
||||
// from it.
|
||||
CredentialsNotAvailable CredentialsLocation = 0
|
||||
|
||||
// CredentialsInPrimaryFile means that there is already a credentials object
|
||||
// for the host in the credentials.tfrc.json file.
|
||||
CredentialsInPrimaryFile CredentialsLocation = 'P'
|
||||
|
||||
// CredentialsInOtherFile means that there is already a credentials object
|
||||
// for the host in a CLI config file other than credentials.tfrc.json.
|
||||
CredentialsInOtherFile CredentialsLocation = 'O'
|
||||
|
||||
// CredentialsViaHelper indicates that no statically-configured credentials
|
||||
// are available for the host but a helper program is available that may
|
||||
// or may not have credentials for the host.
|
||||
CredentialsViaHelper CredentialsLocation = 'H'
|
||||
)
|
|
@ -0,0 +1,355 @@
|
|||
package cliconfig
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/google/go-cmp/cmp"
|
||||
"github.com/zclconf/go-cty/cty"
|
||||
|
||||
"github.com/hashicorp/terraform/svchost"
|
||||
svcauth "github.com/hashicorp/terraform/svchost/auth"
|
||||
)
|
||||
|
||||
func TestCredentialsForHost(t *testing.T) {
|
||||
credSrc := &CredentialsSource{
|
||||
configured: map[svchost.Hostname]cty.Value{
|
||||
"configured.example.com": cty.ObjectVal(map[string]cty.Value{
|
||||
"token": cty.StringVal("configured"),
|
||||
}),
|
||||
"unused.example.com": cty.ObjectVal(map[string]cty.Value{
|
||||
"token": cty.StringVal("incorrectly-configured"),
|
||||
}),
|
||||
},
|
||||
|
||||
// We'll use a static source to stand in for what would normally be
|
||||
// a credentials helper program, since we're only testing the logic
|
||||
// for choosing when to delegate to the helper here. The logic for
|
||||
// interacting with a helper program is tested in the svcauth package.
|
||||
helper: svcauth.StaticCredentialsSource(map[svchost.Hostname]map[string]interface{}{
|
||||
"from-helper.example.com": {
|
||||
"token": "from-helper",
|
||||
},
|
||||
|
||||
// This should be shadowed by the "configured" entry with the same
|
||||
// hostname above.
|
||||
"configured.example.com": {
|
||||
"token": "incorrectly-from-helper",
|
||||
},
|
||||
}),
|
||||
helperType: "fake",
|
||||
}
|
||||
|
||||
testReqAuthHeader := func(t *testing.T, creds svcauth.HostCredentials) string {
|
||||
t.Helper()
|
||||
|
||||
if creds == nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
req, err := http.NewRequest("GET", "http://example.com/", nil)
|
||||
if err != nil {
|
||||
t.Fatalf("cannot construct HTTP request: %s", err)
|
||||
}
|
||||
creds.PrepareRequest(req)
|
||||
return req.Header.Get("Authorization")
|
||||
}
|
||||
|
||||
t.Run("configured", func(t *testing.T) {
|
||||
creds, err := credSrc.ForHost(svchost.Hostname("configured.example.com"))
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %s", err)
|
||||
}
|
||||
if got, want := testReqAuthHeader(t, creds), "Bearer configured"; got != want {
|
||||
t.Errorf("wrong result\ngot: %s\nwant: %s", got, want)
|
||||
}
|
||||
})
|
||||
t.Run("from helper", func(t *testing.T) {
|
||||
creds, err := credSrc.ForHost(svchost.Hostname("from-helper.example.com"))
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %s", err)
|
||||
}
|
||||
if got, want := testReqAuthHeader(t, creds), "Bearer from-helper"; got != want {
|
||||
t.Errorf("wrong result\ngot: %s\nwant: %s", got, want)
|
||||
}
|
||||
})
|
||||
t.Run("not available", func(t *testing.T) {
|
||||
creds, err := credSrc.ForHost(svchost.Hostname("unavailable.example.com"))
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %s", err)
|
||||
}
|
||||
if got, want := testReqAuthHeader(t, creds), ""; got != want {
|
||||
t.Errorf("wrong result\ngot: %s\nwant: %s", got, want)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestCredentialsStoreForget(t *testing.T) {
|
||||
d, err := ioutil.TempDir("", "terraform-cliconfig-test")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer os.RemoveAll(d)
|
||||
|
||||
mockCredsFilename := filepath.Join(d, "credentials.tfrc.json")
|
||||
|
||||
cfg := &Config{
|
||||
// This simulates there being a credentials block manually configured
|
||||
// in some file _other than_ credentials.tfrc.json.
|
||||
Credentials: map[string]map[string]interface{}{
|
||||
"manually-configured.example.com": {
|
||||
"token": "manually-configured",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// We'll initially use a credentials source with no credentials helper at
|
||||
// all, and thus with credentials stored in the credentials file.
|
||||
credSrc := cfg.credentialsSource(
|
||||
"", nil,
|
||||
mockCredsFilename,
|
||||
)
|
||||
|
||||
testReqAuthHeader := func(t *testing.T, creds svcauth.HostCredentials) string {
|
||||
t.Helper()
|
||||
|
||||
if creds == nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
req, err := http.NewRequest("GET", "http://example.com/", nil)
|
||||
if err != nil {
|
||||
t.Fatalf("cannot construct HTTP request: %s", err)
|
||||
}
|
||||
creds.PrepareRequest(req)
|
||||
return req.Header.Get("Authorization")
|
||||
}
|
||||
|
||||
// Because these store/forget calls have side-effects, we'll bail out with
|
||||
// t.Fatal (or equivalent) as soon as anything unexpected happens.
|
||||
// Otherwise downstream tests might fail in confusing ways.
|
||||
{
|
||||
err := credSrc.StoreForHost(
|
||||
svchost.Hostname("manually-configured.example.com"),
|
||||
svcauth.HostCredentialsToken("not-manually-configured"),
|
||||
)
|
||||
if err == nil {
|
||||
t.Fatalf("successfully stored for manually-configured; want error")
|
||||
}
|
||||
if _, ok := err.(ErrUnwritableHostCredentials); !ok {
|
||||
t.Fatalf("wrong error type %T; want ErrUnwritableHostCredentials", err)
|
||||
}
|
||||
}
|
||||
{
|
||||
err := credSrc.ForgetForHost(
|
||||
svchost.Hostname("manually-configured.example.com"),
|
||||
)
|
||||
if err == nil {
|
||||
t.Fatalf("successfully forgot for manually-configured; want error")
|
||||
}
|
||||
if _, ok := err.(ErrUnwritableHostCredentials); !ok {
|
||||
t.Fatalf("wrong error type %T; want ErrUnwritableHostCredentials", err)
|
||||
}
|
||||
}
|
||||
{
|
||||
// We don't have a credentials file at all yet, so this first call
|
||||
// must create it.
|
||||
err := credSrc.StoreForHost(
|
||||
svchost.Hostname("stored-locally.example.com"),
|
||||
svcauth.HostCredentialsToken("stored-locally"),
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error storing locally: %s", err)
|
||||
}
|
||||
|
||||
creds, err := credSrc.ForHost(svchost.Hostname("stored-locally.example.com"))
|
||||
if err != nil {
|
||||
t.Fatalf("failed to read back stored-locally credentials: %s", err)
|
||||
}
|
||||
|
||||
if got, want := testReqAuthHeader(t, creds), "Bearer stored-locally"; got != want {
|
||||
t.Fatalf("wrong header value for stored-locally\ngot: %s\nwant: %s", got, want)
|
||||
}
|
||||
|
||||
got := readHostsInCredentialsFile(mockCredsFilename)
|
||||
want := map[svchost.Hostname]struct{}{
|
||||
svchost.Hostname("stored-locally.example.com"): struct{}{},
|
||||
}
|
||||
if diff := cmp.Diff(want, got); diff != "" {
|
||||
t.Fatalf("wrong credentials file content\n%s", diff)
|
||||
}
|
||||
}
|
||||
|
||||
// Now we'll switch to having a credential helper active.
|
||||
// If we were loading the real CLI config from disk here then this
|
||||
// entry would already be in cfg.Credentials, but we need to fake that
|
||||
// in the test because we're constructing this *Config value directly.
|
||||
cfg.Credentials["stored-locally.example.com"] = map[string]interface{}{
|
||||
"token": "stored-locally",
|
||||
}
|
||||
mockHelper := &mockCredentialsHelper{current: make(map[svchost.Hostname]cty.Value)}
|
||||
credSrc = cfg.credentialsSource(
|
||||
"mock", mockHelper,
|
||||
mockCredsFilename,
|
||||
)
|
||||
{
|
||||
err := credSrc.StoreForHost(
|
||||
svchost.Hostname("manually-configured.example.com"),
|
||||
svcauth.HostCredentialsToken("not-manually-configured"),
|
||||
)
|
||||
if err == nil {
|
||||
t.Fatalf("successfully stored for manually-configured with helper active; want error")
|
||||
}
|
||||
}
|
||||
{
|
||||
err := credSrc.StoreForHost(
|
||||
svchost.Hostname("stored-in-helper.example.com"),
|
||||
svcauth.HostCredentialsToken("stored-in-helper"),
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error storing in helper: %s", err)
|
||||
}
|
||||
|
||||
creds, err := credSrc.ForHost(svchost.Hostname("stored-in-helper.example.com"))
|
||||
if err != nil {
|
||||
t.Fatalf("failed to read back stored-in-helper credentials: %s", err)
|
||||
}
|
||||
|
||||
if got, want := testReqAuthHeader(t, creds), "Bearer stored-in-helper"; got != want {
|
||||
t.Fatalf("wrong header value for stored-in-helper\ngot: %s\nwant: %s", got, want)
|
||||
}
|
||||
|
||||
// Nothing should have changed in the saved credentials file
|
||||
got := readHostsInCredentialsFile(mockCredsFilename)
|
||||
want := map[svchost.Hostname]struct{}{
|
||||
svchost.Hostname("stored-locally.example.com"): struct{}{},
|
||||
}
|
||||
if diff := cmp.Diff(want, got); diff != "" {
|
||||
t.Fatalf("wrong credentials file content\n%s", diff)
|
||||
}
|
||||
}
|
||||
{
|
||||
// Because stored-locally is already in the credentials file, a new
|
||||
// store should be sent there rather than to the credentials helper.
|
||||
err := credSrc.StoreForHost(
|
||||
svchost.Hostname("stored-locally.example.com"),
|
||||
svcauth.HostCredentialsToken("stored-locally-again"),
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error storing locally again: %s", err)
|
||||
}
|
||||
|
||||
creds, err := credSrc.ForHost(svchost.Hostname("stored-locally.example.com"))
|
||||
if err != nil {
|
||||
t.Fatalf("failed to read back stored-locally credentials: %s", err)
|
||||
}
|
||||
|
||||
if got, want := testReqAuthHeader(t, creds), "Bearer stored-locally-again"; got != want {
|
||||
t.Fatalf("wrong header value for stored-locally\ngot: %s\nwant: %s", got, want)
|
||||
}
|
||||
}
|
||||
{
|
||||
// Forgetting a host already in the credentials file should remove it
|
||||
// from the credentials file, not from the helper.
|
||||
err := credSrc.ForgetForHost(
|
||||
svchost.Hostname("stored-locally.example.com"),
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error forgetting locally: %s", err)
|
||||
}
|
||||
|
||||
creds, err := credSrc.ForHost(svchost.Hostname("stored-locally.example.com"))
|
||||
if err != nil {
|
||||
t.Fatalf("failed to read back stored-locally credentials: %s", err)
|
||||
}
|
||||
|
||||
if got, want := testReqAuthHeader(t, creds), ""; got != want {
|
||||
t.Fatalf("wrong header value for stored-locally\ngot: %s\nwant: %s", got, want)
|
||||
}
|
||||
|
||||
// Should not be present in the credentials file anymore
|
||||
got := readHostsInCredentialsFile(mockCredsFilename)
|
||||
want := map[svchost.Hostname]struct{}{}
|
||||
if diff := cmp.Diff(want, got); diff != "" {
|
||||
t.Fatalf("wrong credentials file content\n%s", diff)
|
||||
}
|
||||
}
|
||||
{
|
||||
err := credSrc.ForgetForHost(
|
||||
svchost.Hostname("stored-in-helper.example.com"),
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error forgetting in helper: %s", err)
|
||||
}
|
||||
|
||||
creds, err := credSrc.ForHost(svchost.Hostname("stored-in-helper.example.com"))
|
||||
if err != nil {
|
||||
t.Fatalf("failed to read back stored-in-helper credentials: %s", err)
|
||||
}
|
||||
|
||||
if got, want := testReqAuthHeader(t, creds), ""; got != want {
|
||||
t.Fatalf("wrong header value for stored-in-helper\ngot: %s\nwant: %s", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
// Finally, the log in our mock helper should show that it was only
|
||||
// asked to deal with stored-in-helper, not stored-locally.
|
||||
got := mockHelper.log
|
||||
want := []mockCredentialsHelperChange{
|
||||
{
|
||||
Host: svchost.Hostname("stored-in-helper.example.com"),
|
||||
Action: "store",
|
||||
},
|
||||
{
|
||||
Host: svchost.Hostname("stored-in-helper.example.com"),
|
||||
Action: "forget",
|
||||
},
|
||||
}
|
||||
if diff := cmp.Diff(want, got); diff != "" {
|
||||
t.Errorf("unexpected credentials helper operation log\n%s", diff)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type mockCredentialsHelperChange struct {
|
||||
Host svchost.Hostname
|
||||
Action string
|
||||
}
|
||||
|
||||
type mockCredentialsHelper struct {
|
||||
current map[svchost.Hostname]cty.Value
|
||||
log []mockCredentialsHelperChange
|
||||
}
|
||||
|
||||
// Assertion that mockCredentialsHelper implements svcauth.CredentialsSource
|
||||
var _ svcauth.CredentialsSource = (*mockCredentialsHelper)(nil)
|
||||
|
||||
func (s *mockCredentialsHelper) ForHost(hostname svchost.Hostname) (svcauth.HostCredentials, error) {
|
||||
v, ok := s.current[hostname]
|
||||
if !ok {
|
||||
return nil, nil
|
||||
}
|
||||
return svcauth.HostCredentialsFromObject(v), nil
|
||||
}
|
||||
|
||||
func (s *mockCredentialsHelper) StoreForHost(hostname svchost.Hostname, new svcauth.HostCredentialsWritable) error {
|
||||
s.log = append(s.log, mockCredentialsHelperChange{
|
||||
Host: hostname,
|
||||
Action: "store",
|
||||
})
|
||||
s.current[hostname] = new.ToStore()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *mockCredentialsHelper) ForgetForHost(hostname svchost.Hostname) error {
|
||||
s.log = append(s.log, mockCredentialsHelperChange{
|
||||
Host: hostname,
|
||||
Action: "forget",
|
||||
})
|
||||
delete(s.current, hostname)
|
||||
return nil
|
||||
}
|
44
commands.go
44
commands.go
|
@ -1,7 +1,6 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
|
||||
|
@ -371,44 +370,7 @@ func makeShutdownCh() <-chan struct{} {
|
|||
return resultCh
|
||||
}
|
||||
|
||||
func credentialsSource(config *Config) auth.CredentialsSource {
|
||||
creds := auth.NoCredentials
|
||||
if len(config.Credentials) > 0 {
|
||||
staticTable := map[svchost.Hostname]map[string]interface{}{}
|
||||
for userHost, creds := range config.Credentials {
|
||||
host, err := svchost.ForComparison(userHost)
|
||||
if err != nil {
|
||||
// We expect the config was already validated by the time we get
|
||||
// here, so we'll just ignore invalid hostnames.
|
||||
continue
|
||||
}
|
||||
staticTable[host] = creds
|
||||
}
|
||||
creds = auth.StaticCredentialsSource(staticTable)
|
||||
}
|
||||
|
||||
for helperType, helperConfig := range config.CredentialsHelpers {
|
||||
log.Printf("[DEBUG] Searching for credentials helper named %q", helperType)
|
||||
available := pluginDiscovery.FindPlugins("credentials", globalPluginDirs())
|
||||
available = available.WithName(helperType)
|
||||
if available.Count() == 0 {
|
||||
log.Printf("[ERROR] Unable to find credentials helper %q; ignoring", helperType)
|
||||
break
|
||||
}
|
||||
|
||||
selected := available.Newest()
|
||||
|
||||
helperSource := auth.HelperProgramCredentialsSource(selected.Path, helperConfig.Args...)
|
||||
creds = auth.Credentials{
|
||||
creds,
|
||||
auth.CachingCredentialsSource(helperSource), // cached because external operation may be slow/expensive
|
||||
}
|
||||
|
||||
// There should only be zero or one "credentials_helper" blocks. We
|
||||
// assume that the config was validated earlier and so we don't check
|
||||
// for extras here.
|
||||
break
|
||||
}
|
||||
|
||||
return creds
|
||||
func credentialsSource(config *Config) (auth.CredentialsSource, error) {
|
||||
helperPlugins := pluginDiscovery.FindPlugins("credentials", globalPluginDirs())
|
||||
return config.CredentialsSource(helperPlugins)
|
||||
}
|
||||
|
|
1
go.mod
1
go.mod
|
@ -120,6 +120,7 @@ require (
|
|||
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4
|
||||
golang.org/x/net v0.0.0-20190502183928-7f726cade0ab
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421
|
||||
golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa
|
||||
google.golang.org/api v0.3.1
|
||||
google.golang.org/grpc v1.19.1
|
||||
gopkg.in/ini.v1 v1.42.0 // indirect
|
||||
|
|
2
go.sum
2
go.sum
|
@ -542,6 +542,8 @@ golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5h
|
|||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82 h1:vsphBvatvfbhlb4PO1BYSr9dzugGxJ/SQHoNufZJq1w=
|
||||
golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa h1:KIDDMLT1O0Nr7TSxp8xM5tJcdn8tgyAONntO829og1M=
|
||||
golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2 h1:z99zHgr7hKfrUcX/KsoJk5FJfjTceCKIp96+biqP4To=
|
||||
|
|
11
main.go
11
main.go
|
@ -145,7 +145,16 @@ func wrappedMain() int {
|
|||
|
||||
// Get any configured credentials from the config and initialize
|
||||
// a service discovery object.
|
||||
credsSrc := credentialsSource(config)
|
||||
credsSrc, err := credentialsSource(config)
|
||||
if err != nil {
|
||||
// Most commands don't actually need credentials, and most situations
|
||||
// that would get us here would already have been reported by the config
|
||||
// loading above, so we'll just log this one as an aid to debugging
|
||||
// in the unlikely event that it _does_ arise.
|
||||
log.Printf("[WARN] Cannot initialize remote host credentials manager: %s", err)
|
||||
// credsSrc may be nil in this case, but that's okay because the disco
|
||||
// object checks that and just acts as though no credentials are present.
|
||||
}
|
||||
services := disco.NewWithCredentialsSource(credsSrc)
|
||||
|
||||
// Initialize the backends.
|
||||
|
|
|
@ -43,3 +43,19 @@ func (s *cachingCredentialsSource) ForHost(host svchost.Hostname) (HostCredentia
|
|||
s.cache[host] = result
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (s *cachingCredentialsSource) StoreForHost(host svchost.Hostname, credentials HostCredentialsWritable) error {
|
||||
// We'll delete the cache entry even if the store fails, since that just
|
||||
// means that the next read will go to the real store and get a chance to
|
||||
// see which object (old or new) is actually present.
|
||||
delete(s.cache, host)
|
||||
return s.source.StoreForHost(host, credentials)
|
||||
}
|
||||
|
||||
func (s *cachingCredentialsSource) ForgetForHost(host svchost.Hostname) error {
|
||||
// We'll delete the cache entry even if the store fails, since that just
|
||||
// means that the next read will go to the real store and get a chance to
|
||||
// see if the object is still present.
|
||||
delete(s.cache, host)
|
||||
return s.source.ForgetForHost(host)
|
||||
}
|
||||
|
|
|
@ -3,8 +3,11 @@
|
|||
package auth
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/zclconf/go-cty/cty"
|
||||
|
||||
"github.com/hashicorp/terraform/svchost"
|
||||
)
|
||||
|
||||
|
@ -14,6 +17,9 @@ import (
|
|||
// A Credentials is itself a CredentialsSource, wrapping its members.
|
||||
// In principle one CredentialsSource can be nested inside another, though
|
||||
// there is no good reason to do so.
|
||||
//
|
||||
// The write operations on a Credentials are tried only on the first object,
|
||||
// under the assumption that it is the primary store.
|
||||
type Credentials []CredentialsSource
|
||||
|
||||
// NoCredentials is an empty CredentialsSource that always returns nil
|
||||
|
@ -33,6 +39,19 @@ type CredentialsSource interface {
|
|||
// If an error is returned, progress through a list of CredentialsSources
|
||||
// is halted and the error is returned to the user.
|
||||
ForHost(host svchost.Hostname) (HostCredentials, error)
|
||||
|
||||
// StoreForHost takes a HostCredentialsWritable and saves it as the
|
||||
// credentials for the given host.
|
||||
//
|
||||
// If credentials are already stored for the given host, it will try to
|
||||
// replace those credentials but may produce an error if such replacement
|
||||
// is not possible.
|
||||
StoreForHost(host svchost.Hostname, credentials HostCredentialsWritable) error
|
||||
|
||||
// ForgetForHost discards any stored credentials for the given host. It
|
||||
// does nothing and returns successfully if no credentials are saved
|
||||
// for that host.
|
||||
ForgetForHost(host svchost.Hostname) error
|
||||
}
|
||||
|
||||
// HostCredentials represents a single set of credentials for a particular
|
||||
|
@ -47,6 +66,22 @@ type HostCredentials interface {
|
|||
Token() string
|
||||
}
|
||||
|
||||
// HostCredentialsWritable is an extension of HostCredentials for credentials
|
||||
// objects that can be serialized as a JSON-compatible object value for
|
||||
// storage.
|
||||
type HostCredentialsWritable interface {
|
||||
HostCredentials
|
||||
|
||||
// ToStore returns a cty.Value, always of an object type,
|
||||
// representing data that can be serialized to represent this object
|
||||
// in persistent storage.
|
||||
//
|
||||
// The resulting value may uses only cty values that can be accepted
|
||||
// by the cty JSON encoder, though the caller may elect to instead store
|
||||
// it in some other format that has a JSON-compatible type system.
|
||||
ToStore() cty.Value
|
||||
}
|
||||
|
||||
// ForHost iterates over the contained CredentialsSource objects and
|
||||
// tries to obtain credentials for the given host from each one in turn.
|
||||
//
|
||||
|
@ -61,3 +96,23 @@ func (c Credentials) ForHost(host svchost.Hostname) (HostCredentials, error) {
|
|||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// StoreForHost passes the given arguments to the same operation on the
|
||||
// first CredentialsSource in the receiver.
|
||||
func (c Credentials) StoreForHost(host svchost.Hostname, credentials HostCredentialsWritable) error {
|
||||
if len(c) == 0 {
|
||||
return fmt.Errorf("no credentials store is available")
|
||||
}
|
||||
|
||||
return c[0].StoreForHost(host, credentials)
|
||||
}
|
||||
|
||||
// ForgetForHost passes the given arguments to the same operation on the
|
||||
// first CredentialsSource in the receiver.
|
||||
func (c Credentials) ForgetForHost(host svchost.Hostname) error {
|
||||
if len(c) == 0 {
|
||||
return fmt.Errorf("no credentials store is available")
|
||||
}
|
||||
|
||||
return c[0].ForgetForHost(host)
|
||||
}
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
package auth
|
||||
|
||||
import (
|
||||
"github.com/zclconf/go-cty/cty"
|
||||
)
|
||||
|
||||
// HostCredentialsFromMap converts a map of key-value pairs from a credentials
|
||||
// definition provided by the user (e.g. in a config file, or via a credentials
|
||||
// helper) into a HostCredentials object if possible, or returns nil if
|
||||
|
@ -16,3 +20,29 @@ func HostCredentialsFromMap(m map[string]interface{}) HostCredentials {
|
|||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// HostCredentialsFromObject converts a cty.Value of an object type into a
|
||||
// HostCredentials object if possible, or returns nil if no credentials could
|
||||
// be extracted from the map.
|
||||
//
|
||||
// This function ignores object attributes it is unfamiliar with, to allow for
|
||||
// future expansion of the credentials object structure for new credential types.
|
||||
//
|
||||
// If the given value is not of an object type, this function will panic.
|
||||
func HostCredentialsFromObject(obj cty.Value) HostCredentials {
|
||||
if !obj.Type().HasAttribute("token") {
|
||||
return nil
|
||||
}
|
||||
|
||||
tokenV := obj.GetAttr("token")
|
||||
if tokenV.IsNull() || !tokenV.IsKnown() {
|
||||
return nil
|
||||
}
|
||||
if !cty.String.Equals(tokenV.Type()) {
|
||||
// Weird, but maybe some future Terraform version accepts an object
|
||||
// here for some reason, so we'll be resilient.
|
||||
return nil
|
||||
}
|
||||
|
||||
return HostCredentialsToken(tokenV.AsString())
|
||||
}
|
||||
|
|
|
@ -7,6 +7,8 @@ import (
|
|||
"os/exec"
|
||||
"path/filepath"
|
||||
|
||||
ctyjson "github.com/zclconf/go-cty/cty/json"
|
||||
|
||||
"github.com/hashicorp/terraform/svchost"
|
||||
)
|
||||
|
||||
|
@ -78,3 +80,70 @@ func (s *helperProgramCredentialsSource) ForHost(host svchost.Hostname) (HostCre
|
|||
|
||||
return HostCredentialsFromMap(m), nil
|
||||
}
|
||||
|
||||
func (s *helperProgramCredentialsSource) StoreForHost(host svchost.Hostname, credentials HostCredentialsWritable) error {
|
||||
args := make([]string, len(s.args), len(s.args)+2)
|
||||
copy(args, s.args)
|
||||
args = append(args, "store")
|
||||
args = append(args, string(host))
|
||||
|
||||
toStore := credentials.ToStore()
|
||||
toStoreRaw, err := ctyjson.Marshal(toStore, toStore.Type())
|
||||
if err != nil {
|
||||
return fmt.Errorf("can't serialize credentials to store: %s", err)
|
||||
}
|
||||
|
||||
inReader := bytes.NewReader(toStoreRaw)
|
||||
errBuf := bytes.Buffer{}
|
||||
|
||||
cmd := exec.Cmd{
|
||||
Path: s.executable,
|
||||
Args: args,
|
||||
Stdin: inReader,
|
||||
Stderr: &errBuf,
|
||||
Stdout: nil,
|
||||
}
|
||||
err = cmd.Run()
|
||||
if _, isExitErr := err.(*exec.ExitError); isExitErr {
|
||||
errText := errBuf.String()
|
||||
if errText == "" {
|
||||
// Shouldn't happen for a well-behaved helper program
|
||||
return fmt.Errorf("error in %s, but it produced no error message", s.executable)
|
||||
}
|
||||
return fmt.Errorf("error in %s: %s", s.executable, errText)
|
||||
} else if err != nil {
|
||||
return fmt.Errorf("failed to run %s: %s", s.executable, err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *helperProgramCredentialsSource) ForgetForHost(host svchost.Hostname) error {
|
||||
args := make([]string, len(s.args), len(s.args)+2)
|
||||
copy(args, s.args)
|
||||
args = append(args, "forget")
|
||||
args = append(args, string(host))
|
||||
|
||||
errBuf := bytes.Buffer{}
|
||||
|
||||
cmd := exec.Cmd{
|
||||
Path: s.executable,
|
||||
Args: args,
|
||||
Stdin: nil,
|
||||
Stderr: &errBuf,
|
||||
Stdout: nil,
|
||||
}
|
||||
err := cmd.Run()
|
||||
if _, isExitErr := err.(*exec.ExitError); isExitErr {
|
||||
errText := errBuf.String()
|
||||
if errText == "" {
|
||||
// Shouldn't happen for a well-behaved helper program
|
||||
return fmt.Errorf("error in %s, but it produced no error message", s.executable)
|
||||
}
|
||||
return fmt.Errorf("error in %s: %s", s.executable, errText)
|
||||
} else if err != nil {
|
||||
return fmt.Errorf("failed to run %s: %s", s.executable, err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -56,4 +56,28 @@ func TestHelperProgramCredentialsSource(t *testing.T) {
|
|||
t.Error("completed successfully; want error")
|
||||
}
|
||||
})
|
||||
t.Run("store happy path", func(t *testing.T) {
|
||||
err := src.StoreForHost(svchost.Hostname("example.com"), HostCredentialsToken("example-token"))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
})
|
||||
t.Run("store error", func(t *testing.T) {
|
||||
err := src.StoreForHost(svchost.Hostname("fail.example.com"), HostCredentialsToken("example-token"))
|
||||
if err == nil {
|
||||
t.Error("completed successfully; want error")
|
||||
}
|
||||
})
|
||||
t.Run("forget happy path", func(t *testing.T) {
|
||||
err := src.ForgetForHost(svchost.Hostname("example.com"))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
})
|
||||
t.Run("forget error", func(t *testing.T) {
|
||||
err := src.ForgetForHost(svchost.Hostname("fail.example.com"))
|
||||
if err == nil {
|
||||
t.Error("completed successfully; want error")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package auth
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/hashicorp/terraform/svchost"
|
||||
)
|
||||
|
||||
|
@ -26,3 +28,11 @@ func (s staticCredentialsSource) ForHost(host svchost.Hostname) (HostCredentials
|
|||
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (s staticCredentialsSource) StoreForHost(host svchost.Hostname, credentials HostCredentialsWritable) error {
|
||||
return fmt.Errorf("can't store new credentials in a static credentials source")
|
||||
}
|
||||
|
||||
func (s staticCredentialsSource) ForgetForHost(host svchost.Hostname) error {
|
||||
return fmt.Errorf("can't discard credentials from a static credentials source")
|
||||
}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
)
|
||||
|
||||
|
@ -15,21 +17,44 @@ func main() {
|
|||
die("not enough arguments\n")
|
||||
}
|
||||
|
||||
if args[1] != "get" {
|
||||
die("unknown subcommand %q\n", args[1])
|
||||
}
|
||||
|
||||
host := args[2]
|
||||
switch args[1] {
|
||||
case "get":
|
||||
switch host {
|
||||
case "example.com":
|
||||
fmt.Print(`{"token":"example-token"}`)
|
||||
case "other-cred-type.example.com":
|
||||
fmt.Print(`{"username":"alfred"}`) // unrecognized by main program
|
||||
case "fail.example.com":
|
||||
die("failing because you told me to fail\n")
|
||||
default:
|
||||
fmt.Print("{}") // no credentials available
|
||||
}
|
||||
case "store":
|
||||
dataSrc, err := ioutil.ReadAll(os.Stdin)
|
||||
if err != nil {
|
||||
die("invalid input: %s", err)
|
||||
}
|
||||
var data map[string]interface{}
|
||||
err = json.Unmarshal(dataSrc, &data)
|
||||
|
||||
switch host {
|
||||
case "example.com":
|
||||
fmt.Print(`{"token":"example-token"}`)
|
||||
case "other-cred-type.example.com":
|
||||
fmt.Print(`{"username":"alfred"}`) // unrecognized by main program
|
||||
case "fail.example.com":
|
||||
die("failing because you told me to fail\n")
|
||||
switch host {
|
||||
case "example.com":
|
||||
if data["token"] != "example-token" {
|
||||
die("incorrect token value to store")
|
||||
}
|
||||
default:
|
||||
die("can't store credentials for %s", host)
|
||||
}
|
||||
case "forget":
|
||||
switch host {
|
||||
case "example.com":
|
||||
// okay!
|
||||
default:
|
||||
die("can't forget credentials for %s", host)
|
||||
}
|
||||
default:
|
||||
fmt.Print("{}") // no credentials available
|
||||
die("unknown subcommand %q\n", args[1])
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,13 +2,23 @@ package auth
|
|||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zclconf/go-cty/cty"
|
||||
)
|
||||
|
||||
// HostCredentialsToken is a HostCredentials implementation that represents a
|
||||
// single "bearer token", to be sent to the server via an Authorization header
|
||||
// with the auth type set to "Bearer"
|
||||
// with the auth type set to "Bearer".
|
||||
//
|
||||
// To save a token as the credentials for a host, convert the token string to
|
||||
// this type and use the result as a HostCredentialsWritable implementation.
|
||||
type HostCredentialsToken string
|
||||
|
||||
// Interface implementation assertions. Compilation will fail here if
|
||||
// HostCredentialsToken does not fully implement these interfaces.
|
||||
var _ HostCredentials = HostCredentialsToken("")
|
||||
var _ HostCredentialsWritable = HostCredentialsToken("")
|
||||
|
||||
// PrepareRequest alters the given HTTP request by setting its Authorization
|
||||
// header to the string "Bearer " followed by the encapsulated authentication
|
||||
// token.
|
||||
|
@ -23,3 +33,11 @@ func (tc HostCredentialsToken) PrepareRequest(req *http.Request) {
|
|||
func (tc HostCredentialsToken) Token() string {
|
||||
return string(tc)
|
||||
}
|
||||
|
||||
// ToStore returns a credentials object with a single attribute "token" whose
|
||||
// value is the token string.
|
||||
func (tc HostCredentialsToken) ToStore() cty.Value {
|
||||
return cty.ObjectVal(map[string]cty.Value{
|
||||
"token": cty.StringVal(string(tc)),
|
||||
})
|
||||
}
|
||||
|
|
|
@ -3,16 +3,29 @@ package auth
|
|||
import (
|
||||
"net/http"
|
||||
"testing"
|
||||
|
||||
"github.com/zclconf/go-cty/cty"
|
||||
)
|
||||
|
||||
func TestHostCredentialsToken(t *testing.T) {
|
||||
creds := HostCredentialsToken("foo-bar")
|
||||
req := &http.Request{}
|
||||
|
||||
creds.PrepareRequest(req)
|
||||
{
|
||||
req := &http.Request{}
|
||||
creds.PrepareRequest(req)
|
||||
authStr := req.Header.Get("authorization")
|
||||
if got, want := authStr, "Bearer foo-bar"; got != want {
|
||||
t.Errorf("wrong Authorization header value %q; want %q", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
authStr := req.Header.Get("authorization")
|
||||
if got, want := authStr, "Bearer foo-bar"; got != want {
|
||||
t.Errorf("wrong Authorization header value %q; want %q", got, want)
|
||||
{
|
||||
got := creds.ToStore()
|
||||
want := cty.ObjectVal(map[string]cty.Value{
|
||||
"token": cty.StringVal("foo-bar"),
|
||||
})
|
||||
if !want.RawEquals(got) {
|
||||
t.Errorf("wrong storable object value\ngot: %#v\nwant: %#v", got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -111,27 +111,177 @@ func (h *Host) ServiceURL(id string) (*url.URL, error) {
|
|||
return nil, &ErrServiceNotProvided{hostname: h.hostname, service: svc}
|
||||
}
|
||||
|
||||
u, err := url.Parse(urlStr)
|
||||
u, err := h.parseURL(urlStr)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Failed to parse service URL: %v", err)
|
||||
}
|
||||
|
||||
return u, nil
|
||||
}
|
||||
|
||||
// ServiceOAuthClient returns the OAuth client configuration associated with the
|
||||
// given service identifier, which should be of the form "servicename.vN".
|
||||
//
|
||||
// This is an alternative to ServiceURL for unusual services that require
|
||||
// a full OAuth2 client definition rather than just a URL. Use this only
|
||||
// for services whose specification calls for this sort of definition.
|
||||
func (h *Host) ServiceOAuthClient(id string) (*OAuthClient, error) {
|
||||
svc, ver, err := parseServiceID(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// No services supported for an empty Host.
|
||||
if h == nil || h.services == nil {
|
||||
return nil, &ErrServiceNotProvided{service: svc}
|
||||
}
|
||||
|
||||
if _, ok := h.services[id]; !ok {
|
||||
// See if we have a matching service as that would indicate
|
||||
// the service is supported, but not the requested version.
|
||||
for serviceID := range h.services {
|
||||
if strings.HasPrefix(serviceID, svc+".") {
|
||||
return nil, &ErrVersionNotSupported{
|
||||
hostname: h.hostname,
|
||||
service: svc,
|
||||
version: ver.Original(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// No discovered services match the requested service.
|
||||
return nil, &ErrServiceNotProvided{hostname: h.hostname, service: svc}
|
||||
}
|
||||
|
||||
var raw map[string]interface{}
|
||||
switch v := h.services[id].(type) {
|
||||
case map[string]interface{}:
|
||||
raw = v // Great!
|
||||
case []map[string]interface{}:
|
||||
// An absolutely infuriating legacy HCL ambiguity.
|
||||
raw = v[0]
|
||||
default:
|
||||
// Debug message because raw Go types don't belong in our UI.
|
||||
log.Printf("[DEBUG] The definition for %s has Go type %T", id, h.services[id])
|
||||
return nil, fmt.Errorf("Service %s must be declared with an object value in the service discovery document", id)
|
||||
}
|
||||
|
||||
var grantTypes OAuthGrantTypeSet
|
||||
if rawGTs, ok := raw["grant_types"]; ok {
|
||||
if gts, ok := rawGTs.([]interface{}); ok {
|
||||
var kws []string
|
||||
for _, gtI := range gts {
|
||||
gt, ok := gtI.(string)
|
||||
if !ok {
|
||||
// We'll ignore this so that we can potentially introduce
|
||||
// other types into this array later if we need to.
|
||||
continue
|
||||
}
|
||||
kws = append(kws, gt)
|
||||
}
|
||||
grantTypes = NewOAuthGrantTypeSet(kws...)
|
||||
} else {
|
||||
return nil, fmt.Errorf("Service %s is defined with invalid grant_types property: must be an array of grant type strings", id)
|
||||
}
|
||||
} else {
|
||||
grantTypes = NewOAuthGrantTypeSet("authz_code")
|
||||
}
|
||||
|
||||
ret := &OAuthClient{
|
||||
SupportedGrantTypes: grantTypes,
|
||||
}
|
||||
if clientIDStr, ok := raw["client"].(string); ok {
|
||||
ret.ID = clientIDStr
|
||||
} else {
|
||||
return nil, fmt.Errorf("Service %s definition is missing required property \"client\"", id)
|
||||
}
|
||||
if urlStr, ok := raw["authz"].(string); ok {
|
||||
u, err := h.parseURL(urlStr)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Failed to parse authorization URL: %v", err)
|
||||
}
|
||||
ret.AuthorizationURL = u
|
||||
} else {
|
||||
if grantTypes.RequiresAuthorizationEndpoint() {
|
||||
return nil, fmt.Errorf("Service %s definition is missing required property \"authz\"", id)
|
||||
}
|
||||
}
|
||||
if urlStr, ok := raw["token"].(string); ok {
|
||||
u, err := h.parseURL(urlStr)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Failed to parse token URL: %v", err)
|
||||
}
|
||||
ret.TokenURL = u
|
||||
} else {
|
||||
if grantTypes.RequiresTokenEndpoint() {
|
||||
return nil, fmt.Errorf("Service %s definition is missing required property \"token\"", id)
|
||||
}
|
||||
}
|
||||
if portsRaw, ok := raw["ports"].([]interface{}); ok {
|
||||
if len(portsRaw) != 2 {
|
||||
return nil, fmt.Errorf("Invalid \"ports\" definition for service %s: must be a two-element array", id)
|
||||
}
|
||||
invalidPortsErr := fmt.Errorf("Invalid \"ports\" definition for service %s: both ports must be whole numbers between 1024 and 65535", id)
|
||||
ports := make([]uint16, 2)
|
||||
for i := range ports {
|
||||
switch v := portsRaw[i].(type) {
|
||||
case float64:
|
||||
// JSON unmarshaling always produces float64. HCL 2 might, if
|
||||
// an invalid fractional number were given.
|
||||
if float64(uint16(v)) != v || v < 1024 {
|
||||
return nil, invalidPortsErr
|
||||
}
|
||||
ports[i] = uint16(v)
|
||||
case int:
|
||||
// Legacy HCL produces int. HCL 2 will too, if the given number
|
||||
// is a whole number.
|
||||
if v < 1024 || v > 65535 {
|
||||
return nil, invalidPortsErr
|
||||
}
|
||||
ports[i] = uint16(v)
|
||||
default:
|
||||
// Debug message because raw Go types don't belong in our UI.
|
||||
log.Printf("[DEBUG] Port value %d has Go type %T", i, portsRaw[i])
|
||||
return nil, invalidPortsErr
|
||||
}
|
||||
}
|
||||
if ports[1] < ports[0] {
|
||||
return nil, fmt.Errorf("Invalid \"ports\" definition for service %s: minimum port cannot be greater than maximum port", id)
|
||||
}
|
||||
ret.MinPort = ports[0]
|
||||
ret.MaxPort = ports[1]
|
||||
} else {
|
||||
// Default is to accept any port in the range, for a client that is
|
||||
// able to call back to any localhost port.
|
||||
ret.MinPort = 1024
|
||||
ret.MaxPort = 65535
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (h *Host) parseURL(urlStr string) (*url.URL, error) {
|
||||
u, err := url.Parse(urlStr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Make relative URLs absolute using our discovery URL.
|
||||
if !u.IsAbs() {
|
||||
u = h.discoURL.ResolveReference(u)
|
||||
}
|
||||
|
||||
if u.Scheme != "https" && u.Scheme != "http" {
|
||||
return nil, fmt.Errorf("Service URL is using an unsupported scheme: %s", u.Scheme)
|
||||
return nil, fmt.Errorf("unsupported scheme %s", u.Scheme)
|
||||
}
|
||||
if u.User != nil {
|
||||
return nil, fmt.Errorf("Embedded username/password information is not permitted")
|
||||
return nil, fmt.Errorf("embedded username/password information is not permitted")
|
||||
}
|
||||
|
||||
// Fragment part is irrelevant, since we're not a browser.
|
||||
u.Fragment = ""
|
||||
|
||||
return h.discoURL.ResolveReference(u), nil
|
||||
return u, nil
|
||||
}
|
||||
|
||||
// VersionConstraints returns the contraints for a given service identifier
|
||||
|
|
|
@ -11,6 +11,8 @@ import (
|
|||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/google/go-cmp/cmp"
|
||||
)
|
||||
|
||||
func TestHostServiceURL(t *testing.T) {
|
||||
|
@ -69,6 +71,242 @@ func TestHostServiceURL(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestHostServiceOAuthClient(t *testing.T) {
|
||||
baseURL, _ := url.Parse("https://example.com/disco/foo.json")
|
||||
host := Host{
|
||||
discoURL: baseURL,
|
||||
hostname: "test-server",
|
||||
services: map[string]interface{}{
|
||||
"explicitgranttype.v1": map[string]interface{}{
|
||||
"client": "explicitgranttype",
|
||||
"authz": "./authz",
|
||||
"token": "./token",
|
||||
"grant_types": []interface{}{"authz_code", "password", "tbd"},
|
||||
},
|
||||
"customports.v1": map[string]interface{}{
|
||||
"client": "customports",
|
||||
"authz": "./authz",
|
||||
"token": "./token",
|
||||
"ports": []interface{}{1025, 1026},
|
||||
},
|
||||
"invalidports.v1": map[string]interface{}{
|
||||
"client": "invalidports",
|
||||
"authz": "./authz",
|
||||
"token": "./token",
|
||||
"ports": []interface{}{1, 65535},
|
||||
},
|
||||
"missingauthz.v1": map[string]interface{}{
|
||||
"client": "missingauthz",
|
||||
"token": "./token",
|
||||
},
|
||||
"missingtoken.v1": map[string]interface{}{
|
||||
"client": "missingtoken",
|
||||
"authz": "./authz",
|
||||
},
|
||||
"passwordmissingauthz.v1": map[string]interface{}{
|
||||
"client": "passwordmissingauthz",
|
||||
"token": "./token",
|
||||
"grant_types": []interface{}{"password"},
|
||||
},
|
||||
"absolute.v1": map[string]interface{}{
|
||||
"client": "absolute",
|
||||
"authz": "http://example.net/foo/authz",
|
||||
"token": "http://example.net/foo/token",
|
||||
},
|
||||
"absolutewithport.v1": map[string]interface{}{
|
||||
"client": "absolutewithport",
|
||||
"authz": "http://example.net:8000/foo/authz",
|
||||
"token": "http://example.net:8000/foo/token",
|
||||
},
|
||||
"relative.v1": map[string]interface{}{
|
||||
"client": "relative",
|
||||
"authz": "./authz",
|
||||
"token": "./token",
|
||||
},
|
||||
"rootrelative.v1": map[string]interface{}{
|
||||
"client": "rootrelative",
|
||||
"authz": "/authz",
|
||||
"token": "/token",
|
||||
},
|
||||
"protorelative.v1": map[string]interface{}{
|
||||
"client": "protorelative",
|
||||
"authz": "//example.net/authz",
|
||||
"token": "//example.net/token",
|
||||
},
|
||||
"nothttp.v1": map[string]interface{}{
|
||||
"client": "nothttp",
|
||||
"authz": "ftp://127.0.0.1/pub/authz",
|
||||
"token": "ftp://127.0.0.1/pub/token",
|
||||
},
|
||||
"invalidauthz.v1": map[string]interface{}{
|
||||
"client": "invalidauthz",
|
||||
"authz": "***not A URL at all!:/<@@@@>***",
|
||||
"token": "/foo",
|
||||
},
|
||||
"invalidtoken.v1": map[string]interface{}{
|
||||
"client": "invalidauthz",
|
||||
"authz": "/foo",
|
||||
"token": "***not A URL at all!:/<@@@@>***",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
mustURL := func(t *testing.T, s string) *url.URL {
|
||||
t.Helper()
|
||||
u, err := url.Parse(s)
|
||||
if err != nil {
|
||||
t.Fatalf("invalid wanted URL %s in test case: %s", s, err)
|
||||
}
|
||||
return u
|
||||
}
|
||||
|
||||
tests := []struct {
|
||||
ID string
|
||||
want *OAuthClient
|
||||
err string
|
||||
}{
|
||||
{
|
||||
"explicitgranttype.v1",
|
||||
&OAuthClient{
|
||||
ID: "explicitgranttype",
|
||||
AuthorizationURL: mustURL(t, "https://example.com/disco/authz"),
|
||||
TokenURL: mustURL(t, "https://example.com/disco/token"),
|
||||
MinPort: 1024,
|
||||
MaxPort: 65535,
|
||||
SupportedGrantTypes: NewOAuthGrantTypeSet("authz_code", "password", "tbd"),
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"customports.v1",
|
||||
&OAuthClient{
|
||||
ID: "customports",
|
||||
AuthorizationURL: mustURL(t, "https://example.com/disco/authz"),
|
||||
TokenURL: mustURL(t, "https://example.com/disco/token"),
|
||||
MinPort: 1025,
|
||||
MaxPort: 1026,
|
||||
SupportedGrantTypes: NewOAuthGrantTypeSet("authz_code"),
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"invalidports.v1",
|
||||
nil,
|
||||
`Invalid "ports" definition for service invalidports.v1: both ports must be whole numbers between 1024 and 65535`,
|
||||
},
|
||||
{
|
||||
"missingauthz.v1",
|
||||
nil,
|
||||
`Service missingauthz.v1 definition is missing required property "authz"`,
|
||||
},
|
||||
{
|
||||
"missingtoken.v1",
|
||||
nil,
|
||||
`Service missingtoken.v1 definition is missing required property "token"`,
|
||||
},
|
||||
{
|
||||
"passwordmissingauthz.v1",
|
||||
&OAuthClient{
|
||||
ID: "passwordmissingauthz",
|
||||
TokenURL: mustURL(t, "https://example.com/disco/token"),
|
||||
MinPort: 1024,
|
||||
MaxPort: 65535,
|
||||
SupportedGrantTypes: NewOAuthGrantTypeSet("password"),
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"absolute.v1",
|
||||
&OAuthClient{
|
||||
ID: "absolute",
|
||||
AuthorizationURL: mustURL(t, "http://example.net/foo/authz"),
|
||||
TokenURL: mustURL(t, "http://example.net/foo/token"),
|
||||
MinPort: 1024,
|
||||
MaxPort: 65535,
|
||||
SupportedGrantTypes: NewOAuthGrantTypeSet("authz_code"),
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"absolutewithport.v1",
|
||||
&OAuthClient{
|
||||
ID: "absolutewithport",
|
||||
AuthorizationURL: mustURL(t, "http://example.net:8000/foo/authz"),
|
||||
TokenURL: mustURL(t, "http://example.net:8000/foo/token"),
|
||||
MinPort: 1024,
|
||||
MaxPort: 65535,
|
||||
SupportedGrantTypes: NewOAuthGrantTypeSet("authz_code"),
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"relative.v1",
|
||||
&OAuthClient{
|
||||
ID: "relative",
|
||||
AuthorizationURL: mustURL(t, "https://example.com/disco/authz"),
|
||||
TokenURL: mustURL(t, "https://example.com/disco/token"),
|
||||
MinPort: 1024,
|
||||
MaxPort: 65535,
|
||||
SupportedGrantTypes: NewOAuthGrantTypeSet("authz_code"),
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"rootrelative.v1",
|
||||
&OAuthClient{
|
||||
ID: "rootrelative",
|
||||
AuthorizationURL: mustURL(t, "https://example.com/authz"),
|
||||
TokenURL: mustURL(t, "https://example.com/token"),
|
||||
MinPort: 1024,
|
||||
MaxPort: 65535,
|
||||
SupportedGrantTypes: NewOAuthGrantTypeSet("authz_code"),
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"protorelative.v1",
|
||||
&OAuthClient{
|
||||
ID: "protorelative",
|
||||
AuthorizationURL: mustURL(t, "https://example.net/authz"),
|
||||
TokenURL: mustURL(t, "https://example.net/token"),
|
||||
MinPort: 1024,
|
||||
MaxPort: 65535,
|
||||
SupportedGrantTypes: NewOAuthGrantTypeSet("authz_code"),
|
||||
},
|
||||
"",
|
||||
},
|
||||
{
|
||||
"nothttp.v1",
|
||||
nil,
|
||||
"Failed to parse authorization URL: unsupported scheme ftp",
|
||||
},
|
||||
{
|
||||
"invalidauthz.v1",
|
||||
nil,
|
||||
"Failed to parse authorization URL: parse ***not A URL at all!:/<@@@@>***: first path segment in URL cannot contain colon",
|
||||
},
|
||||
{
|
||||
"invalidtoken.v1",
|
||||
nil,
|
||||
"Failed to parse token URL: parse ***not A URL at all!:/<@@@@>***: first path segment in URL cannot contain colon",
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.ID, func(t *testing.T) {
|
||||
got, err := host.ServiceOAuthClient(test.ID)
|
||||
if (err != nil || test.err != "") &&
|
||||
(err == nil || !strings.Contains(err.Error(), test.err)) {
|
||||
t.Fatalf("unexpected service URL error: %s", err)
|
||||
}
|
||||
|
||||
if diff := cmp.Diff(test.want, got); diff != "" {
|
||||
t.Errorf("wrong result\n%s", diff)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestVersionConstrains(t *testing.T) {
|
||||
baseURL, _ := url.Parse("https://example.com/disco/foo.json")
|
||||
|
||||
|
|
|
@ -0,0 +1,172 @@
|
|||
package disco
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
"golang.org/x/oauth2"
|
||||
)
|
||||
|
||||
// OAuthClient represents an OAuth client configuration, which is used for
|
||||
// unusual services that require an entire OAuth client configuration as part
|
||||
// of their service discovery, rather than just a URL.
|
||||
type OAuthClient struct {
|
||||
// ID is the identifier for the client, to be used as "client_id" in
|
||||
// OAuth requests.
|
||||
ID string
|
||||
|
||||
// Authorization URL is the URL of the authorization endpoint that must
|
||||
// be used for this OAuth client, as defined in the OAuth2 specifications.
|
||||
//
|
||||
// Not all grant types use the authorization endpoint, so it may be omitted
|
||||
// if none of the grant types in SupportedGrantTypes require it.
|
||||
AuthorizationURL *url.URL
|
||||
|
||||
// Token URL is the URL of the token endpoint that must be used for this
|
||||
// OAuth client, as defined in the OAuth2 specifications.
|
||||
//
|
||||
// Not all grant types use the token endpoint, so it may be omitted
|
||||
// if none of the grant types in SupportedGrantTypes require it.
|
||||
TokenURL *url.URL
|
||||
|
||||
// MinPort and MaxPort define a range of TCP ports on localhost that this
|
||||
// client is able to use as redirect_uri in an authorization request.
|
||||
// Terraform will select a port from this range for the temporary HTTP
|
||||
// server it creates to receive the authorization response, giving
|
||||
// a URL like http://localhost:NNN/ where NNN is the selected port number.
|
||||
//
|
||||
// Terraform will reject any port numbers in this range less than 1024,
|
||||
// to respect the common convention (enforced on some operating systems)
|
||||
// that lower port numbers are reserved for "privileged" services.
|
||||
MinPort, MaxPort uint16
|
||||
|
||||
// SupportedGrantTypes is a set of the grant types that the client may
|
||||
// choose from. This includes an entry for each distinct type advertised
|
||||
// by the server, even if a particular keyword is not supported by the
|
||||
// current version of Terraform.
|
||||
SupportedGrantTypes OAuthGrantTypeSet
|
||||
}
|
||||
|
||||
// Endpoint returns an oauth2.Endpoint value ready to be used with the oauth2
|
||||
// library, representing the URLs from the receiver.
|
||||
func (c *OAuthClient) Endpoint() oauth2.Endpoint {
|
||||
return oauth2.Endpoint{
|
||||
AuthURL: c.AuthorizationURL.String(),
|
||||
TokenURL: c.TokenURL.String(),
|
||||
|
||||
// We don't actually auth because we're not a server-based OAuth client,
|
||||
// so this instead just means that we include client_id as an argument
|
||||
// in our requests.
|
||||
AuthStyle: oauth2.AuthStyleInParams,
|
||||
}
|
||||
}
|
||||
|
||||
// OAuthGrantType is an enumeration of grant type strings that a host can
|
||||
// advertise support for.
|
||||
//
|
||||
// Values of this type don't necessarily match with a known constant of the
|
||||
// type, because they may represent grant type keywords defined in a later
|
||||
// version of Terraform which this version doesn't yet know about.
|
||||
type OAuthGrantType string
|
||||
|
||||
const (
|
||||
// OAuthAuthzCodeGrant represents an authorization code grant, as
|
||||
// defined in IETF RFC 6749 section 4.1.
|
||||
OAuthAuthzCodeGrant = OAuthGrantType("authz_code")
|
||||
|
||||
// OAuthOwnerPasswordGrant represents a resource owner password
|
||||
// credentials grant, as defined in IETF RFC 6749 section 4.3.
|
||||
OAuthOwnerPasswordGrant = OAuthGrantType("password")
|
||||
)
|
||||
|
||||
// UsesAuthorizationEndpoint returns true if the receiving grant type makes
|
||||
// use of the authorization endpoint from the client configuration, and thus
|
||||
// if the authorization endpoint ought to be required.
|
||||
func (t OAuthGrantType) UsesAuthorizationEndpoint() bool {
|
||||
switch t {
|
||||
case OAuthAuthzCodeGrant:
|
||||
return true
|
||||
case OAuthOwnerPasswordGrant:
|
||||
return false
|
||||
default:
|
||||
// We'll default to false so that we don't impose any requirements
|
||||
// on any grant type keywords that might be defined for future
|
||||
// versions of Terraform.
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// UsesTokenEndpoint returns true if the receiving grant type makes
|
||||
// use of the token endpoint from the client configuration, and thus
|
||||
// if the authorization endpoint ought to be required.
|
||||
func (t OAuthGrantType) UsesTokenEndpoint() bool {
|
||||
switch t {
|
||||
case OAuthAuthzCodeGrant:
|
||||
return true
|
||||
case OAuthOwnerPasswordGrant:
|
||||
return true
|
||||
default:
|
||||
// We'll default to false so that we don't impose any requirements
|
||||
// on any grant type keywords that might be defined for future
|
||||
// versions of Terraform.
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// OAuthGrantTypeSet represents a set of OAuthGrantType values.
|
||||
type OAuthGrantTypeSet map[OAuthGrantType]struct{}
|
||||
|
||||
// NewOAuthGrantTypeSet constructs a new grant type set from the given list
|
||||
// of grant type keyword strings. Any duplicates in the list are ignored.
|
||||
func NewOAuthGrantTypeSet(keywords ...string) OAuthGrantTypeSet {
|
||||
ret := make(OAuthGrantTypeSet, len(keywords))
|
||||
for _, kw := range keywords {
|
||||
ret[OAuthGrantType(kw)] = struct{}{}
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
// Has returns true if the given grant type is in the receiving set.
|
||||
func (s OAuthGrantTypeSet) Has(t OAuthGrantType) bool {
|
||||
_, ok := s[t]
|
||||
return ok
|
||||
}
|
||||
|
||||
// RequiresAuthorizationEndpoint returns true if any of the grant types in
|
||||
// the set are known to require an authorization endpoint.
|
||||
func (s OAuthGrantTypeSet) RequiresAuthorizationEndpoint() bool {
|
||||
for t := range s {
|
||||
if t.UsesAuthorizationEndpoint() {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// RequiresTokenEndpoint returns true if any of the grant types in
|
||||
// the set are known to require a token endpoint.
|
||||
func (s OAuthGrantTypeSet) RequiresTokenEndpoint() bool {
|
||||
for t := range s {
|
||||
if t.UsesTokenEndpoint() {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// GoString implements fmt.GoStringer.
|
||||
func (s OAuthGrantTypeSet) GoString() string {
|
||||
var buf strings.Builder
|
||||
i := 0
|
||||
buf.WriteString("disco.NewOAuthGrantTypeSet(")
|
||||
for t := range s {
|
||||
if i > 0 {
|
||||
buf.WriteString(", ")
|
||||
}
|
||||
fmt.Fprintf(&buf, "%q", string(t))
|
||||
i++
|
||||
}
|
||||
buf.WriteString(")")
|
||||
return buf.String()
|
||||
}
|
|
@ -225,14 +225,12 @@ func (ctx *BuiltinEvalContext) InitProvisioner(n string) (provisioners.Interface
|
|||
ctx.ProvisionerLock.Lock()
|
||||
defer ctx.ProvisionerLock.Unlock()
|
||||
|
||||
key := PathObjectCacheKey(ctx.Path(), n)
|
||||
|
||||
p, err := ctx.Components.ResourceProvisioner(n, key)
|
||||
p, err := ctx.Components.ResourceProvisioner(n, "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
ctx.ProvisionerCache[key] = p
|
||||
ctx.ProvisionerCache[n] = p
|
||||
|
||||
return p, nil
|
||||
}
|
||||
|
@ -243,8 +241,7 @@ func (ctx *BuiltinEvalContext) Provisioner(n string) provisioners.Interface {
|
|||
ctx.ProvisionerLock.Lock()
|
||||
defer ctx.ProvisionerLock.Unlock()
|
||||
|
||||
key := PathObjectCacheKey(ctx.Path(), n)
|
||||
return ctx.ProvisionerCache[key]
|
||||
return ctx.ProvisionerCache[n]
|
||||
}
|
||||
|
||||
func (ctx *BuiltinEvalContext) ProvisionerSchema(n string) *configschema.Block {
|
||||
|
@ -259,9 +256,7 @@ func (ctx *BuiltinEvalContext) CloseProvisioner(n string) error {
|
|||
ctx.ProvisionerLock.Lock()
|
||||
defer ctx.ProvisionerLock.Unlock()
|
||||
|
||||
key := PathObjectCacheKey(ctx.Path(), n)
|
||||
|
||||
prov := ctx.ProvisionerCache[key]
|
||||
prov := ctx.ProvisionerCache[n]
|
||||
if prov != nil {
|
||||
return prov.Close()
|
||||
}
|
||||
|
|
|
@ -478,12 +478,11 @@ const testApplyGraphBuilderStr = `
|
|||
meta.count-boundary (EachMode fixup)
|
||||
module.child.test_object.other
|
||||
test_object.other
|
||||
module.child.provisioner.test
|
||||
module.child.test_object.create
|
||||
module.child.test_object.create (prepare state)
|
||||
module.child.test_object.create (prepare state)
|
||||
module.child.provisioner.test
|
||||
provider.test
|
||||
provisioner.test
|
||||
module.child.test_object.other
|
||||
module.child.test_object.create
|
||||
module.child.test_object.other (prepare state)
|
||||
|
@ -493,6 +492,7 @@ provider.test
|
|||
provider.test (close)
|
||||
module.child.test_object.other
|
||||
test_object.other
|
||||
provisioner.test
|
||||
provisioner.test (close)
|
||||
module.child.test_object.create
|
||||
root
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
package terraform
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/hashicorp/terraform/addrs"
|
||||
)
|
||||
|
||||
// PathObjectCacheKey is like PathCacheKey but includes an additional name
|
||||
// to be included in the key, for module-namespaced objects.
|
||||
//
|
||||
// The result of this function is guaranteed unique for any distinct pair
|
||||
// of path and name, but is not guaranteed to be in any particular format
|
||||
// and in particular should never be shown to end-users.
|
||||
func PathObjectCacheKey(path addrs.ModuleInstance, objectName string) string {
|
||||
return fmt.Sprintf("%s|%s", path.String(), objectName)
|
||||
}
|
|
@ -4,8 +4,6 @@ import (
|
|||
"fmt"
|
||||
"log"
|
||||
|
||||
"github.com/hashicorp/terraform/addrs"
|
||||
|
||||
"github.com/hashicorp/go-multierror"
|
||||
"github.com/hashicorp/terraform/dag"
|
||||
)
|
||||
|
@ -43,16 +41,15 @@ func (t *ProvisionerTransformer) Transform(g *Graph) error {
|
|||
for _, v := range g.Vertices() {
|
||||
if pv, ok := v.(GraphNodeProvisionerConsumer); ok {
|
||||
for _, p := range pv.ProvisionedBy() {
|
||||
key := provisionerMapKey(p, pv)
|
||||
if m[key] == nil {
|
||||
if m[p] == nil {
|
||||
err = multierror.Append(err, fmt.Errorf(
|
||||
"%s: provisioner %s couldn't be found",
|
||||
dag.VertexName(v), p))
|
||||
continue
|
||||
}
|
||||
|
||||
log.Printf("[TRACE] ProvisionerTransformer: %s is provisioned by %s (%q)", dag.VertexName(v), key, dag.VertexName(m[key]))
|
||||
g.Connect(dag.BasicEdge(v, m[key]))
|
||||
log.Printf("[TRACE] ProvisionerTransformer: %s is provisioned by %s (%q)", dag.VertexName(v), p, dag.VertexName(m[p]))
|
||||
g.Connect(dag.BasicEdge(v, m[p]))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -85,18 +82,8 @@ func (t *MissingProvisionerTransformer) Transform(g *Graph) error {
|
|||
continue
|
||||
}
|
||||
|
||||
// If this node has a subpath, then we use that as a prefix
|
||||
// into our map to check for an existing provider.
|
||||
path := addrs.RootModuleInstance
|
||||
if sp, ok := pv.(GraphNodeSubPath); ok {
|
||||
path = sp.Path()
|
||||
}
|
||||
|
||||
for _, p := range pv.ProvisionedBy() {
|
||||
// Build the key for storing in the map
|
||||
key := provisionerMapKey(p, pv)
|
||||
|
||||
if _, ok := m[key]; ok {
|
||||
if _, ok := m[p]; ok {
|
||||
// This provisioner already exists as a configure node
|
||||
continue
|
||||
}
|
||||
|
@ -110,12 +97,11 @@ func (t *MissingProvisionerTransformer) Transform(g *Graph) error {
|
|||
// Build the vertex
|
||||
var newV dag.Vertex = &NodeProvisioner{
|
||||
NameValue: p,
|
||||
PathValue: path,
|
||||
}
|
||||
|
||||
// Add the missing provisioner node to the graph
|
||||
m[key] = g.Add(newV)
|
||||
log.Printf("[TRACE] MissingProviderTransformer: added implicit provisioner %s, first implied by %s", key, dag.VertexName(v))
|
||||
m[p] = g.Add(newV)
|
||||
log.Printf("[TRACE] MissingProviderTransformer: added implicit provisioner %s, first implied by %s", p, dag.VertexName(v))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -153,23 +139,11 @@ func (t *CloseProvisionerTransformer) Transform(g *Graph) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// provisionerMapKey is a helper that gives us the key to use for the
|
||||
// maps returned by things such as provisionerVertexMap.
|
||||
func provisionerMapKey(k string, v dag.Vertex) string {
|
||||
pathPrefix := ""
|
||||
if sp, ok := v.(GraphNodeSubPath); ok {
|
||||
pathPrefix = sp.Path().String() + "."
|
||||
}
|
||||
|
||||
return pathPrefix + k
|
||||
}
|
||||
|
||||
func provisionerVertexMap(g *Graph) map[string]dag.Vertex {
|
||||
m := make(map[string]dag.Vertex)
|
||||
for _, v := range g.Vertices() {
|
||||
if pv, ok := v.(GraphNodeProvisioner); ok {
|
||||
key := provisionerMapKey(pv.ProvisionerName(), v)
|
||||
m[key] = v
|
||||
m[pv.ProvisionerName()] = v
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -188,8 +188,7 @@ const testTransformMissingProvisionerModuleStr = `
|
|||
aws_instance.foo
|
||||
provisioner.shell
|
||||
module.child.aws_instance.foo
|
||||
module.child.provisioner.shell
|
||||
module.child.provisioner.shell
|
||||
provisioner.shell
|
||||
provisioner.shell
|
||||
`
|
||||
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
// Copyright 2018 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.
|
||||
|
||||
// +build !gccgo
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
//
|
||||
// System calls for ppc64, AIX are implemented in runtime/syscall_aix.go
|
||||
//
|
||||
|
||||
TEXT ·syscall6(SB),NOSPLIT,$0-88
|
||||
JMP syscall·syscall6(SB)
|
||||
|
||||
TEXT ·rawSyscall6(SB),NOSPLIT,$0-88
|
||||
JMP syscall·rawSyscall6(SB)
|
|
@ -6,8 +6,6 @@
|
|||
|
||||
package cpu
|
||||
|
||||
import "golang.org/x/sys/unix"
|
||||
|
||||
const cacheLineSize = 128
|
||||
|
||||
const (
|
||||
|
@ -18,7 +16,7 @@ const (
|
|||
)
|
||||
|
||||
func init() {
|
||||
impl := unix.Getsystemcfg(_SC_IMPL)
|
||||
impl := getsystemcfg(_SC_IMPL)
|
||||
if impl&_IMPL_POWER8 != 0 {
|
||||
PPC64.IsPOWER8 = true
|
||||
}
|
||||
|
@ -28,3 +26,9 @@ func init() {
|
|||
|
||||
Initialized = true
|
||||
}
|
||||
|
||||
func getsystemcfg(label int) (n uint64) {
|
||||
r0, _ := callgetsystemcfg(label)
|
||||
n = uint64(r0)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
// Copyright 2019 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.
|
||||
|
||||
// Minimal copy of x/sys/unix so the cpu package can make a
|
||||
// system call on AIX without depending on x/sys/unix.
|
||||
// (See golang.org/issue/32102)
|
||||
|
||||
// +build aix,ppc64
|
||||
// +build !gccgo
|
||||
|
||||
package cpu
|
||||
|
||||
import (
|
||||
"syscall"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
//go:cgo_import_dynamic libc_getsystemcfg getsystemcfg "libc.a/shr_64.o"
|
||||
|
||||
//go:linkname libc_getsystemcfg libc_getsystemcfg
|
||||
|
||||
type syscallFunc uintptr
|
||||
|
||||
var libc_getsystemcfg syscallFunc
|
||||
|
||||
type errno = syscall.Errno
|
||||
|
||||
// Implemented in runtime/syscall_aix.go.
|
||||
func rawSyscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err errno)
|
||||
func syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err errno)
|
||||
|
||||
func callgetsystemcfg(label int) (r1 uintptr, e1 errno) {
|
||||
r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsystemcfg)), 1, uintptr(label), 0, 0, 0, 0, 0)
|
||||
return
|
||||
}
|
|
@ -91,9 +91,13 @@ func onesCount64(x uint64) int {
|
|||
const m0 = 0x5555555555555555 // 01010101 ...
|
||||
const m1 = 0x3333333333333333 // 00110011 ...
|
||||
const m2 = 0x0f0f0f0f0f0f0f0f // 00001111 ...
|
||||
const m3 = 0x00ff00ff00ff00ff // etc.
|
||||
const m4 = 0x0000ffff0000ffff
|
||||
|
||||
// Unused in this function, but definitions preserved for
|
||||
// documentation purposes:
|
||||
//
|
||||
// const m3 = 0x00ff00ff00ff00ff // etc.
|
||||
// const m4 = 0x0000ffff0000ffff
|
||||
//
|
||||
// Implementation: Parallel summing of adjacent bits.
|
||||
// See "Hacker's Delight", Chap. 5: Counting Bits.
|
||||
// The following pattern shows the general approach:
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
// Copyright 2019 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.
|
||||
|
||||
// +build riscv64,!gccgo
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
//
|
||||
// System calls for linux/riscv64.
|
||||
//
|
||||
// Where available, just jump to package syscall's implementation of
|
||||
// these functions.
|
||||
|
||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
|
||||
JMP syscall·Syscall(SB)
|
||||
|
||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
||||
JMP syscall·Syscall6(SB)
|
||||
|
||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
|
||||
CALL runtime·entersyscall(SB)
|
||||
MOV a1+8(FP), A0
|
||||
MOV a2+16(FP), A1
|
||||
MOV a3+24(FP), A2
|
||||
MOV $0, A3
|
||||
MOV $0, A4
|
||||
MOV $0, A5
|
||||
MOV $0, A6
|
||||
MOV trap+0(FP), A7 // syscall entry
|
||||
ECALL
|
||||
MOV A0, r1+32(FP) // r1
|
||||
MOV A1, r2+40(FP) // r2
|
||||
CALL runtime·exitsyscall(SB)
|
||||
RET
|
||||
|
||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
||||
JMP syscall·RawSyscall(SB)
|
||||
|
||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
||||
JMP syscall·RawSyscall6(SB)
|
||||
|
||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
|
||||
MOV a1+8(FP), A0
|
||||
MOV a2+16(FP), A1
|
||||
MOV a3+24(FP), A2
|
||||
MOV ZERO, A3
|
||||
MOV ZERO, A4
|
||||
MOV ZERO, A5
|
||||
MOV trap+0(FP), A7 // syscall entry
|
||||
ECALL
|
||||
MOV A0, r1+32(FP)
|
||||
MOV A1, r2+40(FP)
|
||||
RET
|
|
@ -2,16 +2,101 @@
|
|||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
|
||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
|
||||
|
||||
package unix
|
||||
|
||||
import "syscall"
|
||||
import "unsafe"
|
||||
|
||||
// readInt returns the size-bytes unsigned integer in native byte order at offset off.
|
||||
func readInt(b []byte, off, size uintptr) (u uint64, ok bool) {
|
||||
if len(b) < int(off+size) {
|
||||
return 0, false
|
||||
}
|
||||
if isBigEndian {
|
||||
return readIntBE(b[off:], size), true
|
||||
}
|
||||
return readIntLE(b[off:], size), true
|
||||
}
|
||||
|
||||
func readIntBE(b []byte, size uintptr) uint64 {
|
||||
switch size {
|
||||
case 1:
|
||||
return uint64(b[0])
|
||||
case 2:
|
||||
_ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
|
||||
return uint64(b[1]) | uint64(b[0])<<8
|
||||
case 4:
|
||||
_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
|
||||
return uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(b[0])<<24
|
||||
case 8:
|
||||
_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
|
||||
return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |
|
||||
uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56
|
||||
default:
|
||||
panic("syscall: readInt with unsupported size")
|
||||
}
|
||||
}
|
||||
|
||||
func readIntLE(b []byte, size uintptr) uint64 {
|
||||
switch size {
|
||||
case 1:
|
||||
return uint64(b[0])
|
||||
case 2:
|
||||
_ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
|
||||
return uint64(b[0]) | uint64(b[1])<<8
|
||||
case 4:
|
||||
_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
|
||||
return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24
|
||||
case 8:
|
||||
_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
|
||||
return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |
|
||||
uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
|
||||
default:
|
||||
panic("syscall: readInt with unsupported size")
|
||||
}
|
||||
}
|
||||
|
||||
// ParseDirent parses up to max directory entries in buf,
|
||||
// appending the names to names. It returns the number of
|
||||
// bytes consumed from buf, the number of entries added
|
||||
// to names, and the new names slice.
|
||||
func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {
|
||||
return syscall.ParseDirent(buf, max, names)
|
||||
origlen := len(buf)
|
||||
count = 0
|
||||
for max != 0 && len(buf) > 0 {
|
||||
reclen, ok := direntReclen(buf)
|
||||
if !ok || reclen > uint64(len(buf)) {
|
||||
return origlen, count, names
|
||||
}
|
||||
rec := buf[:reclen]
|
||||
buf = buf[reclen:]
|
||||
ino, ok := direntIno(rec)
|
||||
if !ok {
|
||||
break
|
||||
}
|
||||
if ino == 0 { // File absent in directory.
|
||||
continue
|
||||
}
|
||||
const namoff = uint64(unsafe.Offsetof(Dirent{}.Name))
|
||||
namlen, ok := direntNamlen(rec)
|
||||
if !ok || namoff+namlen > uint64(len(rec)) {
|
||||
break
|
||||
}
|
||||
name := rec[namoff : namoff+namlen]
|
||||
for i, c := range name {
|
||||
if c == 0 {
|
||||
name = name[:i]
|
||||
break
|
||||
}
|
||||
}
|
||||
// Check for useless names before allocating a string.
|
||||
if string(name) == "." || string(name) == ".." {
|
||||
continue
|
||||
}
|
||||
max--
|
||||
count++
|
||||
names = append(names, string(name))
|
||||
}
|
||||
return origlen - len(buf), count, names
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
//
|
||||
// +build 386 amd64 amd64p32 arm arm64 ppc64le mipsle mips64le
|
||||
// +build 386 amd64 amd64p32 arm arm64 ppc64le mipsle mips64le riscv64
|
||||
|
||||
package unix
|
||||
|
||||
|
|
|
@ -105,25 +105,25 @@ dragonfly_amd64)
|
|||
freebsd_386)
|
||||
mkerrors="$mkerrors -m32"
|
||||
mksyscall="go run mksyscall.go -l32"
|
||||
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master'"
|
||||
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'"
|
||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||
;;
|
||||
freebsd_amd64)
|
||||
mkerrors="$mkerrors -m64"
|
||||
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master'"
|
||||
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'"
|
||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||
;;
|
||||
freebsd_arm)
|
||||
mkerrors="$mkerrors"
|
||||
mksyscall="go run mksyscall.go -l32 -arm"
|
||||
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master'"
|
||||
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'"
|
||||
# Let the type of C char be signed for making the bare syscall
|
||||
# API consistent across platforms.
|
||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||
;;
|
||||
freebsd_arm64)
|
||||
mkerrors="$mkerrors -m64"
|
||||
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master'"
|
||||
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'"
|
||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||
;;
|
||||
netbsd_386)
|
||||
|
|
|
@ -182,6 +182,8 @@ struct ltchars {
|
|||
#include <sys/signalfd.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/xattr.h>
|
||||
#include <linux/bpf.h>
|
||||
#include <linux/capability.h>
|
||||
#include <linux/errqueue.h>
|
||||
#include <linux/if.h>
|
||||
#include <linux/if_alg.h>
|
||||
|
@ -197,6 +199,7 @@ struct ltchars {
|
|||
#include <linux/fs.h>
|
||||
#include <linux/kexec.h>
|
||||
#include <linux/keyctl.h>
|
||||
#include <linux/loop.h>
|
||||
#include <linux/magic.h>
|
||||
#include <linux/memfd.h>
|
||||
#include <linux/module.h>
|
||||
|
@ -433,7 +436,9 @@ ccflags="$@"
|
|||
$2 ~ /^TC[IO](ON|OFF)$/ ||
|
||||
$2 ~ /^IN_/ ||
|
||||
$2 ~ /^LOCK_(SH|EX|NB|UN)$/ ||
|
||||
$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|ICMP6|TCP|EVFILT|NOTE|EV|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR)_/ ||
|
||||
$2 ~ /^LO_(KEY|NAME)_SIZE$/ ||
|
||||
$2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ ||
|
||||
$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|ICMP6|TCP|MCAST|EVFILT|NOTE|EV|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR)_/ ||
|
||||
$2 ~ /^TP_STATUS_/ ||
|
||||
$2 ~ /^FALLOC_/ ||
|
||||
$2 == "ICMPV6_FILTER" ||
|
||||
|
@ -466,7 +471,7 @@ ccflags="$@"
|
|||
$2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ ||
|
||||
$2 ~ /^PRIO_(PROCESS|PGRP|USER)/ ||
|
||||
$2 ~ /^CLONE_[A-Z_]+/ ||
|
||||
$2 !~ /^(BPF_TIMEVAL)$/ &&
|
||||
$2 !~ /^(BPF_TIMEVAL|BPF_FIB_LOOKUP_[A-Z]+)$/ &&
|
||||
$2 ~ /^(BPF|DLT)_/ ||
|
||||
$2 ~ /^(CLOCK|TIMER)_/ ||
|
||||
$2 ~ /^CAN_/ ||
|
||||
|
|
|
@ -42,9 +42,16 @@ func main() {
|
|||
log.Fatal(err)
|
||||
}
|
||||
|
||||
if goos == "aix" {
|
||||
// Replace type of Atim, Mtim and Ctim by Timespec in Stat_t
|
||||
// to avoid having both StTimespec and Timespec.
|
||||
sttimespec := regexp.MustCompile(`_Ctype_struct_st_timespec`)
|
||||
b = sttimespec.ReplaceAll(b, []byte("Timespec"))
|
||||
}
|
||||
|
||||
// Intentionally export __val fields in Fsid and Sigset_t
|
||||
valRegex := regexp.MustCompile(`type (Fsid|Sigset_t) struct {(\s+)X__val(\s+\S+\s+)}`)
|
||||
b = valRegex.ReplaceAll(b, []byte("type $1 struct {${2}Val$3}"))
|
||||
valRegex := regexp.MustCompile(`type (Fsid|Sigset_t) struct {(\s+)X__(bits|val)(\s+\S+\s+)}`)
|
||||
b = valRegex.ReplaceAll(b, []byte("type $1 struct {${2}Val$4}"))
|
||||
|
||||
// Intentionally export __fds_bits field in FdSet
|
||||
fdSetRegex := regexp.MustCompile(`type (FdSet) struct {(\s+)X__fds_bits(\s+\S+\s+)}`)
|
||||
|
@ -96,6 +103,15 @@ func main() {
|
|||
cgoCommandRegex := regexp.MustCompile(`(cgo -godefs .*)`)
|
||||
b = cgoCommandRegex.ReplaceAll(b, []byte(replacement))
|
||||
|
||||
// Rename Stat_t time fields
|
||||
if goos == "freebsd" && goarch == "386" {
|
||||
// Hide Stat_t.[AMCB]tim_ext fields
|
||||
renameStatTimeExtFieldsRegex := regexp.MustCompile(`[AMCB]tim_ext`)
|
||||
b = renameStatTimeExtFieldsRegex.ReplaceAll(b, []byte("_"))
|
||||
}
|
||||
renameStatTimeFieldsRegex := regexp.MustCompile(`([AMCB])(?:irth)?time?(?:spec)?\s+(Timespec|StTimespec)`)
|
||||
b = renameStatTimeFieldsRegex.ReplaceAll(b, []byte("${1}tim ${2}"))
|
||||
|
||||
// gofmt
|
||||
b, err = format.Source(b)
|
||||
if err != nil {
|
||||
|
|
|
@ -139,7 +139,7 @@ func main() {
|
|||
text += format(name, num, proto)
|
||||
}
|
||||
case "freebsd":
|
||||
if t.Match(`^([0-9]+)\s+\S+\s+(?:NO)?STD\s+({ \S+\s+(\w+).*)$`) {
|
||||
if t.Match(`^([0-9]+)\s+\S+\s+(?:(?:NO)?STD|COMPAT10)\s+({ \S+\s+(\w+).*)$`) {
|
||||
num, proto := t.sub[1], t.sub[2]
|
||||
name := fmt.Sprintf("SYS_%s", t.sub[3])
|
||||
text += format(name, num, proto)
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
// Copyright 2019 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.
|
||||
|
||||
// +build aix dragonfly freebsd linux netbsd openbsd
|
||||
|
||||
package unix
|
||||
|
||||
// ReadDirent reads directory entries from fd and writes them into buf.
|
||||
func ReadDirent(fd int, buf []byte) (n int, err error) {
|
||||
return Getdents(fd, buf)
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
// Copyright 2019 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.
|
||||
|
||||
// +build darwin
|
||||
|
||||
package unix
|
||||
|
||||
import "unsafe"
|
||||
|
||||
// ReadDirent reads directory entries from fd and writes them into buf.
|
||||
func ReadDirent(fd int, buf []byte) (n int, err error) {
|
||||
// Final argument is (basep *uintptr) and the syscall doesn't take nil.
|
||||
// 64 bits should be enough. (32 bits isn't even on 386). Since the
|
||||
// actual system call is getdirentries64, 64 is a good guess.
|
||||
// TODO(rsc): Can we use a single global basep for all calls?
|
||||
var base = (*uintptr)(unsafe.Pointer(new(uint64)))
|
||||
return Getdirentries(fd, buf, base)
|
||||
}
|
|
@ -280,8 +280,24 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
|||
return -1, ENOSYS
|
||||
}
|
||||
|
||||
func direntIno(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
|
||||
}
|
||||
|
||||
func direntReclen(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
|
||||
}
|
||||
|
||||
func direntNamlen(buf []byte) (uint64, bool) {
|
||||
reclen, ok := direntReclen(buf)
|
||||
if !ok {
|
||||
return 0, false
|
||||
}
|
||||
return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true
|
||||
}
|
||||
|
||||
//sys getdirent(fd int, buf []byte) (n int, err error)
|
||||
func ReadDirent(fd int, buf []byte) (n int, err error) {
|
||||
func Getdents(fd int, buf []byte) (n int, err error) {
|
||||
return getdirent(fd, buf)
|
||||
}
|
||||
|
||||
|
@ -454,8 +470,8 @@ func IoctlGetTermios(fd int, req uint) (*Termios, error) {
|
|||
//sys Dup2(oldfd int, newfd int) (err error)
|
||||
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = posix_fadvise64
|
||||
//sys Fchown(fd int, uid int, gid int) (err error)
|
||||
//sys Fstat(fd int, stat *Stat_t) (err error)
|
||||
//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = fstatat
|
||||
//sys fstat(fd int, stat *Stat_t) (err error)
|
||||
//sys fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = fstatat
|
||||
//sys Fstatfs(fd int, buf *Statfs_t) (err error)
|
||||
//sys Ftruncate(fd int, length int64) (err error)
|
||||
//sysnb Getegid() (egid int)
|
||||
|
@ -464,7 +480,7 @@ func IoctlGetTermios(fd int, req uint) (*Termios, error) {
|
|||
//sysnb Getuid() (uid int)
|
||||
//sys Lchown(path string, uid int, gid int) (err error)
|
||||
//sys Listen(s int, n int) (err error)
|
||||
//sys Lstat(path string, stat *Stat_t) (err error)
|
||||
//sys lstat(path string, stat *Stat_t) (err error)
|
||||
//sys Pause() (err error)
|
||||
//sys Pread(fd int, p []byte, offset int64) (n int, err error) = pread64
|
||||
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = pwrite64
|
||||
|
@ -474,7 +490,7 @@ func IoctlGetTermios(fd int, req uint) (*Termios, error) {
|
|||
//sysnb Setreuid(ruid int, euid int) (err error)
|
||||
//sys Shutdown(fd int, how int) (err error)
|
||||
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
|
||||
//sys Stat(path string, stat *Stat_t) (err error)
|
||||
//sys stat(path string, statptr *Stat_t) (err error)
|
||||
//sys Statfs(path string, buf *Statfs_t) (err error)
|
||||
//sys Truncate(path string, length int64) (err error)
|
||||
|
||||
|
|
|
@ -32,3 +32,19 @@ func (msghdr *Msghdr) SetControllen(length int) {
|
|||
func (cmsg *Cmsghdr) SetLen(length int) {
|
||||
cmsg.Len = uint32(length)
|
||||
}
|
||||
|
||||
func Fstat(fd int, stat *Stat_t) error {
|
||||
return fstat(fd, stat)
|
||||
}
|
||||
|
||||
func Fstatat(dirfd int, path string, stat *Stat_t, flags int) error {
|
||||
return fstatat(dirfd, path, stat, flags)
|
||||
}
|
||||
|
||||
func Lstat(path string, stat *Stat_t) error {
|
||||
return lstat(path, stat)
|
||||
}
|
||||
|
||||
func Stat(path string, statptr *Stat_t) error {
|
||||
return stat(path, statptr)
|
||||
}
|
||||
|
|
|
@ -32,3 +32,50 @@ func (msghdr *Msghdr) SetControllen(length int) {
|
|||
func (cmsg *Cmsghdr) SetLen(length int) {
|
||||
cmsg.Len = uint32(length)
|
||||
}
|
||||
|
||||
// In order to only have Timespec structure, type of Stat_t's fields
|
||||
// Atim, Mtim and Ctim is changed from StTimespec to Timespec during
|
||||
// ztypes generation.
|
||||
// On ppc64, Timespec.Nsec is an int64 while StTimespec.Nsec is an
|
||||
// int32, so the fields' value must be modified.
|
||||
func fixStatTimFields(stat *Stat_t) {
|
||||
stat.Atim.Nsec >>= 32
|
||||
stat.Mtim.Nsec >>= 32
|
||||
stat.Ctim.Nsec >>= 32
|
||||
}
|
||||
|
||||
func Fstat(fd int, stat *Stat_t) error {
|
||||
err := fstat(fd, stat)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fixStatTimFields(stat)
|
||||
return nil
|
||||
}
|
||||
|
||||
func Fstatat(dirfd int, path string, stat *Stat_t, flags int) error {
|
||||
err := fstatat(dirfd, path, stat, flags)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fixStatTimFields(stat)
|
||||
return nil
|
||||
}
|
||||
|
||||
func Lstat(path string, stat *Stat_t) error {
|
||||
err := lstat(path, stat)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fixStatTimFields(stat)
|
||||
return nil
|
||||
}
|
||||
|
||||
func Stat(path string, statptr *Stat_t) error {
|
||||
err := stat(path, statptr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fixStatTimFields(statptr)
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -63,15 +63,6 @@ func Setgroups(gids []int) (err error) {
|
|||
return setgroups(len(a), &a[0])
|
||||
}
|
||||
|
||||
func ReadDirent(fd int, buf []byte) (n int, err error) {
|
||||
// Final argument is (basep *uintptr) and the syscall doesn't take nil.
|
||||
// 64 bits should be enough. (32 bits isn't even on 386). Since the
|
||||
// actual system call is getdirentries64, 64 is a good guess.
|
||||
// TODO(rsc): Can we use a single global basep for all calls?
|
||||
var base = (*uintptr)(unsafe.Pointer(new(uint64)))
|
||||
return Getdirentries(fd, buf, base)
|
||||
}
|
||||
|
||||
// Wait status is 7 bits at bottom, either 0 (exited),
|
||||
// 0x7F (stopped), or a signal number that caused an exit.
|
||||
// The 0x80 bit is whether there was a core dump.
|
||||
|
@ -86,6 +77,7 @@ const (
|
|||
shift = 8
|
||||
|
||||
exited = 0
|
||||
killed = 9
|
||||
stopped = 0x7F
|
||||
)
|
||||
|
||||
|
@ -112,6 +104,8 @@ func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }
|
|||
|
||||
func (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP }
|
||||
|
||||
func (w WaitStatus) Killed() bool { return w&mask == killed && syscall.Signal(w>>shift) != SIGKILL }
|
||||
|
||||
func (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP }
|
||||
|
||||
func (w WaitStatus) StopSignal() syscall.Signal {
|
||||
|
|
|
@ -77,6 +77,18 @@ func nametomib(name string) (mib []_C_int, err error) {
|
|||
return buf[0 : n/siz], nil
|
||||
}
|
||||
|
||||
func direntIno(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
|
||||
}
|
||||
|
||||
func direntReclen(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
|
||||
}
|
||||
|
||||
func direntNamlen(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
|
||||
}
|
||||
|
||||
//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error)
|
||||
func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) }
|
||||
func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) }
|
||||
|
|
|
@ -57,6 +57,22 @@ func nametomib(name string) (mib []_C_int, err error) {
|
|||
return buf[0 : n/siz], nil
|
||||
}
|
||||
|
||||
func direntIno(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))
|
||||
}
|
||||
|
||||
func direntReclen(buf []byte) (uint64, bool) {
|
||||
namlen, ok := direntNamlen(buf)
|
||||
if !ok {
|
||||
return 0, false
|
||||
}
|
||||
return (16 + namlen + 1 + 7) &^ 7, true
|
||||
}
|
||||
|
||||
func direntNamlen(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
|
||||
}
|
||||
|
||||
//sysnb pipe() (r int, w int, err error)
|
||||
|
||||
func Pipe(p []int) (err error) {
|
||||
|
@ -269,6 +285,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
|||
//sys Fstatfs(fd int, stat *Statfs_t) (err error)
|
||||
//sys Fsync(fd int) (err error)
|
||||
//sys Ftruncate(fd int, length int64) (err error)
|
||||
//sys Getdents(fd int, buf []byte) (n int, err error)
|
||||
//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)
|
||||
//sys Getdtablesize() (size int)
|
||||
//sysnb Getegid() (egid int)
|
||||
|
|
|
@ -82,6 +82,18 @@ func nametomib(name string) (mib []_C_int, err error) {
|
|||
return buf[0 : n/siz], nil
|
||||
}
|
||||
|
||||
func direntIno(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))
|
||||
}
|
||||
|
||||
func direntReclen(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
|
||||
}
|
||||
|
||||
func direntNamlen(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
|
||||
}
|
||||
|
||||
func Pipe(p []int) (err error) {
|
||||
return Pipe2(p, 0)
|
||||
}
|
||||
|
@ -362,7 +374,21 @@ func Getdents(fd int, buf []byte) (n int, err error) {
|
|||
|
||||
func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
||||
if supportsABI(_ino64First) {
|
||||
return getdirentries_freebsd12(fd, buf, basep)
|
||||
if basep == nil || unsafe.Sizeof(*basep) == 8 {
|
||||
return getdirentries_freebsd12(fd, buf, (*uint64)(unsafe.Pointer(basep)))
|
||||
}
|
||||
// The freebsd12 syscall needs a 64-bit base. On 32-bit machines
|
||||
// we can't just use the basep passed in. See #32498.
|
||||
var base uint64 = uint64(*basep)
|
||||
n, err = getdirentries_freebsd12(fd, buf, &base)
|
||||
*basep = uintptr(base)
|
||||
if base>>32 != 0 {
|
||||
// We can't stuff the base back into a uintptr, so any
|
||||
// future calls would be suspect. Generate an error.
|
||||
// EIO is allowed by getdirentries.
|
||||
err = EIO
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// The old syscall entries are smaller than the new. Use 1/4 of the original
|
||||
|
@ -404,22 +430,22 @@ func roundup(x, y int) int {
|
|||
|
||||
func (s *Stat_t) convertFrom(old *stat_freebsd11_t) {
|
||||
*s = Stat_t{
|
||||
Dev: uint64(old.Dev),
|
||||
Ino: uint64(old.Ino),
|
||||
Nlink: uint64(old.Nlink),
|
||||
Mode: old.Mode,
|
||||
Uid: old.Uid,
|
||||
Gid: old.Gid,
|
||||
Rdev: uint64(old.Rdev),
|
||||
Atim: old.Atim,
|
||||
Mtim: old.Mtim,
|
||||
Ctim: old.Ctim,
|
||||
Birthtim: old.Birthtim,
|
||||
Size: old.Size,
|
||||
Blocks: old.Blocks,
|
||||
Blksize: old.Blksize,
|
||||
Flags: old.Flags,
|
||||
Gen: uint64(old.Gen),
|
||||
Dev: uint64(old.Dev),
|
||||
Ino: uint64(old.Ino),
|
||||
Nlink: uint64(old.Nlink),
|
||||
Mode: old.Mode,
|
||||
Uid: old.Uid,
|
||||
Gid: old.Gid,
|
||||
Rdev: uint64(old.Rdev),
|
||||
Atim: old.Atim,
|
||||
Mtim: old.Mtim,
|
||||
Ctim: old.Ctim,
|
||||
Btim: old.Btim,
|
||||
Size: old.Size,
|
||||
Blocks: old.Blocks,
|
||||
Blksize: old.Blksize,
|
||||
Flags: old.Flags,
|
||||
Gen: uint64(old.Gen),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -507,6 +533,70 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
|||
return sendfile(outfd, infd, offset, count)
|
||||
}
|
||||
|
||||
//sys ptrace(request int, pid int, addr uintptr, data int) (err error)
|
||||
|
||||
func PtraceAttach(pid int) (err error) {
|
||||
return ptrace(PTRACE_ATTACH, pid, 0, 0)
|
||||
}
|
||||
|
||||
func PtraceCont(pid int, signal int) (err error) {
|
||||
return ptrace(PTRACE_CONT, pid, 1, signal)
|
||||
}
|
||||
|
||||
func PtraceDetach(pid int) (err error) {
|
||||
return ptrace(PTRACE_DETACH, pid, 1, 0)
|
||||
}
|
||||
|
||||
func PtraceGetFpRegs(pid int, fpregsout *FpReg) (err error) {
|
||||
return ptrace(PTRACE_GETFPREGS, pid, uintptr(unsafe.Pointer(fpregsout)), 0)
|
||||
}
|
||||
|
||||
func PtraceGetFsBase(pid int, fsbase *int64) (err error) {
|
||||
return ptrace(PTRACE_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0)
|
||||
}
|
||||
|
||||
func PtraceGetRegs(pid int, regsout *Reg) (err error) {
|
||||
return ptrace(PTRACE_GETREGS, pid, uintptr(unsafe.Pointer(regsout)), 0)
|
||||
}
|
||||
|
||||
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
|
||||
ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint(countin)}
|
||||
err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
|
||||
return int(ioDesc.Len), err
|
||||
}
|
||||
|
||||
func PtraceLwpEvents(pid int, enable int) (err error) {
|
||||
return ptrace(PTRACE_LWPEVENTS, pid, 0, enable)
|
||||
}
|
||||
|
||||
func PtraceLwpInfo(pid int, info uintptr) (err error) {
|
||||
return ptrace(PTRACE_LWPINFO, pid, info, int(unsafe.Sizeof(PtraceLwpInfoStruct{})))
|
||||
}
|
||||
|
||||
func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) {
|
||||
return PtraceIO(PIOD_READ_D, pid, addr, out, SizeofLong)
|
||||
}
|
||||
|
||||
func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) {
|
||||
return PtraceIO(PIOD_READ_I, pid, addr, out, SizeofLong)
|
||||
}
|
||||
|
||||
func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) {
|
||||
return PtraceIO(PIOD_WRITE_D, pid, addr, data, SizeofLong)
|
||||
}
|
||||
|
||||
func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) {
|
||||
return PtraceIO(PIOD_WRITE_I, pid, addr, data, SizeofLong)
|
||||
}
|
||||
|
||||
func PtraceSetRegs(pid int, regs *Reg) (err error) {
|
||||
return ptrace(PTRACE_SETREGS, pid, uintptr(unsafe.Pointer(regs)), 0)
|
||||
}
|
||||
|
||||
func PtraceSingleStep(pid int) (err error) {
|
||||
return ptrace(PTRACE_SINGLESTEP, pid, 1, 0)
|
||||
}
|
||||
|
||||
/*
|
||||
* Exposed directly
|
||||
*/
|
||||
|
@ -555,7 +645,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
|||
//sys Fsync(fd int) (err error)
|
||||
//sys Ftruncate(fd int, length int64) (err error)
|
||||
//sys getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)
|
||||
//sys getdirentries_freebsd12(fd int, buf []byte, basep *uintptr) (n int, err error)
|
||||
//sys getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error)
|
||||
//sys Getdtablesize() (size int)
|
||||
//sysnb Getegid() (egid int)
|
||||
//sysnb Geteuid() (uid int)
|
||||
|
|
|
@ -13,7 +13,6 @@ package unix
|
|||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"net"
|
||||
"runtime"
|
||||
"syscall"
|
||||
"unsafe"
|
||||
|
@ -109,6 +108,12 @@ func IoctlGetInt(fd int, req uint) (int, error) {
|
|||
return value, err
|
||||
}
|
||||
|
||||
func IoctlGetUint32(fd int, req uint) (uint32, error) {
|
||||
var value uint32
|
||||
err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
|
||||
return value, err
|
||||
}
|
||||
|
||||
func IoctlGetWinsize(fd int, req uint) (*Winsize, error) {
|
||||
var value Winsize
|
||||
err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
|
||||
|
@ -759,7 +764,7 @@ const px_proto_oe = 0
|
|||
|
||||
type SockaddrPPPoE struct {
|
||||
SID uint16
|
||||
Remote net.HardwareAddr
|
||||
Remote []byte
|
||||
Dev string
|
||||
raw RawSockaddrPPPoX
|
||||
}
|
||||
|
@ -910,7 +915,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
|
|||
}
|
||||
sa := &SockaddrPPPoE{
|
||||
SID: binary.BigEndian.Uint16(pp[6:8]),
|
||||
Remote: net.HardwareAddr(pp[8:14]),
|
||||
Remote: pp[8:14],
|
||||
}
|
||||
for i := 14; i < 14+IFNAMSIZ; i++ {
|
||||
if pp[i] == 0 {
|
||||
|
@ -1408,8 +1413,20 @@ func Reboot(cmd int) (err error) {
|
|||
return reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, "")
|
||||
}
|
||||
|
||||
func ReadDirent(fd int, buf []byte) (n int, err error) {
|
||||
return Getdents(fd, buf)
|
||||
func direntIno(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
|
||||
}
|
||||
|
||||
func direntReclen(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
|
||||
}
|
||||
|
||||
func direntNamlen(buf []byte) (uint64, bool) {
|
||||
reclen, ok := direntReclen(buf)
|
||||
if !ok {
|
||||
return 0, false
|
||||
}
|
||||
return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true
|
||||
}
|
||||
|
||||
//sys mount(source string, target string, fstype string, flags uintptr, data *byte) (err error)
|
||||
|
@ -1444,6 +1461,8 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
|||
//sys Acct(path string) (err error)
|
||||
//sys AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error)
|
||||
//sys Adjtimex(buf *Timex) (state int, err error)
|
||||
//sys Capget(hdr *CapUserHeader, data *CapUserData) (err error)
|
||||
//sys Capset(hdr *CapUserHeader, data *CapUserData) (err error)
|
||||
//sys Chdir(path string) (err error)
|
||||
//sys Chroot(path string) (err error)
|
||||
//sys ClockGetres(clockid int32, res *Timespec) (err error)
|
||||
|
@ -1531,9 +1550,13 @@ func Setgid(uid int) (err error) {
|
|||
return EOPNOTSUPP
|
||||
}
|
||||
|
||||
func Signalfd(fd int, sigmask *Sigset_t, flags int) (newfd int, err error) {
|
||||
return signalfd(fd, sigmask, _C__NSIG/8, flags)
|
||||
}
|
||||
|
||||
//sys Setpriority(which int, who int, prio int) (err error)
|
||||
//sys Setxattr(path string, attr string, data []byte, flags int) (err error)
|
||||
//sys Signalfd(fd int, mask *Sigset_t, flags int) = SYS_SIGNALFD4
|
||||
//sys signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) = SYS_SIGNALFD4
|
||||
//sys Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error)
|
||||
//sys Sync()
|
||||
//sys Syncfs(fd int) (err error)
|
||||
|
@ -1745,8 +1768,6 @@ func OpenByHandleAt(mountFD int, handle FileHandle, flags int) (fd int, err erro
|
|||
// Alarm
|
||||
// ArchPrctl
|
||||
// Brk
|
||||
// Capget
|
||||
// Capset
|
||||
// ClockNanosleep
|
||||
// ClockSettime
|
||||
// Clone
|
||||
|
|
|
@ -272,3 +272,16 @@ func SyncFileRange(fd int, off int64, n int64, flags int) error {
|
|||
// order of their arguments.
|
||||
return armSyncFileRange(fd, flags, off, n)
|
||||
}
|
||||
|
||||
//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)
|
||||
|
||||
func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
|
||||
cmdlineLen := len(cmdline)
|
||||
if cmdlineLen > 0 {
|
||||
// Account for the additional NULL byte added by
|
||||
// BytePtrFromString in kexecFileLoad. The kexec_file_load
|
||||
// syscall expects a NULL-terminated string.
|
||||
cmdlineLen++
|
||||
}
|
||||
return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
|
||||
}
|
||||
|
|
|
@ -94,6 +94,18 @@ func nametomib(name string) (mib []_C_int, err error) {
|
|||
return mib, nil
|
||||
}
|
||||
|
||||
func direntIno(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))
|
||||
}
|
||||
|
||||
func direntReclen(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
|
||||
}
|
||||
|
||||
func direntNamlen(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
|
||||
}
|
||||
|
||||
func SysctlClockinfo(name string) (*Clockinfo, error) {
|
||||
mib, err := sysctlmib(name)
|
||||
if err != nil {
|
||||
|
@ -120,9 +132,30 @@ func Pipe(p []int) (err error) {
|
|||
return
|
||||
}
|
||||
|
||||
//sys getdents(fd int, buf []byte) (n int, err error)
|
||||
//sys Getdents(fd int, buf []byte) (n int, err error)
|
||||
func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
||||
return getdents(fd, buf)
|
||||
n, err = Getdents(fd, buf)
|
||||
if err != nil || basep == nil {
|
||||
return
|
||||
}
|
||||
|
||||
var off int64
|
||||
off, err = Seek(fd, 0, 1 /* SEEK_CUR */)
|
||||
if err != nil {
|
||||
*basep = ^uintptr(0)
|
||||
return
|
||||
}
|
||||
*basep = uintptr(off)
|
||||
if unsafe.Sizeof(*basep) == 8 {
|
||||
return
|
||||
}
|
||||
if off>>32 != 0 {
|
||||
// We can't stuff the offset back into a uintptr, so any
|
||||
// future calls would be suspect. Generate an error.
|
||||
// EIO is allowed by getdirentries.
|
||||
err = EIO
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
const ImplementsGetwd = true
|
||||
|
|
|
@ -43,6 +43,18 @@ func nametomib(name string) (mib []_C_int, err error) {
|
|||
return nil, EINVAL
|
||||
}
|
||||
|
||||
func direntIno(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))
|
||||
}
|
||||
|
||||
func direntReclen(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
|
||||
}
|
||||
|
||||
func direntNamlen(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
|
||||
}
|
||||
|
||||
func SysctlClockinfo(name string) (*Clockinfo, error) {
|
||||
mib, err := sysctlmib(name)
|
||||
if err != nil {
|
||||
|
@ -89,9 +101,30 @@ func Pipe(p []int) (err error) {
|
|||
return
|
||||
}
|
||||
|
||||
//sys getdents(fd int, buf []byte) (n int, err error)
|
||||
//sys Getdents(fd int, buf []byte) (n int, err error)
|
||||
func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
||||
return getdents(fd, buf)
|
||||
n, err = Getdents(fd, buf)
|
||||
if err != nil || basep == nil {
|
||||
return
|
||||
}
|
||||
|
||||
var off int64
|
||||
off, err = Seek(fd, 0, 1 /* SEEK_CUR */)
|
||||
if err != nil {
|
||||
*basep = ^uintptr(0)
|
||||
return
|
||||
}
|
||||
*basep = uintptr(off)
|
||||
if unsafe.Sizeof(*basep) == 8 {
|
||||
return
|
||||
}
|
||||
if off>>32 != 0 {
|
||||
// We can't stuff the offset back into a uintptr, so any
|
||||
// future calls would be suspect. Generate an error.
|
||||
// EIO was allowed by getdirentries.
|
||||
err = EIO
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
const ImplementsGetwd = true
|
||||
|
|
|
@ -35,6 +35,22 @@ type SockaddrDatalink struct {
|
|||
raw RawSockaddrDatalink
|
||||
}
|
||||
|
||||
func direntIno(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
|
||||
}
|
||||
|
||||
func direntReclen(buf []byte) (uint64, bool) {
|
||||
return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
|
||||
}
|
||||
|
||||
func direntNamlen(buf []byte) (uint64, bool) {
|
||||
reclen, ok := direntReclen(buf)
|
||||
if !ok {
|
||||
return 0, false
|
||||
}
|
||||
return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true
|
||||
}
|
||||
|
||||
//sysnb pipe(p *[2]_C_int) (n int, err error)
|
||||
|
||||
func Pipe(p []int) (err error) {
|
||||
|
@ -189,6 +205,7 @@ func Setgroups(gids []int) (err error) {
|
|||
return setgroups(len(a), &a[0])
|
||||
}
|
||||
|
||||
// ReadDirent reads directory entries from fd and writes them into buf.
|
||||
func ReadDirent(fd int, buf []byte) (n int, err error) {
|
||||
// Final argument is (basep *uintptr) and the syscall doesn't take nil.
|
||||
// TODO(rsc): Can we use a single global basep for all calls?
|
||||
|
|
|
@ -87,8 +87,6 @@ type Mode_t C.mode_t
|
|||
|
||||
type Timespec C.struct_timespec
|
||||
|
||||
type StTimespec C.struct_st_timespec
|
||||
|
||||
type Timeval C.struct_timeval
|
||||
|
||||
type Timeval32 C.struct_timeval32
|
||||
|
@ -133,6 +131,8 @@ type RawSockaddrInet6 C.struct_sockaddr_in6
|
|||
|
||||
type RawSockaddrUnix C.struct_sockaddr_un
|
||||
|
||||
type RawSockaddrDatalink C.struct_sockaddr_dl
|
||||
|
||||
type RawSockaddr C.struct_sockaddr
|
||||
|
||||
type RawSockaddrAny C.struct_sockaddr_any
|
||||
|
@ -156,17 +156,18 @@ type Linger C.struct_linger
|
|||
type Msghdr C.struct_msghdr
|
||||
|
||||
const (
|
||||
SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in
|
||||
SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
|
||||
SizeofSockaddrAny = C.sizeof_struct_sockaddr_any
|
||||
SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un
|
||||
SizeofLinger = C.sizeof_struct_linger
|
||||
SizeofIPMreq = C.sizeof_struct_ip_mreq
|
||||
SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
|
||||
SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo
|
||||
SizeofMsghdr = C.sizeof_struct_msghdr
|
||||
SizeofCmsghdr = C.sizeof_struct_cmsghdr
|
||||
SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
|
||||
SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in
|
||||
SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
|
||||
SizeofSockaddrAny = C.sizeof_struct_sockaddr_any
|
||||
SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un
|
||||
SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl
|
||||
SizeofLinger = C.sizeof_struct_linger
|
||||
SizeofIPMreq = C.sizeof_struct_ip_mreq
|
||||
SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
|
||||
SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo
|
||||
SizeofMsghdr = C.sizeof_struct_msghdr
|
||||
SizeofCmsghdr = C.sizeof_struct_cmsghdr
|
||||
SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
|
||||
)
|
||||
|
||||
// Routing and interface messages
|
||||
|
|
|
@ -243,11 +243,55 @@ const (
|
|||
// Ptrace requests
|
||||
|
||||
const (
|
||||
PTRACE_TRACEME = C.PT_TRACE_ME
|
||||
PTRACE_CONT = C.PT_CONTINUE
|
||||
PTRACE_KILL = C.PT_KILL
|
||||
PTRACE_ATTACH = C.PT_ATTACH
|
||||
PTRACE_CONT = C.PT_CONTINUE
|
||||
PTRACE_DETACH = C.PT_DETACH
|
||||
PTRACE_GETFPREGS = C.PT_GETFPREGS
|
||||
PTRACE_GETFSBASE = C.PT_GETFSBASE
|
||||
PTRACE_GETLWPLIST = C.PT_GETLWPLIST
|
||||
PTRACE_GETNUMLWPS = C.PT_GETNUMLWPS
|
||||
PTRACE_GETREGS = C.PT_GETREGS
|
||||
PTRACE_GETXSTATE = C.PT_GETXSTATE
|
||||
PTRACE_IO = C.PT_IO
|
||||
PTRACE_KILL = C.PT_KILL
|
||||
PTRACE_LWPEVENTS = C.PT_LWP_EVENTS
|
||||
PTRACE_LWPINFO = C.PT_LWPINFO
|
||||
PTRACE_SETFPREGS = C.PT_SETFPREGS
|
||||
PTRACE_SETREGS = C.PT_SETREGS
|
||||
PTRACE_SINGLESTEP = C.PT_STEP
|
||||
PTRACE_TRACEME = C.PT_TRACE_ME
|
||||
)
|
||||
|
||||
const (
|
||||
PIOD_READ_D = C.PIOD_READ_D
|
||||
PIOD_WRITE_D = C.PIOD_WRITE_D
|
||||
PIOD_READ_I = C.PIOD_READ_I
|
||||
PIOD_WRITE_I = C.PIOD_WRITE_I
|
||||
)
|
||||
|
||||
const (
|
||||
PL_FLAG_BORN = C.PL_FLAG_BORN
|
||||
PL_FLAG_EXITED = C.PL_FLAG_EXITED
|
||||
PL_FLAG_SI = C.PL_FLAG_SI
|
||||
)
|
||||
|
||||
const (
|
||||
TRAP_BRKPT = C.TRAP_BRKPT
|
||||
TRAP_TRACE = C.TRAP_TRACE
|
||||
)
|
||||
|
||||
type PtraceLwpInfoStruct C.struct_ptrace_lwpinfo
|
||||
|
||||
type __Siginfo C.struct___siginfo
|
||||
|
||||
type Sigset_t C.sigset_t
|
||||
|
||||
type Reg C.struct_reg
|
||||
|
||||
type FpReg C.struct_fpreg
|
||||
|
||||
type PtraceIoDesc C.struct_ptrace_io_desc
|
||||
|
||||
// Events (kqueue, kevent)
|
||||
|
||||
type Kevent_t C.struct_kevent_freebsd11
|
||||
|
|
|
@ -254,6 +254,7 @@ type Ptmget C.struct_ptmget
|
|||
|
||||
const (
|
||||
AT_FDCWD = C.AT_FDCWD
|
||||
AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW
|
||||
AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW
|
||||
)
|
||||
|
||||
|
|
|
@ -241,6 +241,7 @@ type Winsize C.struct_winsize
|
|||
|
||||
const (
|
||||
AT_FDCWD = C.AT_FDCWD
|
||||
AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW
|
||||
AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW
|
||||
)
|
||||
|
||||
|
|
|
@ -196,11 +196,70 @@ const (
|
|||
BPF_A = 0x10
|
||||
BPF_ABS = 0x20
|
||||
BPF_ADD = 0x0
|
||||
BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff
|
||||
BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38
|
||||
BPF_ALU = 0x4
|
||||
BPF_ALU64 = 0x7
|
||||
BPF_AND = 0x50
|
||||
BPF_ANY = 0x0
|
||||
BPF_ARSH = 0xc0
|
||||
BPF_B = 0x10
|
||||
BPF_BUILD_ID_SIZE = 0x14
|
||||
BPF_CALL = 0x80
|
||||
BPF_DEVCG_ACC_MKNOD = 0x1
|
||||
BPF_DEVCG_ACC_READ = 0x2
|
||||
BPF_DEVCG_ACC_WRITE = 0x4
|
||||
BPF_DEVCG_DEV_BLOCK = 0x1
|
||||
BPF_DEVCG_DEV_CHAR = 0x2
|
||||
BPF_DIV = 0x30
|
||||
BPF_DW = 0x18
|
||||
BPF_END = 0xd0
|
||||
BPF_EXIST = 0x2
|
||||
BPF_EXIT = 0x90
|
||||
BPF_FROM_BE = 0x8
|
||||
BPF_FROM_LE = 0x0
|
||||
BPF_FS_MAGIC = 0xcafe4a11
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10
|
||||
BPF_F_ADJ_ROOM_FIXED_GSO = 0x1
|
||||
BPF_F_ALLOW_MULTI = 0x2
|
||||
BPF_F_ALLOW_OVERRIDE = 0x1
|
||||
BPF_F_ANY_ALIGNMENT = 0x2
|
||||
BPF_F_CTXLEN_MASK = 0xfffff00000000
|
||||
BPF_F_CURRENT_CPU = 0xffffffff
|
||||
BPF_F_CURRENT_NETNS = -0x1
|
||||
BPF_F_DONT_FRAGMENT = 0x4
|
||||
BPF_F_FAST_STACK_CMP = 0x200
|
||||
BPF_F_HDR_FIELD_MASK = 0xf
|
||||
BPF_F_INDEX_MASK = 0xffffffff
|
||||
BPF_F_INGRESS = 0x1
|
||||
BPF_F_INVALIDATE_HASH = 0x2
|
||||
BPF_F_LOCK = 0x4
|
||||
BPF_F_MARK_ENFORCE = 0x40
|
||||
BPF_F_MARK_MANGLED_0 = 0x20
|
||||
BPF_F_NO_COMMON_LRU = 0x2
|
||||
BPF_F_NO_PREALLOC = 0x1
|
||||
BPF_F_NUMA_NODE = 0x4
|
||||
BPF_F_PSEUDO_HDR = 0x10
|
||||
BPF_F_QUERY_EFFECTIVE = 0x1
|
||||
BPF_F_RDONLY = 0x8
|
||||
BPF_F_RDONLY_PROG = 0x80
|
||||
BPF_F_RECOMPUTE_CSUM = 0x1
|
||||
BPF_F_REUSE_STACKID = 0x400
|
||||
BPF_F_SEQ_NUMBER = 0x8
|
||||
BPF_F_SKIP_FIELD_MASK = 0xff
|
||||
BPF_F_STACK_BUILD_ID = 0x20
|
||||
BPF_F_STRICT_ALIGNMENT = 0x1
|
||||
BPF_F_SYSCTL_BASE_NAME = 0x1
|
||||
BPF_F_TUNINFO_IPV6 = 0x1
|
||||
BPF_F_USER_BUILD_ID = 0x800
|
||||
BPF_F_USER_STACK = 0x100
|
||||
BPF_F_WRONLY = 0x10
|
||||
BPF_F_WRONLY_PROG = 0x100
|
||||
BPF_F_ZERO_CSUM_TX = 0x2
|
||||
BPF_F_ZERO_SEED = 0x40
|
||||
BPF_H = 0x8
|
||||
BPF_IMM = 0x0
|
||||
BPF_IND = 0x40
|
||||
|
@ -208,8 +267,16 @@ const (
|
|||
BPF_JEQ = 0x10
|
||||
BPF_JGE = 0x30
|
||||
BPF_JGT = 0x20
|
||||
BPF_JLE = 0xb0
|
||||
BPF_JLT = 0xa0
|
||||
BPF_JMP = 0x5
|
||||
BPF_JMP32 = 0x6
|
||||
BPF_JNE = 0x50
|
||||
BPF_JSET = 0x40
|
||||
BPF_JSGE = 0x70
|
||||
BPF_JSGT = 0x60
|
||||
BPF_JSLE = 0xd0
|
||||
BPF_JSLT = 0xc0
|
||||
BPF_K = 0x0
|
||||
BPF_LD = 0x0
|
||||
BPF_LDX = 0x1
|
||||
|
@ -223,20 +290,35 @@ const (
|
|||
BPF_MINOR_VERSION = 0x1
|
||||
BPF_MISC = 0x7
|
||||
BPF_MOD = 0x90
|
||||
BPF_MOV = 0xb0
|
||||
BPF_MSH = 0xa0
|
||||
BPF_MUL = 0x20
|
||||
BPF_NEG = 0x80
|
||||
BPF_NET_OFF = -0x100000
|
||||
BPF_NOEXIST = 0x1
|
||||
BPF_OBJ_NAME_LEN = 0x10
|
||||
BPF_OR = 0x40
|
||||
BPF_PSEUDO_CALL = 0x1
|
||||
BPF_PSEUDO_MAP_FD = 0x1
|
||||
BPF_PSEUDO_MAP_VALUE = 0x2
|
||||
BPF_RET = 0x6
|
||||
BPF_RSH = 0x70
|
||||
BPF_SK_STORAGE_GET_F_CREATE = 0x1
|
||||
BPF_SOCK_OPS_ALL_CB_FLAGS = 0x7
|
||||
BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2
|
||||
BPF_SOCK_OPS_RTO_CB_FLAG = 0x1
|
||||
BPF_SOCK_OPS_STATE_CB_FLAG = 0x4
|
||||
BPF_ST = 0x2
|
||||
BPF_STX = 0x3
|
||||
BPF_SUB = 0x10
|
||||
BPF_TAG_SIZE = 0x8
|
||||
BPF_TAX = 0x0
|
||||
BPF_TO_BE = 0x8
|
||||
BPF_TO_LE = 0x0
|
||||
BPF_TXA = 0x80
|
||||
BPF_W = 0x0
|
||||
BPF_X = 0x8
|
||||
BPF_XADD = 0xc0
|
||||
BPF_XOR = 0xa0
|
||||
BRKINT = 0x2
|
||||
BS0 = 0x0
|
||||
|
@ -264,6 +346,45 @@ const (
|
|||
CAN_SFF_MASK = 0x7ff
|
||||
CAN_TP16 = 0x3
|
||||
CAN_TP20 = 0x4
|
||||
CAP_AUDIT_CONTROL = 0x1e
|
||||
CAP_AUDIT_READ = 0x25
|
||||
CAP_AUDIT_WRITE = 0x1d
|
||||
CAP_BLOCK_SUSPEND = 0x24
|
||||
CAP_CHOWN = 0x0
|
||||
CAP_DAC_OVERRIDE = 0x1
|
||||
CAP_DAC_READ_SEARCH = 0x2
|
||||
CAP_FOWNER = 0x3
|
||||
CAP_FSETID = 0x4
|
||||
CAP_IPC_LOCK = 0xe
|
||||
CAP_IPC_OWNER = 0xf
|
||||
CAP_KILL = 0x5
|
||||
CAP_LAST_CAP = 0x25
|
||||
CAP_LEASE = 0x1c
|
||||
CAP_LINUX_IMMUTABLE = 0x9
|
||||
CAP_MAC_ADMIN = 0x21
|
||||
CAP_MAC_OVERRIDE = 0x20
|
||||
CAP_MKNOD = 0x1b
|
||||
CAP_NET_ADMIN = 0xc
|
||||
CAP_NET_BIND_SERVICE = 0xa
|
||||
CAP_NET_BROADCAST = 0xb
|
||||
CAP_NET_RAW = 0xd
|
||||
CAP_SETFCAP = 0x1f
|
||||
CAP_SETGID = 0x6
|
||||
CAP_SETPCAP = 0x8
|
||||
CAP_SETUID = 0x7
|
||||
CAP_SYSLOG = 0x22
|
||||
CAP_SYS_ADMIN = 0x15
|
||||
CAP_SYS_BOOT = 0x16
|
||||
CAP_SYS_CHROOT = 0x12
|
||||
CAP_SYS_MODULE = 0x10
|
||||
CAP_SYS_NICE = 0x17
|
||||
CAP_SYS_PACCT = 0x14
|
||||
CAP_SYS_PTRACE = 0x13
|
||||
CAP_SYS_RAWIO = 0x11
|
||||
CAP_SYS_RESOURCE = 0x18
|
||||
CAP_SYS_TIME = 0x19
|
||||
CAP_SYS_TTY_CONFIG = 0x1a
|
||||
CAP_WAKE_ALARM = 0x23
|
||||
CBAUD = 0x100f
|
||||
CBAUDEX = 0x1000
|
||||
CFLUSH = 0xf
|
||||
|
@ -302,6 +423,7 @@ const (
|
|||
CLONE_NEWUTS = 0x4000000
|
||||
CLONE_PARENT = 0x8000
|
||||
CLONE_PARENT_SETTID = 0x100000
|
||||
CLONE_PIDFD = 0x1000
|
||||
CLONE_PTRACE = 0x2000
|
||||
CLONE_SETTLS = 0x80000
|
||||
CLONE_SIGHAND = 0x800
|
||||
|
@ -418,6 +540,7 @@ const (
|
|||
ETH_P_DNA_RC = 0x6002
|
||||
ETH_P_DNA_RT = 0x6003
|
||||
ETH_P_DSA = 0x1b
|
||||
ETH_P_DSA_8021Q = 0xdadb
|
||||
ETH_P_ECONET = 0x18
|
||||
ETH_P_EDSA = 0xdada
|
||||
ETH_P_ERSPAN = 0x88be
|
||||
|
@ -501,6 +624,7 @@ const (
|
|||
FAN_ALL_MARK_FLAGS = 0xff
|
||||
FAN_ALL_OUTGOING_EVENTS = 0x3403b
|
||||
FAN_ALL_PERM_EVENTS = 0x30000
|
||||
FAN_ATTRIB = 0x4
|
||||
FAN_AUDIT = 0x10
|
||||
FAN_CLASS_CONTENT = 0x4
|
||||
FAN_CLASS_NOTIF = 0x0
|
||||
|
@ -509,8 +633,12 @@ const (
|
|||
FAN_CLOSE = 0x18
|
||||
FAN_CLOSE_NOWRITE = 0x10
|
||||
FAN_CLOSE_WRITE = 0x8
|
||||
FAN_CREATE = 0x100
|
||||
FAN_DELETE = 0x200
|
||||
FAN_DELETE_SELF = 0x400
|
||||
FAN_DENY = 0x2
|
||||
FAN_ENABLE_AUDIT = 0x40
|
||||
FAN_EVENT_INFO_TYPE_FID = 0x1
|
||||
FAN_EVENT_METADATA_LEN = 0x18
|
||||
FAN_EVENT_ON_CHILD = 0x8000000
|
||||
FAN_MARK_ADD = 0x1
|
||||
|
@ -524,6 +652,10 @@ const (
|
|||
FAN_MARK_ONLYDIR = 0x8
|
||||
FAN_MARK_REMOVE = 0x2
|
||||
FAN_MODIFY = 0x2
|
||||
FAN_MOVE = 0xc0
|
||||
FAN_MOVED_FROM = 0x40
|
||||
FAN_MOVED_TO = 0x80
|
||||
FAN_MOVE_SELF = 0x800
|
||||
FAN_NOFD = -0x1
|
||||
FAN_NONBLOCK = 0x2
|
||||
FAN_ONDIR = 0x40000000
|
||||
|
@ -532,6 +664,7 @@ const (
|
|||
FAN_OPEN_EXEC_PERM = 0x40000
|
||||
FAN_OPEN_PERM = 0x10000
|
||||
FAN_Q_OVERFLOW = 0x4000
|
||||
FAN_REPORT_FID = 0x200
|
||||
FAN_REPORT_TID = 0x100
|
||||
FAN_UNLIMITED_MARKS = 0x20
|
||||
FAN_UNLIMITED_QUEUE = 0x10
|
||||
|
@ -1016,6 +1149,20 @@ const (
|
|||
LOCK_NB = 0x4
|
||||
LOCK_SH = 0x1
|
||||
LOCK_UN = 0x8
|
||||
LOOP_CLR_FD = 0x4c01
|
||||
LOOP_CTL_ADD = 0x4c80
|
||||
LOOP_CTL_GET_FREE = 0x4c82
|
||||
LOOP_CTL_REMOVE = 0x4c81
|
||||
LOOP_GET_STATUS = 0x4c03
|
||||
LOOP_GET_STATUS64 = 0x4c05
|
||||
LOOP_SET_BLOCK_SIZE = 0x4c09
|
||||
LOOP_SET_CAPACITY = 0x4c07
|
||||
LOOP_SET_DIRECT_IO = 0x4c08
|
||||
LOOP_SET_FD = 0x4c00
|
||||
LOOP_SET_STATUS = 0x4c02
|
||||
LOOP_SET_STATUS64 = 0x4c04
|
||||
LO_KEY_SIZE = 0x20
|
||||
LO_NAME_SIZE = 0x40
|
||||
MADV_DODUMP = 0x11
|
||||
MADV_DOFORK = 0xb
|
||||
MADV_DONTDUMP = 0x10
|
||||
|
@ -1056,6 +1203,15 @@ const (
|
|||
MAP_STACK = 0x20000
|
||||
MAP_SYNC = 0x80000
|
||||
MAP_TYPE = 0xf
|
||||
MCAST_BLOCK_SOURCE = 0x2b
|
||||
MCAST_EXCLUDE = 0x0
|
||||
MCAST_INCLUDE = 0x1
|
||||
MCAST_JOIN_GROUP = 0x2a
|
||||
MCAST_JOIN_SOURCE_GROUP = 0x2e
|
||||
MCAST_LEAVE_GROUP = 0x2d
|
||||
MCAST_LEAVE_SOURCE_GROUP = 0x2f
|
||||
MCAST_MSFILTER = 0x30
|
||||
MCAST_UNBLOCK_SOURCE = 0x2c
|
||||
MCL_CURRENT = 0x1
|
||||
MCL_FUTURE = 0x2
|
||||
MCL_ONFAULT = 0x4
|
||||
|
@ -1491,6 +1647,7 @@ const (
|
|||
PR_SET_TSC = 0x1a
|
||||
PR_SET_UNALIGN = 0x6
|
||||
PR_SPEC_DISABLE = 0x4
|
||||
PR_SPEC_DISABLE_NOEXEC = 0x10
|
||||
PR_SPEC_ENABLE = 0x2
|
||||
PR_SPEC_FORCE_DISABLE = 0x8
|
||||
PR_SPEC_INDIRECT_BRANCH = 0x1
|
||||
|
@ -1868,6 +2025,10 @@ const (
|
|||
SIOCGSKNS = 0x894c
|
||||
SIOCGSTAMP = 0x8906
|
||||
SIOCGSTAMPNS = 0x8907
|
||||
SIOCGSTAMPNS_NEW = 0x80108907
|
||||
SIOCGSTAMPNS_OLD = 0x8907
|
||||
SIOCGSTAMP_NEW = 0x80108906
|
||||
SIOCGSTAMP_OLD = 0x8906
|
||||
SIOCINQ = 0x541b
|
||||
SIOCOUTQ = 0x5411
|
||||
SIOCOUTQNSD = 0x894b
|
||||
|
@ -1961,6 +2122,7 @@ const (
|
|||
SO_ATTACH_REUSEPORT_CBPF = 0x33
|
||||
SO_ATTACH_REUSEPORT_EBPF = 0x34
|
||||
SO_BINDTODEVICE = 0x19
|
||||
SO_BINDTOIFINDEX = 0x3e
|
||||
SO_BPF_EXTENSIONS = 0x30
|
||||
SO_BROADCAST = 0x6
|
||||
SO_BSDCOMPAT = 0xe
|
||||
|
@ -2009,6 +2171,8 @@ const (
|
|||
SO_RCVBUFFORCE = 0x21
|
||||
SO_RCVLOWAT = 0x12
|
||||
SO_RCVTIMEO = 0x14
|
||||
SO_RCVTIMEO_NEW = 0x42
|
||||
SO_RCVTIMEO_OLD = 0x14
|
||||
SO_REUSEADDR = 0x2
|
||||
SO_REUSEPORT = 0xf
|
||||
SO_RXQ_OVFL = 0x28
|
||||
|
@ -2020,9 +2184,17 @@ const (
|
|||
SO_SNDBUFFORCE = 0x20
|
||||
SO_SNDLOWAT = 0x13
|
||||
SO_SNDTIMEO = 0x15
|
||||
SO_SNDTIMEO_NEW = 0x43
|
||||
SO_SNDTIMEO_OLD = 0x15
|
||||
SO_TIMESTAMP = 0x1d
|
||||
SO_TIMESTAMPING = 0x25
|
||||
SO_TIMESTAMPING_NEW = 0x41
|
||||
SO_TIMESTAMPING_OLD = 0x25
|
||||
SO_TIMESTAMPNS = 0x23
|
||||
SO_TIMESTAMPNS_NEW = 0x40
|
||||
SO_TIMESTAMPNS_OLD = 0x23
|
||||
SO_TIMESTAMP_NEW = 0x3f
|
||||
SO_TIMESTAMP_OLD = 0x1d
|
||||
SO_TXTIME = 0x3d
|
||||
SO_TYPE = 0x3
|
||||
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
|
||||
|
@ -2064,6 +2236,7 @@ const (
|
|||
SYNC_FILE_RANGE_WAIT_AFTER = 0x4
|
||||
SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
|
||||
SYNC_FILE_RANGE_WRITE = 0x2
|
||||
SYNC_FILE_RANGE_WRITE_AND_WAIT = 0x7
|
||||
SYSFS_MAGIC = 0x62656572
|
||||
S_BLKSIZE = 0x200
|
||||
S_IEXEC = 0x40
|
||||
|
@ -2115,6 +2288,8 @@ const (
|
|||
TCOFLUSH = 0x1
|
||||
TCOOFF = 0x0
|
||||
TCOON = 0x1
|
||||
TCP_BPF_IW = 0x3e9
|
||||
TCP_BPF_SNDCWND_CLAMP = 0x3ea
|
||||
TCP_CC_INFO = 0x1a
|
||||
TCP_CM_INQ = 0x24
|
||||
TCP_CONGESTION = 0xd
|
||||
|
@ -2281,6 +2456,7 @@ const (
|
|||
TS_COMM_LEN = 0x20
|
||||
TUNATTACHFILTER = 0x400854d5
|
||||
TUNDETACHFILTER = 0x400854d6
|
||||
TUNGETDEVNETNS = 0x54e3
|
||||
TUNGETFEATURES = 0x800454cf
|
||||
TUNGETFILTER = 0x800854db
|
||||
TUNGETIFF = 0x800454d2
|
||||
|
@ -2316,8 +2492,10 @@ const (
|
|||
UBI_IOCMKVOL = 0x40986f00
|
||||
UBI_IOCRMVOL = 0x40046f01
|
||||
UBI_IOCRNVOL = 0x51106f03
|
||||
UBI_IOCRPEB = 0x40046f04
|
||||
UBI_IOCRSVOL = 0x400c6f02
|
||||
UBI_IOCSETVOLPROP = 0x40104f06
|
||||
UBI_IOCSPEB = 0x40046f05
|
||||
UBI_IOCVOLCRBLK = 0x40804f07
|
||||
UBI_IOCVOLRMBLK = 0x4f08
|
||||
UBI_IOCVOLUP = 0x40084f00
|
||||
|
@ -2466,6 +2644,7 @@ const (
|
|||
XDP_FLAGS_SKB_MODE = 0x2
|
||||
XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
|
||||
XDP_MMAP_OFFSETS = 0x1
|
||||
XDP_PACKET_HEADROOM = 0x100
|
||||
XDP_PGOFF_RX_RING = 0x0
|
||||
XDP_PGOFF_TX_RING = 0x80000000
|
||||
XDP_RX_RING = 0x2
|
||||
|
|
|
@ -196,11 +196,70 @@ const (
|
|||
BPF_A = 0x10
|
||||
BPF_ABS = 0x20
|
||||
BPF_ADD = 0x0
|
||||
BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff
|
||||
BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38
|
||||
BPF_ALU = 0x4
|
||||
BPF_ALU64 = 0x7
|
||||
BPF_AND = 0x50
|
||||
BPF_ANY = 0x0
|
||||
BPF_ARSH = 0xc0
|
||||
BPF_B = 0x10
|
||||
BPF_BUILD_ID_SIZE = 0x14
|
||||
BPF_CALL = 0x80
|
||||
BPF_DEVCG_ACC_MKNOD = 0x1
|
||||
BPF_DEVCG_ACC_READ = 0x2
|
||||
BPF_DEVCG_ACC_WRITE = 0x4
|
||||
BPF_DEVCG_DEV_BLOCK = 0x1
|
||||
BPF_DEVCG_DEV_CHAR = 0x2
|
||||
BPF_DIV = 0x30
|
||||
BPF_DW = 0x18
|
||||
BPF_END = 0xd0
|
||||
BPF_EXIST = 0x2
|
||||
BPF_EXIT = 0x90
|
||||
BPF_FROM_BE = 0x8
|
||||
BPF_FROM_LE = 0x0
|
||||
BPF_FS_MAGIC = 0xcafe4a11
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10
|
||||
BPF_F_ADJ_ROOM_FIXED_GSO = 0x1
|
||||
BPF_F_ALLOW_MULTI = 0x2
|
||||
BPF_F_ALLOW_OVERRIDE = 0x1
|
||||
BPF_F_ANY_ALIGNMENT = 0x2
|
||||
BPF_F_CTXLEN_MASK = 0xfffff00000000
|
||||
BPF_F_CURRENT_CPU = 0xffffffff
|
||||
BPF_F_CURRENT_NETNS = -0x1
|
||||
BPF_F_DONT_FRAGMENT = 0x4
|
||||
BPF_F_FAST_STACK_CMP = 0x200
|
||||
BPF_F_HDR_FIELD_MASK = 0xf
|
||||
BPF_F_INDEX_MASK = 0xffffffff
|
||||
BPF_F_INGRESS = 0x1
|
||||
BPF_F_INVALIDATE_HASH = 0x2
|
||||
BPF_F_LOCK = 0x4
|
||||
BPF_F_MARK_ENFORCE = 0x40
|
||||
BPF_F_MARK_MANGLED_0 = 0x20
|
||||
BPF_F_NO_COMMON_LRU = 0x2
|
||||
BPF_F_NO_PREALLOC = 0x1
|
||||
BPF_F_NUMA_NODE = 0x4
|
||||
BPF_F_PSEUDO_HDR = 0x10
|
||||
BPF_F_QUERY_EFFECTIVE = 0x1
|
||||
BPF_F_RDONLY = 0x8
|
||||
BPF_F_RDONLY_PROG = 0x80
|
||||
BPF_F_RECOMPUTE_CSUM = 0x1
|
||||
BPF_F_REUSE_STACKID = 0x400
|
||||
BPF_F_SEQ_NUMBER = 0x8
|
||||
BPF_F_SKIP_FIELD_MASK = 0xff
|
||||
BPF_F_STACK_BUILD_ID = 0x20
|
||||
BPF_F_STRICT_ALIGNMENT = 0x1
|
||||
BPF_F_SYSCTL_BASE_NAME = 0x1
|
||||
BPF_F_TUNINFO_IPV6 = 0x1
|
||||
BPF_F_USER_BUILD_ID = 0x800
|
||||
BPF_F_USER_STACK = 0x100
|
||||
BPF_F_WRONLY = 0x10
|
||||
BPF_F_WRONLY_PROG = 0x100
|
||||
BPF_F_ZERO_CSUM_TX = 0x2
|
||||
BPF_F_ZERO_SEED = 0x40
|
||||
BPF_H = 0x8
|
||||
BPF_IMM = 0x0
|
||||
BPF_IND = 0x40
|
||||
|
@ -208,8 +267,16 @@ const (
|
|||
BPF_JEQ = 0x10
|
||||
BPF_JGE = 0x30
|
||||
BPF_JGT = 0x20
|
||||
BPF_JLE = 0xb0
|
||||
BPF_JLT = 0xa0
|
||||
BPF_JMP = 0x5
|
||||
BPF_JMP32 = 0x6
|
||||
BPF_JNE = 0x50
|
||||
BPF_JSET = 0x40
|
||||
BPF_JSGE = 0x70
|
||||
BPF_JSGT = 0x60
|
||||
BPF_JSLE = 0xd0
|
||||
BPF_JSLT = 0xc0
|
||||
BPF_K = 0x0
|
||||
BPF_LD = 0x0
|
||||
BPF_LDX = 0x1
|
||||
|
@ -223,20 +290,35 @@ const (
|
|||
BPF_MINOR_VERSION = 0x1
|
||||
BPF_MISC = 0x7
|
||||
BPF_MOD = 0x90
|
||||
BPF_MOV = 0xb0
|
||||
BPF_MSH = 0xa0
|
||||
BPF_MUL = 0x20
|
||||
BPF_NEG = 0x80
|
||||
BPF_NET_OFF = -0x100000
|
||||
BPF_NOEXIST = 0x1
|
||||
BPF_OBJ_NAME_LEN = 0x10
|
||||
BPF_OR = 0x40
|
||||
BPF_PSEUDO_CALL = 0x1
|
||||
BPF_PSEUDO_MAP_FD = 0x1
|
||||
BPF_PSEUDO_MAP_VALUE = 0x2
|
||||
BPF_RET = 0x6
|
||||
BPF_RSH = 0x70
|
||||
BPF_SK_STORAGE_GET_F_CREATE = 0x1
|
||||
BPF_SOCK_OPS_ALL_CB_FLAGS = 0x7
|
||||
BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2
|
||||
BPF_SOCK_OPS_RTO_CB_FLAG = 0x1
|
||||
BPF_SOCK_OPS_STATE_CB_FLAG = 0x4
|
||||
BPF_ST = 0x2
|
||||
BPF_STX = 0x3
|
||||
BPF_SUB = 0x10
|
||||
BPF_TAG_SIZE = 0x8
|
||||
BPF_TAX = 0x0
|
||||
BPF_TO_BE = 0x8
|
||||
BPF_TO_LE = 0x0
|
||||
BPF_TXA = 0x80
|
||||
BPF_W = 0x0
|
||||
BPF_X = 0x8
|
||||
BPF_XADD = 0xc0
|
||||
BPF_XOR = 0xa0
|
||||
BRKINT = 0x2
|
||||
BS0 = 0x0
|
||||
|
@ -264,6 +346,45 @@ const (
|
|||
CAN_SFF_MASK = 0x7ff
|
||||
CAN_TP16 = 0x3
|
||||
CAN_TP20 = 0x4
|
||||
CAP_AUDIT_CONTROL = 0x1e
|
||||
CAP_AUDIT_READ = 0x25
|
||||
CAP_AUDIT_WRITE = 0x1d
|
||||
CAP_BLOCK_SUSPEND = 0x24
|
||||
CAP_CHOWN = 0x0
|
||||
CAP_DAC_OVERRIDE = 0x1
|
||||
CAP_DAC_READ_SEARCH = 0x2
|
||||
CAP_FOWNER = 0x3
|
||||
CAP_FSETID = 0x4
|
||||
CAP_IPC_LOCK = 0xe
|
||||
CAP_IPC_OWNER = 0xf
|
||||
CAP_KILL = 0x5
|
||||
CAP_LAST_CAP = 0x25
|
||||
CAP_LEASE = 0x1c
|
||||
CAP_LINUX_IMMUTABLE = 0x9
|
||||
CAP_MAC_ADMIN = 0x21
|
||||
CAP_MAC_OVERRIDE = 0x20
|
||||
CAP_MKNOD = 0x1b
|
||||
CAP_NET_ADMIN = 0xc
|
||||
CAP_NET_BIND_SERVICE = 0xa
|
||||
CAP_NET_BROADCAST = 0xb
|
||||
CAP_NET_RAW = 0xd
|
||||
CAP_SETFCAP = 0x1f
|
||||
CAP_SETGID = 0x6
|
||||
CAP_SETPCAP = 0x8
|
||||
CAP_SETUID = 0x7
|
||||
CAP_SYSLOG = 0x22
|
||||
CAP_SYS_ADMIN = 0x15
|
||||
CAP_SYS_BOOT = 0x16
|
||||
CAP_SYS_CHROOT = 0x12
|
||||
CAP_SYS_MODULE = 0x10
|
||||
CAP_SYS_NICE = 0x17
|
||||
CAP_SYS_PACCT = 0x14
|
||||
CAP_SYS_PTRACE = 0x13
|
||||
CAP_SYS_RAWIO = 0x11
|
||||
CAP_SYS_RESOURCE = 0x18
|
||||
CAP_SYS_TIME = 0x19
|
||||
CAP_SYS_TTY_CONFIG = 0x1a
|
||||
CAP_WAKE_ALARM = 0x23
|
||||
CBAUD = 0x100f
|
||||
CBAUDEX = 0x1000
|
||||
CFLUSH = 0xf
|
||||
|
@ -302,6 +423,7 @@ const (
|
|||
CLONE_NEWUTS = 0x4000000
|
||||
CLONE_PARENT = 0x8000
|
||||
CLONE_PARENT_SETTID = 0x100000
|
||||
CLONE_PIDFD = 0x1000
|
||||
CLONE_PTRACE = 0x2000
|
||||
CLONE_SETTLS = 0x80000
|
||||
CLONE_SIGHAND = 0x800
|
||||
|
@ -418,6 +540,7 @@ const (
|
|||
ETH_P_DNA_RC = 0x6002
|
||||
ETH_P_DNA_RT = 0x6003
|
||||
ETH_P_DSA = 0x1b
|
||||
ETH_P_DSA_8021Q = 0xdadb
|
||||
ETH_P_ECONET = 0x18
|
||||
ETH_P_EDSA = 0xdada
|
||||
ETH_P_ERSPAN = 0x88be
|
||||
|
@ -501,6 +624,7 @@ const (
|
|||
FAN_ALL_MARK_FLAGS = 0xff
|
||||
FAN_ALL_OUTGOING_EVENTS = 0x3403b
|
||||
FAN_ALL_PERM_EVENTS = 0x30000
|
||||
FAN_ATTRIB = 0x4
|
||||
FAN_AUDIT = 0x10
|
||||
FAN_CLASS_CONTENT = 0x4
|
||||
FAN_CLASS_NOTIF = 0x0
|
||||
|
@ -509,8 +633,12 @@ const (
|
|||
FAN_CLOSE = 0x18
|
||||
FAN_CLOSE_NOWRITE = 0x10
|
||||
FAN_CLOSE_WRITE = 0x8
|
||||
FAN_CREATE = 0x100
|
||||
FAN_DELETE = 0x200
|
||||
FAN_DELETE_SELF = 0x400
|
||||
FAN_DENY = 0x2
|
||||
FAN_ENABLE_AUDIT = 0x40
|
||||
FAN_EVENT_INFO_TYPE_FID = 0x1
|
||||
FAN_EVENT_METADATA_LEN = 0x18
|
||||
FAN_EVENT_ON_CHILD = 0x8000000
|
||||
FAN_MARK_ADD = 0x1
|
||||
|
@ -524,6 +652,10 @@ const (
|
|||
FAN_MARK_ONLYDIR = 0x8
|
||||
FAN_MARK_REMOVE = 0x2
|
||||
FAN_MODIFY = 0x2
|
||||
FAN_MOVE = 0xc0
|
||||
FAN_MOVED_FROM = 0x40
|
||||
FAN_MOVED_TO = 0x80
|
||||
FAN_MOVE_SELF = 0x800
|
||||
FAN_NOFD = -0x1
|
||||
FAN_NONBLOCK = 0x2
|
||||
FAN_ONDIR = 0x40000000
|
||||
|
@ -532,6 +664,7 @@ const (
|
|||
FAN_OPEN_EXEC_PERM = 0x40000
|
||||
FAN_OPEN_PERM = 0x10000
|
||||
FAN_Q_OVERFLOW = 0x4000
|
||||
FAN_REPORT_FID = 0x200
|
||||
FAN_REPORT_TID = 0x100
|
||||
FAN_UNLIMITED_MARKS = 0x20
|
||||
FAN_UNLIMITED_QUEUE = 0x10
|
||||
|
@ -1016,6 +1149,20 @@ const (
|
|||
LOCK_NB = 0x4
|
||||
LOCK_SH = 0x1
|
||||
LOCK_UN = 0x8
|
||||
LOOP_CLR_FD = 0x4c01
|
||||
LOOP_CTL_ADD = 0x4c80
|
||||
LOOP_CTL_GET_FREE = 0x4c82
|
||||
LOOP_CTL_REMOVE = 0x4c81
|
||||
LOOP_GET_STATUS = 0x4c03
|
||||
LOOP_GET_STATUS64 = 0x4c05
|
||||
LOOP_SET_BLOCK_SIZE = 0x4c09
|
||||
LOOP_SET_CAPACITY = 0x4c07
|
||||
LOOP_SET_DIRECT_IO = 0x4c08
|
||||
LOOP_SET_FD = 0x4c00
|
||||
LOOP_SET_STATUS = 0x4c02
|
||||
LOOP_SET_STATUS64 = 0x4c04
|
||||
LO_KEY_SIZE = 0x20
|
||||
LO_NAME_SIZE = 0x40
|
||||
MADV_DODUMP = 0x11
|
||||
MADV_DOFORK = 0xb
|
||||
MADV_DONTDUMP = 0x10
|
||||
|
@ -1056,6 +1203,15 @@ const (
|
|||
MAP_STACK = 0x20000
|
||||
MAP_SYNC = 0x80000
|
||||
MAP_TYPE = 0xf
|
||||
MCAST_BLOCK_SOURCE = 0x2b
|
||||
MCAST_EXCLUDE = 0x0
|
||||
MCAST_INCLUDE = 0x1
|
||||
MCAST_JOIN_GROUP = 0x2a
|
||||
MCAST_JOIN_SOURCE_GROUP = 0x2e
|
||||
MCAST_LEAVE_GROUP = 0x2d
|
||||
MCAST_LEAVE_SOURCE_GROUP = 0x2f
|
||||
MCAST_MSFILTER = 0x30
|
||||
MCAST_UNBLOCK_SOURCE = 0x2c
|
||||
MCL_CURRENT = 0x1
|
||||
MCL_FUTURE = 0x2
|
||||
MCL_ONFAULT = 0x4
|
||||
|
@ -1491,6 +1647,7 @@ const (
|
|||
PR_SET_TSC = 0x1a
|
||||
PR_SET_UNALIGN = 0x6
|
||||
PR_SPEC_DISABLE = 0x4
|
||||
PR_SPEC_DISABLE_NOEXEC = 0x10
|
||||
PR_SPEC_ENABLE = 0x2
|
||||
PR_SPEC_FORCE_DISABLE = 0x8
|
||||
PR_SPEC_INDIRECT_BRANCH = 0x1
|
||||
|
@ -1869,6 +2026,10 @@ const (
|
|||
SIOCGSKNS = 0x894c
|
||||
SIOCGSTAMP = 0x8906
|
||||
SIOCGSTAMPNS = 0x8907
|
||||
SIOCGSTAMPNS_NEW = 0x80108907
|
||||
SIOCGSTAMPNS_OLD = 0x8907
|
||||
SIOCGSTAMP_NEW = 0x80108906
|
||||
SIOCGSTAMP_OLD = 0x8906
|
||||
SIOCINQ = 0x541b
|
||||
SIOCOUTQ = 0x5411
|
||||
SIOCOUTQNSD = 0x894b
|
||||
|
@ -1962,6 +2123,7 @@ const (
|
|||
SO_ATTACH_REUSEPORT_CBPF = 0x33
|
||||
SO_ATTACH_REUSEPORT_EBPF = 0x34
|
||||
SO_BINDTODEVICE = 0x19
|
||||
SO_BINDTOIFINDEX = 0x3e
|
||||
SO_BPF_EXTENSIONS = 0x30
|
||||
SO_BROADCAST = 0x6
|
||||
SO_BSDCOMPAT = 0xe
|
||||
|
@ -2010,6 +2172,8 @@ const (
|
|||
SO_RCVBUFFORCE = 0x21
|
||||
SO_RCVLOWAT = 0x12
|
||||
SO_RCVTIMEO = 0x14
|
||||
SO_RCVTIMEO_NEW = 0x42
|
||||
SO_RCVTIMEO_OLD = 0x14
|
||||
SO_REUSEADDR = 0x2
|
||||
SO_REUSEPORT = 0xf
|
||||
SO_RXQ_OVFL = 0x28
|
||||
|
@ -2021,9 +2185,17 @@ const (
|
|||
SO_SNDBUFFORCE = 0x20
|
||||
SO_SNDLOWAT = 0x13
|
||||
SO_SNDTIMEO = 0x15
|
||||
SO_SNDTIMEO_NEW = 0x43
|
||||
SO_SNDTIMEO_OLD = 0x15
|
||||
SO_TIMESTAMP = 0x1d
|
||||
SO_TIMESTAMPING = 0x25
|
||||
SO_TIMESTAMPING_NEW = 0x41
|
||||
SO_TIMESTAMPING_OLD = 0x25
|
||||
SO_TIMESTAMPNS = 0x23
|
||||
SO_TIMESTAMPNS_NEW = 0x40
|
||||
SO_TIMESTAMPNS_OLD = 0x23
|
||||
SO_TIMESTAMP_NEW = 0x3f
|
||||
SO_TIMESTAMP_OLD = 0x1d
|
||||
SO_TXTIME = 0x3d
|
||||
SO_TYPE = 0x3
|
||||
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
|
||||
|
@ -2065,6 +2237,7 @@ const (
|
|||
SYNC_FILE_RANGE_WAIT_AFTER = 0x4
|
||||
SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
|
||||
SYNC_FILE_RANGE_WRITE = 0x2
|
||||
SYNC_FILE_RANGE_WRITE_AND_WAIT = 0x7
|
||||
SYSFS_MAGIC = 0x62656572
|
||||
S_BLKSIZE = 0x200
|
||||
S_IEXEC = 0x40
|
||||
|
@ -2116,6 +2289,8 @@ const (
|
|||
TCOFLUSH = 0x1
|
||||
TCOOFF = 0x0
|
||||
TCOON = 0x1
|
||||
TCP_BPF_IW = 0x3e9
|
||||
TCP_BPF_SNDCWND_CLAMP = 0x3ea
|
||||
TCP_CC_INFO = 0x1a
|
||||
TCP_CM_INQ = 0x24
|
||||
TCP_CONGESTION = 0xd
|
||||
|
@ -2282,6 +2457,7 @@ const (
|
|||
TS_COMM_LEN = 0x20
|
||||
TUNATTACHFILTER = 0x401054d5
|
||||
TUNDETACHFILTER = 0x401054d6
|
||||
TUNGETDEVNETNS = 0x54e3
|
||||
TUNGETFEATURES = 0x800454cf
|
||||
TUNGETFILTER = 0x801054db
|
||||
TUNGETIFF = 0x800454d2
|
||||
|
@ -2317,8 +2493,10 @@ const (
|
|||
UBI_IOCMKVOL = 0x40986f00
|
||||
UBI_IOCRMVOL = 0x40046f01
|
||||
UBI_IOCRNVOL = 0x51106f03
|
||||
UBI_IOCRPEB = 0x40046f04
|
||||
UBI_IOCRSVOL = 0x400c6f02
|
||||
UBI_IOCSETVOLPROP = 0x40104f06
|
||||
UBI_IOCSPEB = 0x40046f05
|
||||
UBI_IOCVOLCRBLK = 0x40804f07
|
||||
UBI_IOCVOLRMBLK = 0x4f08
|
||||
UBI_IOCVOLUP = 0x40084f00
|
||||
|
@ -2466,6 +2644,7 @@ const (
|
|||
XDP_FLAGS_SKB_MODE = 0x2
|
||||
XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
|
||||
XDP_MMAP_OFFSETS = 0x1
|
||||
XDP_PACKET_HEADROOM = 0x100
|
||||
XDP_PGOFF_RX_RING = 0x0
|
||||
XDP_PGOFF_TX_RING = 0x80000000
|
||||
XDP_RX_RING = 0x2
|
||||
|
|
|
@ -196,11 +196,70 @@ const (
|
|||
BPF_A = 0x10
|
||||
BPF_ABS = 0x20
|
||||
BPF_ADD = 0x0
|
||||
BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff
|
||||
BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38
|
||||
BPF_ALU = 0x4
|
||||
BPF_ALU64 = 0x7
|
||||
BPF_AND = 0x50
|
||||
BPF_ANY = 0x0
|
||||
BPF_ARSH = 0xc0
|
||||
BPF_B = 0x10
|
||||
BPF_BUILD_ID_SIZE = 0x14
|
||||
BPF_CALL = 0x80
|
||||
BPF_DEVCG_ACC_MKNOD = 0x1
|
||||
BPF_DEVCG_ACC_READ = 0x2
|
||||
BPF_DEVCG_ACC_WRITE = 0x4
|
||||
BPF_DEVCG_DEV_BLOCK = 0x1
|
||||
BPF_DEVCG_DEV_CHAR = 0x2
|
||||
BPF_DIV = 0x30
|
||||
BPF_DW = 0x18
|
||||
BPF_END = 0xd0
|
||||
BPF_EXIST = 0x2
|
||||
BPF_EXIT = 0x90
|
||||
BPF_FROM_BE = 0x8
|
||||
BPF_FROM_LE = 0x0
|
||||
BPF_FS_MAGIC = 0xcafe4a11
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10
|
||||
BPF_F_ADJ_ROOM_FIXED_GSO = 0x1
|
||||
BPF_F_ALLOW_MULTI = 0x2
|
||||
BPF_F_ALLOW_OVERRIDE = 0x1
|
||||
BPF_F_ANY_ALIGNMENT = 0x2
|
||||
BPF_F_CTXLEN_MASK = 0xfffff00000000
|
||||
BPF_F_CURRENT_CPU = 0xffffffff
|
||||
BPF_F_CURRENT_NETNS = -0x1
|
||||
BPF_F_DONT_FRAGMENT = 0x4
|
||||
BPF_F_FAST_STACK_CMP = 0x200
|
||||
BPF_F_HDR_FIELD_MASK = 0xf
|
||||
BPF_F_INDEX_MASK = 0xffffffff
|
||||
BPF_F_INGRESS = 0x1
|
||||
BPF_F_INVALIDATE_HASH = 0x2
|
||||
BPF_F_LOCK = 0x4
|
||||
BPF_F_MARK_ENFORCE = 0x40
|
||||
BPF_F_MARK_MANGLED_0 = 0x20
|
||||
BPF_F_NO_COMMON_LRU = 0x2
|
||||
BPF_F_NO_PREALLOC = 0x1
|
||||
BPF_F_NUMA_NODE = 0x4
|
||||
BPF_F_PSEUDO_HDR = 0x10
|
||||
BPF_F_QUERY_EFFECTIVE = 0x1
|
||||
BPF_F_RDONLY = 0x8
|
||||
BPF_F_RDONLY_PROG = 0x80
|
||||
BPF_F_RECOMPUTE_CSUM = 0x1
|
||||
BPF_F_REUSE_STACKID = 0x400
|
||||
BPF_F_SEQ_NUMBER = 0x8
|
||||
BPF_F_SKIP_FIELD_MASK = 0xff
|
||||
BPF_F_STACK_BUILD_ID = 0x20
|
||||
BPF_F_STRICT_ALIGNMENT = 0x1
|
||||
BPF_F_SYSCTL_BASE_NAME = 0x1
|
||||
BPF_F_TUNINFO_IPV6 = 0x1
|
||||
BPF_F_USER_BUILD_ID = 0x800
|
||||
BPF_F_USER_STACK = 0x100
|
||||
BPF_F_WRONLY = 0x10
|
||||
BPF_F_WRONLY_PROG = 0x100
|
||||
BPF_F_ZERO_CSUM_TX = 0x2
|
||||
BPF_F_ZERO_SEED = 0x40
|
||||
BPF_H = 0x8
|
||||
BPF_IMM = 0x0
|
||||
BPF_IND = 0x40
|
||||
|
@ -208,8 +267,16 @@ const (
|
|||
BPF_JEQ = 0x10
|
||||
BPF_JGE = 0x30
|
||||
BPF_JGT = 0x20
|
||||
BPF_JLE = 0xb0
|
||||
BPF_JLT = 0xa0
|
||||
BPF_JMP = 0x5
|
||||
BPF_JMP32 = 0x6
|
||||
BPF_JNE = 0x50
|
||||
BPF_JSET = 0x40
|
||||
BPF_JSGE = 0x70
|
||||
BPF_JSGT = 0x60
|
||||
BPF_JSLE = 0xd0
|
||||
BPF_JSLT = 0xc0
|
||||
BPF_K = 0x0
|
||||
BPF_LD = 0x0
|
||||
BPF_LDX = 0x1
|
||||
|
@ -223,20 +290,35 @@ const (
|
|||
BPF_MINOR_VERSION = 0x1
|
||||
BPF_MISC = 0x7
|
||||
BPF_MOD = 0x90
|
||||
BPF_MOV = 0xb0
|
||||
BPF_MSH = 0xa0
|
||||
BPF_MUL = 0x20
|
||||
BPF_NEG = 0x80
|
||||
BPF_NET_OFF = -0x100000
|
||||
BPF_NOEXIST = 0x1
|
||||
BPF_OBJ_NAME_LEN = 0x10
|
||||
BPF_OR = 0x40
|
||||
BPF_PSEUDO_CALL = 0x1
|
||||
BPF_PSEUDO_MAP_FD = 0x1
|
||||
BPF_PSEUDO_MAP_VALUE = 0x2
|
||||
BPF_RET = 0x6
|
||||
BPF_RSH = 0x70
|
||||
BPF_SK_STORAGE_GET_F_CREATE = 0x1
|
||||
BPF_SOCK_OPS_ALL_CB_FLAGS = 0x7
|
||||
BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2
|
||||
BPF_SOCK_OPS_RTO_CB_FLAG = 0x1
|
||||
BPF_SOCK_OPS_STATE_CB_FLAG = 0x4
|
||||
BPF_ST = 0x2
|
||||
BPF_STX = 0x3
|
||||
BPF_SUB = 0x10
|
||||
BPF_TAG_SIZE = 0x8
|
||||
BPF_TAX = 0x0
|
||||
BPF_TO_BE = 0x8
|
||||
BPF_TO_LE = 0x0
|
||||
BPF_TXA = 0x80
|
||||
BPF_W = 0x0
|
||||
BPF_X = 0x8
|
||||
BPF_XADD = 0xc0
|
||||
BPF_XOR = 0xa0
|
||||
BRKINT = 0x2
|
||||
BS0 = 0x0
|
||||
|
@ -264,6 +346,45 @@ const (
|
|||
CAN_SFF_MASK = 0x7ff
|
||||
CAN_TP16 = 0x3
|
||||
CAN_TP20 = 0x4
|
||||
CAP_AUDIT_CONTROL = 0x1e
|
||||
CAP_AUDIT_READ = 0x25
|
||||
CAP_AUDIT_WRITE = 0x1d
|
||||
CAP_BLOCK_SUSPEND = 0x24
|
||||
CAP_CHOWN = 0x0
|
||||
CAP_DAC_OVERRIDE = 0x1
|
||||
CAP_DAC_READ_SEARCH = 0x2
|
||||
CAP_FOWNER = 0x3
|
||||
CAP_FSETID = 0x4
|
||||
CAP_IPC_LOCK = 0xe
|
||||
CAP_IPC_OWNER = 0xf
|
||||
CAP_KILL = 0x5
|
||||
CAP_LAST_CAP = 0x25
|
||||
CAP_LEASE = 0x1c
|
||||
CAP_LINUX_IMMUTABLE = 0x9
|
||||
CAP_MAC_ADMIN = 0x21
|
||||
CAP_MAC_OVERRIDE = 0x20
|
||||
CAP_MKNOD = 0x1b
|
||||
CAP_NET_ADMIN = 0xc
|
||||
CAP_NET_BIND_SERVICE = 0xa
|
||||
CAP_NET_BROADCAST = 0xb
|
||||
CAP_NET_RAW = 0xd
|
||||
CAP_SETFCAP = 0x1f
|
||||
CAP_SETGID = 0x6
|
||||
CAP_SETPCAP = 0x8
|
||||
CAP_SETUID = 0x7
|
||||
CAP_SYSLOG = 0x22
|
||||
CAP_SYS_ADMIN = 0x15
|
||||
CAP_SYS_BOOT = 0x16
|
||||
CAP_SYS_CHROOT = 0x12
|
||||
CAP_SYS_MODULE = 0x10
|
||||
CAP_SYS_NICE = 0x17
|
||||
CAP_SYS_PACCT = 0x14
|
||||
CAP_SYS_PTRACE = 0x13
|
||||
CAP_SYS_RAWIO = 0x11
|
||||
CAP_SYS_RESOURCE = 0x18
|
||||
CAP_SYS_TIME = 0x19
|
||||
CAP_SYS_TTY_CONFIG = 0x1a
|
||||
CAP_WAKE_ALARM = 0x23
|
||||
CBAUD = 0x100f
|
||||
CBAUDEX = 0x1000
|
||||
CFLUSH = 0xf
|
||||
|
@ -302,6 +423,7 @@ const (
|
|||
CLONE_NEWUTS = 0x4000000
|
||||
CLONE_PARENT = 0x8000
|
||||
CLONE_PARENT_SETTID = 0x100000
|
||||
CLONE_PIDFD = 0x1000
|
||||
CLONE_PTRACE = 0x2000
|
||||
CLONE_SETTLS = 0x80000
|
||||
CLONE_SIGHAND = 0x800
|
||||
|
@ -418,6 +540,7 @@ const (
|
|||
ETH_P_DNA_RC = 0x6002
|
||||
ETH_P_DNA_RT = 0x6003
|
||||
ETH_P_DSA = 0x1b
|
||||
ETH_P_DSA_8021Q = 0xdadb
|
||||
ETH_P_ECONET = 0x18
|
||||
ETH_P_EDSA = 0xdada
|
||||
ETH_P_ERSPAN = 0x88be
|
||||
|
@ -501,6 +624,7 @@ const (
|
|||
FAN_ALL_MARK_FLAGS = 0xff
|
||||
FAN_ALL_OUTGOING_EVENTS = 0x3403b
|
||||
FAN_ALL_PERM_EVENTS = 0x30000
|
||||
FAN_ATTRIB = 0x4
|
||||
FAN_AUDIT = 0x10
|
||||
FAN_CLASS_CONTENT = 0x4
|
||||
FAN_CLASS_NOTIF = 0x0
|
||||
|
@ -509,8 +633,12 @@ const (
|
|||
FAN_CLOSE = 0x18
|
||||
FAN_CLOSE_NOWRITE = 0x10
|
||||
FAN_CLOSE_WRITE = 0x8
|
||||
FAN_CREATE = 0x100
|
||||
FAN_DELETE = 0x200
|
||||
FAN_DELETE_SELF = 0x400
|
||||
FAN_DENY = 0x2
|
||||
FAN_ENABLE_AUDIT = 0x40
|
||||
FAN_EVENT_INFO_TYPE_FID = 0x1
|
||||
FAN_EVENT_METADATA_LEN = 0x18
|
||||
FAN_EVENT_ON_CHILD = 0x8000000
|
||||
FAN_MARK_ADD = 0x1
|
||||
|
@ -524,6 +652,10 @@ const (
|
|||
FAN_MARK_ONLYDIR = 0x8
|
||||
FAN_MARK_REMOVE = 0x2
|
||||
FAN_MODIFY = 0x2
|
||||
FAN_MOVE = 0xc0
|
||||
FAN_MOVED_FROM = 0x40
|
||||
FAN_MOVED_TO = 0x80
|
||||
FAN_MOVE_SELF = 0x800
|
||||
FAN_NOFD = -0x1
|
||||
FAN_NONBLOCK = 0x2
|
||||
FAN_ONDIR = 0x40000000
|
||||
|
@ -532,6 +664,7 @@ const (
|
|||
FAN_OPEN_EXEC_PERM = 0x40000
|
||||
FAN_OPEN_PERM = 0x10000
|
||||
FAN_Q_OVERFLOW = 0x4000
|
||||
FAN_REPORT_FID = 0x200
|
||||
FAN_REPORT_TID = 0x100
|
||||
FAN_UNLIMITED_MARKS = 0x20
|
||||
FAN_UNLIMITED_QUEUE = 0x10
|
||||
|
@ -1015,6 +1148,20 @@ const (
|
|||
LOCK_NB = 0x4
|
||||
LOCK_SH = 0x1
|
||||
LOCK_UN = 0x8
|
||||
LOOP_CLR_FD = 0x4c01
|
||||
LOOP_CTL_ADD = 0x4c80
|
||||
LOOP_CTL_GET_FREE = 0x4c82
|
||||
LOOP_CTL_REMOVE = 0x4c81
|
||||
LOOP_GET_STATUS = 0x4c03
|
||||
LOOP_GET_STATUS64 = 0x4c05
|
||||
LOOP_SET_BLOCK_SIZE = 0x4c09
|
||||
LOOP_SET_CAPACITY = 0x4c07
|
||||
LOOP_SET_DIRECT_IO = 0x4c08
|
||||
LOOP_SET_FD = 0x4c00
|
||||
LOOP_SET_STATUS = 0x4c02
|
||||
LOOP_SET_STATUS64 = 0x4c04
|
||||
LO_KEY_SIZE = 0x20
|
||||
LO_NAME_SIZE = 0x40
|
||||
MADV_DODUMP = 0x11
|
||||
MADV_DOFORK = 0xb
|
||||
MADV_DONTDUMP = 0x10
|
||||
|
@ -1054,6 +1201,15 @@ const (
|
|||
MAP_STACK = 0x20000
|
||||
MAP_SYNC = 0x80000
|
||||
MAP_TYPE = 0xf
|
||||
MCAST_BLOCK_SOURCE = 0x2b
|
||||
MCAST_EXCLUDE = 0x0
|
||||
MCAST_INCLUDE = 0x1
|
||||
MCAST_JOIN_GROUP = 0x2a
|
||||
MCAST_JOIN_SOURCE_GROUP = 0x2e
|
||||
MCAST_LEAVE_GROUP = 0x2d
|
||||
MCAST_LEAVE_SOURCE_GROUP = 0x2f
|
||||
MCAST_MSFILTER = 0x30
|
||||
MCAST_UNBLOCK_SOURCE = 0x2c
|
||||
MCL_CURRENT = 0x1
|
||||
MCL_FUTURE = 0x2
|
||||
MCL_ONFAULT = 0x4
|
||||
|
@ -1489,6 +1645,7 @@ const (
|
|||
PR_SET_TSC = 0x1a
|
||||
PR_SET_UNALIGN = 0x6
|
||||
PR_SPEC_DISABLE = 0x4
|
||||
PR_SPEC_DISABLE_NOEXEC = 0x10
|
||||
PR_SPEC_ENABLE = 0x2
|
||||
PR_SPEC_FORCE_DISABLE = 0x8
|
||||
PR_SPEC_INDIRECT_BRANCH = 0x1
|
||||
|
@ -1875,6 +2032,10 @@ const (
|
|||
SIOCGSKNS = 0x894c
|
||||
SIOCGSTAMP = 0x8906
|
||||
SIOCGSTAMPNS = 0x8907
|
||||
SIOCGSTAMPNS_NEW = 0x80108907
|
||||
SIOCGSTAMPNS_OLD = 0x8907
|
||||
SIOCGSTAMP_NEW = 0x80108906
|
||||
SIOCGSTAMP_OLD = 0x8906
|
||||
SIOCINQ = 0x541b
|
||||
SIOCOUTQ = 0x5411
|
||||
SIOCOUTQNSD = 0x894b
|
||||
|
@ -1968,6 +2129,7 @@ const (
|
|||
SO_ATTACH_REUSEPORT_CBPF = 0x33
|
||||
SO_ATTACH_REUSEPORT_EBPF = 0x34
|
||||
SO_BINDTODEVICE = 0x19
|
||||
SO_BINDTOIFINDEX = 0x3e
|
||||
SO_BPF_EXTENSIONS = 0x30
|
||||
SO_BROADCAST = 0x6
|
||||
SO_BSDCOMPAT = 0xe
|
||||
|
@ -2016,6 +2178,8 @@ const (
|
|||
SO_RCVBUFFORCE = 0x21
|
||||
SO_RCVLOWAT = 0x12
|
||||
SO_RCVTIMEO = 0x14
|
||||
SO_RCVTIMEO_NEW = 0x42
|
||||
SO_RCVTIMEO_OLD = 0x14
|
||||
SO_REUSEADDR = 0x2
|
||||
SO_REUSEPORT = 0xf
|
||||
SO_RXQ_OVFL = 0x28
|
||||
|
@ -2027,9 +2191,17 @@ const (
|
|||
SO_SNDBUFFORCE = 0x20
|
||||
SO_SNDLOWAT = 0x13
|
||||
SO_SNDTIMEO = 0x15
|
||||
SO_SNDTIMEO_NEW = 0x43
|
||||
SO_SNDTIMEO_OLD = 0x15
|
||||
SO_TIMESTAMP = 0x1d
|
||||
SO_TIMESTAMPING = 0x25
|
||||
SO_TIMESTAMPING_NEW = 0x41
|
||||
SO_TIMESTAMPING_OLD = 0x25
|
||||
SO_TIMESTAMPNS = 0x23
|
||||
SO_TIMESTAMPNS_NEW = 0x40
|
||||
SO_TIMESTAMPNS_OLD = 0x23
|
||||
SO_TIMESTAMP_NEW = 0x3f
|
||||
SO_TIMESTAMP_OLD = 0x1d
|
||||
SO_TXTIME = 0x3d
|
||||
SO_TYPE = 0x3
|
||||
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
|
||||
|
@ -2071,6 +2243,7 @@ const (
|
|||
SYNC_FILE_RANGE_WAIT_AFTER = 0x4
|
||||
SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
|
||||
SYNC_FILE_RANGE_WRITE = 0x2
|
||||
SYNC_FILE_RANGE_WRITE_AND_WAIT = 0x7
|
||||
SYSFS_MAGIC = 0x62656572
|
||||
S_BLKSIZE = 0x200
|
||||
S_IEXEC = 0x40
|
||||
|
@ -2122,6 +2295,8 @@ const (
|
|||
TCOFLUSH = 0x1
|
||||
TCOOFF = 0x0
|
||||
TCOON = 0x1
|
||||
TCP_BPF_IW = 0x3e9
|
||||
TCP_BPF_SNDCWND_CLAMP = 0x3ea
|
||||
TCP_CC_INFO = 0x1a
|
||||
TCP_CM_INQ = 0x24
|
||||
TCP_CONGESTION = 0xd
|
||||
|
@ -2288,6 +2463,7 @@ const (
|
|||
TS_COMM_LEN = 0x20
|
||||
TUNATTACHFILTER = 0x400854d5
|
||||
TUNDETACHFILTER = 0x400854d6
|
||||
TUNGETDEVNETNS = 0x54e3
|
||||
TUNGETFEATURES = 0x800454cf
|
||||
TUNGETFILTER = 0x800854db
|
||||
TUNGETIFF = 0x800454d2
|
||||
|
@ -2323,8 +2499,10 @@ const (
|
|||
UBI_IOCMKVOL = 0x40986f00
|
||||
UBI_IOCRMVOL = 0x40046f01
|
||||
UBI_IOCRNVOL = 0x51106f03
|
||||
UBI_IOCRPEB = 0x40046f04
|
||||
UBI_IOCRSVOL = 0x400c6f02
|
||||
UBI_IOCSETVOLPROP = 0x40104f06
|
||||
UBI_IOCSPEB = 0x40046f05
|
||||
UBI_IOCVOLCRBLK = 0x40804f07
|
||||
UBI_IOCVOLRMBLK = 0x4f08
|
||||
UBI_IOCVOLUP = 0x40084f00
|
||||
|
@ -2472,6 +2650,7 @@ const (
|
|||
XDP_FLAGS_SKB_MODE = 0x2
|
||||
XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
|
||||
XDP_MMAP_OFFSETS = 0x1
|
||||
XDP_PACKET_HEADROOM = 0x100
|
||||
XDP_PGOFF_RX_RING = 0x0
|
||||
XDP_PGOFF_TX_RING = 0x80000000
|
||||
XDP_RX_RING = 0x2
|
||||
|
|
|
@ -196,11 +196,70 @@ const (
|
|||
BPF_A = 0x10
|
||||
BPF_ABS = 0x20
|
||||
BPF_ADD = 0x0
|
||||
BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff
|
||||
BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38
|
||||
BPF_ALU = 0x4
|
||||
BPF_ALU64 = 0x7
|
||||
BPF_AND = 0x50
|
||||
BPF_ANY = 0x0
|
||||
BPF_ARSH = 0xc0
|
||||
BPF_B = 0x10
|
||||
BPF_BUILD_ID_SIZE = 0x14
|
||||
BPF_CALL = 0x80
|
||||
BPF_DEVCG_ACC_MKNOD = 0x1
|
||||
BPF_DEVCG_ACC_READ = 0x2
|
||||
BPF_DEVCG_ACC_WRITE = 0x4
|
||||
BPF_DEVCG_DEV_BLOCK = 0x1
|
||||
BPF_DEVCG_DEV_CHAR = 0x2
|
||||
BPF_DIV = 0x30
|
||||
BPF_DW = 0x18
|
||||
BPF_END = 0xd0
|
||||
BPF_EXIST = 0x2
|
||||
BPF_EXIT = 0x90
|
||||
BPF_FROM_BE = 0x8
|
||||
BPF_FROM_LE = 0x0
|
||||
BPF_FS_MAGIC = 0xcafe4a11
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10
|
||||
BPF_F_ADJ_ROOM_FIXED_GSO = 0x1
|
||||
BPF_F_ALLOW_MULTI = 0x2
|
||||
BPF_F_ALLOW_OVERRIDE = 0x1
|
||||
BPF_F_ANY_ALIGNMENT = 0x2
|
||||
BPF_F_CTXLEN_MASK = 0xfffff00000000
|
||||
BPF_F_CURRENT_CPU = 0xffffffff
|
||||
BPF_F_CURRENT_NETNS = -0x1
|
||||
BPF_F_DONT_FRAGMENT = 0x4
|
||||
BPF_F_FAST_STACK_CMP = 0x200
|
||||
BPF_F_HDR_FIELD_MASK = 0xf
|
||||
BPF_F_INDEX_MASK = 0xffffffff
|
||||
BPF_F_INGRESS = 0x1
|
||||
BPF_F_INVALIDATE_HASH = 0x2
|
||||
BPF_F_LOCK = 0x4
|
||||
BPF_F_MARK_ENFORCE = 0x40
|
||||
BPF_F_MARK_MANGLED_0 = 0x20
|
||||
BPF_F_NO_COMMON_LRU = 0x2
|
||||
BPF_F_NO_PREALLOC = 0x1
|
||||
BPF_F_NUMA_NODE = 0x4
|
||||
BPF_F_PSEUDO_HDR = 0x10
|
||||
BPF_F_QUERY_EFFECTIVE = 0x1
|
||||
BPF_F_RDONLY = 0x8
|
||||
BPF_F_RDONLY_PROG = 0x80
|
||||
BPF_F_RECOMPUTE_CSUM = 0x1
|
||||
BPF_F_REUSE_STACKID = 0x400
|
||||
BPF_F_SEQ_NUMBER = 0x8
|
||||
BPF_F_SKIP_FIELD_MASK = 0xff
|
||||
BPF_F_STACK_BUILD_ID = 0x20
|
||||
BPF_F_STRICT_ALIGNMENT = 0x1
|
||||
BPF_F_SYSCTL_BASE_NAME = 0x1
|
||||
BPF_F_TUNINFO_IPV6 = 0x1
|
||||
BPF_F_USER_BUILD_ID = 0x800
|
||||
BPF_F_USER_STACK = 0x100
|
||||
BPF_F_WRONLY = 0x10
|
||||
BPF_F_WRONLY_PROG = 0x100
|
||||
BPF_F_ZERO_CSUM_TX = 0x2
|
||||
BPF_F_ZERO_SEED = 0x40
|
||||
BPF_H = 0x8
|
||||
BPF_IMM = 0x0
|
||||
BPF_IND = 0x40
|
||||
|
@ -208,8 +267,16 @@ const (
|
|||
BPF_JEQ = 0x10
|
||||
BPF_JGE = 0x30
|
||||
BPF_JGT = 0x20
|
||||
BPF_JLE = 0xb0
|
||||
BPF_JLT = 0xa0
|
||||
BPF_JMP = 0x5
|
||||
BPF_JMP32 = 0x6
|
||||
BPF_JNE = 0x50
|
||||
BPF_JSET = 0x40
|
||||
BPF_JSGE = 0x70
|
||||
BPF_JSGT = 0x60
|
||||
BPF_JSLE = 0xd0
|
||||
BPF_JSLT = 0xc0
|
||||
BPF_K = 0x0
|
||||
BPF_LD = 0x0
|
||||
BPF_LDX = 0x1
|
||||
|
@ -223,20 +290,35 @@ const (
|
|||
BPF_MINOR_VERSION = 0x1
|
||||
BPF_MISC = 0x7
|
||||
BPF_MOD = 0x90
|
||||
BPF_MOV = 0xb0
|
||||
BPF_MSH = 0xa0
|
||||
BPF_MUL = 0x20
|
||||
BPF_NEG = 0x80
|
||||
BPF_NET_OFF = -0x100000
|
||||
BPF_NOEXIST = 0x1
|
||||
BPF_OBJ_NAME_LEN = 0x10
|
||||
BPF_OR = 0x40
|
||||
BPF_PSEUDO_CALL = 0x1
|
||||
BPF_PSEUDO_MAP_FD = 0x1
|
||||
BPF_PSEUDO_MAP_VALUE = 0x2
|
||||
BPF_RET = 0x6
|
||||
BPF_RSH = 0x70
|
||||
BPF_SK_STORAGE_GET_F_CREATE = 0x1
|
||||
BPF_SOCK_OPS_ALL_CB_FLAGS = 0x7
|
||||
BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2
|
||||
BPF_SOCK_OPS_RTO_CB_FLAG = 0x1
|
||||
BPF_SOCK_OPS_STATE_CB_FLAG = 0x4
|
||||
BPF_ST = 0x2
|
||||
BPF_STX = 0x3
|
||||
BPF_SUB = 0x10
|
||||
BPF_TAG_SIZE = 0x8
|
||||
BPF_TAX = 0x0
|
||||
BPF_TO_BE = 0x8
|
||||
BPF_TO_LE = 0x0
|
||||
BPF_TXA = 0x80
|
||||
BPF_W = 0x0
|
||||
BPF_X = 0x8
|
||||
BPF_XADD = 0xc0
|
||||
BPF_XOR = 0xa0
|
||||
BRKINT = 0x2
|
||||
BS0 = 0x0
|
||||
|
@ -264,6 +346,45 @@ const (
|
|||
CAN_SFF_MASK = 0x7ff
|
||||
CAN_TP16 = 0x3
|
||||
CAN_TP20 = 0x4
|
||||
CAP_AUDIT_CONTROL = 0x1e
|
||||
CAP_AUDIT_READ = 0x25
|
||||
CAP_AUDIT_WRITE = 0x1d
|
||||
CAP_BLOCK_SUSPEND = 0x24
|
||||
CAP_CHOWN = 0x0
|
||||
CAP_DAC_OVERRIDE = 0x1
|
||||
CAP_DAC_READ_SEARCH = 0x2
|
||||
CAP_FOWNER = 0x3
|
||||
CAP_FSETID = 0x4
|
||||
CAP_IPC_LOCK = 0xe
|
||||
CAP_IPC_OWNER = 0xf
|
||||
CAP_KILL = 0x5
|
||||
CAP_LAST_CAP = 0x25
|
||||
CAP_LEASE = 0x1c
|
||||
CAP_LINUX_IMMUTABLE = 0x9
|
||||
CAP_MAC_ADMIN = 0x21
|
||||
CAP_MAC_OVERRIDE = 0x20
|
||||
CAP_MKNOD = 0x1b
|
||||
CAP_NET_ADMIN = 0xc
|
||||
CAP_NET_BIND_SERVICE = 0xa
|
||||
CAP_NET_BROADCAST = 0xb
|
||||
CAP_NET_RAW = 0xd
|
||||
CAP_SETFCAP = 0x1f
|
||||
CAP_SETGID = 0x6
|
||||
CAP_SETPCAP = 0x8
|
||||
CAP_SETUID = 0x7
|
||||
CAP_SYSLOG = 0x22
|
||||
CAP_SYS_ADMIN = 0x15
|
||||
CAP_SYS_BOOT = 0x16
|
||||
CAP_SYS_CHROOT = 0x12
|
||||
CAP_SYS_MODULE = 0x10
|
||||
CAP_SYS_NICE = 0x17
|
||||
CAP_SYS_PACCT = 0x14
|
||||
CAP_SYS_PTRACE = 0x13
|
||||
CAP_SYS_RAWIO = 0x11
|
||||
CAP_SYS_RESOURCE = 0x18
|
||||
CAP_SYS_TIME = 0x19
|
||||
CAP_SYS_TTY_CONFIG = 0x1a
|
||||
CAP_WAKE_ALARM = 0x23
|
||||
CBAUD = 0x100f
|
||||
CBAUDEX = 0x1000
|
||||
CFLUSH = 0xf
|
||||
|
@ -302,6 +423,7 @@ const (
|
|||
CLONE_NEWUTS = 0x4000000
|
||||
CLONE_PARENT = 0x8000
|
||||
CLONE_PARENT_SETTID = 0x100000
|
||||
CLONE_PIDFD = 0x1000
|
||||
CLONE_PTRACE = 0x2000
|
||||
CLONE_SETTLS = 0x80000
|
||||
CLONE_SIGHAND = 0x800
|
||||
|
@ -419,6 +541,7 @@ const (
|
|||
ETH_P_DNA_RC = 0x6002
|
||||
ETH_P_DNA_RT = 0x6003
|
||||
ETH_P_DSA = 0x1b
|
||||
ETH_P_DSA_8021Q = 0xdadb
|
||||
ETH_P_ECONET = 0x18
|
||||
ETH_P_EDSA = 0xdada
|
||||
ETH_P_ERSPAN = 0x88be
|
||||
|
@ -503,6 +626,7 @@ const (
|
|||
FAN_ALL_MARK_FLAGS = 0xff
|
||||
FAN_ALL_OUTGOING_EVENTS = 0x3403b
|
||||
FAN_ALL_PERM_EVENTS = 0x30000
|
||||
FAN_ATTRIB = 0x4
|
||||
FAN_AUDIT = 0x10
|
||||
FAN_CLASS_CONTENT = 0x4
|
||||
FAN_CLASS_NOTIF = 0x0
|
||||
|
@ -511,8 +635,12 @@ const (
|
|||
FAN_CLOSE = 0x18
|
||||
FAN_CLOSE_NOWRITE = 0x10
|
||||
FAN_CLOSE_WRITE = 0x8
|
||||
FAN_CREATE = 0x100
|
||||
FAN_DELETE = 0x200
|
||||
FAN_DELETE_SELF = 0x400
|
||||
FAN_DENY = 0x2
|
||||
FAN_ENABLE_AUDIT = 0x40
|
||||
FAN_EVENT_INFO_TYPE_FID = 0x1
|
||||
FAN_EVENT_METADATA_LEN = 0x18
|
||||
FAN_EVENT_ON_CHILD = 0x8000000
|
||||
FAN_MARK_ADD = 0x1
|
||||
|
@ -526,6 +654,10 @@ const (
|
|||
FAN_MARK_ONLYDIR = 0x8
|
||||
FAN_MARK_REMOVE = 0x2
|
||||
FAN_MODIFY = 0x2
|
||||
FAN_MOVE = 0xc0
|
||||
FAN_MOVED_FROM = 0x40
|
||||
FAN_MOVED_TO = 0x80
|
||||
FAN_MOVE_SELF = 0x800
|
||||
FAN_NOFD = -0x1
|
||||
FAN_NONBLOCK = 0x2
|
||||
FAN_ONDIR = 0x40000000
|
||||
|
@ -534,6 +666,7 @@ const (
|
|||
FAN_OPEN_EXEC_PERM = 0x40000
|
||||
FAN_OPEN_PERM = 0x10000
|
||||
FAN_Q_OVERFLOW = 0x4000
|
||||
FAN_REPORT_FID = 0x200
|
||||
FAN_REPORT_TID = 0x100
|
||||
FAN_UNLIMITED_MARKS = 0x20
|
||||
FAN_UNLIMITED_QUEUE = 0x10
|
||||
|
@ -1018,6 +1151,20 @@ const (
|
|||
LOCK_NB = 0x4
|
||||
LOCK_SH = 0x1
|
||||
LOCK_UN = 0x8
|
||||
LOOP_CLR_FD = 0x4c01
|
||||
LOOP_CTL_ADD = 0x4c80
|
||||
LOOP_CTL_GET_FREE = 0x4c82
|
||||
LOOP_CTL_REMOVE = 0x4c81
|
||||
LOOP_GET_STATUS = 0x4c03
|
||||
LOOP_GET_STATUS64 = 0x4c05
|
||||
LOOP_SET_BLOCK_SIZE = 0x4c09
|
||||
LOOP_SET_CAPACITY = 0x4c07
|
||||
LOOP_SET_DIRECT_IO = 0x4c08
|
||||
LOOP_SET_FD = 0x4c00
|
||||
LOOP_SET_STATUS = 0x4c02
|
||||
LOOP_SET_STATUS64 = 0x4c04
|
||||
LO_KEY_SIZE = 0x20
|
||||
LO_NAME_SIZE = 0x40
|
||||
MADV_DODUMP = 0x11
|
||||
MADV_DOFORK = 0xb
|
||||
MADV_DONTDUMP = 0x10
|
||||
|
@ -1057,6 +1204,15 @@ const (
|
|||
MAP_STACK = 0x20000
|
||||
MAP_SYNC = 0x80000
|
||||
MAP_TYPE = 0xf
|
||||
MCAST_BLOCK_SOURCE = 0x2b
|
||||
MCAST_EXCLUDE = 0x0
|
||||
MCAST_INCLUDE = 0x1
|
||||
MCAST_JOIN_GROUP = 0x2a
|
||||
MCAST_JOIN_SOURCE_GROUP = 0x2e
|
||||
MCAST_LEAVE_GROUP = 0x2d
|
||||
MCAST_LEAVE_SOURCE_GROUP = 0x2f
|
||||
MCAST_MSFILTER = 0x30
|
||||
MCAST_UNBLOCK_SOURCE = 0x2c
|
||||
MCL_CURRENT = 0x1
|
||||
MCL_FUTURE = 0x2
|
||||
MCL_ONFAULT = 0x4
|
||||
|
@ -1492,6 +1648,7 @@ const (
|
|||
PR_SET_TSC = 0x1a
|
||||
PR_SET_UNALIGN = 0x6
|
||||
PR_SPEC_DISABLE = 0x4
|
||||
PR_SPEC_DISABLE_NOEXEC = 0x10
|
||||
PR_SPEC_ENABLE = 0x2
|
||||
PR_SPEC_FORCE_DISABLE = 0x8
|
||||
PR_SPEC_INDIRECT_BRANCH = 0x1
|
||||
|
@ -1859,6 +2016,10 @@ const (
|
|||
SIOCGSKNS = 0x894c
|
||||
SIOCGSTAMP = 0x8906
|
||||
SIOCGSTAMPNS = 0x8907
|
||||
SIOCGSTAMPNS_NEW = 0x80108907
|
||||
SIOCGSTAMPNS_OLD = 0x8907
|
||||
SIOCGSTAMP_NEW = 0x80108906
|
||||
SIOCGSTAMP_OLD = 0x8906
|
||||
SIOCINQ = 0x541b
|
||||
SIOCOUTQ = 0x5411
|
||||
SIOCOUTQNSD = 0x894b
|
||||
|
@ -1952,6 +2113,7 @@ const (
|
|||
SO_ATTACH_REUSEPORT_CBPF = 0x33
|
||||
SO_ATTACH_REUSEPORT_EBPF = 0x34
|
||||
SO_BINDTODEVICE = 0x19
|
||||
SO_BINDTOIFINDEX = 0x3e
|
||||
SO_BPF_EXTENSIONS = 0x30
|
||||
SO_BROADCAST = 0x6
|
||||
SO_BSDCOMPAT = 0xe
|
||||
|
@ -2000,6 +2162,8 @@ const (
|
|||
SO_RCVBUFFORCE = 0x21
|
||||
SO_RCVLOWAT = 0x12
|
||||
SO_RCVTIMEO = 0x14
|
||||
SO_RCVTIMEO_NEW = 0x42
|
||||
SO_RCVTIMEO_OLD = 0x14
|
||||
SO_REUSEADDR = 0x2
|
||||
SO_REUSEPORT = 0xf
|
||||
SO_RXQ_OVFL = 0x28
|
||||
|
@ -2011,9 +2175,17 @@ const (
|
|||
SO_SNDBUFFORCE = 0x20
|
||||
SO_SNDLOWAT = 0x13
|
||||
SO_SNDTIMEO = 0x15
|
||||
SO_SNDTIMEO_NEW = 0x43
|
||||
SO_SNDTIMEO_OLD = 0x15
|
||||
SO_TIMESTAMP = 0x1d
|
||||
SO_TIMESTAMPING = 0x25
|
||||
SO_TIMESTAMPING_NEW = 0x41
|
||||
SO_TIMESTAMPING_OLD = 0x25
|
||||
SO_TIMESTAMPNS = 0x23
|
||||
SO_TIMESTAMPNS_NEW = 0x40
|
||||
SO_TIMESTAMPNS_OLD = 0x23
|
||||
SO_TIMESTAMP_NEW = 0x3f
|
||||
SO_TIMESTAMP_OLD = 0x1d
|
||||
SO_TXTIME = 0x3d
|
||||
SO_TYPE = 0x3
|
||||
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
|
||||
|
@ -2056,6 +2228,7 @@ const (
|
|||
SYNC_FILE_RANGE_WAIT_AFTER = 0x4
|
||||
SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
|
||||
SYNC_FILE_RANGE_WRITE = 0x2
|
||||
SYNC_FILE_RANGE_WRITE_AND_WAIT = 0x7
|
||||
SYSFS_MAGIC = 0x62656572
|
||||
S_BLKSIZE = 0x200
|
||||
S_IEXEC = 0x40
|
||||
|
@ -2107,6 +2280,8 @@ const (
|
|||
TCOFLUSH = 0x1
|
||||
TCOOFF = 0x0
|
||||
TCOON = 0x1
|
||||
TCP_BPF_IW = 0x3e9
|
||||
TCP_BPF_SNDCWND_CLAMP = 0x3ea
|
||||
TCP_CC_INFO = 0x1a
|
||||
TCP_CM_INQ = 0x24
|
||||
TCP_CONGESTION = 0xd
|
||||
|
@ -2273,6 +2448,7 @@ const (
|
|||
TS_COMM_LEN = 0x20
|
||||
TUNATTACHFILTER = 0x401054d5
|
||||
TUNDETACHFILTER = 0x401054d6
|
||||
TUNGETDEVNETNS = 0x54e3
|
||||
TUNGETFEATURES = 0x800454cf
|
||||
TUNGETFILTER = 0x801054db
|
||||
TUNGETIFF = 0x800454d2
|
||||
|
@ -2308,8 +2484,10 @@ const (
|
|||
UBI_IOCMKVOL = 0x40986f00
|
||||
UBI_IOCRMVOL = 0x40046f01
|
||||
UBI_IOCRNVOL = 0x51106f03
|
||||
UBI_IOCRPEB = 0x40046f04
|
||||
UBI_IOCRSVOL = 0x400c6f02
|
||||
UBI_IOCSETVOLPROP = 0x40104f06
|
||||
UBI_IOCSPEB = 0x40046f05
|
||||
UBI_IOCVOLCRBLK = 0x40804f07
|
||||
UBI_IOCVOLRMBLK = 0x4f08
|
||||
UBI_IOCVOLUP = 0x40084f00
|
||||
|
@ -2457,6 +2635,7 @@ const (
|
|||
XDP_FLAGS_SKB_MODE = 0x2
|
||||
XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
|
||||
XDP_MMAP_OFFSETS = 0x1
|
||||
XDP_PACKET_HEADROOM = 0x100
|
||||
XDP_PGOFF_RX_RING = 0x0
|
||||
XDP_PGOFF_TX_RING = 0x80000000
|
||||
XDP_RX_RING = 0x2
|
||||
|
|
|
@ -196,11 +196,70 @@ const (
|
|||
BPF_A = 0x10
|
||||
BPF_ABS = 0x20
|
||||
BPF_ADD = 0x0
|
||||
BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff
|
||||
BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38
|
||||
BPF_ALU = 0x4
|
||||
BPF_ALU64 = 0x7
|
||||
BPF_AND = 0x50
|
||||
BPF_ANY = 0x0
|
||||
BPF_ARSH = 0xc0
|
||||
BPF_B = 0x10
|
||||
BPF_BUILD_ID_SIZE = 0x14
|
||||
BPF_CALL = 0x80
|
||||
BPF_DEVCG_ACC_MKNOD = 0x1
|
||||
BPF_DEVCG_ACC_READ = 0x2
|
||||
BPF_DEVCG_ACC_WRITE = 0x4
|
||||
BPF_DEVCG_DEV_BLOCK = 0x1
|
||||
BPF_DEVCG_DEV_CHAR = 0x2
|
||||
BPF_DIV = 0x30
|
||||
BPF_DW = 0x18
|
||||
BPF_END = 0xd0
|
||||
BPF_EXIST = 0x2
|
||||
BPF_EXIT = 0x90
|
||||
BPF_FROM_BE = 0x8
|
||||
BPF_FROM_LE = 0x0
|
||||
BPF_FS_MAGIC = 0xcafe4a11
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10
|
||||
BPF_F_ADJ_ROOM_FIXED_GSO = 0x1
|
||||
BPF_F_ALLOW_MULTI = 0x2
|
||||
BPF_F_ALLOW_OVERRIDE = 0x1
|
||||
BPF_F_ANY_ALIGNMENT = 0x2
|
||||
BPF_F_CTXLEN_MASK = 0xfffff00000000
|
||||
BPF_F_CURRENT_CPU = 0xffffffff
|
||||
BPF_F_CURRENT_NETNS = -0x1
|
||||
BPF_F_DONT_FRAGMENT = 0x4
|
||||
BPF_F_FAST_STACK_CMP = 0x200
|
||||
BPF_F_HDR_FIELD_MASK = 0xf
|
||||
BPF_F_INDEX_MASK = 0xffffffff
|
||||
BPF_F_INGRESS = 0x1
|
||||
BPF_F_INVALIDATE_HASH = 0x2
|
||||
BPF_F_LOCK = 0x4
|
||||
BPF_F_MARK_ENFORCE = 0x40
|
||||
BPF_F_MARK_MANGLED_0 = 0x20
|
||||
BPF_F_NO_COMMON_LRU = 0x2
|
||||
BPF_F_NO_PREALLOC = 0x1
|
||||
BPF_F_NUMA_NODE = 0x4
|
||||
BPF_F_PSEUDO_HDR = 0x10
|
||||
BPF_F_QUERY_EFFECTIVE = 0x1
|
||||
BPF_F_RDONLY = 0x8
|
||||
BPF_F_RDONLY_PROG = 0x80
|
||||
BPF_F_RECOMPUTE_CSUM = 0x1
|
||||
BPF_F_REUSE_STACKID = 0x400
|
||||
BPF_F_SEQ_NUMBER = 0x8
|
||||
BPF_F_SKIP_FIELD_MASK = 0xff
|
||||
BPF_F_STACK_BUILD_ID = 0x20
|
||||
BPF_F_STRICT_ALIGNMENT = 0x1
|
||||
BPF_F_SYSCTL_BASE_NAME = 0x1
|
||||
BPF_F_TUNINFO_IPV6 = 0x1
|
||||
BPF_F_USER_BUILD_ID = 0x800
|
||||
BPF_F_USER_STACK = 0x100
|
||||
BPF_F_WRONLY = 0x10
|
||||
BPF_F_WRONLY_PROG = 0x100
|
||||
BPF_F_ZERO_CSUM_TX = 0x2
|
||||
BPF_F_ZERO_SEED = 0x40
|
||||
BPF_H = 0x8
|
||||
BPF_IMM = 0x0
|
||||
BPF_IND = 0x40
|
||||
|
@ -208,8 +267,16 @@ const (
|
|||
BPF_JEQ = 0x10
|
||||
BPF_JGE = 0x30
|
||||
BPF_JGT = 0x20
|
||||
BPF_JLE = 0xb0
|
||||
BPF_JLT = 0xa0
|
||||
BPF_JMP = 0x5
|
||||
BPF_JMP32 = 0x6
|
||||
BPF_JNE = 0x50
|
||||
BPF_JSET = 0x40
|
||||
BPF_JSGE = 0x70
|
||||
BPF_JSGT = 0x60
|
||||
BPF_JSLE = 0xd0
|
||||
BPF_JSLT = 0xc0
|
||||
BPF_K = 0x0
|
||||
BPF_LD = 0x0
|
||||
BPF_LDX = 0x1
|
||||
|
@ -223,20 +290,35 @@ const (
|
|||
BPF_MINOR_VERSION = 0x1
|
||||
BPF_MISC = 0x7
|
||||
BPF_MOD = 0x90
|
||||
BPF_MOV = 0xb0
|
||||
BPF_MSH = 0xa0
|
||||
BPF_MUL = 0x20
|
||||
BPF_NEG = 0x80
|
||||
BPF_NET_OFF = -0x100000
|
||||
BPF_NOEXIST = 0x1
|
||||
BPF_OBJ_NAME_LEN = 0x10
|
||||
BPF_OR = 0x40
|
||||
BPF_PSEUDO_CALL = 0x1
|
||||
BPF_PSEUDO_MAP_FD = 0x1
|
||||
BPF_PSEUDO_MAP_VALUE = 0x2
|
||||
BPF_RET = 0x6
|
||||
BPF_RSH = 0x70
|
||||
BPF_SK_STORAGE_GET_F_CREATE = 0x1
|
||||
BPF_SOCK_OPS_ALL_CB_FLAGS = 0x7
|
||||
BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2
|
||||
BPF_SOCK_OPS_RTO_CB_FLAG = 0x1
|
||||
BPF_SOCK_OPS_STATE_CB_FLAG = 0x4
|
||||
BPF_ST = 0x2
|
||||
BPF_STX = 0x3
|
||||
BPF_SUB = 0x10
|
||||
BPF_TAG_SIZE = 0x8
|
||||
BPF_TAX = 0x0
|
||||
BPF_TO_BE = 0x8
|
||||
BPF_TO_LE = 0x0
|
||||
BPF_TXA = 0x80
|
||||
BPF_W = 0x0
|
||||
BPF_X = 0x8
|
||||
BPF_XADD = 0xc0
|
||||
BPF_XOR = 0xa0
|
||||
BRKINT = 0x2
|
||||
BS0 = 0x0
|
||||
|
@ -264,6 +346,45 @@ const (
|
|||
CAN_SFF_MASK = 0x7ff
|
||||
CAN_TP16 = 0x3
|
||||
CAN_TP20 = 0x4
|
||||
CAP_AUDIT_CONTROL = 0x1e
|
||||
CAP_AUDIT_READ = 0x25
|
||||
CAP_AUDIT_WRITE = 0x1d
|
||||
CAP_BLOCK_SUSPEND = 0x24
|
||||
CAP_CHOWN = 0x0
|
||||
CAP_DAC_OVERRIDE = 0x1
|
||||
CAP_DAC_READ_SEARCH = 0x2
|
||||
CAP_FOWNER = 0x3
|
||||
CAP_FSETID = 0x4
|
||||
CAP_IPC_LOCK = 0xe
|
||||
CAP_IPC_OWNER = 0xf
|
||||
CAP_KILL = 0x5
|
||||
CAP_LAST_CAP = 0x25
|
||||
CAP_LEASE = 0x1c
|
||||
CAP_LINUX_IMMUTABLE = 0x9
|
||||
CAP_MAC_ADMIN = 0x21
|
||||
CAP_MAC_OVERRIDE = 0x20
|
||||
CAP_MKNOD = 0x1b
|
||||
CAP_NET_ADMIN = 0xc
|
||||
CAP_NET_BIND_SERVICE = 0xa
|
||||
CAP_NET_BROADCAST = 0xb
|
||||
CAP_NET_RAW = 0xd
|
||||
CAP_SETFCAP = 0x1f
|
||||
CAP_SETGID = 0x6
|
||||
CAP_SETPCAP = 0x8
|
||||
CAP_SETUID = 0x7
|
||||
CAP_SYSLOG = 0x22
|
||||
CAP_SYS_ADMIN = 0x15
|
||||
CAP_SYS_BOOT = 0x16
|
||||
CAP_SYS_CHROOT = 0x12
|
||||
CAP_SYS_MODULE = 0x10
|
||||
CAP_SYS_NICE = 0x17
|
||||
CAP_SYS_PACCT = 0x14
|
||||
CAP_SYS_PTRACE = 0x13
|
||||
CAP_SYS_RAWIO = 0x11
|
||||
CAP_SYS_RESOURCE = 0x18
|
||||
CAP_SYS_TIME = 0x19
|
||||
CAP_SYS_TTY_CONFIG = 0x1a
|
||||
CAP_WAKE_ALARM = 0x23
|
||||
CBAUD = 0x100f
|
||||
CBAUDEX = 0x1000
|
||||
CFLUSH = 0xf
|
||||
|
@ -302,6 +423,7 @@ const (
|
|||
CLONE_NEWUTS = 0x4000000
|
||||
CLONE_PARENT = 0x8000
|
||||
CLONE_PARENT_SETTID = 0x100000
|
||||
CLONE_PIDFD = 0x1000
|
||||
CLONE_PTRACE = 0x2000
|
||||
CLONE_SETTLS = 0x80000
|
||||
CLONE_SIGHAND = 0x800
|
||||
|
@ -418,6 +540,7 @@ const (
|
|||
ETH_P_DNA_RC = 0x6002
|
||||
ETH_P_DNA_RT = 0x6003
|
||||
ETH_P_DSA = 0x1b
|
||||
ETH_P_DSA_8021Q = 0xdadb
|
||||
ETH_P_ECONET = 0x18
|
||||
ETH_P_EDSA = 0xdada
|
||||
ETH_P_ERSPAN = 0x88be
|
||||
|
@ -501,6 +624,7 @@ const (
|
|||
FAN_ALL_MARK_FLAGS = 0xff
|
||||
FAN_ALL_OUTGOING_EVENTS = 0x3403b
|
||||
FAN_ALL_PERM_EVENTS = 0x30000
|
||||
FAN_ATTRIB = 0x4
|
||||
FAN_AUDIT = 0x10
|
||||
FAN_CLASS_CONTENT = 0x4
|
||||
FAN_CLASS_NOTIF = 0x0
|
||||
|
@ -509,8 +633,12 @@ const (
|
|||
FAN_CLOSE = 0x18
|
||||
FAN_CLOSE_NOWRITE = 0x10
|
||||
FAN_CLOSE_WRITE = 0x8
|
||||
FAN_CREATE = 0x100
|
||||
FAN_DELETE = 0x200
|
||||
FAN_DELETE_SELF = 0x400
|
||||
FAN_DENY = 0x2
|
||||
FAN_ENABLE_AUDIT = 0x40
|
||||
FAN_EVENT_INFO_TYPE_FID = 0x1
|
||||
FAN_EVENT_METADATA_LEN = 0x18
|
||||
FAN_EVENT_ON_CHILD = 0x8000000
|
||||
FAN_MARK_ADD = 0x1
|
||||
|
@ -524,6 +652,10 @@ const (
|
|||
FAN_MARK_ONLYDIR = 0x8
|
||||
FAN_MARK_REMOVE = 0x2
|
||||
FAN_MODIFY = 0x2
|
||||
FAN_MOVE = 0xc0
|
||||
FAN_MOVED_FROM = 0x40
|
||||
FAN_MOVED_TO = 0x80
|
||||
FAN_MOVE_SELF = 0x800
|
||||
FAN_NOFD = -0x1
|
||||
FAN_NONBLOCK = 0x2
|
||||
FAN_ONDIR = 0x40000000
|
||||
|
@ -532,6 +664,7 @@ const (
|
|||
FAN_OPEN_EXEC_PERM = 0x40000
|
||||
FAN_OPEN_PERM = 0x10000
|
||||
FAN_Q_OVERFLOW = 0x4000
|
||||
FAN_REPORT_FID = 0x200
|
||||
FAN_REPORT_TID = 0x100
|
||||
FAN_UNLIMITED_MARKS = 0x20
|
||||
FAN_UNLIMITED_QUEUE = 0x10
|
||||
|
@ -1015,6 +1148,20 @@ const (
|
|||
LOCK_NB = 0x4
|
||||
LOCK_SH = 0x1
|
||||
LOCK_UN = 0x8
|
||||
LOOP_CLR_FD = 0x4c01
|
||||
LOOP_CTL_ADD = 0x4c80
|
||||
LOOP_CTL_GET_FREE = 0x4c82
|
||||
LOOP_CTL_REMOVE = 0x4c81
|
||||
LOOP_GET_STATUS = 0x4c03
|
||||
LOOP_GET_STATUS64 = 0x4c05
|
||||
LOOP_SET_BLOCK_SIZE = 0x4c09
|
||||
LOOP_SET_CAPACITY = 0x4c07
|
||||
LOOP_SET_DIRECT_IO = 0x4c08
|
||||
LOOP_SET_FD = 0x4c00
|
||||
LOOP_SET_STATUS = 0x4c02
|
||||
LOOP_SET_STATUS64 = 0x4c04
|
||||
LO_KEY_SIZE = 0x20
|
||||
LO_NAME_SIZE = 0x40
|
||||
MADV_DODUMP = 0x11
|
||||
MADV_DOFORK = 0xb
|
||||
MADV_DONTDUMP = 0x10
|
||||
|
@ -1054,6 +1201,15 @@ const (
|
|||
MAP_SHARED_VALIDATE = 0x3
|
||||
MAP_STACK = 0x40000
|
||||
MAP_TYPE = 0xf
|
||||
MCAST_BLOCK_SOURCE = 0x2b
|
||||
MCAST_EXCLUDE = 0x0
|
||||
MCAST_INCLUDE = 0x1
|
||||
MCAST_JOIN_GROUP = 0x2a
|
||||
MCAST_JOIN_SOURCE_GROUP = 0x2e
|
||||
MCAST_LEAVE_GROUP = 0x2d
|
||||
MCAST_LEAVE_SOURCE_GROUP = 0x2f
|
||||
MCAST_MSFILTER = 0x30
|
||||
MCAST_UNBLOCK_SOURCE = 0x2c
|
||||
MCL_CURRENT = 0x1
|
||||
MCL_FUTURE = 0x2
|
||||
MCL_ONFAULT = 0x4
|
||||
|
@ -1489,6 +1645,7 @@ const (
|
|||
PR_SET_TSC = 0x1a
|
||||
PR_SET_UNALIGN = 0x6
|
||||
PR_SPEC_DISABLE = 0x4
|
||||
PR_SPEC_DISABLE_NOEXEC = 0x10
|
||||
PR_SPEC_ENABLE = 0x2
|
||||
PR_SPEC_FORCE_DISABLE = 0x8
|
||||
PR_SPEC_INDIRECT_BRANCH = 0x1
|
||||
|
@ -1868,6 +2025,10 @@ const (
|
|||
SIOCGSKNS = 0x894c
|
||||
SIOCGSTAMP = 0x8906
|
||||
SIOCGSTAMPNS = 0x8907
|
||||
SIOCGSTAMPNS_NEW = 0x40108907
|
||||
SIOCGSTAMPNS_OLD = 0x8907
|
||||
SIOCGSTAMP_NEW = 0x40108906
|
||||
SIOCGSTAMP_OLD = 0x8906
|
||||
SIOCINQ = 0x467f
|
||||
SIOCOUTQ = 0x7472
|
||||
SIOCOUTQNSD = 0x894b
|
||||
|
@ -1961,6 +2122,7 @@ const (
|
|||
SO_ATTACH_REUSEPORT_CBPF = 0x33
|
||||
SO_ATTACH_REUSEPORT_EBPF = 0x34
|
||||
SO_BINDTODEVICE = 0x19
|
||||
SO_BINDTOIFINDEX = 0x3e
|
||||
SO_BPF_EXTENSIONS = 0x30
|
||||
SO_BROADCAST = 0x20
|
||||
SO_BSDCOMPAT = 0xe
|
||||
|
@ -2009,6 +2171,8 @@ const (
|
|||
SO_RCVBUFFORCE = 0x21
|
||||
SO_RCVLOWAT = 0x1004
|
||||
SO_RCVTIMEO = 0x1006
|
||||
SO_RCVTIMEO_NEW = 0x42
|
||||
SO_RCVTIMEO_OLD = 0x1006
|
||||
SO_REUSEADDR = 0x4
|
||||
SO_REUSEPORT = 0x200
|
||||
SO_RXQ_OVFL = 0x28
|
||||
|
@ -2020,10 +2184,18 @@ const (
|
|||
SO_SNDBUFFORCE = 0x1f
|
||||
SO_SNDLOWAT = 0x1003
|
||||
SO_SNDTIMEO = 0x1005
|
||||
SO_SNDTIMEO_NEW = 0x43
|
||||
SO_SNDTIMEO_OLD = 0x1005
|
||||
SO_STYLE = 0x1008
|
||||
SO_TIMESTAMP = 0x1d
|
||||
SO_TIMESTAMPING = 0x25
|
||||
SO_TIMESTAMPING_NEW = 0x41
|
||||
SO_TIMESTAMPING_OLD = 0x25
|
||||
SO_TIMESTAMPNS = 0x23
|
||||
SO_TIMESTAMPNS_NEW = 0x40
|
||||
SO_TIMESTAMPNS_OLD = 0x23
|
||||
SO_TIMESTAMP_NEW = 0x3f
|
||||
SO_TIMESTAMP_OLD = 0x1d
|
||||
SO_TXTIME = 0x3d
|
||||
SO_TYPE = 0x1008
|
||||
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
|
||||
|
@ -2065,6 +2237,7 @@ const (
|
|||
SYNC_FILE_RANGE_WAIT_AFTER = 0x4
|
||||
SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
|
||||
SYNC_FILE_RANGE_WRITE = 0x2
|
||||
SYNC_FILE_RANGE_WRITE_AND_WAIT = 0x7
|
||||
SYSFS_MAGIC = 0x62656572
|
||||
S_BLKSIZE = 0x200
|
||||
S_IEXEC = 0x40
|
||||
|
@ -2115,6 +2288,8 @@ const (
|
|||
TCOFLUSH = 0x1
|
||||
TCOOFF = 0x0
|
||||
TCOON = 0x1
|
||||
TCP_BPF_IW = 0x3e9
|
||||
TCP_BPF_SNDCWND_CLAMP = 0x3ea
|
||||
TCP_CC_INFO = 0x1a
|
||||
TCP_CM_INQ = 0x24
|
||||
TCP_CONGESTION = 0xd
|
||||
|
@ -2283,6 +2458,7 @@ const (
|
|||
TS_COMM_LEN = 0x20
|
||||
TUNATTACHFILTER = 0x800854d5
|
||||
TUNDETACHFILTER = 0x800854d6
|
||||
TUNGETDEVNETNS = 0x200054e3
|
||||
TUNGETFEATURES = 0x400454cf
|
||||
TUNGETFILTER = 0x400854db
|
||||
TUNGETIFF = 0x400454d2
|
||||
|
@ -2318,8 +2494,10 @@ const (
|
|||
UBI_IOCMKVOL = 0x80986f00
|
||||
UBI_IOCRMVOL = 0x80046f01
|
||||
UBI_IOCRNVOL = 0x91106f03
|
||||
UBI_IOCRPEB = 0x80046f04
|
||||
UBI_IOCRSVOL = 0x800c6f02
|
||||
UBI_IOCSETVOLPROP = 0x80104f06
|
||||
UBI_IOCSPEB = 0x80046f05
|
||||
UBI_IOCVOLCRBLK = 0x80804f07
|
||||
UBI_IOCVOLRMBLK = 0x20004f08
|
||||
UBI_IOCVOLUP = 0x80084f00
|
||||
|
@ -2468,6 +2646,7 @@ const (
|
|||
XDP_FLAGS_SKB_MODE = 0x2
|
||||
XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
|
||||
XDP_MMAP_OFFSETS = 0x1
|
||||
XDP_PACKET_HEADROOM = 0x100
|
||||
XDP_PGOFF_RX_RING = 0x0
|
||||
XDP_PGOFF_TX_RING = 0x80000000
|
||||
XDP_RX_RING = 0x2
|
||||
|
|
|
@ -196,11 +196,70 @@ const (
|
|||
BPF_A = 0x10
|
||||
BPF_ABS = 0x20
|
||||
BPF_ADD = 0x0
|
||||
BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff
|
||||
BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38
|
||||
BPF_ALU = 0x4
|
||||
BPF_ALU64 = 0x7
|
||||
BPF_AND = 0x50
|
||||
BPF_ANY = 0x0
|
||||
BPF_ARSH = 0xc0
|
||||
BPF_B = 0x10
|
||||
BPF_BUILD_ID_SIZE = 0x14
|
||||
BPF_CALL = 0x80
|
||||
BPF_DEVCG_ACC_MKNOD = 0x1
|
||||
BPF_DEVCG_ACC_READ = 0x2
|
||||
BPF_DEVCG_ACC_WRITE = 0x4
|
||||
BPF_DEVCG_DEV_BLOCK = 0x1
|
||||
BPF_DEVCG_DEV_CHAR = 0x2
|
||||
BPF_DIV = 0x30
|
||||
BPF_DW = 0x18
|
||||
BPF_END = 0xd0
|
||||
BPF_EXIST = 0x2
|
||||
BPF_EXIT = 0x90
|
||||
BPF_FROM_BE = 0x8
|
||||
BPF_FROM_LE = 0x0
|
||||
BPF_FS_MAGIC = 0xcafe4a11
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10
|
||||
BPF_F_ADJ_ROOM_FIXED_GSO = 0x1
|
||||
BPF_F_ALLOW_MULTI = 0x2
|
||||
BPF_F_ALLOW_OVERRIDE = 0x1
|
||||
BPF_F_ANY_ALIGNMENT = 0x2
|
||||
BPF_F_CTXLEN_MASK = 0xfffff00000000
|
||||
BPF_F_CURRENT_CPU = 0xffffffff
|
||||
BPF_F_CURRENT_NETNS = -0x1
|
||||
BPF_F_DONT_FRAGMENT = 0x4
|
||||
BPF_F_FAST_STACK_CMP = 0x200
|
||||
BPF_F_HDR_FIELD_MASK = 0xf
|
||||
BPF_F_INDEX_MASK = 0xffffffff
|
||||
BPF_F_INGRESS = 0x1
|
||||
BPF_F_INVALIDATE_HASH = 0x2
|
||||
BPF_F_LOCK = 0x4
|
||||
BPF_F_MARK_ENFORCE = 0x40
|
||||
BPF_F_MARK_MANGLED_0 = 0x20
|
||||
BPF_F_NO_COMMON_LRU = 0x2
|
||||
BPF_F_NO_PREALLOC = 0x1
|
||||
BPF_F_NUMA_NODE = 0x4
|
||||
BPF_F_PSEUDO_HDR = 0x10
|
||||
BPF_F_QUERY_EFFECTIVE = 0x1
|
||||
BPF_F_RDONLY = 0x8
|
||||
BPF_F_RDONLY_PROG = 0x80
|
||||
BPF_F_RECOMPUTE_CSUM = 0x1
|
||||
BPF_F_REUSE_STACKID = 0x400
|
||||
BPF_F_SEQ_NUMBER = 0x8
|
||||
BPF_F_SKIP_FIELD_MASK = 0xff
|
||||
BPF_F_STACK_BUILD_ID = 0x20
|
||||
BPF_F_STRICT_ALIGNMENT = 0x1
|
||||
BPF_F_SYSCTL_BASE_NAME = 0x1
|
||||
BPF_F_TUNINFO_IPV6 = 0x1
|
||||
BPF_F_USER_BUILD_ID = 0x800
|
||||
BPF_F_USER_STACK = 0x100
|
||||
BPF_F_WRONLY = 0x10
|
||||
BPF_F_WRONLY_PROG = 0x100
|
||||
BPF_F_ZERO_CSUM_TX = 0x2
|
||||
BPF_F_ZERO_SEED = 0x40
|
||||
BPF_H = 0x8
|
||||
BPF_IMM = 0x0
|
||||
BPF_IND = 0x40
|
||||
|
@ -208,8 +267,16 @@ const (
|
|||
BPF_JEQ = 0x10
|
||||
BPF_JGE = 0x30
|
||||
BPF_JGT = 0x20
|
||||
BPF_JLE = 0xb0
|
||||
BPF_JLT = 0xa0
|
||||
BPF_JMP = 0x5
|
||||
BPF_JMP32 = 0x6
|
||||
BPF_JNE = 0x50
|
||||
BPF_JSET = 0x40
|
||||
BPF_JSGE = 0x70
|
||||
BPF_JSGT = 0x60
|
||||
BPF_JSLE = 0xd0
|
||||
BPF_JSLT = 0xc0
|
||||
BPF_K = 0x0
|
||||
BPF_LD = 0x0
|
||||
BPF_LDX = 0x1
|
||||
|
@ -223,20 +290,35 @@ const (
|
|||
BPF_MINOR_VERSION = 0x1
|
||||
BPF_MISC = 0x7
|
||||
BPF_MOD = 0x90
|
||||
BPF_MOV = 0xb0
|
||||
BPF_MSH = 0xa0
|
||||
BPF_MUL = 0x20
|
||||
BPF_NEG = 0x80
|
||||
BPF_NET_OFF = -0x100000
|
||||
BPF_NOEXIST = 0x1
|
||||
BPF_OBJ_NAME_LEN = 0x10
|
||||
BPF_OR = 0x40
|
||||
BPF_PSEUDO_CALL = 0x1
|
||||
BPF_PSEUDO_MAP_FD = 0x1
|
||||
BPF_PSEUDO_MAP_VALUE = 0x2
|
||||
BPF_RET = 0x6
|
||||
BPF_RSH = 0x70
|
||||
BPF_SK_STORAGE_GET_F_CREATE = 0x1
|
||||
BPF_SOCK_OPS_ALL_CB_FLAGS = 0x7
|
||||
BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2
|
||||
BPF_SOCK_OPS_RTO_CB_FLAG = 0x1
|
||||
BPF_SOCK_OPS_STATE_CB_FLAG = 0x4
|
||||
BPF_ST = 0x2
|
||||
BPF_STX = 0x3
|
||||
BPF_SUB = 0x10
|
||||
BPF_TAG_SIZE = 0x8
|
||||
BPF_TAX = 0x0
|
||||
BPF_TO_BE = 0x8
|
||||
BPF_TO_LE = 0x0
|
||||
BPF_TXA = 0x80
|
||||
BPF_W = 0x0
|
||||
BPF_X = 0x8
|
||||
BPF_XADD = 0xc0
|
||||
BPF_XOR = 0xa0
|
||||
BRKINT = 0x2
|
||||
BS0 = 0x0
|
||||
|
@ -264,6 +346,45 @@ const (
|
|||
CAN_SFF_MASK = 0x7ff
|
||||
CAN_TP16 = 0x3
|
||||
CAN_TP20 = 0x4
|
||||
CAP_AUDIT_CONTROL = 0x1e
|
||||
CAP_AUDIT_READ = 0x25
|
||||
CAP_AUDIT_WRITE = 0x1d
|
||||
CAP_BLOCK_SUSPEND = 0x24
|
||||
CAP_CHOWN = 0x0
|
||||
CAP_DAC_OVERRIDE = 0x1
|
||||
CAP_DAC_READ_SEARCH = 0x2
|
||||
CAP_FOWNER = 0x3
|
||||
CAP_FSETID = 0x4
|
||||
CAP_IPC_LOCK = 0xe
|
||||
CAP_IPC_OWNER = 0xf
|
||||
CAP_KILL = 0x5
|
||||
CAP_LAST_CAP = 0x25
|
||||
CAP_LEASE = 0x1c
|
||||
CAP_LINUX_IMMUTABLE = 0x9
|
||||
CAP_MAC_ADMIN = 0x21
|
||||
CAP_MAC_OVERRIDE = 0x20
|
||||
CAP_MKNOD = 0x1b
|
||||
CAP_NET_ADMIN = 0xc
|
||||
CAP_NET_BIND_SERVICE = 0xa
|
||||
CAP_NET_BROADCAST = 0xb
|
||||
CAP_NET_RAW = 0xd
|
||||
CAP_SETFCAP = 0x1f
|
||||
CAP_SETGID = 0x6
|
||||
CAP_SETPCAP = 0x8
|
||||
CAP_SETUID = 0x7
|
||||
CAP_SYSLOG = 0x22
|
||||
CAP_SYS_ADMIN = 0x15
|
||||
CAP_SYS_BOOT = 0x16
|
||||
CAP_SYS_CHROOT = 0x12
|
||||
CAP_SYS_MODULE = 0x10
|
||||
CAP_SYS_NICE = 0x17
|
||||
CAP_SYS_PACCT = 0x14
|
||||
CAP_SYS_PTRACE = 0x13
|
||||
CAP_SYS_RAWIO = 0x11
|
||||
CAP_SYS_RESOURCE = 0x18
|
||||
CAP_SYS_TIME = 0x19
|
||||
CAP_SYS_TTY_CONFIG = 0x1a
|
||||
CAP_WAKE_ALARM = 0x23
|
||||
CBAUD = 0x100f
|
||||
CBAUDEX = 0x1000
|
||||
CFLUSH = 0xf
|
||||
|
@ -302,6 +423,7 @@ const (
|
|||
CLONE_NEWUTS = 0x4000000
|
||||
CLONE_PARENT = 0x8000
|
||||
CLONE_PARENT_SETTID = 0x100000
|
||||
CLONE_PIDFD = 0x1000
|
||||
CLONE_PTRACE = 0x2000
|
||||
CLONE_SETTLS = 0x80000
|
||||
CLONE_SIGHAND = 0x800
|
||||
|
@ -418,6 +540,7 @@ const (
|
|||
ETH_P_DNA_RC = 0x6002
|
||||
ETH_P_DNA_RT = 0x6003
|
||||
ETH_P_DSA = 0x1b
|
||||
ETH_P_DSA_8021Q = 0xdadb
|
||||
ETH_P_ECONET = 0x18
|
||||
ETH_P_EDSA = 0xdada
|
||||
ETH_P_ERSPAN = 0x88be
|
||||
|
@ -501,6 +624,7 @@ const (
|
|||
FAN_ALL_MARK_FLAGS = 0xff
|
||||
FAN_ALL_OUTGOING_EVENTS = 0x3403b
|
||||
FAN_ALL_PERM_EVENTS = 0x30000
|
||||
FAN_ATTRIB = 0x4
|
||||
FAN_AUDIT = 0x10
|
||||
FAN_CLASS_CONTENT = 0x4
|
||||
FAN_CLASS_NOTIF = 0x0
|
||||
|
@ -509,8 +633,12 @@ const (
|
|||
FAN_CLOSE = 0x18
|
||||
FAN_CLOSE_NOWRITE = 0x10
|
||||
FAN_CLOSE_WRITE = 0x8
|
||||
FAN_CREATE = 0x100
|
||||
FAN_DELETE = 0x200
|
||||
FAN_DELETE_SELF = 0x400
|
||||
FAN_DENY = 0x2
|
||||
FAN_ENABLE_AUDIT = 0x40
|
||||
FAN_EVENT_INFO_TYPE_FID = 0x1
|
||||
FAN_EVENT_METADATA_LEN = 0x18
|
||||
FAN_EVENT_ON_CHILD = 0x8000000
|
||||
FAN_MARK_ADD = 0x1
|
||||
|
@ -524,6 +652,10 @@ const (
|
|||
FAN_MARK_ONLYDIR = 0x8
|
||||
FAN_MARK_REMOVE = 0x2
|
||||
FAN_MODIFY = 0x2
|
||||
FAN_MOVE = 0xc0
|
||||
FAN_MOVED_FROM = 0x40
|
||||
FAN_MOVED_TO = 0x80
|
||||
FAN_MOVE_SELF = 0x800
|
||||
FAN_NOFD = -0x1
|
||||
FAN_NONBLOCK = 0x2
|
||||
FAN_ONDIR = 0x40000000
|
||||
|
@ -532,6 +664,7 @@ const (
|
|||
FAN_OPEN_EXEC_PERM = 0x40000
|
||||
FAN_OPEN_PERM = 0x10000
|
||||
FAN_Q_OVERFLOW = 0x4000
|
||||
FAN_REPORT_FID = 0x200
|
||||
FAN_REPORT_TID = 0x100
|
||||
FAN_UNLIMITED_MARKS = 0x20
|
||||
FAN_UNLIMITED_QUEUE = 0x10
|
||||
|
@ -1015,6 +1148,20 @@ const (
|
|||
LOCK_NB = 0x4
|
||||
LOCK_SH = 0x1
|
||||
LOCK_UN = 0x8
|
||||
LOOP_CLR_FD = 0x4c01
|
||||
LOOP_CTL_ADD = 0x4c80
|
||||
LOOP_CTL_GET_FREE = 0x4c82
|
||||
LOOP_CTL_REMOVE = 0x4c81
|
||||
LOOP_GET_STATUS = 0x4c03
|
||||
LOOP_GET_STATUS64 = 0x4c05
|
||||
LOOP_SET_BLOCK_SIZE = 0x4c09
|
||||
LOOP_SET_CAPACITY = 0x4c07
|
||||
LOOP_SET_DIRECT_IO = 0x4c08
|
||||
LOOP_SET_FD = 0x4c00
|
||||
LOOP_SET_STATUS = 0x4c02
|
||||
LOOP_SET_STATUS64 = 0x4c04
|
||||
LO_KEY_SIZE = 0x20
|
||||
LO_NAME_SIZE = 0x40
|
||||
MADV_DODUMP = 0x11
|
||||
MADV_DOFORK = 0xb
|
||||
MADV_DONTDUMP = 0x10
|
||||
|
@ -1054,6 +1201,15 @@ const (
|
|||
MAP_SHARED_VALIDATE = 0x3
|
||||
MAP_STACK = 0x40000
|
||||
MAP_TYPE = 0xf
|
||||
MCAST_BLOCK_SOURCE = 0x2b
|
||||
MCAST_EXCLUDE = 0x0
|
||||
MCAST_INCLUDE = 0x1
|
||||
MCAST_JOIN_GROUP = 0x2a
|
||||
MCAST_JOIN_SOURCE_GROUP = 0x2e
|
||||
MCAST_LEAVE_GROUP = 0x2d
|
||||
MCAST_LEAVE_SOURCE_GROUP = 0x2f
|
||||
MCAST_MSFILTER = 0x30
|
||||
MCAST_UNBLOCK_SOURCE = 0x2c
|
||||
MCL_CURRENT = 0x1
|
||||
MCL_FUTURE = 0x2
|
||||
MCL_ONFAULT = 0x4
|
||||
|
@ -1489,6 +1645,7 @@ const (
|
|||
PR_SET_TSC = 0x1a
|
||||
PR_SET_UNALIGN = 0x6
|
||||
PR_SPEC_DISABLE = 0x4
|
||||
PR_SPEC_DISABLE_NOEXEC = 0x10
|
||||
PR_SPEC_ENABLE = 0x2
|
||||
PR_SPEC_FORCE_DISABLE = 0x8
|
||||
PR_SPEC_INDIRECT_BRANCH = 0x1
|
||||
|
@ -1868,6 +2025,10 @@ const (
|
|||
SIOCGSKNS = 0x894c
|
||||
SIOCGSTAMP = 0x8906
|
||||
SIOCGSTAMPNS = 0x8907
|
||||
SIOCGSTAMPNS_NEW = 0x40108907
|
||||
SIOCGSTAMPNS_OLD = 0x8907
|
||||
SIOCGSTAMP_NEW = 0x40108906
|
||||
SIOCGSTAMP_OLD = 0x8906
|
||||
SIOCINQ = 0x467f
|
||||
SIOCOUTQ = 0x7472
|
||||
SIOCOUTQNSD = 0x894b
|
||||
|
@ -1961,6 +2122,7 @@ const (
|
|||
SO_ATTACH_REUSEPORT_CBPF = 0x33
|
||||
SO_ATTACH_REUSEPORT_EBPF = 0x34
|
||||
SO_BINDTODEVICE = 0x19
|
||||
SO_BINDTOIFINDEX = 0x3e
|
||||
SO_BPF_EXTENSIONS = 0x30
|
||||
SO_BROADCAST = 0x20
|
||||
SO_BSDCOMPAT = 0xe
|
||||
|
@ -2009,6 +2171,8 @@ const (
|
|||
SO_RCVBUFFORCE = 0x21
|
||||
SO_RCVLOWAT = 0x1004
|
||||
SO_RCVTIMEO = 0x1006
|
||||
SO_RCVTIMEO_NEW = 0x42
|
||||
SO_RCVTIMEO_OLD = 0x1006
|
||||
SO_REUSEADDR = 0x4
|
||||
SO_REUSEPORT = 0x200
|
||||
SO_RXQ_OVFL = 0x28
|
||||
|
@ -2020,10 +2184,18 @@ const (
|
|||
SO_SNDBUFFORCE = 0x1f
|
||||
SO_SNDLOWAT = 0x1003
|
||||
SO_SNDTIMEO = 0x1005
|
||||
SO_SNDTIMEO_NEW = 0x43
|
||||
SO_SNDTIMEO_OLD = 0x1005
|
||||
SO_STYLE = 0x1008
|
||||
SO_TIMESTAMP = 0x1d
|
||||
SO_TIMESTAMPING = 0x25
|
||||
SO_TIMESTAMPING_NEW = 0x41
|
||||
SO_TIMESTAMPING_OLD = 0x25
|
||||
SO_TIMESTAMPNS = 0x23
|
||||
SO_TIMESTAMPNS_NEW = 0x40
|
||||
SO_TIMESTAMPNS_OLD = 0x23
|
||||
SO_TIMESTAMP_NEW = 0x3f
|
||||
SO_TIMESTAMP_OLD = 0x1d
|
||||
SO_TXTIME = 0x3d
|
||||
SO_TYPE = 0x1008
|
||||
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
|
||||
|
@ -2065,6 +2237,7 @@ const (
|
|||
SYNC_FILE_RANGE_WAIT_AFTER = 0x4
|
||||
SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
|
||||
SYNC_FILE_RANGE_WRITE = 0x2
|
||||
SYNC_FILE_RANGE_WRITE_AND_WAIT = 0x7
|
||||
SYSFS_MAGIC = 0x62656572
|
||||
S_BLKSIZE = 0x200
|
||||
S_IEXEC = 0x40
|
||||
|
@ -2115,6 +2288,8 @@ const (
|
|||
TCOFLUSH = 0x1
|
||||
TCOOFF = 0x0
|
||||
TCOON = 0x1
|
||||
TCP_BPF_IW = 0x3e9
|
||||
TCP_BPF_SNDCWND_CLAMP = 0x3ea
|
||||
TCP_CC_INFO = 0x1a
|
||||
TCP_CM_INQ = 0x24
|
||||
TCP_CONGESTION = 0xd
|
||||
|
@ -2283,6 +2458,7 @@ const (
|
|||
TS_COMM_LEN = 0x20
|
||||
TUNATTACHFILTER = 0x801054d5
|
||||
TUNDETACHFILTER = 0x801054d6
|
||||
TUNGETDEVNETNS = 0x200054e3
|
||||
TUNGETFEATURES = 0x400454cf
|
||||
TUNGETFILTER = 0x401054db
|
||||
TUNGETIFF = 0x400454d2
|
||||
|
@ -2318,8 +2494,10 @@ const (
|
|||
UBI_IOCMKVOL = 0x80986f00
|
||||
UBI_IOCRMVOL = 0x80046f01
|
||||
UBI_IOCRNVOL = 0x91106f03
|
||||
UBI_IOCRPEB = 0x80046f04
|
||||
UBI_IOCRSVOL = 0x800c6f02
|
||||
UBI_IOCSETVOLPROP = 0x80104f06
|
||||
UBI_IOCSPEB = 0x80046f05
|
||||
UBI_IOCVOLCRBLK = 0x80804f07
|
||||
UBI_IOCVOLRMBLK = 0x20004f08
|
||||
UBI_IOCVOLUP = 0x80084f00
|
||||
|
@ -2468,6 +2646,7 @@ const (
|
|||
XDP_FLAGS_SKB_MODE = 0x2
|
||||
XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
|
||||
XDP_MMAP_OFFSETS = 0x1
|
||||
XDP_PACKET_HEADROOM = 0x100
|
||||
XDP_PGOFF_RX_RING = 0x0
|
||||
XDP_PGOFF_TX_RING = 0x80000000
|
||||
XDP_RX_RING = 0x2
|
||||
|
|
|
@ -196,11 +196,70 @@ const (
|
|||
BPF_A = 0x10
|
||||
BPF_ABS = 0x20
|
||||
BPF_ADD = 0x0
|
||||
BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff
|
||||
BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38
|
||||
BPF_ALU = 0x4
|
||||
BPF_ALU64 = 0x7
|
||||
BPF_AND = 0x50
|
||||
BPF_ANY = 0x0
|
||||
BPF_ARSH = 0xc0
|
||||
BPF_B = 0x10
|
||||
BPF_BUILD_ID_SIZE = 0x14
|
||||
BPF_CALL = 0x80
|
||||
BPF_DEVCG_ACC_MKNOD = 0x1
|
||||
BPF_DEVCG_ACC_READ = 0x2
|
||||
BPF_DEVCG_ACC_WRITE = 0x4
|
||||
BPF_DEVCG_DEV_BLOCK = 0x1
|
||||
BPF_DEVCG_DEV_CHAR = 0x2
|
||||
BPF_DIV = 0x30
|
||||
BPF_DW = 0x18
|
||||
BPF_END = 0xd0
|
||||
BPF_EXIST = 0x2
|
||||
BPF_EXIT = 0x90
|
||||
BPF_FROM_BE = 0x8
|
||||
BPF_FROM_LE = 0x0
|
||||
BPF_FS_MAGIC = 0xcafe4a11
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10
|
||||
BPF_F_ADJ_ROOM_FIXED_GSO = 0x1
|
||||
BPF_F_ALLOW_MULTI = 0x2
|
||||
BPF_F_ALLOW_OVERRIDE = 0x1
|
||||
BPF_F_ANY_ALIGNMENT = 0x2
|
||||
BPF_F_CTXLEN_MASK = 0xfffff00000000
|
||||
BPF_F_CURRENT_CPU = 0xffffffff
|
||||
BPF_F_CURRENT_NETNS = -0x1
|
||||
BPF_F_DONT_FRAGMENT = 0x4
|
||||
BPF_F_FAST_STACK_CMP = 0x200
|
||||
BPF_F_HDR_FIELD_MASK = 0xf
|
||||
BPF_F_INDEX_MASK = 0xffffffff
|
||||
BPF_F_INGRESS = 0x1
|
||||
BPF_F_INVALIDATE_HASH = 0x2
|
||||
BPF_F_LOCK = 0x4
|
||||
BPF_F_MARK_ENFORCE = 0x40
|
||||
BPF_F_MARK_MANGLED_0 = 0x20
|
||||
BPF_F_NO_COMMON_LRU = 0x2
|
||||
BPF_F_NO_PREALLOC = 0x1
|
||||
BPF_F_NUMA_NODE = 0x4
|
||||
BPF_F_PSEUDO_HDR = 0x10
|
||||
BPF_F_QUERY_EFFECTIVE = 0x1
|
||||
BPF_F_RDONLY = 0x8
|
||||
BPF_F_RDONLY_PROG = 0x80
|
||||
BPF_F_RECOMPUTE_CSUM = 0x1
|
||||
BPF_F_REUSE_STACKID = 0x400
|
||||
BPF_F_SEQ_NUMBER = 0x8
|
||||
BPF_F_SKIP_FIELD_MASK = 0xff
|
||||
BPF_F_STACK_BUILD_ID = 0x20
|
||||
BPF_F_STRICT_ALIGNMENT = 0x1
|
||||
BPF_F_SYSCTL_BASE_NAME = 0x1
|
||||
BPF_F_TUNINFO_IPV6 = 0x1
|
||||
BPF_F_USER_BUILD_ID = 0x800
|
||||
BPF_F_USER_STACK = 0x100
|
||||
BPF_F_WRONLY = 0x10
|
||||
BPF_F_WRONLY_PROG = 0x100
|
||||
BPF_F_ZERO_CSUM_TX = 0x2
|
||||
BPF_F_ZERO_SEED = 0x40
|
||||
BPF_H = 0x8
|
||||
BPF_IMM = 0x0
|
||||
BPF_IND = 0x40
|
||||
|
@ -208,8 +267,16 @@ const (
|
|||
BPF_JEQ = 0x10
|
||||
BPF_JGE = 0x30
|
||||
BPF_JGT = 0x20
|
||||
BPF_JLE = 0xb0
|
||||
BPF_JLT = 0xa0
|
||||
BPF_JMP = 0x5
|
||||
BPF_JMP32 = 0x6
|
||||
BPF_JNE = 0x50
|
||||
BPF_JSET = 0x40
|
||||
BPF_JSGE = 0x70
|
||||
BPF_JSGT = 0x60
|
||||
BPF_JSLE = 0xd0
|
||||
BPF_JSLT = 0xc0
|
||||
BPF_K = 0x0
|
||||
BPF_LD = 0x0
|
||||
BPF_LDX = 0x1
|
||||
|
@ -223,20 +290,35 @@ const (
|
|||
BPF_MINOR_VERSION = 0x1
|
||||
BPF_MISC = 0x7
|
||||
BPF_MOD = 0x90
|
||||
BPF_MOV = 0xb0
|
||||
BPF_MSH = 0xa0
|
||||
BPF_MUL = 0x20
|
||||
BPF_NEG = 0x80
|
||||
BPF_NET_OFF = -0x100000
|
||||
BPF_NOEXIST = 0x1
|
||||
BPF_OBJ_NAME_LEN = 0x10
|
||||
BPF_OR = 0x40
|
||||
BPF_PSEUDO_CALL = 0x1
|
||||
BPF_PSEUDO_MAP_FD = 0x1
|
||||
BPF_PSEUDO_MAP_VALUE = 0x2
|
||||
BPF_RET = 0x6
|
||||
BPF_RSH = 0x70
|
||||
BPF_SK_STORAGE_GET_F_CREATE = 0x1
|
||||
BPF_SOCK_OPS_ALL_CB_FLAGS = 0x7
|
||||
BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2
|
||||
BPF_SOCK_OPS_RTO_CB_FLAG = 0x1
|
||||
BPF_SOCK_OPS_STATE_CB_FLAG = 0x4
|
||||
BPF_ST = 0x2
|
||||
BPF_STX = 0x3
|
||||
BPF_SUB = 0x10
|
||||
BPF_TAG_SIZE = 0x8
|
||||
BPF_TAX = 0x0
|
||||
BPF_TO_BE = 0x8
|
||||
BPF_TO_LE = 0x0
|
||||
BPF_TXA = 0x80
|
||||
BPF_W = 0x0
|
||||
BPF_X = 0x8
|
||||
BPF_XADD = 0xc0
|
||||
BPF_XOR = 0xa0
|
||||
BRKINT = 0x2
|
||||
BS0 = 0x0
|
||||
|
@ -264,6 +346,45 @@ const (
|
|||
CAN_SFF_MASK = 0x7ff
|
||||
CAN_TP16 = 0x3
|
||||
CAN_TP20 = 0x4
|
||||
CAP_AUDIT_CONTROL = 0x1e
|
||||
CAP_AUDIT_READ = 0x25
|
||||
CAP_AUDIT_WRITE = 0x1d
|
||||
CAP_BLOCK_SUSPEND = 0x24
|
||||
CAP_CHOWN = 0x0
|
||||
CAP_DAC_OVERRIDE = 0x1
|
||||
CAP_DAC_READ_SEARCH = 0x2
|
||||
CAP_FOWNER = 0x3
|
||||
CAP_FSETID = 0x4
|
||||
CAP_IPC_LOCK = 0xe
|
||||
CAP_IPC_OWNER = 0xf
|
||||
CAP_KILL = 0x5
|
||||
CAP_LAST_CAP = 0x25
|
||||
CAP_LEASE = 0x1c
|
||||
CAP_LINUX_IMMUTABLE = 0x9
|
||||
CAP_MAC_ADMIN = 0x21
|
||||
CAP_MAC_OVERRIDE = 0x20
|
||||
CAP_MKNOD = 0x1b
|
||||
CAP_NET_ADMIN = 0xc
|
||||
CAP_NET_BIND_SERVICE = 0xa
|
||||
CAP_NET_BROADCAST = 0xb
|
||||
CAP_NET_RAW = 0xd
|
||||
CAP_SETFCAP = 0x1f
|
||||
CAP_SETGID = 0x6
|
||||
CAP_SETPCAP = 0x8
|
||||
CAP_SETUID = 0x7
|
||||
CAP_SYSLOG = 0x22
|
||||
CAP_SYS_ADMIN = 0x15
|
||||
CAP_SYS_BOOT = 0x16
|
||||
CAP_SYS_CHROOT = 0x12
|
||||
CAP_SYS_MODULE = 0x10
|
||||
CAP_SYS_NICE = 0x17
|
||||
CAP_SYS_PACCT = 0x14
|
||||
CAP_SYS_PTRACE = 0x13
|
||||
CAP_SYS_RAWIO = 0x11
|
||||
CAP_SYS_RESOURCE = 0x18
|
||||
CAP_SYS_TIME = 0x19
|
||||
CAP_SYS_TTY_CONFIG = 0x1a
|
||||
CAP_WAKE_ALARM = 0x23
|
||||
CBAUD = 0x100f
|
||||
CBAUDEX = 0x1000
|
||||
CFLUSH = 0xf
|
||||
|
@ -302,6 +423,7 @@ const (
|
|||
CLONE_NEWUTS = 0x4000000
|
||||
CLONE_PARENT = 0x8000
|
||||
CLONE_PARENT_SETTID = 0x100000
|
||||
CLONE_PIDFD = 0x1000
|
||||
CLONE_PTRACE = 0x2000
|
||||
CLONE_SETTLS = 0x80000
|
||||
CLONE_SIGHAND = 0x800
|
||||
|
@ -418,6 +540,7 @@ const (
|
|||
ETH_P_DNA_RC = 0x6002
|
||||
ETH_P_DNA_RT = 0x6003
|
||||
ETH_P_DSA = 0x1b
|
||||
ETH_P_DSA_8021Q = 0xdadb
|
||||
ETH_P_ECONET = 0x18
|
||||
ETH_P_EDSA = 0xdada
|
||||
ETH_P_ERSPAN = 0x88be
|
||||
|
@ -501,6 +624,7 @@ const (
|
|||
FAN_ALL_MARK_FLAGS = 0xff
|
||||
FAN_ALL_OUTGOING_EVENTS = 0x3403b
|
||||
FAN_ALL_PERM_EVENTS = 0x30000
|
||||
FAN_ATTRIB = 0x4
|
||||
FAN_AUDIT = 0x10
|
||||
FAN_CLASS_CONTENT = 0x4
|
||||
FAN_CLASS_NOTIF = 0x0
|
||||
|
@ -509,8 +633,12 @@ const (
|
|||
FAN_CLOSE = 0x18
|
||||
FAN_CLOSE_NOWRITE = 0x10
|
||||
FAN_CLOSE_WRITE = 0x8
|
||||
FAN_CREATE = 0x100
|
||||
FAN_DELETE = 0x200
|
||||
FAN_DELETE_SELF = 0x400
|
||||
FAN_DENY = 0x2
|
||||
FAN_ENABLE_AUDIT = 0x40
|
||||
FAN_EVENT_INFO_TYPE_FID = 0x1
|
||||
FAN_EVENT_METADATA_LEN = 0x18
|
||||
FAN_EVENT_ON_CHILD = 0x8000000
|
||||
FAN_MARK_ADD = 0x1
|
||||
|
@ -524,6 +652,10 @@ const (
|
|||
FAN_MARK_ONLYDIR = 0x8
|
||||
FAN_MARK_REMOVE = 0x2
|
||||
FAN_MODIFY = 0x2
|
||||
FAN_MOVE = 0xc0
|
||||
FAN_MOVED_FROM = 0x40
|
||||
FAN_MOVED_TO = 0x80
|
||||
FAN_MOVE_SELF = 0x800
|
||||
FAN_NOFD = -0x1
|
||||
FAN_NONBLOCK = 0x2
|
||||
FAN_ONDIR = 0x40000000
|
||||
|
@ -532,6 +664,7 @@ const (
|
|||
FAN_OPEN_EXEC_PERM = 0x40000
|
||||
FAN_OPEN_PERM = 0x10000
|
||||
FAN_Q_OVERFLOW = 0x4000
|
||||
FAN_REPORT_FID = 0x200
|
||||
FAN_REPORT_TID = 0x100
|
||||
FAN_UNLIMITED_MARKS = 0x20
|
||||
FAN_UNLIMITED_QUEUE = 0x10
|
||||
|
@ -1015,6 +1148,20 @@ const (
|
|||
LOCK_NB = 0x4
|
||||
LOCK_SH = 0x1
|
||||
LOCK_UN = 0x8
|
||||
LOOP_CLR_FD = 0x4c01
|
||||
LOOP_CTL_ADD = 0x4c80
|
||||
LOOP_CTL_GET_FREE = 0x4c82
|
||||
LOOP_CTL_REMOVE = 0x4c81
|
||||
LOOP_GET_STATUS = 0x4c03
|
||||
LOOP_GET_STATUS64 = 0x4c05
|
||||
LOOP_SET_BLOCK_SIZE = 0x4c09
|
||||
LOOP_SET_CAPACITY = 0x4c07
|
||||
LOOP_SET_DIRECT_IO = 0x4c08
|
||||
LOOP_SET_FD = 0x4c00
|
||||
LOOP_SET_STATUS = 0x4c02
|
||||
LOOP_SET_STATUS64 = 0x4c04
|
||||
LO_KEY_SIZE = 0x20
|
||||
LO_NAME_SIZE = 0x40
|
||||
MADV_DODUMP = 0x11
|
||||
MADV_DOFORK = 0xb
|
||||
MADV_DONTDUMP = 0x10
|
||||
|
@ -1054,6 +1201,15 @@ const (
|
|||
MAP_SHARED_VALIDATE = 0x3
|
||||
MAP_STACK = 0x40000
|
||||
MAP_TYPE = 0xf
|
||||
MCAST_BLOCK_SOURCE = 0x2b
|
||||
MCAST_EXCLUDE = 0x0
|
||||
MCAST_INCLUDE = 0x1
|
||||
MCAST_JOIN_GROUP = 0x2a
|
||||
MCAST_JOIN_SOURCE_GROUP = 0x2e
|
||||
MCAST_LEAVE_GROUP = 0x2d
|
||||
MCAST_LEAVE_SOURCE_GROUP = 0x2f
|
||||
MCAST_MSFILTER = 0x30
|
||||
MCAST_UNBLOCK_SOURCE = 0x2c
|
||||
MCL_CURRENT = 0x1
|
||||
MCL_FUTURE = 0x2
|
||||
MCL_ONFAULT = 0x4
|
||||
|
@ -1489,6 +1645,7 @@ const (
|
|||
PR_SET_TSC = 0x1a
|
||||
PR_SET_UNALIGN = 0x6
|
||||
PR_SPEC_DISABLE = 0x4
|
||||
PR_SPEC_DISABLE_NOEXEC = 0x10
|
||||
PR_SPEC_ENABLE = 0x2
|
||||
PR_SPEC_FORCE_DISABLE = 0x8
|
||||
PR_SPEC_INDIRECT_BRANCH = 0x1
|
||||
|
@ -1868,6 +2025,10 @@ const (
|
|||
SIOCGSKNS = 0x894c
|
||||
SIOCGSTAMP = 0x8906
|
||||
SIOCGSTAMPNS = 0x8907
|
||||
SIOCGSTAMPNS_NEW = 0x40108907
|
||||
SIOCGSTAMPNS_OLD = 0x8907
|
||||
SIOCGSTAMP_NEW = 0x40108906
|
||||
SIOCGSTAMP_OLD = 0x8906
|
||||
SIOCINQ = 0x467f
|
||||
SIOCOUTQ = 0x7472
|
||||
SIOCOUTQNSD = 0x894b
|
||||
|
@ -1961,6 +2122,7 @@ const (
|
|||
SO_ATTACH_REUSEPORT_CBPF = 0x33
|
||||
SO_ATTACH_REUSEPORT_EBPF = 0x34
|
||||
SO_BINDTODEVICE = 0x19
|
||||
SO_BINDTOIFINDEX = 0x3e
|
||||
SO_BPF_EXTENSIONS = 0x30
|
||||
SO_BROADCAST = 0x20
|
||||
SO_BSDCOMPAT = 0xe
|
||||
|
@ -2009,6 +2171,8 @@ const (
|
|||
SO_RCVBUFFORCE = 0x21
|
||||
SO_RCVLOWAT = 0x1004
|
||||
SO_RCVTIMEO = 0x1006
|
||||
SO_RCVTIMEO_NEW = 0x42
|
||||
SO_RCVTIMEO_OLD = 0x1006
|
||||
SO_REUSEADDR = 0x4
|
||||
SO_REUSEPORT = 0x200
|
||||
SO_RXQ_OVFL = 0x28
|
||||
|
@ -2020,10 +2184,18 @@ const (
|
|||
SO_SNDBUFFORCE = 0x1f
|
||||
SO_SNDLOWAT = 0x1003
|
||||
SO_SNDTIMEO = 0x1005
|
||||
SO_SNDTIMEO_NEW = 0x43
|
||||
SO_SNDTIMEO_OLD = 0x1005
|
||||
SO_STYLE = 0x1008
|
||||
SO_TIMESTAMP = 0x1d
|
||||
SO_TIMESTAMPING = 0x25
|
||||
SO_TIMESTAMPING_NEW = 0x41
|
||||
SO_TIMESTAMPING_OLD = 0x25
|
||||
SO_TIMESTAMPNS = 0x23
|
||||
SO_TIMESTAMPNS_NEW = 0x40
|
||||
SO_TIMESTAMPNS_OLD = 0x23
|
||||
SO_TIMESTAMP_NEW = 0x3f
|
||||
SO_TIMESTAMP_OLD = 0x1d
|
||||
SO_TXTIME = 0x3d
|
||||
SO_TYPE = 0x1008
|
||||
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
|
||||
|
@ -2065,6 +2237,7 @@ const (
|
|||
SYNC_FILE_RANGE_WAIT_AFTER = 0x4
|
||||
SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
|
||||
SYNC_FILE_RANGE_WRITE = 0x2
|
||||
SYNC_FILE_RANGE_WRITE_AND_WAIT = 0x7
|
||||
SYSFS_MAGIC = 0x62656572
|
||||
S_BLKSIZE = 0x200
|
||||
S_IEXEC = 0x40
|
||||
|
@ -2115,6 +2288,8 @@ const (
|
|||
TCOFLUSH = 0x1
|
||||
TCOOFF = 0x0
|
||||
TCOON = 0x1
|
||||
TCP_BPF_IW = 0x3e9
|
||||
TCP_BPF_SNDCWND_CLAMP = 0x3ea
|
||||
TCP_CC_INFO = 0x1a
|
||||
TCP_CM_INQ = 0x24
|
||||
TCP_CONGESTION = 0xd
|
||||
|
@ -2283,6 +2458,7 @@ const (
|
|||
TS_COMM_LEN = 0x20
|
||||
TUNATTACHFILTER = 0x801054d5
|
||||
TUNDETACHFILTER = 0x801054d6
|
||||
TUNGETDEVNETNS = 0x200054e3
|
||||
TUNGETFEATURES = 0x400454cf
|
||||
TUNGETFILTER = 0x401054db
|
||||
TUNGETIFF = 0x400454d2
|
||||
|
@ -2318,8 +2494,10 @@ const (
|
|||
UBI_IOCMKVOL = 0x80986f00
|
||||
UBI_IOCRMVOL = 0x80046f01
|
||||
UBI_IOCRNVOL = 0x91106f03
|
||||
UBI_IOCRPEB = 0x80046f04
|
||||
UBI_IOCRSVOL = 0x800c6f02
|
||||
UBI_IOCSETVOLPROP = 0x80104f06
|
||||
UBI_IOCSPEB = 0x80046f05
|
||||
UBI_IOCVOLCRBLK = 0x80804f07
|
||||
UBI_IOCVOLRMBLK = 0x20004f08
|
||||
UBI_IOCVOLUP = 0x80084f00
|
||||
|
@ -2468,6 +2646,7 @@ const (
|
|||
XDP_FLAGS_SKB_MODE = 0x2
|
||||
XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
|
||||
XDP_MMAP_OFFSETS = 0x1
|
||||
XDP_PACKET_HEADROOM = 0x100
|
||||
XDP_PGOFF_RX_RING = 0x0
|
||||
XDP_PGOFF_TX_RING = 0x80000000
|
||||
XDP_RX_RING = 0x2
|
||||
|
|
|
@ -196,11 +196,70 @@ const (
|
|||
BPF_A = 0x10
|
||||
BPF_ABS = 0x20
|
||||
BPF_ADD = 0x0
|
||||
BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff
|
||||
BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38
|
||||
BPF_ALU = 0x4
|
||||
BPF_ALU64 = 0x7
|
||||
BPF_AND = 0x50
|
||||
BPF_ANY = 0x0
|
||||
BPF_ARSH = 0xc0
|
||||
BPF_B = 0x10
|
||||
BPF_BUILD_ID_SIZE = 0x14
|
||||
BPF_CALL = 0x80
|
||||
BPF_DEVCG_ACC_MKNOD = 0x1
|
||||
BPF_DEVCG_ACC_READ = 0x2
|
||||
BPF_DEVCG_ACC_WRITE = 0x4
|
||||
BPF_DEVCG_DEV_BLOCK = 0x1
|
||||
BPF_DEVCG_DEV_CHAR = 0x2
|
||||
BPF_DIV = 0x30
|
||||
BPF_DW = 0x18
|
||||
BPF_END = 0xd0
|
||||
BPF_EXIST = 0x2
|
||||
BPF_EXIT = 0x90
|
||||
BPF_FROM_BE = 0x8
|
||||
BPF_FROM_LE = 0x0
|
||||
BPF_FS_MAGIC = 0xcafe4a11
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10
|
||||
BPF_F_ADJ_ROOM_FIXED_GSO = 0x1
|
||||
BPF_F_ALLOW_MULTI = 0x2
|
||||
BPF_F_ALLOW_OVERRIDE = 0x1
|
||||
BPF_F_ANY_ALIGNMENT = 0x2
|
||||
BPF_F_CTXLEN_MASK = 0xfffff00000000
|
||||
BPF_F_CURRENT_CPU = 0xffffffff
|
||||
BPF_F_CURRENT_NETNS = -0x1
|
||||
BPF_F_DONT_FRAGMENT = 0x4
|
||||
BPF_F_FAST_STACK_CMP = 0x200
|
||||
BPF_F_HDR_FIELD_MASK = 0xf
|
||||
BPF_F_INDEX_MASK = 0xffffffff
|
||||
BPF_F_INGRESS = 0x1
|
||||
BPF_F_INVALIDATE_HASH = 0x2
|
||||
BPF_F_LOCK = 0x4
|
||||
BPF_F_MARK_ENFORCE = 0x40
|
||||
BPF_F_MARK_MANGLED_0 = 0x20
|
||||
BPF_F_NO_COMMON_LRU = 0x2
|
||||
BPF_F_NO_PREALLOC = 0x1
|
||||
BPF_F_NUMA_NODE = 0x4
|
||||
BPF_F_PSEUDO_HDR = 0x10
|
||||
BPF_F_QUERY_EFFECTIVE = 0x1
|
||||
BPF_F_RDONLY = 0x8
|
||||
BPF_F_RDONLY_PROG = 0x80
|
||||
BPF_F_RECOMPUTE_CSUM = 0x1
|
||||
BPF_F_REUSE_STACKID = 0x400
|
||||
BPF_F_SEQ_NUMBER = 0x8
|
||||
BPF_F_SKIP_FIELD_MASK = 0xff
|
||||
BPF_F_STACK_BUILD_ID = 0x20
|
||||
BPF_F_STRICT_ALIGNMENT = 0x1
|
||||
BPF_F_SYSCTL_BASE_NAME = 0x1
|
||||
BPF_F_TUNINFO_IPV6 = 0x1
|
||||
BPF_F_USER_BUILD_ID = 0x800
|
||||
BPF_F_USER_STACK = 0x100
|
||||
BPF_F_WRONLY = 0x10
|
||||
BPF_F_WRONLY_PROG = 0x100
|
||||
BPF_F_ZERO_CSUM_TX = 0x2
|
||||
BPF_F_ZERO_SEED = 0x40
|
||||
BPF_H = 0x8
|
||||
BPF_IMM = 0x0
|
||||
BPF_IND = 0x40
|
||||
|
@ -208,8 +267,16 @@ const (
|
|||
BPF_JEQ = 0x10
|
||||
BPF_JGE = 0x30
|
||||
BPF_JGT = 0x20
|
||||
BPF_JLE = 0xb0
|
||||
BPF_JLT = 0xa0
|
||||
BPF_JMP = 0x5
|
||||
BPF_JMP32 = 0x6
|
||||
BPF_JNE = 0x50
|
||||
BPF_JSET = 0x40
|
||||
BPF_JSGE = 0x70
|
||||
BPF_JSGT = 0x60
|
||||
BPF_JSLE = 0xd0
|
||||
BPF_JSLT = 0xc0
|
||||
BPF_K = 0x0
|
||||
BPF_LD = 0x0
|
||||
BPF_LDX = 0x1
|
||||
|
@ -223,20 +290,35 @@ const (
|
|||
BPF_MINOR_VERSION = 0x1
|
||||
BPF_MISC = 0x7
|
||||
BPF_MOD = 0x90
|
||||
BPF_MOV = 0xb0
|
||||
BPF_MSH = 0xa0
|
||||
BPF_MUL = 0x20
|
||||
BPF_NEG = 0x80
|
||||
BPF_NET_OFF = -0x100000
|
||||
BPF_NOEXIST = 0x1
|
||||
BPF_OBJ_NAME_LEN = 0x10
|
||||
BPF_OR = 0x40
|
||||
BPF_PSEUDO_CALL = 0x1
|
||||
BPF_PSEUDO_MAP_FD = 0x1
|
||||
BPF_PSEUDO_MAP_VALUE = 0x2
|
||||
BPF_RET = 0x6
|
||||
BPF_RSH = 0x70
|
||||
BPF_SK_STORAGE_GET_F_CREATE = 0x1
|
||||
BPF_SOCK_OPS_ALL_CB_FLAGS = 0x7
|
||||
BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2
|
||||
BPF_SOCK_OPS_RTO_CB_FLAG = 0x1
|
||||
BPF_SOCK_OPS_STATE_CB_FLAG = 0x4
|
||||
BPF_ST = 0x2
|
||||
BPF_STX = 0x3
|
||||
BPF_SUB = 0x10
|
||||
BPF_TAG_SIZE = 0x8
|
||||
BPF_TAX = 0x0
|
||||
BPF_TO_BE = 0x8
|
||||
BPF_TO_LE = 0x0
|
||||
BPF_TXA = 0x80
|
||||
BPF_W = 0x0
|
||||
BPF_X = 0x8
|
||||
BPF_XADD = 0xc0
|
||||
BPF_XOR = 0xa0
|
||||
BRKINT = 0x2
|
||||
BS0 = 0x0
|
||||
|
@ -264,6 +346,45 @@ const (
|
|||
CAN_SFF_MASK = 0x7ff
|
||||
CAN_TP16 = 0x3
|
||||
CAN_TP20 = 0x4
|
||||
CAP_AUDIT_CONTROL = 0x1e
|
||||
CAP_AUDIT_READ = 0x25
|
||||
CAP_AUDIT_WRITE = 0x1d
|
||||
CAP_BLOCK_SUSPEND = 0x24
|
||||
CAP_CHOWN = 0x0
|
||||
CAP_DAC_OVERRIDE = 0x1
|
||||
CAP_DAC_READ_SEARCH = 0x2
|
||||
CAP_FOWNER = 0x3
|
||||
CAP_FSETID = 0x4
|
||||
CAP_IPC_LOCK = 0xe
|
||||
CAP_IPC_OWNER = 0xf
|
||||
CAP_KILL = 0x5
|
||||
CAP_LAST_CAP = 0x25
|
||||
CAP_LEASE = 0x1c
|
||||
CAP_LINUX_IMMUTABLE = 0x9
|
||||
CAP_MAC_ADMIN = 0x21
|
||||
CAP_MAC_OVERRIDE = 0x20
|
||||
CAP_MKNOD = 0x1b
|
||||
CAP_NET_ADMIN = 0xc
|
||||
CAP_NET_BIND_SERVICE = 0xa
|
||||
CAP_NET_BROADCAST = 0xb
|
||||
CAP_NET_RAW = 0xd
|
||||
CAP_SETFCAP = 0x1f
|
||||
CAP_SETGID = 0x6
|
||||
CAP_SETPCAP = 0x8
|
||||
CAP_SETUID = 0x7
|
||||
CAP_SYSLOG = 0x22
|
||||
CAP_SYS_ADMIN = 0x15
|
||||
CAP_SYS_BOOT = 0x16
|
||||
CAP_SYS_CHROOT = 0x12
|
||||
CAP_SYS_MODULE = 0x10
|
||||
CAP_SYS_NICE = 0x17
|
||||
CAP_SYS_PACCT = 0x14
|
||||
CAP_SYS_PTRACE = 0x13
|
||||
CAP_SYS_RAWIO = 0x11
|
||||
CAP_SYS_RESOURCE = 0x18
|
||||
CAP_SYS_TIME = 0x19
|
||||
CAP_SYS_TTY_CONFIG = 0x1a
|
||||
CAP_WAKE_ALARM = 0x23
|
||||
CBAUD = 0x100f
|
||||
CBAUDEX = 0x1000
|
||||
CFLUSH = 0xf
|
||||
|
@ -302,6 +423,7 @@ const (
|
|||
CLONE_NEWUTS = 0x4000000
|
||||
CLONE_PARENT = 0x8000
|
||||
CLONE_PARENT_SETTID = 0x100000
|
||||
CLONE_PIDFD = 0x1000
|
||||
CLONE_PTRACE = 0x2000
|
||||
CLONE_SETTLS = 0x80000
|
||||
CLONE_SIGHAND = 0x800
|
||||
|
@ -418,6 +540,7 @@ const (
|
|||
ETH_P_DNA_RC = 0x6002
|
||||
ETH_P_DNA_RT = 0x6003
|
||||
ETH_P_DSA = 0x1b
|
||||
ETH_P_DSA_8021Q = 0xdadb
|
||||
ETH_P_ECONET = 0x18
|
||||
ETH_P_EDSA = 0xdada
|
||||
ETH_P_ERSPAN = 0x88be
|
||||
|
@ -501,6 +624,7 @@ const (
|
|||
FAN_ALL_MARK_FLAGS = 0xff
|
||||
FAN_ALL_OUTGOING_EVENTS = 0x3403b
|
||||
FAN_ALL_PERM_EVENTS = 0x30000
|
||||
FAN_ATTRIB = 0x4
|
||||
FAN_AUDIT = 0x10
|
||||
FAN_CLASS_CONTENT = 0x4
|
||||
FAN_CLASS_NOTIF = 0x0
|
||||
|
@ -509,8 +633,12 @@ const (
|
|||
FAN_CLOSE = 0x18
|
||||
FAN_CLOSE_NOWRITE = 0x10
|
||||
FAN_CLOSE_WRITE = 0x8
|
||||
FAN_CREATE = 0x100
|
||||
FAN_DELETE = 0x200
|
||||
FAN_DELETE_SELF = 0x400
|
||||
FAN_DENY = 0x2
|
||||
FAN_ENABLE_AUDIT = 0x40
|
||||
FAN_EVENT_INFO_TYPE_FID = 0x1
|
||||
FAN_EVENT_METADATA_LEN = 0x18
|
||||
FAN_EVENT_ON_CHILD = 0x8000000
|
||||
FAN_MARK_ADD = 0x1
|
||||
|
@ -524,6 +652,10 @@ const (
|
|||
FAN_MARK_ONLYDIR = 0x8
|
||||
FAN_MARK_REMOVE = 0x2
|
||||
FAN_MODIFY = 0x2
|
||||
FAN_MOVE = 0xc0
|
||||
FAN_MOVED_FROM = 0x40
|
||||
FAN_MOVED_TO = 0x80
|
||||
FAN_MOVE_SELF = 0x800
|
||||
FAN_NOFD = -0x1
|
||||
FAN_NONBLOCK = 0x2
|
||||
FAN_ONDIR = 0x40000000
|
||||
|
@ -532,6 +664,7 @@ const (
|
|||
FAN_OPEN_EXEC_PERM = 0x40000
|
||||
FAN_OPEN_PERM = 0x10000
|
||||
FAN_Q_OVERFLOW = 0x4000
|
||||
FAN_REPORT_FID = 0x200
|
||||
FAN_REPORT_TID = 0x100
|
||||
FAN_UNLIMITED_MARKS = 0x20
|
||||
FAN_UNLIMITED_QUEUE = 0x10
|
||||
|
@ -1015,6 +1148,20 @@ const (
|
|||
LOCK_NB = 0x4
|
||||
LOCK_SH = 0x1
|
||||
LOCK_UN = 0x8
|
||||
LOOP_CLR_FD = 0x4c01
|
||||
LOOP_CTL_ADD = 0x4c80
|
||||
LOOP_CTL_GET_FREE = 0x4c82
|
||||
LOOP_CTL_REMOVE = 0x4c81
|
||||
LOOP_GET_STATUS = 0x4c03
|
||||
LOOP_GET_STATUS64 = 0x4c05
|
||||
LOOP_SET_BLOCK_SIZE = 0x4c09
|
||||
LOOP_SET_CAPACITY = 0x4c07
|
||||
LOOP_SET_DIRECT_IO = 0x4c08
|
||||
LOOP_SET_FD = 0x4c00
|
||||
LOOP_SET_STATUS = 0x4c02
|
||||
LOOP_SET_STATUS64 = 0x4c04
|
||||
LO_KEY_SIZE = 0x20
|
||||
LO_NAME_SIZE = 0x40
|
||||
MADV_DODUMP = 0x11
|
||||
MADV_DOFORK = 0xb
|
||||
MADV_DONTDUMP = 0x10
|
||||
|
@ -1054,6 +1201,15 @@ const (
|
|||
MAP_SHARED_VALIDATE = 0x3
|
||||
MAP_STACK = 0x40000
|
||||
MAP_TYPE = 0xf
|
||||
MCAST_BLOCK_SOURCE = 0x2b
|
||||
MCAST_EXCLUDE = 0x0
|
||||
MCAST_INCLUDE = 0x1
|
||||
MCAST_JOIN_GROUP = 0x2a
|
||||
MCAST_JOIN_SOURCE_GROUP = 0x2e
|
||||
MCAST_LEAVE_GROUP = 0x2d
|
||||
MCAST_LEAVE_SOURCE_GROUP = 0x2f
|
||||
MCAST_MSFILTER = 0x30
|
||||
MCAST_UNBLOCK_SOURCE = 0x2c
|
||||
MCL_CURRENT = 0x1
|
||||
MCL_FUTURE = 0x2
|
||||
MCL_ONFAULT = 0x4
|
||||
|
@ -1489,6 +1645,7 @@ const (
|
|||
PR_SET_TSC = 0x1a
|
||||
PR_SET_UNALIGN = 0x6
|
||||
PR_SPEC_DISABLE = 0x4
|
||||
PR_SPEC_DISABLE_NOEXEC = 0x10
|
||||
PR_SPEC_ENABLE = 0x2
|
||||
PR_SPEC_FORCE_DISABLE = 0x8
|
||||
PR_SPEC_INDIRECT_BRANCH = 0x1
|
||||
|
@ -1868,6 +2025,10 @@ const (
|
|||
SIOCGSKNS = 0x894c
|
||||
SIOCGSTAMP = 0x8906
|
||||
SIOCGSTAMPNS = 0x8907
|
||||
SIOCGSTAMPNS_NEW = 0x40108907
|
||||
SIOCGSTAMPNS_OLD = 0x8907
|
||||
SIOCGSTAMP_NEW = 0x40108906
|
||||
SIOCGSTAMP_OLD = 0x8906
|
||||
SIOCINQ = 0x467f
|
||||
SIOCOUTQ = 0x7472
|
||||
SIOCOUTQNSD = 0x894b
|
||||
|
@ -1961,6 +2122,7 @@ const (
|
|||
SO_ATTACH_REUSEPORT_CBPF = 0x33
|
||||
SO_ATTACH_REUSEPORT_EBPF = 0x34
|
||||
SO_BINDTODEVICE = 0x19
|
||||
SO_BINDTOIFINDEX = 0x3e
|
||||
SO_BPF_EXTENSIONS = 0x30
|
||||
SO_BROADCAST = 0x20
|
||||
SO_BSDCOMPAT = 0xe
|
||||
|
@ -2009,6 +2171,8 @@ const (
|
|||
SO_RCVBUFFORCE = 0x21
|
||||
SO_RCVLOWAT = 0x1004
|
||||
SO_RCVTIMEO = 0x1006
|
||||
SO_RCVTIMEO_NEW = 0x42
|
||||
SO_RCVTIMEO_OLD = 0x1006
|
||||
SO_REUSEADDR = 0x4
|
||||
SO_REUSEPORT = 0x200
|
||||
SO_RXQ_OVFL = 0x28
|
||||
|
@ -2020,10 +2184,18 @@ const (
|
|||
SO_SNDBUFFORCE = 0x1f
|
||||
SO_SNDLOWAT = 0x1003
|
||||
SO_SNDTIMEO = 0x1005
|
||||
SO_SNDTIMEO_NEW = 0x43
|
||||
SO_SNDTIMEO_OLD = 0x1005
|
||||
SO_STYLE = 0x1008
|
||||
SO_TIMESTAMP = 0x1d
|
||||
SO_TIMESTAMPING = 0x25
|
||||
SO_TIMESTAMPING_NEW = 0x41
|
||||
SO_TIMESTAMPING_OLD = 0x25
|
||||
SO_TIMESTAMPNS = 0x23
|
||||
SO_TIMESTAMPNS_NEW = 0x40
|
||||
SO_TIMESTAMPNS_OLD = 0x23
|
||||
SO_TIMESTAMP_NEW = 0x3f
|
||||
SO_TIMESTAMP_OLD = 0x1d
|
||||
SO_TXTIME = 0x3d
|
||||
SO_TYPE = 0x1008
|
||||
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
|
||||
|
@ -2065,6 +2237,7 @@ const (
|
|||
SYNC_FILE_RANGE_WAIT_AFTER = 0x4
|
||||
SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
|
||||
SYNC_FILE_RANGE_WRITE = 0x2
|
||||
SYNC_FILE_RANGE_WRITE_AND_WAIT = 0x7
|
||||
SYSFS_MAGIC = 0x62656572
|
||||
S_BLKSIZE = 0x200
|
||||
S_IEXEC = 0x40
|
||||
|
@ -2115,6 +2288,8 @@ const (
|
|||
TCOFLUSH = 0x1
|
||||
TCOOFF = 0x0
|
||||
TCOON = 0x1
|
||||
TCP_BPF_IW = 0x3e9
|
||||
TCP_BPF_SNDCWND_CLAMP = 0x3ea
|
||||
TCP_CC_INFO = 0x1a
|
||||
TCP_CM_INQ = 0x24
|
||||
TCP_CONGESTION = 0xd
|
||||
|
@ -2283,6 +2458,7 @@ const (
|
|||
TS_COMM_LEN = 0x20
|
||||
TUNATTACHFILTER = 0x800854d5
|
||||
TUNDETACHFILTER = 0x800854d6
|
||||
TUNGETDEVNETNS = 0x200054e3
|
||||
TUNGETFEATURES = 0x400454cf
|
||||
TUNGETFILTER = 0x400854db
|
||||
TUNGETIFF = 0x400454d2
|
||||
|
@ -2318,8 +2494,10 @@ const (
|
|||
UBI_IOCMKVOL = 0x80986f00
|
||||
UBI_IOCRMVOL = 0x80046f01
|
||||
UBI_IOCRNVOL = 0x91106f03
|
||||
UBI_IOCRPEB = 0x80046f04
|
||||
UBI_IOCRSVOL = 0x800c6f02
|
||||
UBI_IOCSETVOLPROP = 0x80104f06
|
||||
UBI_IOCSPEB = 0x80046f05
|
||||
UBI_IOCVOLCRBLK = 0x80804f07
|
||||
UBI_IOCVOLRMBLK = 0x20004f08
|
||||
UBI_IOCVOLUP = 0x80084f00
|
||||
|
@ -2468,6 +2646,7 @@ const (
|
|||
XDP_FLAGS_SKB_MODE = 0x2
|
||||
XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
|
||||
XDP_MMAP_OFFSETS = 0x1
|
||||
XDP_PACKET_HEADROOM = 0x100
|
||||
XDP_PGOFF_RX_RING = 0x0
|
||||
XDP_PGOFF_TX_RING = 0x80000000
|
||||
XDP_RX_RING = 0x2
|
||||
|
|
|
@ -196,11 +196,70 @@ const (
|
|||
BPF_A = 0x10
|
||||
BPF_ABS = 0x20
|
||||
BPF_ADD = 0x0
|
||||
BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff
|
||||
BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38
|
||||
BPF_ALU = 0x4
|
||||
BPF_ALU64 = 0x7
|
||||
BPF_AND = 0x50
|
||||
BPF_ANY = 0x0
|
||||
BPF_ARSH = 0xc0
|
||||
BPF_B = 0x10
|
||||
BPF_BUILD_ID_SIZE = 0x14
|
||||
BPF_CALL = 0x80
|
||||
BPF_DEVCG_ACC_MKNOD = 0x1
|
||||
BPF_DEVCG_ACC_READ = 0x2
|
||||
BPF_DEVCG_ACC_WRITE = 0x4
|
||||
BPF_DEVCG_DEV_BLOCK = 0x1
|
||||
BPF_DEVCG_DEV_CHAR = 0x2
|
||||
BPF_DIV = 0x30
|
||||
BPF_DW = 0x18
|
||||
BPF_END = 0xd0
|
||||
BPF_EXIST = 0x2
|
||||
BPF_EXIT = 0x90
|
||||
BPF_FROM_BE = 0x8
|
||||
BPF_FROM_LE = 0x0
|
||||
BPF_FS_MAGIC = 0xcafe4a11
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10
|
||||
BPF_F_ADJ_ROOM_FIXED_GSO = 0x1
|
||||
BPF_F_ALLOW_MULTI = 0x2
|
||||
BPF_F_ALLOW_OVERRIDE = 0x1
|
||||
BPF_F_ANY_ALIGNMENT = 0x2
|
||||
BPF_F_CTXLEN_MASK = 0xfffff00000000
|
||||
BPF_F_CURRENT_CPU = 0xffffffff
|
||||
BPF_F_CURRENT_NETNS = -0x1
|
||||
BPF_F_DONT_FRAGMENT = 0x4
|
||||
BPF_F_FAST_STACK_CMP = 0x200
|
||||
BPF_F_HDR_FIELD_MASK = 0xf
|
||||
BPF_F_INDEX_MASK = 0xffffffff
|
||||
BPF_F_INGRESS = 0x1
|
||||
BPF_F_INVALIDATE_HASH = 0x2
|
||||
BPF_F_LOCK = 0x4
|
||||
BPF_F_MARK_ENFORCE = 0x40
|
||||
BPF_F_MARK_MANGLED_0 = 0x20
|
||||
BPF_F_NO_COMMON_LRU = 0x2
|
||||
BPF_F_NO_PREALLOC = 0x1
|
||||
BPF_F_NUMA_NODE = 0x4
|
||||
BPF_F_PSEUDO_HDR = 0x10
|
||||
BPF_F_QUERY_EFFECTIVE = 0x1
|
||||
BPF_F_RDONLY = 0x8
|
||||
BPF_F_RDONLY_PROG = 0x80
|
||||
BPF_F_RECOMPUTE_CSUM = 0x1
|
||||
BPF_F_REUSE_STACKID = 0x400
|
||||
BPF_F_SEQ_NUMBER = 0x8
|
||||
BPF_F_SKIP_FIELD_MASK = 0xff
|
||||
BPF_F_STACK_BUILD_ID = 0x20
|
||||
BPF_F_STRICT_ALIGNMENT = 0x1
|
||||
BPF_F_SYSCTL_BASE_NAME = 0x1
|
||||
BPF_F_TUNINFO_IPV6 = 0x1
|
||||
BPF_F_USER_BUILD_ID = 0x800
|
||||
BPF_F_USER_STACK = 0x100
|
||||
BPF_F_WRONLY = 0x10
|
||||
BPF_F_WRONLY_PROG = 0x100
|
||||
BPF_F_ZERO_CSUM_TX = 0x2
|
||||
BPF_F_ZERO_SEED = 0x40
|
||||
BPF_H = 0x8
|
||||
BPF_IMM = 0x0
|
||||
BPF_IND = 0x40
|
||||
|
@ -208,8 +267,16 @@ const (
|
|||
BPF_JEQ = 0x10
|
||||
BPF_JGE = 0x30
|
||||
BPF_JGT = 0x20
|
||||
BPF_JLE = 0xb0
|
||||
BPF_JLT = 0xa0
|
||||
BPF_JMP = 0x5
|
||||
BPF_JMP32 = 0x6
|
||||
BPF_JNE = 0x50
|
||||
BPF_JSET = 0x40
|
||||
BPF_JSGE = 0x70
|
||||
BPF_JSGT = 0x60
|
||||
BPF_JSLE = 0xd0
|
||||
BPF_JSLT = 0xc0
|
||||
BPF_K = 0x0
|
||||
BPF_LD = 0x0
|
||||
BPF_LDX = 0x1
|
||||
|
@ -223,20 +290,35 @@ const (
|
|||
BPF_MINOR_VERSION = 0x1
|
||||
BPF_MISC = 0x7
|
||||
BPF_MOD = 0x90
|
||||
BPF_MOV = 0xb0
|
||||
BPF_MSH = 0xa0
|
||||
BPF_MUL = 0x20
|
||||
BPF_NEG = 0x80
|
||||
BPF_NET_OFF = -0x100000
|
||||
BPF_NOEXIST = 0x1
|
||||
BPF_OBJ_NAME_LEN = 0x10
|
||||
BPF_OR = 0x40
|
||||
BPF_PSEUDO_CALL = 0x1
|
||||
BPF_PSEUDO_MAP_FD = 0x1
|
||||
BPF_PSEUDO_MAP_VALUE = 0x2
|
||||
BPF_RET = 0x6
|
||||
BPF_RSH = 0x70
|
||||
BPF_SK_STORAGE_GET_F_CREATE = 0x1
|
||||
BPF_SOCK_OPS_ALL_CB_FLAGS = 0x7
|
||||
BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2
|
||||
BPF_SOCK_OPS_RTO_CB_FLAG = 0x1
|
||||
BPF_SOCK_OPS_STATE_CB_FLAG = 0x4
|
||||
BPF_ST = 0x2
|
||||
BPF_STX = 0x3
|
||||
BPF_SUB = 0x10
|
||||
BPF_TAG_SIZE = 0x8
|
||||
BPF_TAX = 0x0
|
||||
BPF_TO_BE = 0x8
|
||||
BPF_TO_LE = 0x0
|
||||
BPF_TXA = 0x80
|
||||
BPF_W = 0x0
|
||||
BPF_X = 0x8
|
||||
BPF_XADD = 0xc0
|
||||
BPF_XOR = 0xa0
|
||||
BRKINT = 0x2
|
||||
BS0 = 0x0
|
||||
|
@ -264,6 +346,45 @@ const (
|
|||
CAN_SFF_MASK = 0x7ff
|
||||
CAN_TP16 = 0x3
|
||||
CAN_TP20 = 0x4
|
||||
CAP_AUDIT_CONTROL = 0x1e
|
||||
CAP_AUDIT_READ = 0x25
|
||||
CAP_AUDIT_WRITE = 0x1d
|
||||
CAP_BLOCK_SUSPEND = 0x24
|
||||
CAP_CHOWN = 0x0
|
||||
CAP_DAC_OVERRIDE = 0x1
|
||||
CAP_DAC_READ_SEARCH = 0x2
|
||||
CAP_FOWNER = 0x3
|
||||
CAP_FSETID = 0x4
|
||||
CAP_IPC_LOCK = 0xe
|
||||
CAP_IPC_OWNER = 0xf
|
||||
CAP_KILL = 0x5
|
||||
CAP_LAST_CAP = 0x25
|
||||
CAP_LEASE = 0x1c
|
||||
CAP_LINUX_IMMUTABLE = 0x9
|
||||
CAP_MAC_ADMIN = 0x21
|
||||
CAP_MAC_OVERRIDE = 0x20
|
||||
CAP_MKNOD = 0x1b
|
||||
CAP_NET_ADMIN = 0xc
|
||||
CAP_NET_BIND_SERVICE = 0xa
|
||||
CAP_NET_BROADCAST = 0xb
|
||||
CAP_NET_RAW = 0xd
|
||||
CAP_SETFCAP = 0x1f
|
||||
CAP_SETGID = 0x6
|
||||
CAP_SETPCAP = 0x8
|
||||
CAP_SETUID = 0x7
|
||||
CAP_SYSLOG = 0x22
|
||||
CAP_SYS_ADMIN = 0x15
|
||||
CAP_SYS_BOOT = 0x16
|
||||
CAP_SYS_CHROOT = 0x12
|
||||
CAP_SYS_MODULE = 0x10
|
||||
CAP_SYS_NICE = 0x17
|
||||
CAP_SYS_PACCT = 0x14
|
||||
CAP_SYS_PTRACE = 0x13
|
||||
CAP_SYS_RAWIO = 0x11
|
||||
CAP_SYS_RESOURCE = 0x18
|
||||
CAP_SYS_TIME = 0x19
|
||||
CAP_SYS_TTY_CONFIG = 0x1a
|
||||
CAP_WAKE_ALARM = 0x23
|
||||
CBAUD = 0xff
|
||||
CBAUDEX = 0x0
|
||||
CFLUSH = 0xf
|
||||
|
@ -302,6 +423,7 @@ const (
|
|||
CLONE_NEWUTS = 0x4000000
|
||||
CLONE_PARENT = 0x8000
|
||||
CLONE_PARENT_SETTID = 0x100000
|
||||
CLONE_PIDFD = 0x1000
|
||||
CLONE_PTRACE = 0x2000
|
||||
CLONE_SETTLS = 0x80000
|
||||
CLONE_SIGHAND = 0x800
|
||||
|
@ -418,6 +540,7 @@ const (
|
|||
ETH_P_DNA_RC = 0x6002
|
||||
ETH_P_DNA_RT = 0x6003
|
||||
ETH_P_DSA = 0x1b
|
||||
ETH_P_DSA_8021Q = 0xdadb
|
||||
ETH_P_ECONET = 0x18
|
||||
ETH_P_EDSA = 0xdada
|
||||
ETH_P_ERSPAN = 0x88be
|
||||
|
@ -501,6 +624,7 @@ const (
|
|||
FAN_ALL_MARK_FLAGS = 0xff
|
||||
FAN_ALL_OUTGOING_EVENTS = 0x3403b
|
||||
FAN_ALL_PERM_EVENTS = 0x30000
|
||||
FAN_ATTRIB = 0x4
|
||||
FAN_AUDIT = 0x10
|
||||
FAN_CLASS_CONTENT = 0x4
|
||||
FAN_CLASS_NOTIF = 0x0
|
||||
|
@ -509,8 +633,12 @@ const (
|
|||
FAN_CLOSE = 0x18
|
||||
FAN_CLOSE_NOWRITE = 0x10
|
||||
FAN_CLOSE_WRITE = 0x8
|
||||
FAN_CREATE = 0x100
|
||||
FAN_DELETE = 0x200
|
||||
FAN_DELETE_SELF = 0x400
|
||||
FAN_DENY = 0x2
|
||||
FAN_ENABLE_AUDIT = 0x40
|
||||
FAN_EVENT_INFO_TYPE_FID = 0x1
|
||||
FAN_EVENT_METADATA_LEN = 0x18
|
||||
FAN_EVENT_ON_CHILD = 0x8000000
|
||||
FAN_MARK_ADD = 0x1
|
||||
|
@ -524,6 +652,10 @@ const (
|
|||
FAN_MARK_ONLYDIR = 0x8
|
||||
FAN_MARK_REMOVE = 0x2
|
||||
FAN_MODIFY = 0x2
|
||||
FAN_MOVE = 0xc0
|
||||
FAN_MOVED_FROM = 0x40
|
||||
FAN_MOVED_TO = 0x80
|
||||
FAN_MOVE_SELF = 0x800
|
||||
FAN_NOFD = -0x1
|
||||
FAN_NONBLOCK = 0x2
|
||||
FAN_ONDIR = 0x40000000
|
||||
|
@ -532,6 +664,7 @@ const (
|
|||
FAN_OPEN_EXEC_PERM = 0x40000
|
||||
FAN_OPEN_PERM = 0x10000
|
||||
FAN_Q_OVERFLOW = 0x4000
|
||||
FAN_REPORT_FID = 0x200
|
||||
FAN_REPORT_TID = 0x100
|
||||
FAN_UNLIMITED_MARKS = 0x20
|
||||
FAN_UNLIMITED_QUEUE = 0x10
|
||||
|
@ -1015,6 +1148,20 @@ const (
|
|||
LOCK_NB = 0x4
|
||||
LOCK_SH = 0x1
|
||||
LOCK_UN = 0x8
|
||||
LOOP_CLR_FD = 0x4c01
|
||||
LOOP_CTL_ADD = 0x4c80
|
||||
LOOP_CTL_GET_FREE = 0x4c82
|
||||
LOOP_CTL_REMOVE = 0x4c81
|
||||
LOOP_GET_STATUS = 0x4c03
|
||||
LOOP_GET_STATUS64 = 0x4c05
|
||||
LOOP_SET_BLOCK_SIZE = 0x4c09
|
||||
LOOP_SET_CAPACITY = 0x4c07
|
||||
LOOP_SET_DIRECT_IO = 0x4c08
|
||||
LOOP_SET_FD = 0x4c00
|
||||
LOOP_SET_STATUS = 0x4c02
|
||||
LOOP_SET_STATUS64 = 0x4c04
|
||||
LO_KEY_SIZE = 0x20
|
||||
LO_NAME_SIZE = 0x40
|
||||
MADV_DODUMP = 0x11
|
||||
MADV_DOFORK = 0xb
|
||||
MADV_DONTDUMP = 0x10
|
||||
|
@ -1053,6 +1200,15 @@ const (
|
|||
MAP_SHARED_VALIDATE = 0x3
|
||||
MAP_STACK = 0x20000
|
||||
MAP_TYPE = 0xf
|
||||
MCAST_BLOCK_SOURCE = 0x2b
|
||||
MCAST_EXCLUDE = 0x0
|
||||
MCAST_INCLUDE = 0x1
|
||||
MCAST_JOIN_GROUP = 0x2a
|
||||
MCAST_JOIN_SOURCE_GROUP = 0x2e
|
||||
MCAST_LEAVE_GROUP = 0x2d
|
||||
MCAST_LEAVE_SOURCE_GROUP = 0x2f
|
||||
MCAST_MSFILTER = 0x30
|
||||
MCAST_UNBLOCK_SOURCE = 0x2c
|
||||
MCL_CURRENT = 0x2000
|
||||
MCL_FUTURE = 0x4000
|
||||
MCL_ONFAULT = 0x8000
|
||||
|
@ -1491,6 +1647,7 @@ const (
|
|||
PR_SET_TSC = 0x1a
|
||||
PR_SET_UNALIGN = 0x6
|
||||
PR_SPEC_DISABLE = 0x4
|
||||
PR_SPEC_DISABLE_NOEXEC = 0x10
|
||||
PR_SPEC_ENABLE = 0x2
|
||||
PR_SPEC_FORCE_DISABLE = 0x8
|
||||
PR_SPEC_INDIRECT_BRANCH = 0x1
|
||||
|
@ -1926,6 +2083,10 @@ const (
|
|||
SIOCGSKNS = 0x894c
|
||||
SIOCGSTAMP = 0x8906
|
||||
SIOCGSTAMPNS = 0x8907
|
||||
SIOCGSTAMPNS_NEW = 0x40108907
|
||||
SIOCGSTAMPNS_OLD = 0x8907
|
||||
SIOCGSTAMP_NEW = 0x40108906
|
||||
SIOCGSTAMP_OLD = 0x8906
|
||||
SIOCINQ = 0x4004667f
|
||||
SIOCOUTQ = 0x40047473
|
||||
SIOCOUTQNSD = 0x894b
|
||||
|
@ -2019,6 +2180,7 @@ const (
|
|||
SO_ATTACH_REUSEPORT_CBPF = 0x33
|
||||
SO_ATTACH_REUSEPORT_EBPF = 0x34
|
||||
SO_BINDTODEVICE = 0x19
|
||||
SO_BINDTOIFINDEX = 0x3e
|
||||
SO_BPF_EXTENSIONS = 0x30
|
||||
SO_BROADCAST = 0x6
|
||||
SO_BSDCOMPAT = 0xe
|
||||
|
@ -2067,6 +2229,8 @@ const (
|
|||
SO_RCVBUFFORCE = 0x21
|
||||
SO_RCVLOWAT = 0x10
|
||||
SO_RCVTIMEO = 0x12
|
||||
SO_RCVTIMEO_NEW = 0x42
|
||||
SO_RCVTIMEO_OLD = 0x12
|
||||
SO_REUSEADDR = 0x2
|
||||
SO_REUSEPORT = 0xf
|
||||
SO_RXQ_OVFL = 0x28
|
||||
|
@ -2078,9 +2242,17 @@ const (
|
|||
SO_SNDBUFFORCE = 0x20
|
||||
SO_SNDLOWAT = 0x11
|
||||
SO_SNDTIMEO = 0x13
|
||||
SO_SNDTIMEO_NEW = 0x43
|
||||
SO_SNDTIMEO_OLD = 0x13
|
||||
SO_TIMESTAMP = 0x1d
|
||||
SO_TIMESTAMPING = 0x25
|
||||
SO_TIMESTAMPING_NEW = 0x41
|
||||
SO_TIMESTAMPING_OLD = 0x25
|
||||
SO_TIMESTAMPNS = 0x23
|
||||
SO_TIMESTAMPNS_NEW = 0x40
|
||||
SO_TIMESTAMPNS_OLD = 0x23
|
||||
SO_TIMESTAMP_NEW = 0x3f
|
||||
SO_TIMESTAMP_OLD = 0x1d
|
||||
SO_TXTIME = 0x3d
|
||||
SO_TYPE = 0x3
|
||||
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
|
||||
|
@ -2122,6 +2294,7 @@ const (
|
|||
SYNC_FILE_RANGE_WAIT_AFTER = 0x4
|
||||
SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
|
||||
SYNC_FILE_RANGE_WRITE = 0x2
|
||||
SYNC_FILE_RANGE_WRITE_AND_WAIT = 0x7
|
||||
SYSFS_MAGIC = 0x62656572
|
||||
S_BLKSIZE = 0x200
|
||||
S_IEXEC = 0x40
|
||||
|
@ -2171,6 +2344,8 @@ const (
|
|||
TCOFLUSH = 0x1
|
||||
TCOOFF = 0x0
|
||||
TCOON = 0x1
|
||||
TCP_BPF_IW = 0x3e9
|
||||
TCP_BPF_SNDCWND_CLAMP = 0x3ea
|
||||
TCP_CC_INFO = 0x1a
|
||||
TCP_CM_INQ = 0x24
|
||||
TCP_CONGESTION = 0xd
|
||||
|
@ -2343,6 +2518,7 @@ const (
|
|||
TS_COMM_LEN = 0x20
|
||||
TUNATTACHFILTER = 0x801054d5
|
||||
TUNDETACHFILTER = 0x801054d6
|
||||
TUNGETDEVNETNS = 0x200054e3
|
||||
TUNGETFEATURES = 0x400454cf
|
||||
TUNGETFILTER = 0x401054db
|
||||
TUNGETIFF = 0x400454d2
|
||||
|
@ -2378,8 +2554,10 @@ const (
|
|||
UBI_IOCMKVOL = 0x80986f00
|
||||
UBI_IOCRMVOL = 0x80046f01
|
||||
UBI_IOCRNVOL = 0x91106f03
|
||||
UBI_IOCRPEB = 0x80046f04
|
||||
UBI_IOCRSVOL = 0x800c6f02
|
||||
UBI_IOCSETVOLPROP = 0x80104f06
|
||||
UBI_IOCSPEB = 0x80046f05
|
||||
UBI_IOCVOLCRBLK = 0x80804f07
|
||||
UBI_IOCVOLRMBLK = 0x20004f08
|
||||
UBI_IOCVOLUP = 0x80084f00
|
||||
|
@ -2527,6 +2705,7 @@ const (
|
|||
XDP_FLAGS_SKB_MODE = 0x2
|
||||
XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
|
||||
XDP_MMAP_OFFSETS = 0x1
|
||||
XDP_PACKET_HEADROOM = 0x100
|
||||
XDP_PGOFF_RX_RING = 0x0
|
||||
XDP_PGOFF_TX_RING = 0x80000000
|
||||
XDP_RX_RING = 0x2
|
||||
|
|
|
@ -196,11 +196,70 @@ const (
|
|||
BPF_A = 0x10
|
||||
BPF_ABS = 0x20
|
||||
BPF_ADD = 0x0
|
||||
BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff
|
||||
BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38
|
||||
BPF_ALU = 0x4
|
||||
BPF_ALU64 = 0x7
|
||||
BPF_AND = 0x50
|
||||
BPF_ANY = 0x0
|
||||
BPF_ARSH = 0xc0
|
||||
BPF_B = 0x10
|
||||
BPF_BUILD_ID_SIZE = 0x14
|
||||
BPF_CALL = 0x80
|
||||
BPF_DEVCG_ACC_MKNOD = 0x1
|
||||
BPF_DEVCG_ACC_READ = 0x2
|
||||
BPF_DEVCG_ACC_WRITE = 0x4
|
||||
BPF_DEVCG_DEV_BLOCK = 0x1
|
||||
BPF_DEVCG_DEV_CHAR = 0x2
|
||||
BPF_DIV = 0x30
|
||||
BPF_DW = 0x18
|
||||
BPF_END = 0xd0
|
||||
BPF_EXIST = 0x2
|
||||
BPF_EXIT = 0x90
|
||||
BPF_FROM_BE = 0x8
|
||||
BPF_FROM_LE = 0x0
|
||||
BPF_FS_MAGIC = 0xcafe4a11
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10
|
||||
BPF_F_ADJ_ROOM_FIXED_GSO = 0x1
|
||||
BPF_F_ALLOW_MULTI = 0x2
|
||||
BPF_F_ALLOW_OVERRIDE = 0x1
|
||||
BPF_F_ANY_ALIGNMENT = 0x2
|
||||
BPF_F_CTXLEN_MASK = 0xfffff00000000
|
||||
BPF_F_CURRENT_CPU = 0xffffffff
|
||||
BPF_F_CURRENT_NETNS = -0x1
|
||||
BPF_F_DONT_FRAGMENT = 0x4
|
||||
BPF_F_FAST_STACK_CMP = 0x200
|
||||
BPF_F_HDR_FIELD_MASK = 0xf
|
||||
BPF_F_INDEX_MASK = 0xffffffff
|
||||
BPF_F_INGRESS = 0x1
|
||||
BPF_F_INVALIDATE_HASH = 0x2
|
||||
BPF_F_LOCK = 0x4
|
||||
BPF_F_MARK_ENFORCE = 0x40
|
||||
BPF_F_MARK_MANGLED_0 = 0x20
|
||||
BPF_F_NO_COMMON_LRU = 0x2
|
||||
BPF_F_NO_PREALLOC = 0x1
|
||||
BPF_F_NUMA_NODE = 0x4
|
||||
BPF_F_PSEUDO_HDR = 0x10
|
||||
BPF_F_QUERY_EFFECTIVE = 0x1
|
||||
BPF_F_RDONLY = 0x8
|
||||
BPF_F_RDONLY_PROG = 0x80
|
||||
BPF_F_RECOMPUTE_CSUM = 0x1
|
||||
BPF_F_REUSE_STACKID = 0x400
|
||||
BPF_F_SEQ_NUMBER = 0x8
|
||||
BPF_F_SKIP_FIELD_MASK = 0xff
|
||||
BPF_F_STACK_BUILD_ID = 0x20
|
||||
BPF_F_STRICT_ALIGNMENT = 0x1
|
||||
BPF_F_SYSCTL_BASE_NAME = 0x1
|
||||
BPF_F_TUNINFO_IPV6 = 0x1
|
||||
BPF_F_USER_BUILD_ID = 0x800
|
||||
BPF_F_USER_STACK = 0x100
|
||||
BPF_F_WRONLY = 0x10
|
||||
BPF_F_WRONLY_PROG = 0x100
|
||||
BPF_F_ZERO_CSUM_TX = 0x2
|
||||
BPF_F_ZERO_SEED = 0x40
|
||||
BPF_H = 0x8
|
||||
BPF_IMM = 0x0
|
||||
BPF_IND = 0x40
|
||||
|
@ -208,8 +267,16 @@ const (
|
|||
BPF_JEQ = 0x10
|
||||
BPF_JGE = 0x30
|
||||
BPF_JGT = 0x20
|
||||
BPF_JLE = 0xb0
|
||||
BPF_JLT = 0xa0
|
||||
BPF_JMP = 0x5
|
||||
BPF_JMP32 = 0x6
|
||||
BPF_JNE = 0x50
|
||||
BPF_JSET = 0x40
|
||||
BPF_JSGE = 0x70
|
||||
BPF_JSGT = 0x60
|
||||
BPF_JSLE = 0xd0
|
||||
BPF_JSLT = 0xc0
|
||||
BPF_K = 0x0
|
||||
BPF_LD = 0x0
|
||||
BPF_LDX = 0x1
|
||||
|
@ -223,20 +290,35 @@ const (
|
|||
BPF_MINOR_VERSION = 0x1
|
||||
BPF_MISC = 0x7
|
||||
BPF_MOD = 0x90
|
||||
BPF_MOV = 0xb0
|
||||
BPF_MSH = 0xa0
|
||||
BPF_MUL = 0x20
|
||||
BPF_NEG = 0x80
|
||||
BPF_NET_OFF = -0x100000
|
||||
BPF_NOEXIST = 0x1
|
||||
BPF_OBJ_NAME_LEN = 0x10
|
||||
BPF_OR = 0x40
|
||||
BPF_PSEUDO_CALL = 0x1
|
||||
BPF_PSEUDO_MAP_FD = 0x1
|
||||
BPF_PSEUDO_MAP_VALUE = 0x2
|
||||
BPF_RET = 0x6
|
||||
BPF_RSH = 0x70
|
||||
BPF_SK_STORAGE_GET_F_CREATE = 0x1
|
||||
BPF_SOCK_OPS_ALL_CB_FLAGS = 0x7
|
||||
BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2
|
||||
BPF_SOCK_OPS_RTO_CB_FLAG = 0x1
|
||||
BPF_SOCK_OPS_STATE_CB_FLAG = 0x4
|
||||
BPF_ST = 0x2
|
||||
BPF_STX = 0x3
|
||||
BPF_SUB = 0x10
|
||||
BPF_TAG_SIZE = 0x8
|
||||
BPF_TAX = 0x0
|
||||
BPF_TO_BE = 0x8
|
||||
BPF_TO_LE = 0x0
|
||||
BPF_TXA = 0x80
|
||||
BPF_W = 0x0
|
||||
BPF_X = 0x8
|
||||
BPF_XADD = 0xc0
|
||||
BPF_XOR = 0xa0
|
||||
BRKINT = 0x2
|
||||
BS0 = 0x0
|
||||
|
@ -264,6 +346,45 @@ const (
|
|||
CAN_SFF_MASK = 0x7ff
|
||||
CAN_TP16 = 0x3
|
||||
CAN_TP20 = 0x4
|
||||
CAP_AUDIT_CONTROL = 0x1e
|
||||
CAP_AUDIT_READ = 0x25
|
||||
CAP_AUDIT_WRITE = 0x1d
|
||||
CAP_BLOCK_SUSPEND = 0x24
|
||||
CAP_CHOWN = 0x0
|
||||
CAP_DAC_OVERRIDE = 0x1
|
||||
CAP_DAC_READ_SEARCH = 0x2
|
||||
CAP_FOWNER = 0x3
|
||||
CAP_FSETID = 0x4
|
||||
CAP_IPC_LOCK = 0xe
|
||||
CAP_IPC_OWNER = 0xf
|
||||
CAP_KILL = 0x5
|
||||
CAP_LAST_CAP = 0x25
|
||||
CAP_LEASE = 0x1c
|
||||
CAP_LINUX_IMMUTABLE = 0x9
|
||||
CAP_MAC_ADMIN = 0x21
|
||||
CAP_MAC_OVERRIDE = 0x20
|
||||
CAP_MKNOD = 0x1b
|
||||
CAP_NET_ADMIN = 0xc
|
||||
CAP_NET_BIND_SERVICE = 0xa
|
||||
CAP_NET_BROADCAST = 0xb
|
||||
CAP_NET_RAW = 0xd
|
||||
CAP_SETFCAP = 0x1f
|
||||
CAP_SETGID = 0x6
|
||||
CAP_SETPCAP = 0x8
|
||||
CAP_SETUID = 0x7
|
||||
CAP_SYSLOG = 0x22
|
||||
CAP_SYS_ADMIN = 0x15
|
||||
CAP_SYS_BOOT = 0x16
|
||||
CAP_SYS_CHROOT = 0x12
|
||||
CAP_SYS_MODULE = 0x10
|
||||
CAP_SYS_NICE = 0x17
|
||||
CAP_SYS_PACCT = 0x14
|
||||
CAP_SYS_PTRACE = 0x13
|
||||
CAP_SYS_RAWIO = 0x11
|
||||
CAP_SYS_RESOURCE = 0x18
|
||||
CAP_SYS_TIME = 0x19
|
||||
CAP_SYS_TTY_CONFIG = 0x1a
|
||||
CAP_WAKE_ALARM = 0x23
|
||||
CBAUD = 0xff
|
||||
CBAUDEX = 0x0
|
||||
CFLUSH = 0xf
|
||||
|
@ -302,6 +423,7 @@ const (
|
|||
CLONE_NEWUTS = 0x4000000
|
||||
CLONE_PARENT = 0x8000
|
||||
CLONE_PARENT_SETTID = 0x100000
|
||||
CLONE_PIDFD = 0x1000
|
||||
CLONE_PTRACE = 0x2000
|
||||
CLONE_SETTLS = 0x80000
|
||||
CLONE_SIGHAND = 0x800
|
||||
|
@ -418,6 +540,7 @@ const (
|
|||
ETH_P_DNA_RC = 0x6002
|
||||
ETH_P_DNA_RT = 0x6003
|
||||
ETH_P_DSA = 0x1b
|
||||
ETH_P_DSA_8021Q = 0xdadb
|
||||
ETH_P_ECONET = 0x18
|
||||
ETH_P_EDSA = 0xdada
|
||||
ETH_P_ERSPAN = 0x88be
|
||||
|
@ -501,6 +624,7 @@ const (
|
|||
FAN_ALL_MARK_FLAGS = 0xff
|
||||
FAN_ALL_OUTGOING_EVENTS = 0x3403b
|
||||
FAN_ALL_PERM_EVENTS = 0x30000
|
||||
FAN_ATTRIB = 0x4
|
||||
FAN_AUDIT = 0x10
|
||||
FAN_CLASS_CONTENT = 0x4
|
||||
FAN_CLASS_NOTIF = 0x0
|
||||
|
@ -509,8 +633,12 @@ const (
|
|||
FAN_CLOSE = 0x18
|
||||
FAN_CLOSE_NOWRITE = 0x10
|
||||
FAN_CLOSE_WRITE = 0x8
|
||||
FAN_CREATE = 0x100
|
||||
FAN_DELETE = 0x200
|
||||
FAN_DELETE_SELF = 0x400
|
||||
FAN_DENY = 0x2
|
||||
FAN_ENABLE_AUDIT = 0x40
|
||||
FAN_EVENT_INFO_TYPE_FID = 0x1
|
||||
FAN_EVENT_METADATA_LEN = 0x18
|
||||
FAN_EVENT_ON_CHILD = 0x8000000
|
||||
FAN_MARK_ADD = 0x1
|
||||
|
@ -524,6 +652,10 @@ const (
|
|||
FAN_MARK_ONLYDIR = 0x8
|
||||
FAN_MARK_REMOVE = 0x2
|
||||
FAN_MODIFY = 0x2
|
||||
FAN_MOVE = 0xc0
|
||||
FAN_MOVED_FROM = 0x40
|
||||
FAN_MOVED_TO = 0x80
|
||||
FAN_MOVE_SELF = 0x800
|
||||
FAN_NOFD = -0x1
|
||||
FAN_NONBLOCK = 0x2
|
||||
FAN_ONDIR = 0x40000000
|
||||
|
@ -532,6 +664,7 @@ const (
|
|||
FAN_OPEN_EXEC_PERM = 0x40000
|
||||
FAN_OPEN_PERM = 0x10000
|
||||
FAN_Q_OVERFLOW = 0x4000
|
||||
FAN_REPORT_FID = 0x200
|
||||
FAN_REPORT_TID = 0x100
|
||||
FAN_UNLIMITED_MARKS = 0x20
|
||||
FAN_UNLIMITED_QUEUE = 0x10
|
||||
|
@ -1015,6 +1148,20 @@ const (
|
|||
LOCK_NB = 0x4
|
||||
LOCK_SH = 0x1
|
||||
LOCK_UN = 0x8
|
||||
LOOP_CLR_FD = 0x4c01
|
||||
LOOP_CTL_ADD = 0x4c80
|
||||
LOOP_CTL_GET_FREE = 0x4c82
|
||||
LOOP_CTL_REMOVE = 0x4c81
|
||||
LOOP_GET_STATUS = 0x4c03
|
||||
LOOP_GET_STATUS64 = 0x4c05
|
||||
LOOP_SET_BLOCK_SIZE = 0x4c09
|
||||
LOOP_SET_CAPACITY = 0x4c07
|
||||
LOOP_SET_DIRECT_IO = 0x4c08
|
||||
LOOP_SET_FD = 0x4c00
|
||||
LOOP_SET_STATUS = 0x4c02
|
||||
LOOP_SET_STATUS64 = 0x4c04
|
||||
LO_KEY_SIZE = 0x20
|
||||
LO_NAME_SIZE = 0x40
|
||||
MADV_DODUMP = 0x11
|
||||
MADV_DOFORK = 0xb
|
||||
MADV_DONTDUMP = 0x10
|
||||
|
@ -1053,6 +1200,15 @@ const (
|
|||
MAP_SHARED_VALIDATE = 0x3
|
||||
MAP_STACK = 0x20000
|
||||
MAP_TYPE = 0xf
|
||||
MCAST_BLOCK_SOURCE = 0x2b
|
||||
MCAST_EXCLUDE = 0x0
|
||||
MCAST_INCLUDE = 0x1
|
||||
MCAST_JOIN_GROUP = 0x2a
|
||||
MCAST_JOIN_SOURCE_GROUP = 0x2e
|
||||
MCAST_LEAVE_GROUP = 0x2d
|
||||
MCAST_LEAVE_SOURCE_GROUP = 0x2f
|
||||
MCAST_MSFILTER = 0x30
|
||||
MCAST_UNBLOCK_SOURCE = 0x2c
|
||||
MCL_CURRENT = 0x2000
|
||||
MCL_FUTURE = 0x4000
|
||||
MCL_ONFAULT = 0x8000
|
||||
|
@ -1491,6 +1647,7 @@ const (
|
|||
PR_SET_TSC = 0x1a
|
||||
PR_SET_UNALIGN = 0x6
|
||||
PR_SPEC_DISABLE = 0x4
|
||||
PR_SPEC_DISABLE_NOEXEC = 0x10
|
||||
PR_SPEC_ENABLE = 0x2
|
||||
PR_SPEC_FORCE_DISABLE = 0x8
|
||||
PR_SPEC_INDIRECT_BRANCH = 0x1
|
||||
|
@ -1926,6 +2083,10 @@ const (
|
|||
SIOCGSKNS = 0x894c
|
||||
SIOCGSTAMP = 0x8906
|
||||
SIOCGSTAMPNS = 0x8907
|
||||
SIOCGSTAMPNS_NEW = 0x40108907
|
||||
SIOCGSTAMPNS_OLD = 0x8907
|
||||
SIOCGSTAMP_NEW = 0x40108906
|
||||
SIOCGSTAMP_OLD = 0x8906
|
||||
SIOCINQ = 0x4004667f
|
||||
SIOCOUTQ = 0x40047473
|
||||
SIOCOUTQNSD = 0x894b
|
||||
|
@ -2019,6 +2180,7 @@ const (
|
|||
SO_ATTACH_REUSEPORT_CBPF = 0x33
|
||||
SO_ATTACH_REUSEPORT_EBPF = 0x34
|
||||
SO_BINDTODEVICE = 0x19
|
||||
SO_BINDTOIFINDEX = 0x3e
|
||||
SO_BPF_EXTENSIONS = 0x30
|
||||
SO_BROADCAST = 0x6
|
||||
SO_BSDCOMPAT = 0xe
|
||||
|
@ -2067,6 +2229,8 @@ const (
|
|||
SO_RCVBUFFORCE = 0x21
|
||||
SO_RCVLOWAT = 0x10
|
||||
SO_RCVTIMEO = 0x12
|
||||
SO_RCVTIMEO_NEW = 0x42
|
||||
SO_RCVTIMEO_OLD = 0x12
|
||||
SO_REUSEADDR = 0x2
|
||||
SO_REUSEPORT = 0xf
|
||||
SO_RXQ_OVFL = 0x28
|
||||
|
@ -2078,9 +2242,17 @@ const (
|
|||
SO_SNDBUFFORCE = 0x20
|
||||
SO_SNDLOWAT = 0x11
|
||||
SO_SNDTIMEO = 0x13
|
||||
SO_SNDTIMEO_NEW = 0x43
|
||||
SO_SNDTIMEO_OLD = 0x13
|
||||
SO_TIMESTAMP = 0x1d
|
||||
SO_TIMESTAMPING = 0x25
|
||||
SO_TIMESTAMPING_NEW = 0x41
|
||||
SO_TIMESTAMPING_OLD = 0x25
|
||||
SO_TIMESTAMPNS = 0x23
|
||||
SO_TIMESTAMPNS_NEW = 0x40
|
||||
SO_TIMESTAMPNS_OLD = 0x23
|
||||
SO_TIMESTAMP_NEW = 0x3f
|
||||
SO_TIMESTAMP_OLD = 0x1d
|
||||
SO_TXTIME = 0x3d
|
||||
SO_TYPE = 0x3
|
||||
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
|
||||
|
@ -2122,6 +2294,7 @@ const (
|
|||
SYNC_FILE_RANGE_WAIT_AFTER = 0x4
|
||||
SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
|
||||
SYNC_FILE_RANGE_WRITE = 0x2
|
||||
SYNC_FILE_RANGE_WRITE_AND_WAIT = 0x7
|
||||
SYSFS_MAGIC = 0x62656572
|
||||
S_BLKSIZE = 0x200
|
||||
S_IEXEC = 0x40
|
||||
|
@ -2171,6 +2344,8 @@ const (
|
|||
TCOFLUSH = 0x1
|
||||
TCOOFF = 0x0
|
||||
TCOON = 0x1
|
||||
TCP_BPF_IW = 0x3e9
|
||||
TCP_BPF_SNDCWND_CLAMP = 0x3ea
|
||||
TCP_CC_INFO = 0x1a
|
||||
TCP_CM_INQ = 0x24
|
||||
TCP_CONGESTION = 0xd
|
||||
|
@ -2343,6 +2518,7 @@ const (
|
|||
TS_COMM_LEN = 0x20
|
||||
TUNATTACHFILTER = 0x801054d5
|
||||
TUNDETACHFILTER = 0x801054d6
|
||||
TUNGETDEVNETNS = 0x200054e3
|
||||
TUNGETFEATURES = 0x400454cf
|
||||
TUNGETFILTER = 0x401054db
|
||||
TUNGETIFF = 0x400454d2
|
||||
|
@ -2378,8 +2554,10 @@ const (
|
|||
UBI_IOCMKVOL = 0x80986f00
|
||||
UBI_IOCRMVOL = 0x80046f01
|
||||
UBI_IOCRNVOL = 0x91106f03
|
||||
UBI_IOCRPEB = 0x80046f04
|
||||
UBI_IOCRSVOL = 0x800c6f02
|
||||
UBI_IOCSETVOLPROP = 0x80104f06
|
||||
UBI_IOCSPEB = 0x80046f05
|
||||
UBI_IOCVOLCRBLK = 0x80804f07
|
||||
UBI_IOCVOLRMBLK = 0x20004f08
|
||||
UBI_IOCVOLUP = 0x80084f00
|
||||
|
@ -2527,6 +2705,7 @@ const (
|
|||
XDP_FLAGS_SKB_MODE = 0x2
|
||||
XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
|
||||
XDP_MMAP_OFFSETS = 0x1
|
||||
XDP_PACKET_HEADROOM = 0x100
|
||||
XDP_PGOFF_RX_RING = 0x0
|
||||
XDP_PGOFF_TX_RING = 0x80000000
|
||||
XDP_RX_RING = 0x2
|
||||
|
|
|
@ -196,11 +196,70 @@ const (
|
|||
BPF_A = 0x10
|
||||
BPF_ABS = 0x20
|
||||
BPF_ADD = 0x0
|
||||
BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff
|
||||
BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38
|
||||
BPF_ALU = 0x4
|
||||
BPF_ALU64 = 0x7
|
||||
BPF_AND = 0x50
|
||||
BPF_ANY = 0x0
|
||||
BPF_ARSH = 0xc0
|
||||
BPF_B = 0x10
|
||||
BPF_BUILD_ID_SIZE = 0x14
|
||||
BPF_CALL = 0x80
|
||||
BPF_DEVCG_ACC_MKNOD = 0x1
|
||||
BPF_DEVCG_ACC_READ = 0x2
|
||||
BPF_DEVCG_ACC_WRITE = 0x4
|
||||
BPF_DEVCG_DEV_BLOCK = 0x1
|
||||
BPF_DEVCG_DEV_CHAR = 0x2
|
||||
BPF_DIV = 0x30
|
||||
BPF_DW = 0x18
|
||||
BPF_END = 0xd0
|
||||
BPF_EXIST = 0x2
|
||||
BPF_EXIT = 0x90
|
||||
BPF_FROM_BE = 0x8
|
||||
BPF_FROM_LE = 0x0
|
||||
BPF_FS_MAGIC = 0xcafe4a11
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10
|
||||
BPF_F_ADJ_ROOM_FIXED_GSO = 0x1
|
||||
BPF_F_ALLOW_MULTI = 0x2
|
||||
BPF_F_ALLOW_OVERRIDE = 0x1
|
||||
BPF_F_ANY_ALIGNMENT = 0x2
|
||||
BPF_F_CTXLEN_MASK = 0xfffff00000000
|
||||
BPF_F_CURRENT_CPU = 0xffffffff
|
||||
BPF_F_CURRENT_NETNS = -0x1
|
||||
BPF_F_DONT_FRAGMENT = 0x4
|
||||
BPF_F_FAST_STACK_CMP = 0x200
|
||||
BPF_F_HDR_FIELD_MASK = 0xf
|
||||
BPF_F_INDEX_MASK = 0xffffffff
|
||||
BPF_F_INGRESS = 0x1
|
||||
BPF_F_INVALIDATE_HASH = 0x2
|
||||
BPF_F_LOCK = 0x4
|
||||
BPF_F_MARK_ENFORCE = 0x40
|
||||
BPF_F_MARK_MANGLED_0 = 0x20
|
||||
BPF_F_NO_COMMON_LRU = 0x2
|
||||
BPF_F_NO_PREALLOC = 0x1
|
||||
BPF_F_NUMA_NODE = 0x4
|
||||
BPF_F_PSEUDO_HDR = 0x10
|
||||
BPF_F_QUERY_EFFECTIVE = 0x1
|
||||
BPF_F_RDONLY = 0x8
|
||||
BPF_F_RDONLY_PROG = 0x80
|
||||
BPF_F_RECOMPUTE_CSUM = 0x1
|
||||
BPF_F_REUSE_STACKID = 0x400
|
||||
BPF_F_SEQ_NUMBER = 0x8
|
||||
BPF_F_SKIP_FIELD_MASK = 0xff
|
||||
BPF_F_STACK_BUILD_ID = 0x20
|
||||
BPF_F_STRICT_ALIGNMENT = 0x1
|
||||
BPF_F_SYSCTL_BASE_NAME = 0x1
|
||||
BPF_F_TUNINFO_IPV6 = 0x1
|
||||
BPF_F_USER_BUILD_ID = 0x800
|
||||
BPF_F_USER_STACK = 0x100
|
||||
BPF_F_WRONLY = 0x10
|
||||
BPF_F_WRONLY_PROG = 0x100
|
||||
BPF_F_ZERO_CSUM_TX = 0x2
|
||||
BPF_F_ZERO_SEED = 0x40
|
||||
BPF_H = 0x8
|
||||
BPF_IMM = 0x0
|
||||
BPF_IND = 0x40
|
||||
|
@ -208,8 +267,16 @@ const (
|
|||
BPF_JEQ = 0x10
|
||||
BPF_JGE = 0x30
|
||||
BPF_JGT = 0x20
|
||||
BPF_JLE = 0xb0
|
||||
BPF_JLT = 0xa0
|
||||
BPF_JMP = 0x5
|
||||
BPF_JMP32 = 0x6
|
||||
BPF_JNE = 0x50
|
||||
BPF_JSET = 0x40
|
||||
BPF_JSGE = 0x70
|
||||
BPF_JSGT = 0x60
|
||||
BPF_JSLE = 0xd0
|
||||
BPF_JSLT = 0xc0
|
||||
BPF_K = 0x0
|
||||
BPF_LD = 0x0
|
||||
BPF_LDX = 0x1
|
||||
|
@ -223,20 +290,35 @@ const (
|
|||
BPF_MINOR_VERSION = 0x1
|
||||
BPF_MISC = 0x7
|
||||
BPF_MOD = 0x90
|
||||
BPF_MOV = 0xb0
|
||||
BPF_MSH = 0xa0
|
||||
BPF_MUL = 0x20
|
||||
BPF_NEG = 0x80
|
||||
BPF_NET_OFF = -0x100000
|
||||
BPF_NOEXIST = 0x1
|
||||
BPF_OBJ_NAME_LEN = 0x10
|
||||
BPF_OR = 0x40
|
||||
BPF_PSEUDO_CALL = 0x1
|
||||
BPF_PSEUDO_MAP_FD = 0x1
|
||||
BPF_PSEUDO_MAP_VALUE = 0x2
|
||||
BPF_RET = 0x6
|
||||
BPF_RSH = 0x70
|
||||
BPF_SK_STORAGE_GET_F_CREATE = 0x1
|
||||
BPF_SOCK_OPS_ALL_CB_FLAGS = 0x7
|
||||
BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2
|
||||
BPF_SOCK_OPS_RTO_CB_FLAG = 0x1
|
||||
BPF_SOCK_OPS_STATE_CB_FLAG = 0x4
|
||||
BPF_ST = 0x2
|
||||
BPF_STX = 0x3
|
||||
BPF_SUB = 0x10
|
||||
BPF_TAG_SIZE = 0x8
|
||||
BPF_TAX = 0x0
|
||||
BPF_TO_BE = 0x8
|
||||
BPF_TO_LE = 0x0
|
||||
BPF_TXA = 0x80
|
||||
BPF_W = 0x0
|
||||
BPF_X = 0x8
|
||||
BPF_XADD = 0xc0
|
||||
BPF_XOR = 0xa0
|
||||
BRKINT = 0x2
|
||||
BS0 = 0x0
|
||||
|
@ -264,6 +346,45 @@ const (
|
|||
CAN_SFF_MASK = 0x7ff
|
||||
CAN_TP16 = 0x3
|
||||
CAN_TP20 = 0x4
|
||||
CAP_AUDIT_CONTROL = 0x1e
|
||||
CAP_AUDIT_READ = 0x25
|
||||
CAP_AUDIT_WRITE = 0x1d
|
||||
CAP_BLOCK_SUSPEND = 0x24
|
||||
CAP_CHOWN = 0x0
|
||||
CAP_DAC_OVERRIDE = 0x1
|
||||
CAP_DAC_READ_SEARCH = 0x2
|
||||
CAP_FOWNER = 0x3
|
||||
CAP_FSETID = 0x4
|
||||
CAP_IPC_LOCK = 0xe
|
||||
CAP_IPC_OWNER = 0xf
|
||||
CAP_KILL = 0x5
|
||||
CAP_LAST_CAP = 0x25
|
||||
CAP_LEASE = 0x1c
|
||||
CAP_LINUX_IMMUTABLE = 0x9
|
||||
CAP_MAC_ADMIN = 0x21
|
||||
CAP_MAC_OVERRIDE = 0x20
|
||||
CAP_MKNOD = 0x1b
|
||||
CAP_NET_ADMIN = 0xc
|
||||
CAP_NET_BIND_SERVICE = 0xa
|
||||
CAP_NET_BROADCAST = 0xb
|
||||
CAP_NET_RAW = 0xd
|
||||
CAP_SETFCAP = 0x1f
|
||||
CAP_SETGID = 0x6
|
||||
CAP_SETPCAP = 0x8
|
||||
CAP_SETUID = 0x7
|
||||
CAP_SYSLOG = 0x22
|
||||
CAP_SYS_ADMIN = 0x15
|
||||
CAP_SYS_BOOT = 0x16
|
||||
CAP_SYS_CHROOT = 0x12
|
||||
CAP_SYS_MODULE = 0x10
|
||||
CAP_SYS_NICE = 0x17
|
||||
CAP_SYS_PACCT = 0x14
|
||||
CAP_SYS_PTRACE = 0x13
|
||||
CAP_SYS_RAWIO = 0x11
|
||||
CAP_SYS_RESOURCE = 0x18
|
||||
CAP_SYS_TIME = 0x19
|
||||
CAP_SYS_TTY_CONFIG = 0x1a
|
||||
CAP_WAKE_ALARM = 0x23
|
||||
CBAUD = 0x100f
|
||||
CBAUDEX = 0x1000
|
||||
CFLUSH = 0xf
|
||||
|
@ -302,6 +423,7 @@ const (
|
|||
CLONE_NEWUTS = 0x4000000
|
||||
CLONE_PARENT = 0x8000
|
||||
CLONE_PARENT_SETTID = 0x100000
|
||||
CLONE_PIDFD = 0x1000
|
||||
CLONE_PTRACE = 0x2000
|
||||
CLONE_SETTLS = 0x80000
|
||||
CLONE_SIGHAND = 0x800
|
||||
|
@ -418,6 +540,7 @@ const (
|
|||
ETH_P_DNA_RC = 0x6002
|
||||
ETH_P_DNA_RT = 0x6003
|
||||
ETH_P_DSA = 0x1b
|
||||
ETH_P_DSA_8021Q = 0xdadb
|
||||
ETH_P_ECONET = 0x18
|
||||
ETH_P_EDSA = 0xdada
|
||||
ETH_P_ERSPAN = 0x88be
|
||||
|
@ -501,6 +624,7 @@ const (
|
|||
FAN_ALL_MARK_FLAGS = 0xff
|
||||
FAN_ALL_OUTGOING_EVENTS = 0x3403b
|
||||
FAN_ALL_PERM_EVENTS = 0x30000
|
||||
FAN_ATTRIB = 0x4
|
||||
FAN_AUDIT = 0x10
|
||||
FAN_CLASS_CONTENT = 0x4
|
||||
FAN_CLASS_NOTIF = 0x0
|
||||
|
@ -509,8 +633,12 @@ const (
|
|||
FAN_CLOSE = 0x18
|
||||
FAN_CLOSE_NOWRITE = 0x10
|
||||
FAN_CLOSE_WRITE = 0x8
|
||||
FAN_CREATE = 0x100
|
||||
FAN_DELETE = 0x200
|
||||
FAN_DELETE_SELF = 0x400
|
||||
FAN_DENY = 0x2
|
||||
FAN_ENABLE_AUDIT = 0x40
|
||||
FAN_EVENT_INFO_TYPE_FID = 0x1
|
||||
FAN_EVENT_METADATA_LEN = 0x18
|
||||
FAN_EVENT_ON_CHILD = 0x8000000
|
||||
FAN_MARK_ADD = 0x1
|
||||
|
@ -524,6 +652,10 @@ const (
|
|||
FAN_MARK_ONLYDIR = 0x8
|
||||
FAN_MARK_REMOVE = 0x2
|
||||
FAN_MODIFY = 0x2
|
||||
FAN_MOVE = 0xc0
|
||||
FAN_MOVED_FROM = 0x40
|
||||
FAN_MOVED_TO = 0x80
|
||||
FAN_MOVE_SELF = 0x800
|
||||
FAN_NOFD = -0x1
|
||||
FAN_NONBLOCK = 0x2
|
||||
FAN_ONDIR = 0x40000000
|
||||
|
@ -532,6 +664,7 @@ const (
|
|||
FAN_OPEN_EXEC_PERM = 0x40000
|
||||
FAN_OPEN_PERM = 0x10000
|
||||
FAN_Q_OVERFLOW = 0x4000
|
||||
FAN_REPORT_FID = 0x200
|
||||
FAN_REPORT_TID = 0x100
|
||||
FAN_UNLIMITED_MARKS = 0x20
|
||||
FAN_UNLIMITED_QUEUE = 0x10
|
||||
|
@ -1015,6 +1148,20 @@ const (
|
|||
LOCK_NB = 0x4
|
||||
LOCK_SH = 0x1
|
||||
LOCK_UN = 0x8
|
||||
LOOP_CLR_FD = 0x4c01
|
||||
LOOP_CTL_ADD = 0x4c80
|
||||
LOOP_CTL_GET_FREE = 0x4c82
|
||||
LOOP_CTL_REMOVE = 0x4c81
|
||||
LOOP_GET_STATUS = 0x4c03
|
||||
LOOP_GET_STATUS64 = 0x4c05
|
||||
LOOP_SET_BLOCK_SIZE = 0x4c09
|
||||
LOOP_SET_CAPACITY = 0x4c07
|
||||
LOOP_SET_DIRECT_IO = 0x4c08
|
||||
LOOP_SET_FD = 0x4c00
|
||||
LOOP_SET_STATUS = 0x4c02
|
||||
LOOP_SET_STATUS64 = 0x4c04
|
||||
LO_KEY_SIZE = 0x20
|
||||
LO_NAME_SIZE = 0x40
|
||||
MADV_DODUMP = 0x11
|
||||
MADV_DOFORK = 0xb
|
||||
MADV_DONTDUMP = 0x10
|
||||
|
@ -1054,6 +1201,15 @@ const (
|
|||
MAP_STACK = 0x20000
|
||||
MAP_SYNC = 0x80000
|
||||
MAP_TYPE = 0xf
|
||||
MCAST_BLOCK_SOURCE = 0x2b
|
||||
MCAST_EXCLUDE = 0x0
|
||||
MCAST_INCLUDE = 0x1
|
||||
MCAST_JOIN_GROUP = 0x2a
|
||||
MCAST_JOIN_SOURCE_GROUP = 0x2e
|
||||
MCAST_LEAVE_GROUP = 0x2d
|
||||
MCAST_LEAVE_SOURCE_GROUP = 0x2f
|
||||
MCAST_MSFILTER = 0x30
|
||||
MCAST_UNBLOCK_SOURCE = 0x2c
|
||||
MCL_CURRENT = 0x1
|
||||
MCL_FUTURE = 0x2
|
||||
MCL_ONFAULT = 0x4
|
||||
|
@ -1489,6 +1645,7 @@ const (
|
|||
PR_SET_TSC = 0x1a
|
||||
PR_SET_UNALIGN = 0x6
|
||||
PR_SPEC_DISABLE = 0x4
|
||||
PR_SPEC_DISABLE_NOEXEC = 0x10
|
||||
PR_SPEC_ENABLE = 0x2
|
||||
PR_SPEC_FORCE_DISABLE = 0x8
|
||||
PR_SPEC_INDIRECT_BRANCH = 0x1
|
||||
|
@ -1856,6 +2013,10 @@ const (
|
|||
SIOCGSKNS = 0x894c
|
||||
SIOCGSTAMP = 0x8906
|
||||
SIOCGSTAMPNS = 0x8907
|
||||
SIOCGSTAMPNS_NEW = 0x80108907
|
||||
SIOCGSTAMPNS_OLD = 0x8907
|
||||
SIOCGSTAMP_NEW = 0x80108906
|
||||
SIOCGSTAMP_OLD = 0x8906
|
||||
SIOCINQ = 0x541b
|
||||
SIOCOUTQ = 0x5411
|
||||
SIOCOUTQNSD = 0x894b
|
||||
|
@ -1949,6 +2110,7 @@ const (
|
|||
SO_ATTACH_REUSEPORT_CBPF = 0x33
|
||||
SO_ATTACH_REUSEPORT_EBPF = 0x34
|
||||
SO_BINDTODEVICE = 0x19
|
||||
SO_BINDTOIFINDEX = 0x3e
|
||||
SO_BPF_EXTENSIONS = 0x30
|
||||
SO_BROADCAST = 0x6
|
||||
SO_BSDCOMPAT = 0xe
|
||||
|
@ -1997,6 +2159,8 @@ const (
|
|||
SO_RCVBUFFORCE = 0x21
|
||||
SO_RCVLOWAT = 0x12
|
||||
SO_RCVTIMEO = 0x14
|
||||
SO_RCVTIMEO_NEW = 0x42
|
||||
SO_RCVTIMEO_OLD = 0x14
|
||||
SO_REUSEADDR = 0x2
|
||||
SO_REUSEPORT = 0xf
|
||||
SO_RXQ_OVFL = 0x28
|
||||
|
@ -2008,9 +2172,17 @@ const (
|
|||
SO_SNDBUFFORCE = 0x20
|
||||
SO_SNDLOWAT = 0x13
|
||||
SO_SNDTIMEO = 0x15
|
||||
SO_SNDTIMEO_NEW = 0x43
|
||||
SO_SNDTIMEO_OLD = 0x15
|
||||
SO_TIMESTAMP = 0x1d
|
||||
SO_TIMESTAMPING = 0x25
|
||||
SO_TIMESTAMPING_NEW = 0x41
|
||||
SO_TIMESTAMPING_OLD = 0x25
|
||||
SO_TIMESTAMPNS = 0x23
|
||||
SO_TIMESTAMPNS_NEW = 0x40
|
||||
SO_TIMESTAMPNS_OLD = 0x23
|
||||
SO_TIMESTAMP_NEW = 0x3f
|
||||
SO_TIMESTAMP_OLD = 0x1d
|
||||
SO_TXTIME = 0x3d
|
||||
SO_TYPE = 0x3
|
||||
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
|
||||
|
@ -2052,6 +2224,7 @@ const (
|
|||
SYNC_FILE_RANGE_WAIT_AFTER = 0x4
|
||||
SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
|
||||
SYNC_FILE_RANGE_WRITE = 0x2
|
||||
SYNC_FILE_RANGE_WRITE_AND_WAIT = 0x7
|
||||
SYSFS_MAGIC = 0x62656572
|
||||
S_BLKSIZE = 0x200
|
||||
S_IEXEC = 0x40
|
||||
|
@ -2103,6 +2276,8 @@ const (
|
|||
TCOFLUSH = 0x1
|
||||
TCOOFF = 0x0
|
||||
TCOON = 0x1
|
||||
TCP_BPF_IW = 0x3e9
|
||||
TCP_BPF_SNDCWND_CLAMP = 0x3ea
|
||||
TCP_CC_INFO = 0x1a
|
||||
TCP_CM_INQ = 0x24
|
||||
TCP_CONGESTION = 0xd
|
||||
|
@ -2269,6 +2444,7 @@ const (
|
|||
TS_COMM_LEN = 0x20
|
||||
TUNATTACHFILTER = 0x401054d5
|
||||
TUNDETACHFILTER = 0x401054d6
|
||||
TUNGETDEVNETNS = 0x54e3
|
||||
TUNGETFEATURES = 0x800454cf
|
||||
TUNGETFILTER = 0x801054db
|
||||
TUNGETIFF = 0x800454d2
|
||||
|
@ -2304,8 +2480,10 @@ const (
|
|||
UBI_IOCMKVOL = 0x40986f00
|
||||
UBI_IOCRMVOL = 0x40046f01
|
||||
UBI_IOCRNVOL = 0x51106f03
|
||||
UBI_IOCRPEB = 0x40046f04
|
||||
UBI_IOCRSVOL = 0x400c6f02
|
||||
UBI_IOCSETVOLPROP = 0x40104f06
|
||||
UBI_IOCSPEB = 0x40046f05
|
||||
UBI_IOCVOLCRBLK = 0x40804f07
|
||||
UBI_IOCVOLRMBLK = 0x4f08
|
||||
UBI_IOCVOLUP = 0x40084f00
|
||||
|
@ -2453,6 +2631,7 @@ const (
|
|||
XDP_FLAGS_SKB_MODE = 0x2
|
||||
XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
|
||||
XDP_MMAP_OFFSETS = 0x1
|
||||
XDP_PACKET_HEADROOM = 0x100
|
||||
XDP_PGOFF_RX_RING = 0x0
|
||||
XDP_PGOFF_TX_RING = 0x80000000
|
||||
XDP_RX_RING = 0x2
|
||||
|
|
|
@ -196,11 +196,70 @@ const (
|
|||
BPF_A = 0x10
|
||||
BPF_ABS = 0x20
|
||||
BPF_ADD = 0x0
|
||||
BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff
|
||||
BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38
|
||||
BPF_ALU = 0x4
|
||||
BPF_ALU64 = 0x7
|
||||
BPF_AND = 0x50
|
||||
BPF_ANY = 0x0
|
||||
BPF_ARSH = 0xc0
|
||||
BPF_B = 0x10
|
||||
BPF_BUILD_ID_SIZE = 0x14
|
||||
BPF_CALL = 0x80
|
||||
BPF_DEVCG_ACC_MKNOD = 0x1
|
||||
BPF_DEVCG_ACC_READ = 0x2
|
||||
BPF_DEVCG_ACC_WRITE = 0x4
|
||||
BPF_DEVCG_DEV_BLOCK = 0x1
|
||||
BPF_DEVCG_DEV_CHAR = 0x2
|
||||
BPF_DIV = 0x30
|
||||
BPF_DW = 0x18
|
||||
BPF_END = 0xd0
|
||||
BPF_EXIST = 0x2
|
||||
BPF_EXIT = 0x90
|
||||
BPF_FROM_BE = 0x8
|
||||
BPF_FROM_LE = 0x0
|
||||
BPF_FS_MAGIC = 0xcafe4a11
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10
|
||||
BPF_F_ADJ_ROOM_FIXED_GSO = 0x1
|
||||
BPF_F_ALLOW_MULTI = 0x2
|
||||
BPF_F_ALLOW_OVERRIDE = 0x1
|
||||
BPF_F_ANY_ALIGNMENT = 0x2
|
||||
BPF_F_CTXLEN_MASK = 0xfffff00000000
|
||||
BPF_F_CURRENT_CPU = 0xffffffff
|
||||
BPF_F_CURRENT_NETNS = -0x1
|
||||
BPF_F_DONT_FRAGMENT = 0x4
|
||||
BPF_F_FAST_STACK_CMP = 0x200
|
||||
BPF_F_HDR_FIELD_MASK = 0xf
|
||||
BPF_F_INDEX_MASK = 0xffffffff
|
||||
BPF_F_INGRESS = 0x1
|
||||
BPF_F_INVALIDATE_HASH = 0x2
|
||||
BPF_F_LOCK = 0x4
|
||||
BPF_F_MARK_ENFORCE = 0x40
|
||||
BPF_F_MARK_MANGLED_0 = 0x20
|
||||
BPF_F_NO_COMMON_LRU = 0x2
|
||||
BPF_F_NO_PREALLOC = 0x1
|
||||
BPF_F_NUMA_NODE = 0x4
|
||||
BPF_F_PSEUDO_HDR = 0x10
|
||||
BPF_F_QUERY_EFFECTIVE = 0x1
|
||||
BPF_F_RDONLY = 0x8
|
||||
BPF_F_RDONLY_PROG = 0x80
|
||||
BPF_F_RECOMPUTE_CSUM = 0x1
|
||||
BPF_F_REUSE_STACKID = 0x400
|
||||
BPF_F_SEQ_NUMBER = 0x8
|
||||
BPF_F_SKIP_FIELD_MASK = 0xff
|
||||
BPF_F_STACK_BUILD_ID = 0x20
|
||||
BPF_F_STRICT_ALIGNMENT = 0x1
|
||||
BPF_F_SYSCTL_BASE_NAME = 0x1
|
||||
BPF_F_TUNINFO_IPV6 = 0x1
|
||||
BPF_F_USER_BUILD_ID = 0x800
|
||||
BPF_F_USER_STACK = 0x100
|
||||
BPF_F_WRONLY = 0x10
|
||||
BPF_F_WRONLY_PROG = 0x100
|
||||
BPF_F_ZERO_CSUM_TX = 0x2
|
||||
BPF_F_ZERO_SEED = 0x40
|
||||
BPF_H = 0x8
|
||||
BPF_IMM = 0x0
|
||||
BPF_IND = 0x40
|
||||
|
@ -208,8 +267,16 @@ const (
|
|||
BPF_JEQ = 0x10
|
||||
BPF_JGE = 0x30
|
||||
BPF_JGT = 0x20
|
||||
BPF_JLE = 0xb0
|
||||
BPF_JLT = 0xa0
|
||||
BPF_JMP = 0x5
|
||||
BPF_JMP32 = 0x6
|
||||
BPF_JNE = 0x50
|
||||
BPF_JSET = 0x40
|
||||
BPF_JSGE = 0x70
|
||||
BPF_JSGT = 0x60
|
||||
BPF_JSLE = 0xd0
|
||||
BPF_JSLT = 0xc0
|
||||
BPF_K = 0x0
|
||||
BPF_LD = 0x0
|
||||
BPF_LDX = 0x1
|
||||
|
@ -223,20 +290,35 @@ const (
|
|||
BPF_MINOR_VERSION = 0x1
|
||||
BPF_MISC = 0x7
|
||||
BPF_MOD = 0x90
|
||||
BPF_MOV = 0xb0
|
||||
BPF_MSH = 0xa0
|
||||
BPF_MUL = 0x20
|
||||
BPF_NEG = 0x80
|
||||
BPF_NET_OFF = -0x100000
|
||||
BPF_NOEXIST = 0x1
|
||||
BPF_OBJ_NAME_LEN = 0x10
|
||||
BPF_OR = 0x40
|
||||
BPF_PSEUDO_CALL = 0x1
|
||||
BPF_PSEUDO_MAP_FD = 0x1
|
||||
BPF_PSEUDO_MAP_VALUE = 0x2
|
||||
BPF_RET = 0x6
|
||||
BPF_RSH = 0x70
|
||||
BPF_SK_STORAGE_GET_F_CREATE = 0x1
|
||||
BPF_SOCK_OPS_ALL_CB_FLAGS = 0x7
|
||||
BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2
|
||||
BPF_SOCK_OPS_RTO_CB_FLAG = 0x1
|
||||
BPF_SOCK_OPS_STATE_CB_FLAG = 0x4
|
||||
BPF_ST = 0x2
|
||||
BPF_STX = 0x3
|
||||
BPF_SUB = 0x10
|
||||
BPF_TAG_SIZE = 0x8
|
||||
BPF_TAX = 0x0
|
||||
BPF_TO_BE = 0x8
|
||||
BPF_TO_LE = 0x0
|
||||
BPF_TXA = 0x80
|
||||
BPF_W = 0x0
|
||||
BPF_X = 0x8
|
||||
BPF_XADD = 0xc0
|
||||
BPF_XOR = 0xa0
|
||||
BRKINT = 0x2
|
||||
BS0 = 0x0
|
||||
|
@ -264,6 +346,45 @@ const (
|
|||
CAN_SFF_MASK = 0x7ff
|
||||
CAN_TP16 = 0x3
|
||||
CAN_TP20 = 0x4
|
||||
CAP_AUDIT_CONTROL = 0x1e
|
||||
CAP_AUDIT_READ = 0x25
|
||||
CAP_AUDIT_WRITE = 0x1d
|
||||
CAP_BLOCK_SUSPEND = 0x24
|
||||
CAP_CHOWN = 0x0
|
||||
CAP_DAC_OVERRIDE = 0x1
|
||||
CAP_DAC_READ_SEARCH = 0x2
|
||||
CAP_FOWNER = 0x3
|
||||
CAP_FSETID = 0x4
|
||||
CAP_IPC_LOCK = 0xe
|
||||
CAP_IPC_OWNER = 0xf
|
||||
CAP_KILL = 0x5
|
||||
CAP_LAST_CAP = 0x25
|
||||
CAP_LEASE = 0x1c
|
||||
CAP_LINUX_IMMUTABLE = 0x9
|
||||
CAP_MAC_ADMIN = 0x21
|
||||
CAP_MAC_OVERRIDE = 0x20
|
||||
CAP_MKNOD = 0x1b
|
||||
CAP_NET_ADMIN = 0xc
|
||||
CAP_NET_BIND_SERVICE = 0xa
|
||||
CAP_NET_BROADCAST = 0xb
|
||||
CAP_NET_RAW = 0xd
|
||||
CAP_SETFCAP = 0x1f
|
||||
CAP_SETGID = 0x6
|
||||
CAP_SETPCAP = 0x8
|
||||
CAP_SETUID = 0x7
|
||||
CAP_SYSLOG = 0x22
|
||||
CAP_SYS_ADMIN = 0x15
|
||||
CAP_SYS_BOOT = 0x16
|
||||
CAP_SYS_CHROOT = 0x12
|
||||
CAP_SYS_MODULE = 0x10
|
||||
CAP_SYS_NICE = 0x17
|
||||
CAP_SYS_PACCT = 0x14
|
||||
CAP_SYS_PTRACE = 0x13
|
||||
CAP_SYS_RAWIO = 0x11
|
||||
CAP_SYS_RESOURCE = 0x18
|
||||
CAP_SYS_TIME = 0x19
|
||||
CAP_SYS_TTY_CONFIG = 0x1a
|
||||
CAP_WAKE_ALARM = 0x23
|
||||
CBAUD = 0x100f
|
||||
CBAUDEX = 0x1000
|
||||
CFLUSH = 0xf
|
||||
|
@ -302,6 +423,7 @@ const (
|
|||
CLONE_NEWUTS = 0x4000000
|
||||
CLONE_PARENT = 0x8000
|
||||
CLONE_PARENT_SETTID = 0x100000
|
||||
CLONE_PIDFD = 0x1000
|
||||
CLONE_PTRACE = 0x2000
|
||||
CLONE_SETTLS = 0x80000
|
||||
CLONE_SIGHAND = 0x800
|
||||
|
@ -418,6 +540,7 @@ const (
|
|||
ETH_P_DNA_RC = 0x6002
|
||||
ETH_P_DNA_RT = 0x6003
|
||||
ETH_P_DSA = 0x1b
|
||||
ETH_P_DSA_8021Q = 0xdadb
|
||||
ETH_P_ECONET = 0x18
|
||||
ETH_P_EDSA = 0xdada
|
||||
ETH_P_ERSPAN = 0x88be
|
||||
|
@ -501,6 +624,7 @@ const (
|
|||
FAN_ALL_MARK_FLAGS = 0xff
|
||||
FAN_ALL_OUTGOING_EVENTS = 0x3403b
|
||||
FAN_ALL_PERM_EVENTS = 0x30000
|
||||
FAN_ATTRIB = 0x4
|
||||
FAN_AUDIT = 0x10
|
||||
FAN_CLASS_CONTENT = 0x4
|
||||
FAN_CLASS_NOTIF = 0x0
|
||||
|
@ -509,8 +633,12 @@ const (
|
|||
FAN_CLOSE = 0x18
|
||||
FAN_CLOSE_NOWRITE = 0x10
|
||||
FAN_CLOSE_WRITE = 0x8
|
||||
FAN_CREATE = 0x100
|
||||
FAN_DELETE = 0x200
|
||||
FAN_DELETE_SELF = 0x400
|
||||
FAN_DENY = 0x2
|
||||
FAN_ENABLE_AUDIT = 0x40
|
||||
FAN_EVENT_INFO_TYPE_FID = 0x1
|
||||
FAN_EVENT_METADATA_LEN = 0x18
|
||||
FAN_EVENT_ON_CHILD = 0x8000000
|
||||
FAN_MARK_ADD = 0x1
|
||||
|
@ -524,6 +652,10 @@ const (
|
|||
FAN_MARK_ONLYDIR = 0x8
|
||||
FAN_MARK_REMOVE = 0x2
|
||||
FAN_MODIFY = 0x2
|
||||
FAN_MOVE = 0xc0
|
||||
FAN_MOVED_FROM = 0x40
|
||||
FAN_MOVED_TO = 0x80
|
||||
FAN_MOVE_SELF = 0x800
|
||||
FAN_NOFD = -0x1
|
||||
FAN_NONBLOCK = 0x2
|
||||
FAN_ONDIR = 0x40000000
|
||||
|
@ -532,6 +664,7 @@ const (
|
|||
FAN_OPEN_EXEC_PERM = 0x40000
|
||||
FAN_OPEN_PERM = 0x10000
|
||||
FAN_Q_OVERFLOW = 0x4000
|
||||
FAN_REPORT_FID = 0x200
|
||||
FAN_REPORT_TID = 0x100
|
||||
FAN_UNLIMITED_MARKS = 0x20
|
||||
FAN_UNLIMITED_QUEUE = 0x10
|
||||
|
@ -1015,6 +1148,20 @@ const (
|
|||
LOCK_NB = 0x4
|
||||
LOCK_SH = 0x1
|
||||
LOCK_UN = 0x8
|
||||
LOOP_CLR_FD = 0x4c01
|
||||
LOOP_CTL_ADD = 0x4c80
|
||||
LOOP_CTL_GET_FREE = 0x4c82
|
||||
LOOP_CTL_REMOVE = 0x4c81
|
||||
LOOP_GET_STATUS = 0x4c03
|
||||
LOOP_GET_STATUS64 = 0x4c05
|
||||
LOOP_SET_BLOCK_SIZE = 0x4c09
|
||||
LOOP_SET_CAPACITY = 0x4c07
|
||||
LOOP_SET_DIRECT_IO = 0x4c08
|
||||
LOOP_SET_FD = 0x4c00
|
||||
LOOP_SET_STATUS = 0x4c02
|
||||
LOOP_SET_STATUS64 = 0x4c04
|
||||
LO_KEY_SIZE = 0x20
|
||||
LO_NAME_SIZE = 0x40
|
||||
MADV_DODUMP = 0x11
|
||||
MADV_DOFORK = 0xb
|
||||
MADV_DONTDUMP = 0x10
|
||||
|
@ -1054,6 +1201,15 @@ const (
|
|||
MAP_STACK = 0x20000
|
||||
MAP_SYNC = 0x80000
|
||||
MAP_TYPE = 0xf
|
||||
MCAST_BLOCK_SOURCE = 0x2b
|
||||
MCAST_EXCLUDE = 0x0
|
||||
MCAST_INCLUDE = 0x1
|
||||
MCAST_JOIN_GROUP = 0x2a
|
||||
MCAST_JOIN_SOURCE_GROUP = 0x2e
|
||||
MCAST_LEAVE_GROUP = 0x2d
|
||||
MCAST_LEAVE_SOURCE_GROUP = 0x2f
|
||||
MCAST_MSFILTER = 0x30
|
||||
MCAST_UNBLOCK_SOURCE = 0x2c
|
||||
MCL_CURRENT = 0x1
|
||||
MCL_FUTURE = 0x2
|
||||
MCL_ONFAULT = 0x4
|
||||
|
@ -1489,6 +1645,7 @@ const (
|
|||
PR_SET_TSC = 0x1a
|
||||
PR_SET_UNALIGN = 0x6
|
||||
PR_SPEC_DISABLE = 0x4
|
||||
PR_SPEC_DISABLE_NOEXEC = 0x10
|
||||
PR_SPEC_ENABLE = 0x2
|
||||
PR_SPEC_FORCE_DISABLE = 0x8
|
||||
PR_SPEC_INDIRECT_BRANCH = 0x1
|
||||
|
@ -1929,6 +2086,10 @@ const (
|
|||
SIOCGSKNS = 0x894c
|
||||
SIOCGSTAMP = 0x8906
|
||||
SIOCGSTAMPNS = 0x8907
|
||||
SIOCGSTAMPNS_NEW = 0x80108907
|
||||
SIOCGSTAMPNS_OLD = 0x8907
|
||||
SIOCGSTAMP_NEW = 0x80108906
|
||||
SIOCGSTAMP_OLD = 0x8906
|
||||
SIOCINQ = 0x541b
|
||||
SIOCOUTQ = 0x5411
|
||||
SIOCOUTQNSD = 0x894b
|
||||
|
@ -2022,6 +2183,7 @@ const (
|
|||
SO_ATTACH_REUSEPORT_CBPF = 0x33
|
||||
SO_ATTACH_REUSEPORT_EBPF = 0x34
|
||||
SO_BINDTODEVICE = 0x19
|
||||
SO_BINDTOIFINDEX = 0x3e
|
||||
SO_BPF_EXTENSIONS = 0x30
|
||||
SO_BROADCAST = 0x6
|
||||
SO_BSDCOMPAT = 0xe
|
||||
|
@ -2070,6 +2232,8 @@ const (
|
|||
SO_RCVBUFFORCE = 0x21
|
||||
SO_RCVLOWAT = 0x12
|
||||
SO_RCVTIMEO = 0x14
|
||||
SO_RCVTIMEO_NEW = 0x42
|
||||
SO_RCVTIMEO_OLD = 0x14
|
||||
SO_REUSEADDR = 0x2
|
||||
SO_REUSEPORT = 0xf
|
||||
SO_RXQ_OVFL = 0x28
|
||||
|
@ -2081,9 +2245,17 @@ const (
|
|||
SO_SNDBUFFORCE = 0x20
|
||||
SO_SNDLOWAT = 0x13
|
||||
SO_SNDTIMEO = 0x15
|
||||
SO_SNDTIMEO_NEW = 0x43
|
||||
SO_SNDTIMEO_OLD = 0x15
|
||||
SO_TIMESTAMP = 0x1d
|
||||
SO_TIMESTAMPING = 0x25
|
||||
SO_TIMESTAMPING_NEW = 0x41
|
||||
SO_TIMESTAMPING_OLD = 0x25
|
||||
SO_TIMESTAMPNS = 0x23
|
||||
SO_TIMESTAMPNS_NEW = 0x40
|
||||
SO_TIMESTAMPNS_OLD = 0x23
|
||||
SO_TIMESTAMP_NEW = 0x3f
|
||||
SO_TIMESTAMP_OLD = 0x1d
|
||||
SO_TXTIME = 0x3d
|
||||
SO_TYPE = 0x3
|
||||
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
|
||||
|
@ -2125,6 +2297,7 @@ const (
|
|||
SYNC_FILE_RANGE_WAIT_AFTER = 0x4
|
||||
SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
|
||||
SYNC_FILE_RANGE_WRITE = 0x2
|
||||
SYNC_FILE_RANGE_WRITE_AND_WAIT = 0x7
|
||||
SYSFS_MAGIC = 0x62656572
|
||||
S_BLKSIZE = 0x200
|
||||
S_IEXEC = 0x40
|
||||
|
@ -2176,6 +2349,8 @@ const (
|
|||
TCOFLUSH = 0x1
|
||||
TCOOFF = 0x0
|
||||
TCOON = 0x1
|
||||
TCP_BPF_IW = 0x3e9
|
||||
TCP_BPF_SNDCWND_CLAMP = 0x3ea
|
||||
TCP_CC_INFO = 0x1a
|
||||
TCP_CM_INQ = 0x24
|
||||
TCP_CONGESTION = 0xd
|
||||
|
@ -2342,6 +2517,7 @@ const (
|
|||
TS_COMM_LEN = 0x20
|
||||
TUNATTACHFILTER = 0x401054d5
|
||||
TUNDETACHFILTER = 0x401054d6
|
||||
TUNGETDEVNETNS = 0x54e3
|
||||
TUNGETFEATURES = 0x800454cf
|
||||
TUNGETFILTER = 0x801054db
|
||||
TUNGETIFF = 0x800454d2
|
||||
|
@ -2377,8 +2553,10 @@ const (
|
|||
UBI_IOCMKVOL = 0x40986f00
|
||||
UBI_IOCRMVOL = 0x40046f01
|
||||
UBI_IOCRNVOL = 0x51106f03
|
||||
UBI_IOCRPEB = 0x40046f04
|
||||
UBI_IOCRSVOL = 0x400c6f02
|
||||
UBI_IOCSETVOLPROP = 0x40104f06
|
||||
UBI_IOCSPEB = 0x40046f05
|
||||
UBI_IOCVOLCRBLK = 0x40804f07
|
||||
UBI_IOCVOLRMBLK = 0x4f08
|
||||
UBI_IOCVOLUP = 0x40084f00
|
||||
|
@ -2526,6 +2704,7 @@ const (
|
|||
XDP_FLAGS_SKB_MODE = 0x2
|
||||
XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
|
||||
XDP_MMAP_OFFSETS = 0x1
|
||||
XDP_PACKET_HEADROOM = 0x100
|
||||
XDP_PGOFF_RX_RING = 0x0
|
||||
XDP_PGOFF_TX_RING = 0x80000000
|
||||
XDP_RX_RING = 0x2
|
||||
|
|
|
@ -199,11 +199,70 @@ const (
|
|||
BPF_A = 0x10
|
||||
BPF_ABS = 0x20
|
||||
BPF_ADD = 0x0
|
||||
BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff
|
||||
BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38
|
||||
BPF_ALU = 0x4
|
||||
BPF_ALU64 = 0x7
|
||||
BPF_AND = 0x50
|
||||
BPF_ANY = 0x0
|
||||
BPF_ARSH = 0xc0
|
||||
BPF_B = 0x10
|
||||
BPF_BUILD_ID_SIZE = 0x14
|
||||
BPF_CALL = 0x80
|
||||
BPF_DEVCG_ACC_MKNOD = 0x1
|
||||
BPF_DEVCG_ACC_READ = 0x2
|
||||
BPF_DEVCG_ACC_WRITE = 0x4
|
||||
BPF_DEVCG_DEV_BLOCK = 0x1
|
||||
BPF_DEVCG_DEV_CHAR = 0x2
|
||||
BPF_DIV = 0x30
|
||||
BPF_DW = 0x18
|
||||
BPF_END = 0xd0
|
||||
BPF_EXIST = 0x2
|
||||
BPF_EXIT = 0x90
|
||||
BPF_FROM_BE = 0x8
|
||||
BPF_FROM_LE = 0x0
|
||||
BPF_FS_MAGIC = 0xcafe4a11
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2
|
||||
BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8
|
||||
BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10
|
||||
BPF_F_ADJ_ROOM_FIXED_GSO = 0x1
|
||||
BPF_F_ALLOW_MULTI = 0x2
|
||||
BPF_F_ALLOW_OVERRIDE = 0x1
|
||||
BPF_F_ANY_ALIGNMENT = 0x2
|
||||
BPF_F_CTXLEN_MASK = 0xfffff00000000
|
||||
BPF_F_CURRENT_CPU = 0xffffffff
|
||||
BPF_F_CURRENT_NETNS = -0x1
|
||||
BPF_F_DONT_FRAGMENT = 0x4
|
||||
BPF_F_FAST_STACK_CMP = 0x200
|
||||
BPF_F_HDR_FIELD_MASK = 0xf
|
||||
BPF_F_INDEX_MASK = 0xffffffff
|
||||
BPF_F_INGRESS = 0x1
|
||||
BPF_F_INVALIDATE_HASH = 0x2
|
||||
BPF_F_LOCK = 0x4
|
||||
BPF_F_MARK_ENFORCE = 0x40
|
||||
BPF_F_MARK_MANGLED_0 = 0x20
|
||||
BPF_F_NO_COMMON_LRU = 0x2
|
||||
BPF_F_NO_PREALLOC = 0x1
|
||||
BPF_F_NUMA_NODE = 0x4
|
||||
BPF_F_PSEUDO_HDR = 0x10
|
||||
BPF_F_QUERY_EFFECTIVE = 0x1
|
||||
BPF_F_RDONLY = 0x8
|
||||
BPF_F_RDONLY_PROG = 0x80
|
||||
BPF_F_RECOMPUTE_CSUM = 0x1
|
||||
BPF_F_REUSE_STACKID = 0x400
|
||||
BPF_F_SEQ_NUMBER = 0x8
|
||||
BPF_F_SKIP_FIELD_MASK = 0xff
|
||||
BPF_F_STACK_BUILD_ID = 0x20
|
||||
BPF_F_STRICT_ALIGNMENT = 0x1
|
||||
BPF_F_SYSCTL_BASE_NAME = 0x1
|
||||
BPF_F_TUNINFO_IPV6 = 0x1
|
||||
BPF_F_USER_BUILD_ID = 0x800
|
||||
BPF_F_USER_STACK = 0x100
|
||||
BPF_F_WRONLY = 0x10
|
||||
BPF_F_WRONLY_PROG = 0x100
|
||||
BPF_F_ZERO_CSUM_TX = 0x2
|
||||
BPF_F_ZERO_SEED = 0x40
|
||||
BPF_H = 0x8
|
||||
BPF_IMM = 0x0
|
||||
BPF_IND = 0x40
|
||||
|
@ -211,8 +270,16 @@ const (
|
|||
BPF_JEQ = 0x10
|
||||
BPF_JGE = 0x30
|
||||
BPF_JGT = 0x20
|
||||
BPF_JLE = 0xb0
|
||||
BPF_JLT = 0xa0
|
||||
BPF_JMP = 0x5
|
||||
BPF_JMP32 = 0x6
|
||||
BPF_JNE = 0x50
|
||||
BPF_JSET = 0x40
|
||||
BPF_JSGE = 0x70
|
||||
BPF_JSGT = 0x60
|
||||
BPF_JSLE = 0xd0
|
||||
BPF_JSLT = 0xc0
|
||||
BPF_K = 0x0
|
||||
BPF_LD = 0x0
|
||||
BPF_LDX = 0x1
|
||||
|
@ -226,20 +293,35 @@ const (
|
|||
BPF_MINOR_VERSION = 0x1
|
||||
BPF_MISC = 0x7
|
||||
BPF_MOD = 0x90
|
||||
BPF_MOV = 0xb0
|
||||
BPF_MSH = 0xa0
|
||||
BPF_MUL = 0x20
|
||||
BPF_NEG = 0x80
|
||||
BPF_NET_OFF = -0x100000
|
||||
BPF_NOEXIST = 0x1
|
||||
BPF_OBJ_NAME_LEN = 0x10
|
||||
BPF_OR = 0x40
|
||||
BPF_PSEUDO_CALL = 0x1
|
||||
BPF_PSEUDO_MAP_FD = 0x1
|
||||
BPF_PSEUDO_MAP_VALUE = 0x2
|
||||
BPF_RET = 0x6
|
||||
BPF_RSH = 0x70
|
||||
BPF_SK_STORAGE_GET_F_CREATE = 0x1
|
||||
BPF_SOCK_OPS_ALL_CB_FLAGS = 0x7
|
||||
BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2
|
||||
BPF_SOCK_OPS_RTO_CB_FLAG = 0x1
|
||||
BPF_SOCK_OPS_STATE_CB_FLAG = 0x4
|
||||
BPF_ST = 0x2
|
||||
BPF_STX = 0x3
|
||||
BPF_SUB = 0x10
|
||||
BPF_TAG_SIZE = 0x8
|
||||
BPF_TAX = 0x0
|
||||
BPF_TO_BE = 0x8
|
||||
BPF_TO_LE = 0x0
|
||||
BPF_TXA = 0x80
|
||||
BPF_W = 0x0
|
||||
BPF_X = 0x8
|
||||
BPF_XADD = 0xc0
|
||||
BPF_XOR = 0xa0
|
||||
BRKINT = 0x2
|
||||
BS0 = 0x0
|
||||
|
@ -267,6 +349,45 @@ const (
|
|||
CAN_SFF_MASK = 0x7ff
|
||||
CAN_TP16 = 0x3
|
||||
CAN_TP20 = 0x4
|
||||
CAP_AUDIT_CONTROL = 0x1e
|
||||
CAP_AUDIT_READ = 0x25
|
||||
CAP_AUDIT_WRITE = 0x1d
|
||||
CAP_BLOCK_SUSPEND = 0x24
|
||||
CAP_CHOWN = 0x0
|
||||
CAP_DAC_OVERRIDE = 0x1
|
||||
CAP_DAC_READ_SEARCH = 0x2
|
||||
CAP_FOWNER = 0x3
|
||||
CAP_FSETID = 0x4
|
||||
CAP_IPC_LOCK = 0xe
|
||||
CAP_IPC_OWNER = 0xf
|
||||
CAP_KILL = 0x5
|
||||
CAP_LAST_CAP = 0x25
|
||||
CAP_LEASE = 0x1c
|
||||
CAP_LINUX_IMMUTABLE = 0x9
|
||||
CAP_MAC_ADMIN = 0x21
|
||||
CAP_MAC_OVERRIDE = 0x20
|
||||
CAP_MKNOD = 0x1b
|
||||
CAP_NET_ADMIN = 0xc
|
||||
CAP_NET_BIND_SERVICE = 0xa
|
||||
CAP_NET_BROADCAST = 0xb
|
||||
CAP_NET_RAW = 0xd
|
||||
CAP_SETFCAP = 0x1f
|
||||
CAP_SETGID = 0x6
|
||||
CAP_SETPCAP = 0x8
|
||||
CAP_SETUID = 0x7
|
||||
CAP_SYSLOG = 0x22
|
||||
CAP_SYS_ADMIN = 0x15
|
||||
CAP_SYS_BOOT = 0x16
|
||||
CAP_SYS_CHROOT = 0x12
|
||||
CAP_SYS_MODULE = 0x10
|
||||
CAP_SYS_NICE = 0x17
|
||||
CAP_SYS_PACCT = 0x14
|
||||
CAP_SYS_PTRACE = 0x13
|
||||
CAP_SYS_RAWIO = 0x11
|
||||
CAP_SYS_RESOURCE = 0x18
|
||||
CAP_SYS_TIME = 0x19
|
||||
CAP_SYS_TTY_CONFIG = 0x1a
|
||||
CAP_WAKE_ALARM = 0x23
|
||||
CBAUD = 0x100f
|
||||
CBAUDEX = 0x1000
|
||||
CFLUSH = 0xf
|
||||
|
@ -305,6 +426,7 @@ const (
|
|||
CLONE_NEWUTS = 0x4000000
|
||||
CLONE_PARENT = 0x8000
|
||||
CLONE_PARENT_SETTID = 0x100000
|
||||
CLONE_PIDFD = 0x1000
|
||||
CLONE_PTRACE = 0x2000
|
||||
CLONE_SETTLS = 0x80000
|
||||
CLONE_SIGHAND = 0x800
|
||||
|
@ -422,6 +544,7 @@ const (
|
|||
ETH_P_DNA_RC = 0x6002
|
||||
ETH_P_DNA_RT = 0x6003
|
||||
ETH_P_DSA = 0x1b
|
||||
ETH_P_DSA_8021Q = 0xdadb
|
||||
ETH_P_ECONET = 0x18
|
||||
ETH_P_EDSA = 0xdada
|
||||
ETH_P_ERSPAN = 0x88be
|
||||
|
@ -505,6 +628,7 @@ const (
|
|||
FAN_ALL_MARK_FLAGS = 0xff
|
||||
FAN_ALL_OUTGOING_EVENTS = 0x3403b
|
||||
FAN_ALL_PERM_EVENTS = 0x30000
|
||||
FAN_ATTRIB = 0x4
|
||||
FAN_AUDIT = 0x10
|
||||
FAN_CLASS_CONTENT = 0x4
|
||||
FAN_CLASS_NOTIF = 0x0
|
||||
|
@ -513,8 +637,12 @@ const (
|
|||
FAN_CLOSE = 0x18
|
||||
FAN_CLOSE_NOWRITE = 0x10
|
||||
FAN_CLOSE_WRITE = 0x8
|
||||
FAN_CREATE = 0x100
|
||||
FAN_DELETE = 0x200
|
||||
FAN_DELETE_SELF = 0x400
|
||||
FAN_DENY = 0x2
|
||||
FAN_ENABLE_AUDIT = 0x40
|
||||
FAN_EVENT_INFO_TYPE_FID = 0x1
|
||||
FAN_EVENT_METADATA_LEN = 0x18
|
||||
FAN_EVENT_ON_CHILD = 0x8000000
|
||||
FAN_MARK_ADD = 0x1
|
||||
|
@ -528,6 +656,10 @@ const (
|
|||
FAN_MARK_ONLYDIR = 0x8
|
||||
FAN_MARK_REMOVE = 0x2
|
||||
FAN_MODIFY = 0x2
|
||||
FAN_MOVE = 0xc0
|
||||
FAN_MOVED_FROM = 0x40
|
||||
FAN_MOVED_TO = 0x80
|
||||
FAN_MOVE_SELF = 0x800
|
||||
FAN_NOFD = -0x1
|
||||
FAN_NONBLOCK = 0x2
|
||||
FAN_ONDIR = 0x40000000
|
||||
|
@ -536,6 +668,7 @@ const (
|
|||
FAN_OPEN_EXEC_PERM = 0x40000
|
||||
FAN_OPEN_PERM = 0x10000
|
||||
FAN_Q_OVERFLOW = 0x4000
|
||||
FAN_REPORT_FID = 0x200
|
||||
FAN_REPORT_TID = 0x100
|
||||
FAN_UNLIMITED_MARKS = 0x20
|
||||
FAN_UNLIMITED_QUEUE = 0x10
|
||||
|
@ -1019,6 +1152,20 @@ const (
|
|||
LOCK_NB = 0x4
|
||||
LOCK_SH = 0x1
|
||||
LOCK_UN = 0x8
|
||||
LOOP_CLR_FD = 0x4c01
|
||||
LOOP_CTL_ADD = 0x4c80
|
||||
LOOP_CTL_GET_FREE = 0x4c82
|
||||
LOOP_CTL_REMOVE = 0x4c81
|
||||
LOOP_GET_STATUS = 0x4c03
|
||||
LOOP_GET_STATUS64 = 0x4c05
|
||||
LOOP_SET_BLOCK_SIZE = 0x4c09
|
||||
LOOP_SET_CAPACITY = 0x4c07
|
||||
LOOP_SET_DIRECT_IO = 0x4c08
|
||||
LOOP_SET_FD = 0x4c00
|
||||
LOOP_SET_STATUS = 0x4c02
|
||||
LOOP_SET_STATUS64 = 0x4c04
|
||||
LO_KEY_SIZE = 0x20
|
||||
LO_NAME_SIZE = 0x40
|
||||
MADV_DODUMP = 0x11
|
||||
MADV_DOFORK = 0xb
|
||||
MADV_DONTDUMP = 0x10
|
||||
|
@ -1058,6 +1205,15 @@ const (
|
|||
MAP_SHARED_VALIDATE = 0x3
|
||||
MAP_STACK = 0x20000
|
||||
MAP_TYPE = 0xf
|
||||
MCAST_BLOCK_SOURCE = 0x2b
|
||||
MCAST_EXCLUDE = 0x0
|
||||
MCAST_INCLUDE = 0x1
|
||||
MCAST_JOIN_GROUP = 0x2a
|
||||
MCAST_JOIN_SOURCE_GROUP = 0x2e
|
||||
MCAST_LEAVE_GROUP = 0x2d
|
||||
MCAST_LEAVE_SOURCE_GROUP = 0x2f
|
||||
MCAST_MSFILTER = 0x30
|
||||
MCAST_UNBLOCK_SOURCE = 0x2c
|
||||
MCL_CURRENT = 0x2000
|
||||
MCL_FUTURE = 0x4000
|
||||
MCL_ONFAULT = 0x8000
|
||||
|
@ -1493,6 +1649,7 @@ const (
|
|||
PR_SET_TSC = 0x1a
|
||||
PR_SET_UNALIGN = 0x6
|
||||
PR_SPEC_DISABLE = 0x4
|
||||
PR_SPEC_DISABLE_NOEXEC = 0x10
|
||||
PR_SPEC_ENABLE = 0x2
|
||||
PR_SPEC_FORCE_DISABLE = 0x8
|
||||
PR_SPEC_INDIRECT_BRANCH = 0x1
|
||||
|
@ -1921,6 +2078,10 @@ const (
|
|||
SIOCGSKNS = 0x894c
|
||||
SIOCGSTAMP = 0x8906
|
||||
SIOCGSTAMPNS = 0x8907
|
||||
SIOCGSTAMPNS_NEW = 0x40108907
|
||||
SIOCGSTAMPNS_OLD = 0x8907
|
||||
SIOCGSTAMP_NEW = 0x40108906
|
||||
SIOCGSTAMP_OLD = 0x8906
|
||||
SIOCINQ = 0x4004667f
|
||||
SIOCOUTQ = 0x40047473
|
||||
SIOCOUTQNSD = 0x894b
|
||||
|
@ -2014,6 +2175,7 @@ const (
|
|||
SO_ATTACH_REUSEPORT_CBPF = 0x35
|
||||
SO_ATTACH_REUSEPORT_EBPF = 0x36
|
||||
SO_BINDTODEVICE = 0xd
|
||||
SO_BINDTOIFINDEX = 0x41
|
||||
SO_BPF_EXTENSIONS = 0x32
|
||||
SO_BROADCAST = 0x20
|
||||
SO_BSDCOMPAT = 0x400
|
||||
|
@ -2062,6 +2224,8 @@ const (
|
|||
SO_RCVBUFFORCE = 0x100b
|
||||
SO_RCVLOWAT = 0x800
|
||||
SO_RCVTIMEO = 0x2000
|
||||
SO_RCVTIMEO_NEW = 0x44
|
||||
SO_RCVTIMEO_OLD = 0x2000
|
||||
SO_REUSEADDR = 0x4
|
||||
SO_REUSEPORT = 0x200
|
||||
SO_RXQ_OVFL = 0x24
|
||||
|
@ -2073,9 +2237,17 @@ const (
|
|||
SO_SNDBUFFORCE = 0x100a
|
||||
SO_SNDLOWAT = 0x1000
|
||||
SO_SNDTIMEO = 0x4000
|
||||
SO_SNDTIMEO_NEW = 0x45
|
||||
SO_SNDTIMEO_OLD = 0x4000
|
||||
SO_TIMESTAMP = 0x1d
|
||||
SO_TIMESTAMPING = 0x23
|
||||
SO_TIMESTAMPING_NEW = 0x43
|
||||
SO_TIMESTAMPING_OLD = 0x23
|
||||
SO_TIMESTAMPNS = 0x21
|
||||
SO_TIMESTAMPNS_NEW = 0x42
|
||||
SO_TIMESTAMPNS_OLD = 0x21
|
||||
SO_TIMESTAMP_NEW = 0x46
|
||||
SO_TIMESTAMP_OLD = 0x1d
|
||||
SO_TXTIME = 0x3f
|
||||
SO_TYPE = 0x1008
|
||||
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
|
||||
|
@ -2117,6 +2289,7 @@ const (
|
|||
SYNC_FILE_RANGE_WAIT_AFTER = 0x4
|
||||
SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
|
||||
SYNC_FILE_RANGE_WRITE = 0x2
|
||||
SYNC_FILE_RANGE_WRITE_AND_WAIT = 0x7
|
||||
SYSFS_MAGIC = 0x62656572
|
||||
S_BLKSIZE = 0x200
|
||||
S_IEXEC = 0x40
|
||||
|
@ -2167,6 +2340,8 @@ const (
|
|||
TCOFLUSH = 0x1
|
||||
TCOOFF = 0x0
|
||||
TCOON = 0x1
|
||||
TCP_BPF_IW = 0x3e9
|
||||
TCP_BPF_SNDCWND_CLAMP = 0x3ea
|
||||
TCP_CC_INFO = 0x1a
|
||||
TCP_CM_INQ = 0x24
|
||||
TCP_CONGESTION = 0xd
|
||||
|
@ -2331,6 +2506,7 @@ const (
|
|||
TS_COMM_LEN = 0x20
|
||||
TUNATTACHFILTER = 0x801054d5
|
||||
TUNDETACHFILTER = 0x801054d6
|
||||
TUNGETDEVNETNS = 0x200054e3
|
||||
TUNGETFEATURES = 0x400454cf
|
||||
TUNGETFILTER = 0x401054db
|
||||
TUNGETIFF = 0x400454d2
|
||||
|
@ -2366,8 +2542,10 @@ const (
|
|||
UBI_IOCMKVOL = 0x80986f00
|
||||
UBI_IOCRMVOL = 0x80046f01
|
||||
UBI_IOCRNVOL = 0x91106f03
|
||||
UBI_IOCRPEB = 0x80046f04
|
||||
UBI_IOCRSVOL = 0x800c6f02
|
||||
UBI_IOCSETVOLPROP = 0x80104f06
|
||||
UBI_IOCSPEB = 0x80046f05
|
||||
UBI_IOCVOLCRBLK = 0x80804f07
|
||||
UBI_IOCVOLRMBLK = 0x20004f08
|
||||
UBI_IOCVOLUP = 0x80084f00
|
||||
|
@ -2515,6 +2693,7 @@ const (
|
|||
XDP_FLAGS_SKB_MODE = 0x2
|
||||
XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
|
||||
XDP_MMAP_OFFSETS = 0x1
|
||||
XDP_PACKET_HEADROOM = 0x100
|
||||
XDP_PGOFF_RX_RING = 0x0
|
||||
XDP_PGOFF_TX_RING = 0x80000000
|
||||
XDP_RX_RING = 0x2
|
||||
|
|
|
@ -859,7 +859,7 @@ func Fchown(fd int, uid int, gid int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fstat(fd int, stat *Stat_t) (err error) {
|
||||
func fstat(fd int, stat *Stat_t) (err error) {
|
||||
r0, er := C.fstat(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(stat))))
|
||||
if r0 == -1 && er != nil {
|
||||
err = er
|
||||
|
@ -869,7 +869,7 @@ func Fstat(fd int, stat *Stat_t) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
|
||||
func fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
|
||||
_p0 := uintptr(unsafe.Pointer(C.CString(path)))
|
||||
r0, er := C.fstatat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat))), C.int(flags))
|
||||
if r0 == -1 && er != nil {
|
||||
|
@ -953,7 +953,7 @@ func Listen(s int, n int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Lstat(path string, stat *Stat_t) (err error) {
|
||||
func lstat(path string, stat *Stat_t) (err error) {
|
||||
_p0 := uintptr(unsafe.Pointer(C.CString(path)))
|
||||
r0, er := C.lstat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat))))
|
||||
if r0 == -1 && er != nil {
|
||||
|
@ -1071,9 +1071,9 @@ func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n i
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Stat(path string, stat *Stat_t) (err error) {
|
||||
func stat(path string, statptr *Stat_t) (err error) {
|
||||
_p0 := uintptr(unsafe.Pointer(C.CString(path)))
|
||||
r0, er := C.stat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat))))
|
||||
r0, er := C.stat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(statptr))))
|
||||
if r0 == -1 && er != nil {
|
||||
err = er
|
||||
}
|
||||
|
|
|
@ -803,7 +803,7 @@ func Fchown(fd int, uid int, gid int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fstat(fd int, stat *Stat_t) (err error) {
|
||||
func fstat(fd int, stat *Stat_t) (err error) {
|
||||
_, e1 := callfstat(fd, uintptr(unsafe.Pointer(stat)))
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
|
@ -813,7 +813,7 @@ func Fstat(fd int, stat *Stat_t) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
|
||||
func fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
if err != nil {
|
||||
|
@ -905,7 +905,7 @@ func Listen(s int, n int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Lstat(path string, stat *Stat_t) (err error) {
|
||||
func lstat(path string, stat *Stat_t) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
if err != nil {
|
||||
|
@ -1023,13 +1023,13 @@ func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n i
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Stat(path string, stat *Stat_t) (err error) {
|
||||
func stat(path string, statptr *Stat_t) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
_, e1 := callstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)))
|
||||
_, e1 := callstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(statptr)))
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
|
|
|
@ -941,8 +941,8 @@ func callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func callstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) {
|
||||
r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_stat)), 2, _p0, stat, 0, 0, 0, 0)
|
||||
func callstat(_p0 uintptr, statptr uintptr) (r1 uintptr, e1 Errno) {
|
||||
r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_stat)), 2, _p0, statptr, 0, 0, 0, 0)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -783,8 +783,8 @@ func callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func callstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) {
|
||||
r1 = uintptr(C.stat(C.uintptr_t(_p0), C.uintptr_t(stat)))
|
||||
func callstat(_p0 uintptr, statptr uintptr) (r1 uintptr, e1 Errno) {
|
||||
r1 = uintptr(C.stat(C.uintptr_t(_p0), C.uintptr_t(statptr)))
|
||||
e1 = syscall.GetErrno()
|
||||
return
|
||||
}
|
||||
|
|
|
@ -749,6 +749,23 @@ func Ftruncate(fd int, length int64) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Getdents(fd int, buf []byte) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(buf) > 0 {
|
||||
_p0 = unsafe.Pointer(&buf[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(buf) > 0 {
|
||||
|
|
|
@ -387,6 +387,16 @@ func pipe2(p *[2]_C_int, flags int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func ptrace(request int, pid int, addr uintptr, data int) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Getcwd(buf []byte) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(buf) > 0 {
|
||||
|
@ -1019,7 +1029,7 @@ func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func getdirentries_freebsd12(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
||||
func getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(buf) > 0 {
|
||||
_p0 = unsafe.Pointer(&buf[0])
|
||||
|
|
|
@ -387,6 +387,16 @@ func pipe2(p *[2]_C_int, flags int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func ptrace(request int, pid int, addr uintptr, data int) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Getcwd(buf []byte) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(buf) > 0 {
|
||||
|
@ -1019,7 +1029,7 @@ func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func getdirentries_freebsd12(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
||||
func getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(buf) > 0 {
|
||||
_p0 = unsafe.Pointer(&buf[0])
|
||||
|
|
|
@ -387,6 +387,16 @@ func pipe2(p *[2]_C_int, flags int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func ptrace(request int, pid int, addr uintptr, data int) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Getcwd(buf []byte) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(buf) > 0 {
|
||||
|
@ -1019,7 +1029,7 @@ func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func getdirentries_freebsd12(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
||||
func getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(buf) > 0 {
|
||||
_p0 = unsafe.Pointer(&buf[0])
|
||||
|
|
|
@ -404,6 +404,16 @@ func Getcwd(buf []byte) (n int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func ptrace(request int, pid int, addr uintptr, data int) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func ioctl(fd int, req uint, arg uintptr) (err error) {
|
||||
_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
|
||||
if e1 != 0 {
|
||||
|
@ -1019,7 +1029,7 @@ func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func getdirentries_freebsd12(fd int, buf []byte, basep *uintptr) (n int, err error) {
|
||||
func getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(buf) > 0 {
|
||||
_p0 = unsafe.Pointer(&buf[0])
|
||||
|
|
|
@ -408,6 +408,26 @@ func Adjtimex(buf *Timex) (state int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capget(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capset(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Chdir(path string) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
@ -1381,8 +1401,12 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Signalfd(fd int, mask *Sigset_t, flags int) {
|
||||
SyscallNoError(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(mask)), uintptr(flags))
|
||||
func signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)
|
||||
newfd = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -408,6 +408,26 @@ func Adjtimex(buf *Timex) (state int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capget(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capset(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Chdir(path string) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
@ -1381,8 +1401,12 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Signalfd(fd int, mask *Sigset_t, flags int) {
|
||||
SyscallNoError(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(mask)), uintptr(flags))
|
||||
func signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)
|
||||
newfd = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -408,6 +408,26 @@ func Adjtimex(buf *Timex) (state int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capget(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capset(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Chdir(path string) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
@ -1381,8 +1401,12 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Signalfd(fd int, mask *Sigset_t, flags int) {
|
||||
SyscallNoError(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(mask)), uintptr(flags))
|
||||
func signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)
|
||||
newfd = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -2366,3 +2390,18 @@ func armSyncFileRange(fd int, flags int, off int64, n int64) (err error) {
|
|||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(cmdline)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
|
@ -408,6 +408,26 @@ func Adjtimex(buf *Timex) (state int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capget(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capset(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Chdir(path string) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
@ -1381,8 +1401,12 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Signalfd(fd int, mask *Sigset_t, flags int) {
|
||||
SyscallNoError(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(mask)), uintptr(flags))
|
||||
func signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)
|
||||
newfd = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -408,6 +408,26 @@ func Adjtimex(buf *Timex) (state int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capget(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capset(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Chdir(path string) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
@ -1381,8 +1401,12 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Signalfd(fd int, mask *Sigset_t, flags int) {
|
||||
SyscallNoError(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(mask)), uintptr(flags))
|
||||
func signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)
|
||||
newfd = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -408,6 +408,26 @@ func Adjtimex(buf *Timex) (state int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capget(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capset(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Chdir(path string) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
@ -1381,8 +1401,12 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Signalfd(fd int, mask *Sigset_t, flags int) {
|
||||
SyscallNoError(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(mask)), uintptr(flags))
|
||||
func signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)
|
||||
newfd = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -408,6 +408,26 @@ func Adjtimex(buf *Timex) (state int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capget(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capset(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Chdir(path string) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
@ -1381,8 +1401,12 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Signalfd(fd int, mask *Sigset_t, flags int) {
|
||||
SyscallNoError(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(mask)), uintptr(flags))
|
||||
func signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)
|
||||
newfd = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -408,6 +408,26 @@ func Adjtimex(buf *Timex) (state int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capget(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capset(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Chdir(path string) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
@ -1381,8 +1401,12 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Signalfd(fd int, mask *Sigset_t, flags int) {
|
||||
SyscallNoError(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(mask)), uintptr(flags))
|
||||
func signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)
|
||||
newfd = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -408,6 +408,26 @@ func Adjtimex(buf *Timex) (state int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capget(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capset(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Chdir(path string) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
@ -1381,8 +1401,12 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Signalfd(fd int, mask *Sigset_t, flags int) {
|
||||
SyscallNoError(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(mask)), uintptr(flags))
|
||||
func signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)
|
||||
newfd = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -408,6 +408,26 @@ func Adjtimex(buf *Timex) (state int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capget(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capset(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Chdir(path string) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
@ -1381,8 +1401,12 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Signalfd(fd int, mask *Sigset_t, flags int) {
|
||||
SyscallNoError(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(mask)), uintptr(flags))
|
||||
func signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)
|
||||
newfd = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -408,6 +408,26 @@ func Adjtimex(buf *Timex) (state int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capget(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capset(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Chdir(path string) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
@ -1381,8 +1401,12 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Signalfd(fd int, mask *Sigset_t, flags int) {
|
||||
SyscallNoError(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(mask)), uintptr(flags))
|
||||
func signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)
|
||||
newfd = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -408,6 +408,26 @@ func Adjtimex(buf *Timex) (state int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capget(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capset(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Chdir(path string) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
@ -1381,8 +1401,12 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Signalfd(fd int, mask *Sigset_t, flags int) {
|
||||
SyscallNoError(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(mask)), uintptr(flags))
|
||||
func signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)
|
||||
newfd = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -408,6 +408,26 @@ func Adjtimex(buf *Timex) (state int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capget(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Capset(hdr *CapUserHeader, data *CapUserData) (err error) {
|
||||
_, _, e1 := Syscall(SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Chdir(path string) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
@ -1381,8 +1401,12 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Signalfd(fd int, mask *Sigset_t, flags int) {
|
||||
SyscallNoError(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(mask)), uintptr(flags))
|
||||
func signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)
|
||||
newfd = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -389,7 +389,7 @@ func pipe() (fd1 int, fd2 int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func getdents(fd int, buf []byte) (n int, err error) {
|
||||
func Getdents(fd int, buf []byte) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(buf) > 0 {
|
||||
_p0 = unsafe.Pointer(&buf[0])
|
||||
|
|
|
@ -389,7 +389,7 @@ func pipe() (fd1 int, fd2 int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func getdents(fd int, buf []byte) (n int, err error) {
|
||||
func Getdents(fd int, buf []byte) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(buf) > 0 {
|
||||
_p0 = unsafe.Pointer(&buf[0])
|
||||
|
|
|
@ -389,7 +389,7 @@ func pipe() (fd1 int, fd2 int, err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func getdents(fd int, buf []byte) (n int, err error) {
|
||||
func Getdents(fd int, buf []byte) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(buf) > 0 {
|
||||
_p0 = unsafe.Pointer(&buf[0])
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue