Message ID | 612b94ad53014f10951248b91501d2d8e3441e28.1524241944.git.lorenzo.bianconi@redhat.com |
---|---|
State | Superseded |
Headers | show |
Series | [ovs-dev] OVN: show gw chassis in decreasing prio order | expand |
Nice job! Acked-by: Mark Michelson <mmichels@redhat.com> On 04/20/2018 12:46 PM, Lorenzo Bianconi wrote: > Report gateway chassis in decreasing priority order running ovn-nbctl > show sub-command. Add get_ordered_gw_chassis_prio_list routine to sort > gw chassis according to the configured priority > > Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com> > --- > ovn/utilities/ovn-nbctl.c | 64 +++++++++++++++++++++++++++++------------------ > 1 file changed, 39 insertions(+), 25 deletions(-) > > diff --git a/ovn/utilities/ovn-nbctl.c b/ovn/utilities/ovn-nbctl.c > index 5c18161fe..5d79ecbe3 100644 > --- a/ovn/utilities/ovn-nbctl.c > +++ b/ovn/utilities/ovn-nbctl.c > @@ -607,6 +607,38 @@ print_alias(const struct smap *external_ids, const char *key, struct ds *s) > } > } > > +/* gateway_chassis ordering > + * */ > +static int > +compare_chassis_prio_(const void *gc1_, const void *gc2_) > +{ > + const struct nbrec_gateway_chassis *const *gc1p = gc1_; > + const struct nbrec_gateway_chassis *const *gc2p = gc2_; > + const struct nbrec_gateway_chassis *gc1 = *gc1p; > + const struct nbrec_gateway_chassis *gc2 = *gc2p; > + > + int prio_diff = gc2->priority - gc1->priority; > + if (!prio_diff) { > + return strcmp(gc2->name, gc1->name); > + } > + return prio_diff; > +} > + > +static const struct nbrec_gateway_chassis ** > +get_ordered_gw_chassis_prio_list(const struct nbrec_logical_router_port *lrp) > +{ > + const struct nbrec_gateway_chassis **gcs; > + int i; > + > + gcs = xmalloc(sizeof *gcs * lrp->n_gateway_chassis); > + for (i = 0; i < lrp->n_gateway_chassis; i++) { > + gcs[i] = lrp->gateway_chassis[i]; > + } > + > + qsort(gcs, lrp->n_gateway_chassis, sizeof *gcs, compare_chassis_prio_); > + return gcs; > +} > + > /* Given pointer to logical router, this routine prints the router > * information. */ > static void > @@ -635,12 +667,17 @@ print_lr(const struct nbrec_logical_router *lr, struct ds *s) > } > > if (lrp->n_gateway_chassis) { > + const struct nbrec_gateway_chassis **gcs; > + > + gcs = get_ordered_gw_chassis_prio_list(lrp); > ds_put_cstr(s, " gateway chassis: ["); > for (size_t j = 0; j < lrp->n_gateway_chassis; j++) { > - ds_put_format(s, "%s ", lrp->gateway_chassis[j]->chassis_name); > + const struct nbrec_gateway_chassis *gc = gcs[j]; > + ds_put_format(s, "%s ", gc->chassis_name); > } > ds_chomp(s, ' '); > ds_put_cstr(s, "]\n"); > + free(gcs); > } > } > > @@ -3021,23 +3058,6 @@ nbctl_lrp_del_gateway_chassis(struct ctl_context *ctx) > chassis_name, ctx->argv[1]); > } > > -/* gateway_chassis ordering > - * */ > -static int > -compare_chassis_prio_(const void *gc1_, const void *gc2_) > -{ > - const struct nbrec_gateway_chassis *const *gc1p = gc1_; > - const struct nbrec_gateway_chassis *const *gc2p = gc2_; > - const struct nbrec_gateway_chassis *gc1 = *gc1p; > - const struct nbrec_gateway_chassis *gc2 = *gc2p; > - > - int prio_diff = gc2->priority - gc1->priority; > - if (!prio_diff) { > - return strcmp(gc2->name, gc1->name); > - } > - return prio_diff; > -} > - > /* Print a list of gateway chassis. */ > static void > nbctl_lrp_get_gateway_chassis(struct ctl_context *ctx) > @@ -3048,13 +3068,7 @@ nbctl_lrp_get_gateway_chassis(struct ctl_context *ctx) > size_t i; > > lrp = lrp_by_name_or_uuid(ctx, id, true); > - > - gcs = xmalloc(sizeof *gcs * lrp->n_gateway_chassis); > - for (i = 0; i < lrp->n_gateway_chassis; i++) { > - gcs[i] = lrp->gateway_chassis[i]; > - } > - > - qsort(gcs, lrp->n_gateway_chassis, sizeof *gcs, compare_chassis_prio_); > + gcs = get_ordered_gw_chassis_prio_list(lrp); > > for (i = 0; i < lrp->n_gateway_chassis; i++) { > const struct nbrec_gateway_chassis *gc = gcs[i]; >
Actually, let me add on that this seems like a good candidate for a new test to be added. On 04/23/2018 09:39 AM, Mark Michelson wrote: > Nice job! > > Acked-by: Mark Michelson <mmichels@redhat.com> > > On 04/20/2018 12:46 PM, Lorenzo Bianconi wrote: >> Report gateway chassis in decreasing priority order running ovn-nbctl >> show sub-command. Add get_ordered_gw_chassis_prio_list routine to sort >> gw chassis according to the configured priority >> >> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com> >> --- >> ovn/utilities/ovn-nbctl.c | 64 >> +++++++++++++++++++++++++++++------------------ >> 1 file changed, 39 insertions(+), 25 deletions(-) >> >> diff --git a/ovn/utilities/ovn-nbctl.c b/ovn/utilities/ovn-nbctl.c >> index 5c18161fe..5d79ecbe3 100644 >> --- a/ovn/utilities/ovn-nbctl.c >> +++ b/ovn/utilities/ovn-nbctl.c >> @@ -607,6 +607,38 @@ print_alias(const struct smap *external_ids, >> const char *key, struct ds *s) >> } >> } >> +/* gateway_chassis ordering >> + * */ >> +static int >> +compare_chassis_prio_(const void *gc1_, const void *gc2_) >> +{ >> + const struct nbrec_gateway_chassis *const *gc1p = gc1_; >> + const struct nbrec_gateway_chassis *const *gc2p = gc2_; >> + const struct nbrec_gateway_chassis *gc1 = *gc1p; >> + const struct nbrec_gateway_chassis *gc2 = *gc2p; >> + >> + int prio_diff = gc2->priority - gc1->priority; >> + if (!prio_diff) { >> + return strcmp(gc2->name, gc1->name); >> + } >> + return prio_diff; >> +} >> + >> +static const struct nbrec_gateway_chassis ** >> +get_ordered_gw_chassis_prio_list(const struct >> nbrec_logical_router_port *lrp) >> +{ >> + const struct nbrec_gateway_chassis **gcs; >> + int i; >> + >> + gcs = xmalloc(sizeof *gcs * lrp->n_gateway_chassis); >> + for (i = 0; i < lrp->n_gateway_chassis; i++) { >> + gcs[i] = lrp->gateway_chassis[i]; >> + } >> + >> + qsort(gcs, lrp->n_gateway_chassis, sizeof *gcs, >> compare_chassis_prio_); >> + return gcs; >> +} >> + >> /* Given pointer to logical router, this routine prints the router >> * information. */ >> static void >> @@ -635,12 +667,17 @@ print_lr(const struct nbrec_logical_router *lr, >> struct ds *s) >> } >> if (lrp->n_gateway_chassis) { >> + const struct nbrec_gateway_chassis **gcs; >> + >> + gcs = get_ordered_gw_chassis_prio_list(lrp); >> ds_put_cstr(s, " gateway chassis: ["); >> for (size_t j = 0; j < lrp->n_gateway_chassis; j++) { >> - ds_put_format(s, "%s ", >> lrp->gateway_chassis[j]->chassis_name); >> + const struct nbrec_gateway_chassis *gc = gcs[j]; >> + ds_put_format(s, "%s ", gc->chassis_name); >> } >> ds_chomp(s, ' '); >> ds_put_cstr(s, "]\n"); >> + free(gcs); >> } >> } >> @@ -3021,23 +3058,6 @@ nbctl_lrp_del_gateway_chassis(struct >> ctl_context *ctx) >> chassis_name, ctx->argv[1]); >> } >> -/* gateway_chassis ordering >> - * */ >> -static int >> -compare_chassis_prio_(const void *gc1_, const void *gc2_) >> -{ >> - const struct nbrec_gateway_chassis *const *gc1p = gc1_; >> - const struct nbrec_gateway_chassis *const *gc2p = gc2_; >> - const struct nbrec_gateway_chassis *gc1 = *gc1p; >> - const struct nbrec_gateway_chassis *gc2 = *gc2p; >> - >> - int prio_diff = gc2->priority - gc1->priority; >> - if (!prio_diff) { >> - return strcmp(gc2->name, gc1->name); >> - } >> - return prio_diff; >> -} >> - >> /* Print a list of gateway chassis. */ >> static void >> nbctl_lrp_get_gateway_chassis(struct ctl_context *ctx) >> @@ -3048,13 +3068,7 @@ nbctl_lrp_get_gateway_chassis(struct >> ctl_context *ctx) >> size_t i; >> lrp = lrp_by_name_or_uuid(ctx, id, true); >> - >> - gcs = xmalloc(sizeof *gcs * lrp->n_gateway_chassis); >> - for (i = 0; i < lrp->n_gateway_chassis; i++) { >> - gcs[i] = lrp->gateway_chassis[i]; >> - } >> - >> - qsort(gcs, lrp->n_gateway_chassis, sizeof *gcs, >> compare_chassis_prio_); >> + gcs = get_ordered_gw_chassis_prio_list(lrp); >> for (i = 0; i < lrp->n_gateway_chassis; i++) { >> const struct nbrec_gateway_chassis *gc = gcs[i]; >> >
diff --git a/ovn/utilities/ovn-nbctl.c b/ovn/utilities/ovn-nbctl.c index 5c18161fe..5d79ecbe3 100644 --- a/ovn/utilities/ovn-nbctl.c +++ b/ovn/utilities/ovn-nbctl.c @@ -607,6 +607,38 @@ print_alias(const struct smap *external_ids, const char *key, struct ds *s) } } +/* gateway_chassis ordering + * */ +static int +compare_chassis_prio_(const void *gc1_, const void *gc2_) +{ + const struct nbrec_gateway_chassis *const *gc1p = gc1_; + const struct nbrec_gateway_chassis *const *gc2p = gc2_; + const struct nbrec_gateway_chassis *gc1 = *gc1p; + const struct nbrec_gateway_chassis *gc2 = *gc2p; + + int prio_diff = gc2->priority - gc1->priority; + if (!prio_diff) { + return strcmp(gc2->name, gc1->name); + } + return prio_diff; +} + +static const struct nbrec_gateway_chassis ** +get_ordered_gw_chassis_prio_list(const struct nbrec_logical_router_port *lrp) +{ + const struct nbrec_gateway_chassis **gcs; + int i; + + gcs = xmalloc(sizeof *gcs * lrp->n_gateway_chassis); + for (i = 0; i < lrp->n_gateway_chassis; i++) { + gcs[i] = lrp->gateway_chassis[i]; + } + + qsort(gcs, lrp->n_gateway_chassis, sizeof *gcs, compare_chassis_prio_); + return gcs; +} + /* Given pointer to logical router, this routine prints the router * information. */ static void @@ -635,12 +667,17 @@ print_lr(const struct nbrec_logical_router *lr, struct ds *s) } if (lrp->n_gateway_chassis) { + const struct nbrec_gateway_chassis **gcs; + + gcs = get_ordered_gw_chassis_prio_list(lrp); ds_put_cstr(s, " gateway chassis: ["); for (size_t j = 0; j < lrp->n_gateway_chassis; j++) { - ds_put_format(s, "%s ", lrp->gateway_chassis[j]->chassis_name); + const struct nbrec_gateway_chassis *gc = gcs[j]; + ds_put_format(s, "%s ", gc->chassis_name); } ds_chomp(s, ' '); ds_put_cstr(s, "]\n"); + free(gcs); } } @@ -3021,23 +3058,6 @@ nbctl_lrp_del_gateway_chassis(struct ctl_context *ctx) chassis_name, ctx->argv[1]); } -/* gateway_chassis ordering - * */ -static int -compare_chassis_prio_(const void *gc1_, const void *gc2_) -{ - const struct nbrec_gateway_chassis *const *gc1p = gc1_; - const struct nbrec_gateway_chassis *const *gc2p = gc2_; - const struct nbrec_gateway_chassis *gc1 = *gc1p; - const struct nbrec_gateway_chassis *gc2 = *gc2p; - - int prio_diff = gc2->priority - gc1->priority; - if (!prio_diff) { - return strcmp(gc2->name, gc1->name); - } - return prio_diff; -} - /* Print a list of gateway chassis. */ static void nbctl_lrp_get_gateway_chassis(struct ctl_context *ctx) @@ -3048,13 +3068,7 @@ nbctl_lrp_get_gateway_chassis(struct ctl_context *ctx) size_t i; lrp = lrp_by_name_or_uuid(ctx, id, true); - - gcs = xmalloc(sizeof *gcs * lrp->n_gateway_chassis); - for (i = 0; i < lrp->n_gateway_chassis; i++) { - gcs[i] = lrp->gateway_chassis[i]; - } - - qsort(gcs, lrp->n_gateway_chassis, sizeof *gcs, compare_chassis_prio_); + gcs = get_ordered_gw_chassis_prio_list(lrp); for (i = 0; i < lrp->n_gateway_chassis; i++) { const struct nbrec_gateway_chassis *gc = gcs[i];
Report gateway chassis in decreasing priority order running ovn-nbctl show sub-command. Add get_ordered_gw_chassis_prio_list routine to sort gw chassis according to the configured priority Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com> --- ovn/utilities/ovn-nbctl.c | 64 +++++++++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 25 deletions(-)