Skip to content

Commit

Permalink
Merge pull request #1814 from chiragshah6/mdev
Browse files Browse the repository at this point in the history
ospf6d: assign zebra router-id to ospf6 instance
  • Loading branch information
Jafaral committed Mar 9, 2018
2 parents 1ffd1bc + 78c6ba6 commit e28a328
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 4 deletions.
3 changes: 3 additions & 0 deletions ospf6d/ospf6_main.c
Expand Up @@ -202,6 +202,9 @@ int main(int argc, char *argv[], char *envp[])
exit(1);
}

/* OSPF6 master init. */
ospf6_master_init();

/* thread master */
master = frr_init();

Expand Down
26 changes: 24 additions & 2 deletions ospf6d/ospf6_top.c
Expand Up @@ -53,6 +53,8 @@ DEFINE_QOBJ_TYPE(ospf6)

/* global ospf6d variable */
struct ospf6 *ospf6;
static struct ospf6_master ospf6_master;
struct ospf6_master *om6;

static void ospf6_disable(struct ospf6 *o);

Expand Down Expand Up @@ -239,6 +241,13 @@ static void ospf6_disable(struct ospf6 *o)
}
}

void ospf6_master_init(void)
{
memset(&ospf6_master, 0, sizeof(struct ospf6_master));

om6 = &ospf6_master;
}

static int ospf6_maxage_remover(struct thread *thread)
{
struct ospf6 *o = (struct ospf6 *)THREAD_ARG(thread);
Expand Down Expand Up @@ -294,16 +303,29 @@ void ospf6_maxage_remove(struct ospf6 *o)
&o->maxage_remover);
}

void ospf6_router_id_update(void)
{
if (!ospf6)
return;

if (ospf6->router_id_static != 0)
ospf6->router_id = ospf6->router_id_static;
else
ospf6->router_id = om6->zebra_router_id;
}

/* start ospf6 */
DEFUN_NOSH (router_ospf6,
router_ospf6_cmd,
"router ospf6",
ROUTER_STR
OSPF6_STR)
{
if (ospf6 == NULL)
if (ospf6 == NULL) {
ospf6 = ospf6_create();

if (ospf6->router_id == 0)
ospf6_router_id_update();
}
/* set current ospf point. */
VTY_PUSH_CONTEXT(OSPF6_NODE, ospf6);

Expand Down
8 changes: 8 additions & 0 deletions ospf6d/ospf6_top.h
Expand Up @@ -24,6 +24,11 @@
#include "qobj.h"
#include "routemap.h"

struct ospf6_master {

uint32_t zebra_router_id;
};

/* OSPFv3 top level data structure */
struct ospf6 {
/* my router id */
Expand Down Expand Up @@ -109,10 +114,13 @@ DECLARE_QOBJ_TYPE(ospf6)

/* global pointer for OSPF top data structure */
extern struct ospf6 *ospf6;
extern struct ospf6_master *om6;

/* prototypes */
extern void ospf6_master_init(void);
extern void ospf6_top_init(void);
extern void ospf6_delete(struct ospf6 *o);
extern void ospf6_router_id_update(void);

extern void ospf6_maxage_remove(struct ospf6 *o);

Expand Down
13 changes: 11 additions & 2 deletions ospf6d/ospf6_zebra.c
Expand Up @@ -55,13 +55,22 @@ static int ospf6_router_id_update_zebra(int command, struct zclient *zclient,

zebra_router_id_update_read(zclient->ibuf, &router_id);

om6->zebra_router_id = router_id.u.prefix4.s_addr;

if (o == NULL)
return 0;

o->router_id_zebra = router_id.u.prefix4;
if (IS_OSPF6_DEBUG_ZEBRA(RECV)) {
char buf[INET_ADDRSTRLEN];

zlog_debug("%s: zebra router-id %s update",
__PRETTY_FUNCTION__,
inet_ntop(AF_INET, &router_id.u.prefix4,
buf, INET_ADDRSTRLEN));
}

if (o->router_id == 0)
o->router_id = (uint32_t)o->router_id_zebra.s_addr;
ospf6_router_id_update();

return 0;
}
Expand Down

0 comments on commit e28a328

Please sign in to comment.