json_cap, "multiprotocolExtensions",
json_multi);
+ /* Hostname capabilities */
+ json_object *json_hname = NULL;
+
+ json_hname = json_object_new_object();
+
+ if (CHECK_FLAG(p->cap, PEER_CAP_HOSTNAME_ADV)) {
+ json_object_string_add(
+ json_hname,
+ "advHostName",
+ bgp->peer_self->hostname ?
+ bgp->peer_self->hostname
+ : "n/a");
+ json_object_string_add(
+ json_hname,
+ "advDomainName",
+ bgp->peer_self->domainname ?
+ bgp->peer_self->domainname
+ : "n/a");
+ }
+
+
+ if (CHECK_FLAG(p->cap, PEER_CAP_HOSTNAME_RCV)) {
+ json_object_string_add(
+ json_hname,
+ "rcvHostName",
+ p->hostname ?
+ p->hostname :
+ "n/a");
+ json_object_string_add(
+ json_hname,
+ "rcvDomainName",
+ p->domainname ?
+ p->domainname :
+ "n/a");
+ }
+
+ json_object_object_add(json_cap,
+ "hostName",
+ json_hname);
+
/* Gracefull Restart */
if (CHECK_FLAG(p->cap, PEER_CAP_RESTART_RCV)
|| CHECK_FLAG(p->cap,
}
/* Hostname capability */
- if (CHECK_FLAG(p->cap, PEER_CAP_HOSTNAME_ADV)
- || CHECK_FLAG(p->cap,
- PEER_CAP_HOSTNAME_RCV)) {
- vty_out(vty,
- " Hostname Capability:");
- if (CHECK_FLAG(p->cap,
- PEER_CAP_HOSTNAME_ADV))
- vty_out(vty, " advertised");
- if (CHECK_FLAG(p->cap,
- PEER_CAP_HOSTNAME_RCV))
- vty_out(vty, " %sreceived",
- CHECK_FLAG(
- p->cap,
- PEER_CAP_HOSTNAME_ADV)
- ? "and "
- : "");
- vty_out(vty, "\n");
+ vty_out(vty,
+ " Hostname Capability:");
+
+ if (CHECK_FLAG(p->cap, PEER_CAP_HOSTNAME_ADV)) {
+ vty_out(vty, " advertised (name: %s, "
+ "domain name: %s)",
+ bgp->peer_self->hostname ?
+ bgp->peer_self->hostname
+ : "n/a",
+ bgp->peer_self->domainname ?
+ bgp->peer_self->domainname
+ : "n/a");
+ } else {
+ vty_out(vty, " not advertised");
}
+ if (CHECK_FLAG(p->cap, PEER_CAP_HOSTNAME_RCV)) {
+ vty_out(vty, " received (name: %s, "
+ "domain name: %s)",
+ p->hostname ?
+ p->hostname : "n/a",
+ p->domainname ?
+ p->domainname : "n/a");
+ } else {
+ vty_out(vty, " not received");
+ }
+
+ vty_out(vty, "\n");
+
/* Gracefull Restart */
if (CHECK_FLAG(p->cap, PEER_CAP_RESTART_RCV)
|| CHECK_FLAG(p->cap,
static struct bgp *bgp_create(as_t *as, const char *name,
enum bgp_instance_type inst_type)
{
- struct bgp *bgp;
- afi_t afi;
- safi_t safi;
+ struct bgp *bgp;
+ afi_t afi;
+ safi_t safi;
+ struct utsname names;
+
+ uname(&names);
if ((bgp = XCALLOC(MTYPE_BGP, sizeof(struct bgp))) == NULL)
return NULL;
XFREE(MTYPE_BGP_PEER_HOST, bgp->peer_self->host);
bgp->peer_self->host =
XSTRDUP(MTYPE_BGP_PEER_HOST, "Static announcement");
+ if (bgp->peer_self->hostname != NULL) {
+ XFREE(MTYPE_BGP_PEER_HOST, bgp->peer_self->hostname);
+ bgp->peer_self->hostname = NULL;
+ }
+
+ if (bgp->peer_self->domainname != NULL) {
+ XFREE(MTYPE_BGP_PEER_HOST, bgp->peer_self->domainname);
+ bgp->peer_self->domainname = NULL;
+ }
+ bgp->peer_self->hostname = XSTRDUP(MTYPE_BGP_PEER_HOST, names.nodename);
+ bgp->peer_self->domainname = XSTRDUP(MTYPE_BGP_PEER_HOST,
+ names.domainname);
bgp->peer = list_new();
bgp->peer->cmp = (int (*)(void *, void *))peer_cmp;
bgp->peerhash = hash_create(peer_hash_key_make, peer_hash_same, NULL);