backend.go 1.2 KB

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