hardware->h_ifname);
goto malformed;
}
- chassis->c_med_powtype =
- *(u_int8_t*)(frame + f);
+ switch (*(u_int8_t*)(frame + f) & 0xC0) {
+ case 0x0:
+ chassis->c_med_pow_devicetype = LLDPMED_POW_TYPE_PSE;
+ switch (*(u_int8_t*)(frame + f) & 0x30) {
+ case 0x0:
+ chassis->c_med_pow_source =
+ LLDPMED_POW_SOURCE_UNKNOWN;
+ break;
+ case 0x10:
+ chassis->c_med_pow_source =
+ LLDPMED_POW_SOURCE_PRIMARY;
+ break;
+ case 0x20:
+ chassis->c_med_pow_source =
+ LLDPMED_POW_SOURCE_BACKUP;
+ break;
+ default:
+ chassis->c_med_pow_source =
+ LLDPMED_POW_SOURCE_RESERVED;
+ }
+ break;
+ case 0x40:
+ chassis->c_med_pow_devicetype = LLDPMED_POW_TYPE_PD;
+ switch (*(u_int8_t*)(frame + f) & 0x30) {
+ case 0x0:
+ chassis->c_med_pow_source =
+ LLDPMED_POW_SOURCE_UNKNOWN;
+ break;
+ case 0x10:
+ chassis->c_med_pow_source =
+ LLDPMED_POW_SOURCE_PSE;
+ break;
+ case 0x20:
+ chassis->c_med_pow_source =
+ LLDPMED_POW_SOURCE_LOCAL;
+ break;
+ default:
+ chassis->c_med_pow_source =
+ LLDPMED_POW_SOURCE_BOTH;
+ }
+ break;
+ default:
+ chassis->c_med_pow_devicetype =
+ LLDPMED_POW_TYPE_RESERVED;
+ }
+ switch (*(u_int8_t*)(frame + f) & 0x0F) {
+ case 0x0:
+ chassis->c_med_pow_priority =
+ LLDPMED_POW_PRIO_UNKNOWN;
+ break;
+ case 0x1:
+ chassis->c_med_pow_priority =
+ LLDPMED_POW_PRIO_CRITICAL;
+ break;
+ case 0x2:
+ chassis->c_med_pow_priority =
+ LLDPMED_POW_PRIO_HIGH;
+ break;
+ case 0x3:
+ chassis->c_med_pow_priority =
+ LLDPMED_POW_PRIO_LOW;
+ break;
+ default:
+ chassis->c_med_pow_priority =
+ LLDPMED_POW_PRIO_UNKNOWN;
+ }
f += 1;
- chassis->c_med_powval =
+ chassis->c_med_pow_val =
ntohs(*(u_int16_t*)(frame + f));
f += 2;
chassis->c_med_cap_enabled |=
#define LLDPMED_LOCFORMAT_ELIN 3
#define LLDPMED_LOCFORMAT_LAST LLDPMED_LOCFORMAT_ELIN
+#define LLDPMED_POW_TYPE_PSE 1
+#define LLDPMED_POW_TYPE_PD 2
+#define LLDPMED_POW_TYPE_RESERVED 3
+
+#define LLDPMED_POW_SOURCE_UNKNOWN 1
+#define LLDPMED_POW_SOURCE_PRIMARY 2
+#define LLDPMED_POW_SOURCE_BACKUP 3
+#define LLDPMED_POW_SOURCE_RESERVED 4
+#define LLDPMED_POW_SOURCE_PSE 5
+#define LLDPMED_POW_SOURCE_LOCAL 6
+#define LLDPMED_POW_SOURCE_BOTH 7
+
+#define LLDPMED_POW_PRIO_UNKNOWN 1
+#define LLDPMED_POW_PRIO_CRITICAL 2
+#define LLDPMED_POW_PRIO_HIGH 3
+#define LLDPMED_POW_PRIO_LOW 4
+
#define LLDPMED_CAP_CAP 0x01
#define LLDPMED_CAP_POLICY 0x02
#define LLDPMED_CAP_LOCATION 0x04
printf("\n");
}
}
- if (chassis->c_med_powtype) {
+ if (chassis->c_med_pow_devicetype) {
printf(" LLDP-MED Extended Power-over-Ethernet:\n");
printf(" Power Type & Source: ");
- if((chassis->c_med_powtype & 0xC0) == 0x00) {
+ switch (chassis->c_med_pow_devicetype) {
+ case LLDPMED_POW_TYPE_PSE:
printf("PSE Device");
- if((chassis->c_med_powtype & 0x30) == 0x00) {
- printf(", unknown");
- } else if((chassis->c_med_powtype & 0x30) == 0x10) {
- printf(", Primary Power Source");
- } else if((chassis->c_med_powtype & 0x30) == 0x20) {
- printf(", Backup Power Source / Power Conservation Mode");
- }
- } else if((chassis->c_med_powtype & 0xC0) == 0x40) {
+ break;
+ case LLDPMED_POW_TYPE_PD:
printf("PD Device");
- if((chassis->c_med_powtype & 0x30) == 0x00) {
- printf(", unknown");
- } else if((chassis->c_med_powtype & 0x30) == 0x10) {
- printf(", PSE");
- } else if((chassis->c_med_powtype & 0x30) == 0x20) {
- printf(", local");
- } else {
- printf(", PSE & local");
- }
- } else {
+ break;
+ default:
printf("reserved");
}
+ switch (chassis->c_med_pow_source) {
+ case LLDPMED_POW_SOURCE_UNKNOWN:
+ case LLDPMED_POW_SOURCE_RESERVED:
+ printf(", unknown"); break;
+ case LLDPMED_POW_SOURCE_PRIMARY:
+ printf(", Primary Power Source");
+ break;
+ case LLDPMED_POW_SOURCE_BACKUP:
+ printf(", Backup Power Source / Power Conservation Mode");
+ break;
+ case LLDPMED_POW_SOURCE_PSE:
+ printf(", PSE"); break;
+ case LLDPMED_POW_SOURCE_LOCAL:
+ printf(", local"); break;
+ case LLDPMED_POW_SOURCE_BOTH:
+ printf(", PSE & local");
+ break;
+ }
printf("\n Power Priority: ");
- if((chassis->c_med_powtype & 0x0F) == 0x00) {
+ switch (chassis->c_med_pow_priority) {
+ case LLDPMED_POW_PRIO_CRITICAL:
+ printf("critical"); break;
+ case LLDPMED_POW_PRIO_HIGH:
+ printf("high"); break;
+ case LLDPMED_POW_PRIO_LOW:
+ printf("low"); break;
+ default:
printf("unknown");
- } else if((chassis->c_med_powtype & 0x0F) == 0x01) {
- printf("critical");
- } else if((chassis->c_med_powtype & 0x0F) == 0x02) {
- printf("high");
- } else if((chassis->c_med_powtype & 0x0F) == 0x03) {
- printf("low");
- } else {
- printf("reserved");
}
printf("\n Power Value: ");
- if(chassis->c_med_powval < 1024) {
- printf("%u mW", chassis->c_med_powval * 100);
+ if(chassis->c_med_pow_val < 1024) {
+ printf("%u mW", chassis->c_med_pow_val * 100);
} else {
printf("reserved");
}
STRUCT_LLDPD_MED_LOC \
STRUCT_LLDPD_MED_LOC \
STRUCT_LLDPD_MED_LOC \
- "Pwwbbwsssssss"
+ "Pwwbbbbwsssssss"
void *c_padding1; /* We force alignment */
struct lldpd_med_policy c_med_policy[LLDPMED_APPTYPE_LAST];
u_int16_t c_med_cap_available;
u_int16_t c_med_cap_enabled;
u_int8_t c_med_type;
- u_int8_t c_med_powtype;
- u_int16_t c_med_powval;
+ u_int8_t c_med_pow_devicetype; /* PD or PSE */
+ u_int8_t c_med_pow_source;
+ u_int8_t c_med_pow_priority;
+ u_int16_t c_med_pow_val;
char *c_med_hw;
char *c_med_fw;
char *c_med_sw;