diff options
Diffstat (limited to 'lib/mpls.h')
| -rw-r--r-- | lib/mpls.h | 134 |
1 files changed, 64 insertions, 70 deletions
diff --git a/lib/mpls.h b/lib/mpls.h index 13a46e1012..7fee811074 100644 --- a/lib/mpls.h +++ b/lib/mpls.h @@ -41,11 +41,12 @@ #define MPLS_MIN_UNRESERVED_LABEL 16 #define MPLS_MAX_UNRESERVED_LABEL 1048575 -#define IS_MPLS_RESERVED_LABEL(label) \ - (label >= MPLS_MIN_RESERVED_LABEL && label <= MPLS_MAX_RESERVED_LABEL) +#define IS_MPLS_RESERVED_LABEL(label) \ + (label >= MPLS_MIN_RESERVED_LABEL && label <= MPLS_MAX_RESERVED_LABEL) -#define IS_MPLS_UNRESERVED_LABEL(label) \ - (label >= MPLS_MIN_UNRESERVED_LABEL && label <= MPLS_MAX_UNRESERVED_LABEL) +#define IS_MPLS_UNRESERVED_LABEL(label) \ + (label >= MPLS_MIN_UNRESERVED_LABEL \ + && label <= MPLS_MAX_UNRESERVED_LABEL) /* Definitions for a MPLS label stack entry (RFC 3032). This encodes the * label, EXP, BOS and TTL fields. @@ -61,14 +62,11 @@ typedef unsigned int mpls_lse_t; #define MPLS_LS_TTL_MASK 0x000000FF #define MPLS_LS_TTL_SHIFT 0 -#define MPLS_LABEL_VALUE(lse) \ - ((lse & MPLS_LS_LABEL_MASK) >> MPLS_LS_LABEL_SHIFT) -#define MPLS_LABEL_EXP(lse) \ - ((lse & MPLS_LS_EXP_MASK) >> MPLS_LS_EXP_SHIFT) -#define MPLS_LABEL_BOS(lse) \ - ((lse & MPLS_LS_S_MASK) >> MPLS_LS_S_SHIFT) -#define MPLS_LABEL_TTL(lse) \ - ((lse & MPLS_LS_TTL_MASK) >> MPLS_LS_TTL_SHIFT) +#define MPLS_LABEL_VALUE(lse) \ + ((lse & MPLS_LS_LABEL_MASK) >> MPLS_LS_LABEL_SHIFT) +#define MPLS_LABEL_EXP(lse) ((lse & MPLS_LS_EXP_MASK) >> MPLS_LS_EXP_SHIFT) +#define MPLS_LABEL_BOS(lse) ((lse & MPLS_LS_S_MASK) >> MPLS_LS_S_SHIFT) +#define MPLS_LABEL_TTL(lse) ((lse & MPLS_LS_TTL_MASK) >> MPLS_LS_TTL_SHIFT) #define IS_MPLS_LABEL_BOS(ls) (MPLS_LABEL_BOS(ls) == 1) @@ -81,11 +79,10 @@ typedef unsigned int mpls_label_t; #define MPLS_INVALID_LABEL 0xFFFFFFFF /* LSP types. */ -enum lsp_types_t -{ - ZEBRA_LSP_NONE = 0, /* No LSP. */ - ZEBRA_LSP_STATIC = 1, /* Static LSP. */ - ZEBRA_LSP_LDP = 2 /* LDP LSP. */ +enum lsp_types_t { + ZEBRA_LSP_NONE = 0, /* No LSP. */ + ZEBRA_LSP_STATIC = 1, /* Static LSP. */ + ZEBRA_LSP_LDP = 2 /* LDP LSP. */ }; /* Functions for basic label operations. */ @@ -93,72 +90,69 @@ enum lsp_types_t /* Encode a label stack entry from fields; convert to network byte-order as * the Netlink interface expects MPLS labels to be in this format. */ -static inline mpls_lse_t -mpls_lse_encode (mpls_label_t label, u_int32_t ttl, - u_int32_t exp, u_int32_t bos) +static inline mpls_lse_t mpls_lse_encode(mpls_label_t label, u_int32_t ttl, + u_int32_t exp, u_int32_t bos) { - mpls_lse_t lse; - lse = htonl ((label << MPLS_LS_LABEL_SHIFT) | - (exp << MPLS_LS_EXP_SHIFT) | - (bos ? (1 << MPLS_LS_S_SHIFT) : 0) | - (ttl << MPLS_LS_TTL_SHIFT)); - return lse; + mpls_lse_t lse; + lse = htonl((label << MPLS_LS_LABEL_SHIFT) | (exp << MPLS_LS_EXP_SHIFT) + | (bos ? (1 << MPLS_LS_S_SHIFT) : 0) + | (ttl << MPLS_LS_TTL_SHIFT)); + return lse; } /* Extract the fields from a label stack entry after converting to host-byte * order. This is expected to be called only for messages received over the * Netlink interface. */ -static inline void -mpls_lse_decode (mpls_lse_t lse, mpls_label_t *label, - u_int32_t *ttl, u_int32_t *exp, u_int32_t *bos) +static inline void mpls_lse_decode(mpls_lse_t lse, mpls_label_t *label, + u_int32_t *ttl, u_int32_t *exp, + u_int32_t *bos) { - mpls_lse_t local_lse; + mpls_lse_t local_lse; - local_lse = ntohl (lse); - *label = MPLS_LABEL_VALUE(local_lse); - *exp = MPLS_LABEL_EXP(local_lse); - *bos = MPLS_LABEL_BOS(local_lse); - *ttl = MPLS_LABEL_TTL(local_lse); + local_lse = ntohl(lse); + *label = MPLS_LABEL_VALUE(local_lse); + *exp = MPLS_LABEL_EXP(local_lse); + *bos = MPLS_LABEL_BOS(local_lse); + *ttl = MPLS_LABEL_TTL(local_lse); } /* Printable string for labels (with consideration for reserved values). */ -static inline char * -label2str (mpls_label_t label, char *buf, size_t len) +static inline char *label2str(mpls_label_t label, char *buf, size_t len) { - switch(label) { - case MPLS_V4_EXP_NULL_LABEL: - strlcpy(buf, "IPv4 Explicit Null", len); - return(buf); - case MPLS_RA_LABEL: - strlcpy(buf, "Router Alert", len); - return(buf); - case MPLS_V6_EXP_NULL_LABEL: - strlcpy(buf, "IPv6 Explict Null", len); - return(buf); - case MPLS_IMP_NULL_LABEL: - strlcpy(buf, "implicit-null", len); - return(buf); - case MPLS_ENTROPY_LABEL_INDICATOR: - strlcpy(buf, "Entropy Label Indicator", len); - return(buf); - case MPLS_GAL_LABEL: - strlcpy(buf, "Generic Associated Channel", len); - return(buf); - case MPLS_OAM_ALERT_LABEL: - strlcpy(buf, "OAM Alert", len); - return(buf); - case MPLS_EXTENSION_LABEL: - strlcpy(buf, "Extension", len); - return(buf); - default: - if (label < 16) - snprintf(buf, len, "Reserved (%u)", label); - else - snprintf(buf, len, "%u", label); - return(buf); - } + switch (label) { + case MPLS_V4_EXP_NULL_LABEL: + strlcpy(buf, "IPv4 Explicit Null", len); + return (buf); + case MPLS_RA_LABEL: + strlcpy(buf, "Router Alert", len); + return (buf); + case MPLS_V6_EXP_NULL_LABEL: + strlcpy(buf, "IPv6 Explict Null", len); + return (buf); + case MPLS_IMP_NULL_LABEL: + strlcpy(buf, "implicit-null", len); + return (buf); + case MPLS_ENTROPY_LABEL_INDICATOR: + strlcpy(buf, "Entropy Label Indicator", len); + return (buf); + case MPLS_GAL_LABEL: + strlcpy(buf, "Generic Associated Channel", len); + return (buf); + case MPLS_OAM_ALERT_LABEL: + strlcpy(buf, "OAM Alert", len); + return (buf); + case MPLS_EXTENSION_LABEL: + strlcpy(buf, "Extension", len); + return (buf); + default: + if (label < 16) + snprintf(buf, len, "Reserved (%u)", label); + else + snprintf(buf, len, "%u", label); + return (buf); + } } /* constants used by ldpd */ @@ -166,7 +160,7 @@ label2str (mpls_label_t label, char *buf, size_t len) #define MPLS_LABEL_RTALERT 1 /* Router Alert Label */ #define MPLS_LABEL_IPV6NULL 2 /* IPv6 Explicit NULL Label */ #define MPLS_LABEL_IMPLNULL 3 /* Implicit NULL Label */ -/* MPLS_LABEL_RESERVED 4-15 */ /* Values 4-15 are reserved */ + /* MPLS_LABEL_RESERVED 4-15 */ /* Values 4-15 are reserved */ #define MPLS_LABEL_RESERVED_MAX 15 #define MPLS_LABEL_MAX ((1 << 20) - 1) |
