Source file src/syscall/bpf_darwin.go

     1  // Copyright 2018 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // Berkeley packet filter for Darwin
     6  
     7  package syscall
     8  
     9  import (
    10  	"unsafe"
    11  )
    12  
    13  // Deprecated: Use golang.org/x/net/bpf instead.
    14  func BpfStmt(code, k int) *BpfInsn {
    15  	return &BpfInsn{Code: uint16(code), K: uint32(k)}
    16  }
    17  
    18  // Deprecated: Use golang.org/x/net/bpf instead.
    19  func BpfJump(code, k, jt, jf int) *BpfInsn {
    20  	return &BpfInsn{Code: uint16(code), Jt: uint8(jt), Jf: uint8(jf), K: uint32(k)}
    21  }
    22  
    23  // Deprecated: Use golang.org/x/net/bpf instead.
    24  func BpfBuflen(fd int) (int, error) {
    25  	var l int
    26  	err := ioctlPtr(fd, BIOCGBLEN, unsafe.Pointer(&l))
    27  	if err != nil {
    28  		return 0, err
    29  	}
    30  	return l, nil
    31  }
    32  
    33  // Deprecated: Use golang.org/x/net/bpf instead.
    34  func SetBpfBuflen(fd, l int) (int, error) {
    35  	err := ioctlPtr(fd, BIOCSBLEN, unsafe.Pointer(&l))
    36  	if err != nil {
    37  		return 0, err
    38  	}
    39  	return l, nil
    40  }
    41  
    42  // Deprecated: Use golang.org/x/net/bpf instead.
    43  func BpfDatalink(fd int) (int, error) {
    44  	var t int
    45  	err := ioctlPtr(fd, BIOCGDLT, unsafe.Pointer(&t))
    46  	if err != nil {
    47  		return 0, err
    48  	}
    49  	return t, nil
    50  }
    51  
    52  // Deprecated: Use golang.org/x/net/bpf instead.
    53  func SetBpfDatalink(fd, t int) (int, error) {
    54  	err := ioctlPtr(fd, BIOCSDLT, unsafe.Pointer(&t))
    55  	if err != nil {
    56  		return 0, err
    57  	}
    58  	return t, nil
    59  }
    60  
    61  // Deprecated: Use golang.org/x/net/bpf instead.
    62  func SetBpfPromisc(fd, m int) error {
    63  	err := ioctlPtr(fd, BIOCPROMISC, unsafe.Pointer(&m))
    64  	if err != nil {
    65  		return err
    66  	}
    67  	return nil
    68  }
    69  
    70  // Deprecated: Use golang.org/x/net/bpf instead.
    71  func FlushBpf(fd int) error {
    72  	err := ioctlPtr(fd, BIOCFLUSH, nil)
    73  	if err != nil {
    74  		return err
    75  	}
    76  	return nil
    77  }
    78  
    79  type ivalue struct {
    80  	name  [IFNAMSIZ]byte
    81  	value int16
    82  }
    83  
    84  // Deprecated: Use golang.org/x/net/bpf instead.
    85  func BpfInterface(fd int, name string) (string, error) {
    86  	var iv ivalue
    87  	err := ioctlPtr(fd, BIOCGETIF, unsafe.Pointer(&iv))
    88  	if err != nil {
    89  		return "", err
    90  	}
    91  	return name, nil
    92  }
    93  
    94  // Deprecated: Use golang.org/x/net/bpf instead.
    95  func SetBpfInterface(fd int, name string) error {
    96  	var iv ivalue
    97  	copy(iv.name[:], []byte(name))
    98  	err := ioctlPtr(fd, BIOCSETIF, unsafe.Pointer(&iv))
    99  	if err != nil {
   100  		return err
   101  	}
   102  	return nil
   103  }
   104  
   105  // Deprecated: Use golang.org/x/net/bpf instead.
   106  func BpfTimeout(fd int) (*Timeval, error) {
   107  	var tv Timeval
   108  	err := ioctlPtr(fd, BIOCGRTIMEOUT, unsafe.Pointer(&tv))
   109  	if err != nil {
   110  		return nil, err
   111  	}
   112  	return &tv, nil
   113  }
   114  
   115  // Deprecated: Use golang.org/x/net/bpf instead.
   116  func SetBpfTimeout(fd int, tv *Timeval) error {
   117  	err := ioctlPtr(fd, BIOCSRTIMEOUT, unsafe.Pointer(tv))
   118  	if err != nil {
   119  		return err
   120  	}
   121  	return nil
   122  }
   123  
   124  // Deprecated: Use golang.org/x/net/bpf instead.
   125  func BpfStats(fd int) (*BpfStat, error) {
   126  	var s BpfStat
   127  	err := ioctlPtr(fd, BIOCGSTATS, unsafe.Pointer(&s))
   128  	if err != nil {
   129  		return nil, err
   130  	}
   131  	return &s, nil
   132  }
   133  
   134  // Deprecated: Use golang.org/x/net/bpf instead.
   135  func SetBpfImmediate(fd, m int) error {
   136  	err := ioctlPtr(fd, BIOCIMMEDIATE, unsafe.Pointer(&m))
   137  	if err != nil {
   138  		return err
   139  	}
   140  	return nil
   141  }
   142  
   143  // Deprecated: Use golang.org/x/net/bpf instead.
   144  func SetBpf(fd int, i []BpfInsn) error {
   145  	var p BpfProgram
   146  	p.Len = uint32(len(i))
   147  	p.Insns = (*BpfInsn)(unsafe.Pointer(&i[0]))
   148  	err := ioctlPtr(fd, BIOCSETF, unsafe.Pointer(&p))
   149  	if err != nil {
   150  		return err
   151  	}
   152  	return nil
   153  }
   154  
   155  // Deprecated: Use golang.org/x/net/bpf instead.
   156  func CheckBpfVersion(fd int) error {
   157  	var v BpfVersion
   158  	err := ioctlPtr(fd, BIOCVERSION, unsafe.Pointer(&v))
   159  	if err != nil {
   160  		return err
   161  	}
   162  	if v.Major != BPF_MAJOR_VERSION || v.Minor != BPF_MINOR_VERSION {
   163  		return EINVAL
   164  	}
   165  	return nil
   166  }
   167  
   168  // Deprecated: Use golang.org/x/net/bpf instead.
   169  func BpfHeadercmpl(fd int) (int, error) {
   170  	var f int
   171  	err := ioctlPtr(fd, BIOCGHDRCMPLT, unsafe.Pointer(&f))
   172  	if err != nil {
   173  		return 0, err
   174  	}
   175  	return f, nil
   176  }
   177  
   178  // Deprecated: Use golang.org/x/net/bpf instead.
   179  func SetBpfHeadercmpl(fd, f int) error {
   180  	err := ioctlPtr(fd, BIOCSHDRCMPLT, unsafe.Pointer(&f))
   181  	if err != nil {
   182  		return err
   183  	}
   184  	return nil
   185  }
   186  

View as plain text