bpf_bsd.mx raw

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