github.com/castai/kvisor@v1.7.1-0.20240516114728-b3572a2607b5/cmd/agent/daemon/conntrack/conntrack.go (about)

     1  package conntrack
     2  
     3  import (
     4  	"net/netip"
     5  	"os"
     6  
     7  	"github.com/castai/kvisor/pkg/logging"
     8  	"github.com/florianl/go-conntrack"
     9  	"github.com/vishvananda/netns"
    10  
    11  	stdlog "log"
    12  )
    13  
    14  type Client interface {
    15  	GetDestination(src, dst netip.AddrPort) (netip.AddrPort, bool)
    16  	Close() error
    17  }
    18  
    19  func NewClient(log *logging.Logger) (Client, error) {
    20  	if iniCiliumMaps(log) {
    21  		return &CiliumConntrack{}, nil
    22  	}
    23  
    24  	hostNs, err := netns.GetFromPid(1)
    25  	if err != nil {
    26  		return nil, err
    27  	}
    28  	nfct, err := conntrack.Open(&conntrack.Config{
    29  		NetNS:  int(hostNs),
    30  		Logger: stdlog.New(os.Stdout, "nf", 0),
    31  	})
    32  
    33  	if err != nil {
    34  		return nil, err
    35  	}
    36  	return &NetfilterConntrackClient{
    37  		log:  log.WithField("component", "nf_conntrack"),
    38  		nfct: nfct,
    39  	}, nil
    40  }