package ocicni

const (
	// DefaultInterfaceName is the string to be used for the interface name inside the net namespace
	DefaultInterfaceName = "eth0"
	// CNIPluginName is the default name of the plugin
	CNIPluginName = "cni"
	// DefaultNetDir is the place to look for CNI Network
	DefaultNetDir = "/etc/cni/net.d"
	// DefaultCNIDir is the place to look for cni config files
	DefaultCNIDir = "/opt/cni/bin"
	// VendorCNIDirTemplate is the template for looking up vendor specific cni config/executable files
	VendorCNIDirTemplate = "%s/opt/%s/bin"
)

// CNIPlugin is the interface that needs to be implemented by a plugin
type CNIPlugin interface {
	// Name returns the plugin's name. This will be used when searching
	// for a plugin by name, e.g.
	Name() string

	// SetUpPod is the method called after the infra container of
	// the pod has been created but before the other containers of the
	// pod are launched.
	SetUpPod(netnsPath string, namespace string, name string, containerID string) error

	// TearDownPod is the method called before a pod's infra container will be deleted
	TearDownPod(netnsPath string, namespace string, name string, containerID string) error

	// Status is the method called to obtain the ipv4 or ipv6 addresses of the container
	GetContainerNetworkStatus(netnsPath string, namespace string, name string, containerID string) (string, error)

	// NetworkStatus returns error if the network plugin is in error state
	Status() error
}