xfrm_linux.go 1.6 KB

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