sandbox.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. // Package osl describes structures and interfaces which abstract os entities
  2. package osl
  3. import (
  4. "net"
  5. "github.com/docker/libnetwork/types"
  6. )
  7. // Sandbox represents a network sandbox, identified by a specific key. It
  8. // holds a list of Interfaces, routes etc, and more can be added dynamically.
  9. type Sandbox interface {
  10. // The path where the network namespace is mounted.
  11. Key() string
  12. // Add an existing Interface to this sandbox. The operation will rename
  13. // from the Interface SrcName to DstName as it moves, and reconfigure the
  14. // interface according to the specified settings. The caller is expected
  15. // to only provide a prefix for DstName. The AddInterface api will auto-generate
  16. // an appropriate suffix for the DstName to disambiguate.
  17. AddInterface(SrcName string, DstPrefix string, options ...IfaceOption) error
  18. // Set default IPv4 gateway for the sandbox
  19. SetGateway(gw net.IP) error
  20. // Set default IPv6 gateway for the sandbox
  21. SetGatewayIPv6(gw net.IP) error
  22. // Unset the previously set default IPv4 gateway in the sandbox
  23. UnsetGateway() error
  24. // Unset the previously set default IPv6 gateway in the sandbox
  25. UnsetGatewayIPv6() error
  26. // Add a static route to the sandbox.
  27. AddStaticRoute(*types.StaticRoute) error
  28. // Remove a static route from the sandbox.
  29. RemoveStaticRoute(*types.StaticRoute) error
  30. // AddNeighbor adds a neighbor entry into the sandbox.
  31. AddNeighbor(dstIP net.IP, dstMac net.HardwareAddr, option ...NeighOption) error
  32. // DeleteNeighbor deletes neighbor entry from the sandbox.
  33. DeleteNeighbor(dstIP net.IP, dstMac net.HardwareAddr) error
  34. // Returns an interface with methods to set neighbor options.
  35. NeighborOptions() NeighborOptionSetter
  36. // Returns an interface with methods to set interface options.
  37. InterfaceOptions() IfaceOptionSetter
  38. //Invoke
  39. InvokeFunc(func()) error
  40. // Returns an interface with methods to get sandbox state.
  41. Info() Info
  42. // Destroy the sandbox
  43. Destroy() error
  44. }
  45. // NeighborOptionSetter interfaces defines the option setter methods for interface options
  46. type NeighborOptionSetter interface {
  47. // LinkName returns an option setter to set the srcName of the link that should
  48. // be used in the neighbor entry
  49. LinkName(string) NeighOption
  50. // Family returns an option setter to set the address family for the neighbor
  51. // entry. eg. AF_BRIDGE
  52. Family(int) NeighOption
  53. }
  54. // IfaceOptionSetter interface defines the option setter methods for interface options.
  55. type IfaceOptionSetter interface {
  56. // Bridge returns an option setter to set if the interface is a bridge.
  57. Bridge(bool) IfaceOption
  58. // Address returns an option setter to set IPv4 address.
  59. Address(*net.IPNet) IfaceOption
  60. // Address returns an option setter to set IPv6 address.
  61. AddressIPv6(*net.IPNet) IfaceOption
  62. // Master returns an option setter to set the master interface if any for this
  63. // interface. The master interface name should refer to the srcname of a
  64. // previously added interface of type bridge.
  65. Master(string) IfaceOption
  66. // Address returns an option setter to set interface routes.
  67. Routes([]*net.IPNet) IfaceOption
  68. }
  69. // Info represents all possible information that
  70. // the driver wants to place in the sandbox which includes
  71. // interfaces, routes and gateway
  72. type Info interface {
  73. // The collection of Interface previously added with the AddInterface
  74. // method. Note that this doesn't incude network interfaces added in any
  75. // other way (such as the default loopback interface which are automatically
  76. // created on creation of a sandbox).
  77. Interfaces() []Interface
  78. // IPv4 gateway for the sandbox.
  79. Gateway() net.IP
  80. // IPv6 gateway for the sandbox.
  81. GatewayIPv6() net.IP
  82. // Additional static routes for the sandbox. (Note that directly
  83. // connected routes are stored on the particular interface they refer to.)
  84. StaticRoutes() []*types.StaticRoute
  85. // TODO: Add ip tables etc.
  86. }
  87. // Interface represents the settings and identity of a network device. It is
  88. // used as a return type for Network.Link, and it is common practice for the
  89. // caller to use this information when moving interface SrcName from host
  90. // namespace to DstName in a different net namespace with the appropriate
  91. // network settings.
  92. type Interface interface {
  93. // The name of the interface in the origin network namespace.
  94. SrcName() string
  95. // The name that will be assigned to the interface once moves inside a
  96. // network namespace. When the caller passes in a DstName, it is only
  97. // expected to pass a prefix. The name will modified with an appropriately
  98. // auto-generated suffix.
  99. DstName() string
  100. // IPv4 address for the interface.
  101. Address() *net.IPNet
  102. // IPv6 address for the interface.
  103. AddressIPv6() *net.IPNet
  104. // IP routes for the interface.
  105. Routes() []*net.IPNet
  106. // Bridge returns true if the interface is a bridge
  107. Bridge() bool
  108. // Master returns the srcname of the master interface for this interface.
  109. Master() string
  110. // Remove an interface from the sandbox by renaming to original name
  111. // and moving it out of the sandbox.
  112. Remove() error
  113. // Statistics returns the statistics for this interface
  114. Statistics() (*types.InterfaceStatistics, error)
  115. }