github.com/sagernet/netlink@v0.0.0-20240612041022-b9a21c07ac6a/xfrm.go (about)

     1  package netlink
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"golang.org/x/sys/unix"
     7  )
     8  
     9  // Proto is an enum representing an ipsec protocol.
    10  type Proto uint8
    11  
    12  const (
    13  	XFRM_PROTO_ROUTE2    Proto = unix.IPPROTO_ROUTING
    14  	XFRM_PROTO_ESP       Proto = unix.IPPROTO_ESP
    15  	XFRM_PROTO_AH        Proto = unix.IPPROTO_AH
    16  	XFRM_PROTO_HAO       Proto = unix.IPPROTO_DSTOPTS
    17  	XFRM_PROTO_COMP      Proto = 0x6c // NOTE not defined on darwin
    18  	XFRM_PROTO_IPSEC_ANY Proto = unix.IPPROTO_RAW
    19  )
    20  
    21  func (p Proto) String() string {
    22  	switch p {
    23  	case XFRM_PROTO_ROUTE2:
    24  		return "route2"
    25  	case XFRM_PROTO_ESP:
    26  		return "esp"
    27  	case XFRM_PROTO_AH:
    28  		return "ah"
    29  	case XFRM_PROTO_HAO:
    30  		return "hao"
    31  	case XFRM_PROTO_COMP:
    32  		return "comp"
    33  	case XFRM_PROTO_IPSEC_ANY:
    34  		return "ipsec-any"
    35  	}
    36  	return fmt.Sprintf("%d", p)
    37  }
    38  
    39  // Mode is an enum representing an ipsec transport.
    40  type Mode uint8
    41  
    42  const (
    43  	XFRM_MODE_TRANSPORT Mode = iota
    44  	XFRM_MODE_TUNNEL
    45  	XFRM_MODE_ROUTEOPTIMIZATION
    46  	XFRM_MODE_IN_TRIGGER
    47  	XFRM_MODE_BEET
    48  	XFRM_MODE_MAX
    49  )
    50  
    51  func (m Mode) String() string {
    52  	switch m {
    53  	case XFRM_MODE_TRANSPORT:
    54  		return "transport"
    55  	case XFRM_MODE_TUNNEL:
    56  		return "tunnel"
    57  	case XFRM_MODE_ROUTEOPTIMIZATION:
    58  		return "ro"
    59  	case XFRM_MODE_IN_TRIGGER:
    60  		return "in_trigger"
    61  	case XFRM_MODE_BEET:
    62  		return "beet"
    63  	}
    64  	return fmt.Sprintf("%d", m)
    65  }
    66  
    67  // XfrmMark represents the mark associated to the state or policy
    68  type XfrmMark struct {
    69  	Value uint32
    70  	Mask  uint32
    71  }
    72  
    73  func (m *XfrmMark) String() string {
    74  	return fmt.Sprintf("(0x%x,0x%x)", m.Value, m.Mask)
    75  }