backend.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package network
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "strings"
  6. "github.com/coreos/flannel/backend"
  7. "github.com/coreos/flannel/backend/alloc"
  8. "github.com/coreos/flannel/backend/awsvpc"
  9. "github.com/coreos/flannel/backend/hostgw"
  10. "github.com/coreos/flannel/backend/udp"
  11. "github.com/coreos/flannel/backend/vxlan"
  12. "github.com/coreos/flannel/subnet"
  13. )
  14. func newBackend(sm subnet.Manager, network string, config *subnet.Config) (backend.Backend, error) {
  15. var bt struct {
  16. Type string
  17. }
  18. if len(config.Backend) == 0 {
  19. bt.Type = "udp"
  20. } else {
  21. if err := json.Unmarshal(config.Backend, &bt); err != nil {
  22. return nil, fmt.Errorf("Error decoding Backend property of config: %v", err)
  23. }
  24. }
  25. switch strings.ToLower(bt.Type) {
  26. case "udp":
  27. return udp.New(sm, network, config), nil
  28. case "alloc":
  29. return alloc.New(sm, network), nil
  30. case "host-gw":
  31. return hostgw.New(sm, network), nil
  32. case "vxlan":
  33. return vxlan.New(sm, network, config), nil
  34. case "aws-vpc":
  35. return awsvpc.New(sm, network, config), nil
  36. default:
  37. return nil, fmt.Errorf("%v: '%v': unknown backend type", network, bt.Type)
  38. }
  39. }