MCPcopy
hub / github.com/osrg/gobgp / NewClient

Function NewClient

pkg/zebra/zapi.go:1431–1516  ·  view source on GitHub ↗

NewClient returns a Client instance (Client constructor)

(logger *slog.Logger, network, address string, typ RouteType, version uint8, software Software, mplsLabelRangeSize uint32)

Source from the content-addressed store, hash-verified

1429
1430// NewClient returns a Client instance (Client constructor)
1431func NewClient(logger *slog.Logger, network, address string, typ RouteType, version uint8, software Software, mplsLabelRangeSize uint32) (*Client, error) {
1432 conn, err := net.Dial(network, address)
1433 if err != nil {
1434 return nil, err
1435 }
1436 outgoing := make(chan *Message)
1437 incoming := make(chan *Message, 64)
1438 if version < MinZapiVer {
1439 version = MinZapiVer
1440 } else if version > MaxZapiVer {
1441 version = MaxZapiVer
1442 }
1443 c := &Client{
1444 outgoing: outgoing,
1445 incoming: incoming,
1446 redistDefault: typ,
1447 conn: conn,
1448 Version: version,
1449 Software: software,
1450 logger: logger,
1451 }
1452
1453 go func() {
1454 for {
1455 m, more := <-outgoing
1456 if more {
1457 b, err := m.Serialize(software)
1458 if err != nil {
1459 logger.Warn(fmt.Sprintf("failed to serialize: %v", m), slog.String("Topic", "Zebra"))
1460
1461 continue
1462 }
1463
1464 _, err = conn.Write(b)
1465 if err != nil {
1466 logger.Error("failed to write",
1467 slog.String("Topic", "Zebra"),
1468 slog.String("Error", err.Error()),
1469 )
1470 closeChannel(outgoing)
1471 return
1472 }
1473 } else {
1474 logger.Debug("finish outgoing loop",
1475 slog.String("Topic", "Zebra"))
1476 return
1477 }
1478 }
1479 }()
1480
1481 // Send Hello/RouterIDAdd messages to negotiate the Zebra message version.
1482 c.SendHello()
1483 c.SendRouterIDAdd()
1484
1485 if mplsLabelRangeSize > 0 && c.SupportMpls() {
1486 if err := c.sendLabelManagerConnect(true); err != nil {
1487 logger.Warn("failed to send label manager connect",
1488 slog.String("Topic", "Zebra"),

Callers 1

newZebraClientFunction · 0.92

Calls 10

SendHelloMethod · 0.95
SendRouterIDAddMethod · 0.95
SupportMplsMethod · 0.95
closeMethod · 0.95
closeChannelFunction · 0.85
ReceiveSingleMsgFunction · 0.85
ErrorMethod · 0.80
SerializeMethod · 0.65
StringMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…