github.com/castai/kvisor@v1.7.1-0.20240516114728-b3572a2607b5/pkg/ebpftracer/types/sockaddr.go (about)

     1  package types
     2  
     3  import "net/netip"
     4  
     5  type SockAddrFamily int16
     6  
     7  const (
     8  	AF_UNSPEC     SockAddrFamily = 0
     9  	AF_UNIX       SockAddrFamily = 1
    10  	AF_LOCAL      SockAddrFamily = AF_UNIX
    11  	AF_INET       SockAddrFamily = 2
    12  	AF_AX25       SockAddrFamily = 3
    13  	AF_IPX        SockAddrFamily = 4
    14  	AF_APPLETALK  SockAddrFamily = 5
    15  	AF_NETROM     SockAddrFamily = 6
    16  	AF_BRIDGE     SockAddrFamily = 7
    17  	AF_ATMPVC     SockAddrFamily = 8
    18  	AF_X25        SockAddrFamily = 9
    19  	AF_INET6      SockAddrFamily = 10
    20  	AF_ROSE       SockAddrFamily = 11
    21  	AF_DECnet     SockAddrFamily = 12
    22  	AF_NETBEUI    SockAddrFamily = 13
    23  	AF_SECURITY   SockAddrFamily = 14
    24  	AF_KEY        SockAddrFamily = 15
    25  	AF_NETLINK    SockAddrFamily = 16
    26  	AF_ROUTE      SockAddrFamily = AF_NETLINK
    27  	AF_PACKET     SockAddrFamily = 17
    28  	AF_ASH        SockAddrFamily = 18
    29  	AF_ECONET     SockAddrFamily = 19
    30  	AF_ATMSVC     SockAddrFamily = 20
    31  	AF_RDS        SockAddrFamily = 21
    32  	AF_SNA        SockAddrFamily = 22
    33  	AF_IRDA       SockAddrFamily = 23
    34  	AF_PPPOX      SockAddrFamily = 24
    35  	AF_WANPIPE    SockAddrFamily = 25
    36  	AF_LLC        SockAddrFamily = 26
    37  	AF_IB         SockAddrFamily = 27
    38  	AF_MPLS       SockAddrFamily = 28
    39  	AF_CAN        SockAddrFamily = 29
    40  	AF_TIPC       SockAddrFamily = 30
    41  	AF_BLUETOOTH  SockAddrFamily = 31
    42  	AF_IUCV       SockAddrFamily = 32
    43  	AF_RXRPC      SockAddrFamily = 33
    44  	AF_ISDN       SockAddrFamily = 34
    45  	AF_PHONET     SockAddrFamily = 35
    46  	AF_IEEE802154 SockAddrFamily = 36
    47  	AF_CAIF       SockAddrFamily = 37
    48  	AF_ALG        SockAddrFamily = 38
    49  	AF_NFC        SockAddrFamily = 39
    50  	AF_VSOCK      SockAddrFamily = 40
    51  	AF_KCM        SockAddrFamily = 41
    52  	AF_QIPCRTR    SockAddrFamily = 42
    53  	AF_SMC        SockAddrFamily = 43
    54  	AF_XDP        SockAddrFamily = 44
    55  )
    56  
    57  var sockAddrTypeNames = map[SockAddrFamily]string{
    58  	AF_UNSPEC:     "AF_UNSPEC",
    59  	AF_UNIX:       "AF_UNIX",
    60  	AF_INET:       "AF_INET",
    61  	AF_AX25:       "AF_AX25",
    62  	AF_IPX:        "AF_IPX",
    63  	AF_APPLETALK:  "AF_APPLETALK",
    64  	AF_NETROM:     "AF_NETROM",
    65  	AF_BRIDGE:     "AF_BRIDGE",
    66  	AF_ATMPVC:     "AF_ATMPVC",
    67  	AF_X25:        "AF_X25",
    68  	AF_INET6:      "AF_INET6",
    69  	AF_ROSE:       "AF_ROSE",
    70  	AF_DECnet:     "AF_DECnet",
    71  	AF_NETBEUI:    "AF_NETBEUI",
    72  	AF_SECURITY:   "AF_SECURITY",
    73  	AF_KEY:        "AF_KEY",
    74  	AF_NETLINK:    "AF_NETLINK",
    75  	AF_PACKET:     "AF_PACKET",
    76  	AF_ASH:        "AF_ASH",
    77  	AF_ECONET:     "AF_ECONET",
    78  	AF_ATMSVC:     "AF_ATMSVC",
    79  	AF_RDS:        "AF_RDS",
    80  	AF_SNA:        "AF_SNA",
    81  	AF_IRDA:       "AF_IRDA",
    82  	AF_PPPOX:      "AF_PPPOX",
    83  	AF_WANPIPE:    "AF_WANPIPE",
    84  	AF_LLC:        "AF_LLC",
    85  	AF_IB:         "AF_IB",
    86  	AF_MPLS:       "AF_MPLS",
    87  	AF_CAN:        "AF_CAN",
    88  	AF_TIPC:       "AF_TIPC",
    89  	AF_BLUETOOTH:  "AF_BLUETOOTH",
    90  	AF_IUCV:       "AF_IUCV",
    91  	AF_RXRPC:      "AF_RXRPC",
    92  	AF_ISDN:       "AF_ISDN",
    93  	AF_PHONET:     "AF_PHONET",
    94  	AF_IEEE802154: "AF_IEEE802154",
    95  	AF_CAIF:       "AF_CAIF",
    96  	AF_ALG:        "AF_ALG",
    97  	AF_NFC:        "AF_NFC",
    98  	AF_VSOCK:      "AF_VSOCK",
    99  	AF_KCM:        "AF_KCM",
   100  	AF_QIPCRTR:    "AF_QIPCRTR",
   101  	AF_SMC:        "AF_SMC",
   102  	AF_XDP:        "AF_XDP",
   103  }
   104  
   105  func (t SockAddrFamily) String() string {
   106  	if t, found := sockAddrTypeNames[t]; found {
   107  		return t
   108  	}
   109  
   110  	return "UNKNOWN"
   111  }
   112  
   113  type internalSockAddr struct{}
   114  
   115  func (internalSockAddr) sockaddr() {}
   116  
   117  type Sockaddr interface {
   118  	sockaddr()
   119  
   120  	Family() SockAddrFamily
   121  }
   122  
   123  type UnixSockAddr struct {
   124  	internalSockAddr
   125  
   126  	Path string
   127  }
   128  
   129  func (UnixSockAddr) Family() SockAddrFamily {
   130  	return AF_UNIX
   131  }
   132  
   133  type Ip4SockAddr struct {
   134  	internalSockAddr
   135  
   136  	Addr netip.AddrPort
   137  }
   138  
   139  func (Ip4SockAddr) Family() SockAddrFamily {
   140  	return AF_INET
   141  }
   142  
   143  type Ip6SockAddr struct {
   144  	internalSockAddr
   145  
   146  	Addr     netip.AddrPort
   147  	FlowInfo uint32
   148  	ScopeID  uint32
   149  }
   150  
   151  func (Ip6SockAddr) Family() SockAddrFamily {
   152  	return AF_INET6
   153  }
   154  
   155  // GenericSockAddr is a catch all of socket addr family types we do now specifically handle yet
   156  type GenericSockAddr struct {
   157  	internalSockAddr
   158  
   159  	family SockAddrFamily
   160  }
   161  
   162  func (a GenericSockAddr) Family() SockAddrFamily {
   163  	return a.family
   164  }
   165  
   166  func NewGenericSockAddr(family SockAddrFamily) GenericSockAddr {
   167  	return GenericSockAddr{
   168  		family: family,
   169  	}
   170  }