...
1
2
3
4
5 package ipv4
6
7 import (
8 "errors"
9 "net"
10 "runtime"
11
12 "golang.org/x/net/internal/socket"
13 )
14
15 var (
16 errInvalidConn = errors.New("invalid connection")
17 errMissingAddress = errors.New("missing address")
18 errNilHeader = errors.New("nil header")
19 errHeaderTooShort = errors.New("header too short")
20 errExtHeaderTooShort = errors.New("extension header too short")
21 errInvalidConnType = errors.New("invalid conn type")
22 errNotImplemented = errors.New("not implemented on " + runtime.GOOS + "/" + runtime.GOARCH)
23
24
25 freebsdVersion uint32
26 compatFreeBSD32 bool
27 )
28
29
30 func adjustFreeBSD32(m *socket.Message) {
31
32 if 1200086 <= freebsdVersion && freebsdVersion < 1201000 {
33 l := (m.NN + 4 - 1) &^ (4 - 1)
34 if m.NN < l && l <= len(m.OOB) {
35 m.NN = l
36 }
37 }
38 }
39
40 func boolint(b bool) int {
41 if b {
42 return 1
43 }
44 return 0
45 }
46
47 func netAddrToIP4(a net.Addr) net.IP {
48 switch v := a.(type) {
49 case *net.UDPAddr:
50 if ip := v.IP.To4(); ip != nil {
51 return ip
52 }
53 case *net.IPAddr:
54 if ip := v.IP.To4(); ip != nil {
55 return ip
56 }
57 }
58 return nil
59 }
60
61 func opAddr(a net.Addr) net.Addr {
62 switch a.(type) {
63 case *net.TCPAddr:
64 if a == nil {
65 return nil
66 }
67 case *net.UDPAddr:
68 if a == nil {
69 return nil
70 }
71 case *net.IPAddr:
72 if a == nil {
73 return nil
74 }
75 }
76 return a
77 }
78
View as plain text