func (sm *Manager) startBGP() error {
	var packetClient *packngo.Client
	var err error
	if sm.config.EnableMetal {
		packetClient, err = packngo.NewClient()
		if err != nil {
			log.Error(err)
		}
		if sm.config.EnableBGP {
			log.Infoln("Looking up the BGP configuration from packet")
			err = packet.BGPLookup(packetClient, sm.config)
			if err != nil {
				log.Error(err)
			}
		}
	}
	log.Info("Starting the BGP server to advertise VIP routes to VGP peers")
	sm.bgpServer, err = bgp.NewBGPServer(&sm.config.BGPConfig)
	if err != nil {
		return err
	}
	defer func() {
		if sm.bgpServer != nil {
			sm.bgpServer.Close()
		}
	}()
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
	signalChan = make(chan os.Signal, 1)
	signal.Notify(signalChan, syscall.SIGINT)
	signal.Notify(signalChan, syscall.SIGTERM)
	signal.Notify(signalChan, syscall.SIGKILL)
	go func() {
		<-signalChan
		log.Info("Received termination, signaling shutdown")
		cancel()
	}()
	if err := sm.servicesWatcher(ctx); err != nil {
		log.Fatalf("error starting services watcher: %v", err)
	}
	log.Infof("Shutting down Kube-Vip")
	return nil
}
Start will begin the Manager, which will start services and watch the configmap
package service
import (
	"context"
	"os"
	"os/signal"
	"syscall"
	"github.com/kube-vip/kube-vip/pkg/bgp"
	"github.com/kube-vip/kube-vip/pkg/packet"
	"github.com/packethost/packngo"
	log "github.com/sirupsen/logrus"
)