The EOI code should be removed.  I'll update update the patch in the repo...

Good catch.

Lou

On 1/5/2016 7:57 AM, Vivek Venkatraman wrote:
> Can you describe the EOI RD some more? I haven't seen its definition
> in any IANA registry.
>
> The patchset does not set RD_TYPE_EOI anywhere (e.g., when
> injecting/configuring a VPNv4 prefix). So, how is this used?
>
> On Thu, Dec 24, 2015 at 10:10 AM, Lou Berger <[email protected]
> <mailto:[email protected]>> wrote:
>
>     This is part of the core VPN and Encap SAFI changes.
>
>     Signed-off-by: Lou Berger <[email protected] <mailto:[email protected]>>
>     Signed-off-by: David Lamparter <[email protected]
>     <mailto:[email protected]>>
>     ---
>      bgpd/bgp_mplsvpn.c | 81
>     ++++++++++++++++++++++++++++++++++++++++--------------
>      bgpd/bgp_mplsvpn.h |  2 ++
>      2 files changed, 62 insertions(+), 21 deletions(-)
>
>     diff --git a/bgpd/bgp_mplsvpn.c b/bgpd/bgp_mplsvpn.c
>     index 18627ad..d5211d6 100644
>     --- a/bgpd/bgp_mplsvpn.c
>     +++ b/bgpd/bgp_mplsvpn.c
>     @@ -39,6 +39,7 @@ decode_rd_type (u_char *pnt)
>
>        v = ((u_int16_t) *pnt++ << 8);
>        v |= (u_int16_t) *pnt;
>     +
>        return v;
>      }
>
>     @@ -53,6 +54,7 @@ decode_label (u_char *pnt)
>        return l;
>      }
>
>     +/* type == RD_TYPE_AS */
>      static void
>      decode_rd_as (u_char *pnt, struct rd_as *rd_as)
>      {
>     @@ -65,6 +67,20 @@ decode_rd_as (u_char *pnt, struct rd_as *rd_as)
>        rd_as->val |= (u_int32_t) *pnt;
>      }
>
>     +/* type == RD_TYPE_AS4 */
>     +static void
>     +decode_rd_as4 (u_char *pnt, struct rd_as *rd_as)
>     +{
>     +  rd_as->as  = (u_int32_t) *pnt++ << 24;
>     +  rd_as->as |= (u_int32_t) *pnt++ << 16;
>     +  rd_as->as |= (u_int32_t) *pnt++ << 8;
>     +  rd_as->as |= (u_int32_t) *pnt++;
>     +
>     +  rd_as->val  = ((u_int16_t) *pnt++ << 8);
>     +  rd_as->val |= (u_int16_t) *pnt;
>     +}
>     +
>     +/* type == RD_TYPE_IP */
>      static void
>      decode_rd_ip (u_char *pnt, struct rd_ip *rd_ip)
>      {
>     @@ -126,29 +142,31 @@ bgp_nlri_parse_vpnv4 (struct peer *peer,
>     struct attr *attr,
>            /* Decode RD type. */
>            type = decode_rd_type (pnt + 3);
>
>     -      /* Decode RD value. */
>     -      if (type == RD_TYPE_AS)
>     -       decode_rd_as (pnt + 5, &rd_as);
>     -      else if (type == RD_TYPE_IP)
>     -       decode_rd_ip (pnt + 5, &rd_ip);
>     -      else
>     -       {
>     -         zlog_err ("Invalid RD type %d", type);
>     -         return -1;
>     -       }
>     +      switch (type)
>     +        {
>     +        case RD_TYPE_AS:
>     +          decode_rd_as (pnt + 5, &rd_as);
>     +          break;
>     +
>     +        case RD_TYPE_AS4:
>     +          decode_rd_as4 (pnt + 5, &rd_as);
>     +          break;
>     +
>     +        case RD_TYPE_IP:
>     +          decode_rd_ip (pnt + 5, &rd_ip);
>     +          break;
>     +
>     +        case RD_TYPE_EOI:
>     +          break;
>     +
>     +        default:
>     +          zlog_err ("Invalid RD type %d", type);
>     +          return -1;
>     +        }
>
>            p.prefixlen = prefixlen - 88;
>            memcpy (&p.u.prefix, pnt + 11, psize - 11);
>
>     -#if 0
>     -      if (type == RD_TYPE_AS)
>     -       zlog_info ("prefix %ld:%ld:%ld:%s/%d", label, rd_as.as
>     <http://rd_as.as>, rd_as.val,
>     -                  inet_ntoa (p.u.prefix4), p.prefixlen);
>     -      else if (type == RD_TYPE_IP)
>     -       zlog_info ("prefix %ld:%s:%ld:%s/%d", label, inet_ntoa
>     (rd_ip.ip),
>     -                  rd_ip.val, inet_ntoa (p.u.prefix4), p.prefixlen);
>     -#endif /* 0 */
>     -
>            if (pnt + psize > lim)
>             return -1;
>
>     @@ -273,12 +291,25 @@ prefix_rd2str (struct prefix_rd *prd, char
>     *buf, size_t size)
>            snprintf (buf, size, "%u:%d", rd_as.as <http://rd_as.as>,
>     rd_as.val);
>            return buf;
>          }
>     +  else if (type == RD_TYPE_AS4)
>     +    {
>     +      decode_rd_as4 (pnt + 2, &rd_as);
>     +      snprintf (buf, size, "%u:%d", rd_as.as <http://rd_as.as>,
>     rd_as.val);
>     +      return buf;
>     +    }
>        else if (type == RD_TYPE_IP)
>          {
>            decode_rd_ip (pnt + 2, &rd_ip);
>            snprintf (buf, size, "%s:%d", inet_ntoa (rd_ip.ip), rd_ip.val);
>            return buf;
>          }
>     +  else if (type == RD_TYPE_EOI)
>     +    {
>     +      snprintf(buf, size, "LHI:%d, %02x:%02x:%02x:%02x:%02x:%02x",
>     +               pnt[1], /* LHI */
>     +               pnt[2], pnt[3], pnt[4], pnt[5], pnt[6], pnt[7]);
>     /* MAC */
>     +      return buf;
>     +    }
>
>        return NULL;
>      }
>     @@ -385,6 +416,8 @@ show_adj_route_vpn (struct vty *vty, struct
>     peer *peer, struct prefix_rd *prd)
>                          /* Decode RD value. */
>                          if (type == RD_TYPE_AS)
>                            decode_rd_as (pnt + 2, &rd_as);
>     +                    else if (type == RD_TYPE_AS4)
>     +                      decode_rd_as4 (pnt + 2, &rd_as);
>                          else if (type == RD_TYPE_IP)
>                            decode_rd_ip (pnt + 2, &rd_ip);
>
>     @@ -392,6 +425,8 @@ show_adj_route_vpn (struct vty *vty, struct
>     peer *peer, struct prefix_rd *prd)
>
>                          if (type == RD_TYPE_AS)
>                            vty_out (vty, "%u:%d", rd_as.as
>     <http://rd_as.as>, rd_as.val);
>     +                    else if (type == RD_TYPE_AS4)
>     +                      vty_out (vty, "%u:%d", rd_as.as
>     <http://rd_as.as>, rd_as.val);
>                          else if (type == RD_TYPE_IP)
>                            vty_out (vty, "%s:%d", inet_ntoa
>     (rd_ip.ip), rd_ip.val);
>
>     @@ -492,15 +527,19 @@ bgp_show_mpls_vpn (struct vty *vty, struct
>     prefix_rd *prd, enum bgp_show_type ty
>                         /* Decode RD value. */
>                         if (type == RD_TYPE_AS)
>                           decode_rd_as (pnt + 2, &rd_as);
>     +                   else if (type == RD_TYPE_AS4)
>     +                     decode_rd_as4 (pnt + 2, &rd_as);
>                         else if (type == RD_TYPE_IP)
>                           decode_rd_ip (pnt + 2, &rd_ip);
>
>                         vty_out (vty, "Route Distinguisher: ");
>
>                         if (type == RD_TYPE_AS)
>     -                     vty_out (vty, "%u:%d", rd_as.as
>     <http://rd_as.as>, rd_as.val);
>     +                     vty_out (vty, "as2 %u:%d", rd_as.as
>     <http://rd_as.as>, rd_as.val);
>     +                   else if (type == RD_TYPE_AS4)
>     +                     vty_out (vty, "as4 %u:%d", rd_as.as
>     <http://rd_as.as>, rd_as.val);
>                         else if (type == RD_TYPE_IP)
>     -                     vty_out (vty, "%s:%d", inet_ntoa (rd_ip.ip),
>     rd_ip.val);
>     +                     vty_out (vty, "ip %s:%d", inet_ntoa
>     (rd_ip.ip), rd_ip.val);
>
>                         vty_out (vty, "%s", VTY_NEWLINE);
>                         rd_header = 0;
>     diff --git a/bgpd/bgp_mplsvpn.h b/bgpd/bgp_mplsvpn.h
>     index b221c3b..0cb9dec 100644
>     --- a/bgpd/bgp_mplsvpn.h
>     +++ b/bgpd/bgp_mplsvpn.h
>     @@ -23,6 +23,8 @@ Software Foundation, Inc., 59 Temple Place -
>     Suite 330, Boston, MA
>
>      #define RD_TYPE_AS      0
>      #define RD_TYPE_IP      1
>     +#define RD_TYPE_AS4     2
>     +#define RD_TYPE_EOI    0xff00
>
>      #define RD_ADDRSTRLEN  28
>
>     --
>     2.1.3
>
>
>     _______________________________________________
>     Quagga-dev mailing list
>     [email protected] <mailto:[email protected]>
>     https://lists.quagga.net/mailman/listinfo/quagga-dev
>
>



_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to