]> git.ipfire.org Git - thirdparty/lldpd.git/commitdiff
Move LLDP-MED POE stuff into a dedicated structure.
authorVincent Bernat <bernat@luffy.cx>
Fri, 26 Mar 2010 22:24:35 +0000 (23:24 +0100)
committerVincent Bernat <bernat@luffy.cx>
Sat, 3 Apr 2010 21:10:24 +0000 (23:10 +0200)
This will allow to send this structure without sending the whole port
information.

src/agent.c
src/display.c
src/lldp.c
src/lldpd.h
tests/check_lldp.c

index 4e5ac03ef18c7d12a8a535f4e04a34eb3cedac38..3805dec3159635975c03cfcde9b5c171814b7099 100644 (file)
@@ -668,7 +668,7 @@ agent_h_remote_med(struct variable *vp, oid *name, size_t *length,
                bit = swap_bits(port->p_med_cap_enabled);
                return (u_char *)&bit;
        case LLDP_SNMP_MED_REMOTE_POE_DEVICETYPE:
-               switch (port->p_med_pow_devicetype) {
+               switch (port->p_med_power.devicetype) {
                case LLDPMED_POW_TYPE_PSE:
                        long_ret = 2; break;
                case LLDPMED_POW_TYPE_PD:
@@ -682,19 +682,19 @@ agent_h_remote_med(struct variable *vp, oid *name, size_t *length,
        case LLDP_SNMP_MED_REMOTE_POE_PSE_POWERVAL:
        case LLDP_SNMP_MED_REMOTE_POE_PD_POWERVAL:
                if (((vp->magic == LLDP_SNMP_MED_REMOTE_POE_PSE_POWERVAL) &&
-                       (port->p_med_pow_devicetype ==
+                       (port->p_med_power.devicetype ==
                        LLDPMED_POW_TYPE_PSE)) ||
                    ((vp->magic == LLDP_SNMP_MED_REMOTE_POE_PD_POWERVAL) &&
-                       (port->p_med_pow_devicetype ==
+                       (port->p_med_power.devicetype ==
                            LLDPMED_POW_TYPE_PD))) {
-                       long_ret = port->p_med_pow_val;
+                       long_ret = port->p_med_power.val;
                        return (u_char *)&long_ret;
                }
                break;
        case LLDP_SNMP_MED_REMOTE_POE_PSE_POWERSOURCE:
-               if (port->p_med_pow_devicetype ==
+               if (port->p_med_power.devicetype ==
                    LLDPMED_POW_TYPE_PSE) {
-                       switch (port->p_med_pow_source) {
+                       switch (port->p_med_power.source) {
                        case LLDPMED_POW_SOURCE_PRIMARY:
                                long_ret = 2; break;
                        case LLDPMED_POW_SOURCE_BACKUP:
@@ -706,9 +706,9 @@ agent_h_remote_med(struct variable *vp, oid *name, size_t *length,
                }
                break;
        case LLDP_SNMP_MED_REMOTE_POE_PD_POWERSOURCE:
-               if (port->p_med_pow_devicetype ==
+               if (port->p_med_power.devicetype ==
                    LLDPMED_POW_TYPE_PD) {
-                       switch (port->p_med_pow_source) {
+                       switch (port->p_med_power.source) {
                        case LLDPMED_POW_SOURCE_PSE:
                                long_ret = 2; break;
                        case LLDPMED_POW_SOURCE_LOCAL:
@@ -724,12 +724,12 @@ agent_h_remote_med(struct variable *vp, oid *name, size_t *length,
        case LLDP_SNMP_MED_REMOTE_POE_PSE_POWERPRIORITY:
        case LLDP_SNMP_MED_REMOTE_POE_PD_POWERPRIORITY:
                if (((vp->magic == LLDP_SNMP_MED_REMOTE_POE_PSE_POWERPRIORITY) &&
-                       (port->p_med_pow_devicetype ==
+                       (port->p_med_power.devicetype ==
                        LLDPMED_POW_TYPE_PSE)) ||
                    ((vp->magic == LLDP_SNMP_MED_REMOTE_POE_PD_POWERPRIORITY) &&
-                       (port->p_med_pow_devicetype ==
+                       (port->p_med_power.devicetype ==
                            LLDPMED_POW_TYPE_PD))) {
-                       switch (port->p_med_pow_priority) {
+                       switch (port->p_med_power.priority) {
                        case LLDPMED_POW_PRIO_CRITICAL:
                                long_ret = 2; break;
                        case LLDPMED_POW_PRIO_HIGH:
index 50c559943c9a36bc5a6d2a87a0cddbd4dd9915a7..8267b0d660c1c9f72bddfa9ff358a2b0de6fbc31 100644 (file)
@@ -671,24 +671,24 @@ display_med(struct writer *w, struct lldpd_chassis *chassis, struct lldpd_port *
                        tag_end(w);
                }
        }
-       if (port->p_med_pow_devicetype) {
+       if (port->p_med_power.devicetype) {
                tag_start(w, "poe", "Extended Power-over-Ethernet");
 
                tag_start(w, "device-type", "Power Type & Source");
-               tag_data(w, map_lookup(port_med_pow_devicetype_map, port->p_med_pow_devicetype));
+               tag_data(w, map_lookup(port_med_pow_devicetype_map, port->p_med_power.devicetype));
                tag_end(w);
 
                tag_start(w, "source", "Power Source");
-               tag_data(w, map_lookup(port_med_pow_source_map, port->p_med_pow_source));
+               tag_data(w, map_lookup(port_med_pow_source_map, port->p_med_power.source));
                tag_end(w);
                
                tag_start(w, "priority", "Power Priority");
-               tag_data(w, map_lookup(port_med_pow_priority_map, port->p_med_pow_priority));
+               tag_data(w, map_lookup(port_med_pow_priority_map, port->p_med_power.priority));
                tag_end(w);
 
-               if(port->p_med_pow_val < 1024) {
+               if(port->p_med_power.val < 1024) {
                        tag_start(w, "power", "Power Value");
-                       tag_data(w, u2str(port->p_med_pow_val * 100));
+                       tag_data(w, u2str(port->p_med_power.val * 100));
                        tag_end(w);
                }
                tag_end(w);
index 2bb9e2ee10790318825753c019c0dbe1e005c6c8..4d9be3e27fcd4fcfebc278b932d2adb9afab785e 100644 (file)
@@ -623,75 +623,75 @@ lldp_decode(struct lldpd *cfg, char *frame, int s,
                                        power = PEEK_UINT8;
                                        switch (power & 0xC0) {
                                        case 0x0:
-                                               port->p_med_pow_devicetype = LLDPMED_POW_TYPE_PSE;
+                                               port->p_med_power.devicetype = LLDPMED_POW_TYPE_PSE;
                                                port->p_med_cap_enabled |=
                                                    LLDPMED_CAP_MDI_PSE;
                                                switch (power & 0x30) {
                                                case 0x0:
-                                                       port->p_med_pow_source =
+                                                       port->p_med_power.source =
                                                            LLDPMED_POW_SOURCE_UNKNOWN;
                                                        break;
                                                case 0x10:
-                                                       port->p_med_pow_source =
+                                                       port->p_med_power.source =
                                                            LLDPMED_POW_SOURCE_PRIMARY;
                                                        break;
                                                case 0x20:
-                                                       port->p_med_pow_source =
+                                                       port->p_med_power.source =
                                                            LLDPMED_POW_SOURCE_BACKUP;
                                                        break;
                                                default:
-                                                       port->p_med_pow_source =
+                                                       port->p_med_power.source =
                                                            LLDPMED_POW_SOURCE_RESERVED;
                                                }
                                                break;
                                        case 0x40:
-                                               port->p_med_pow_devicetype = LLDPMED_POW_TYPE_PD;
+                                               port->p_med_power.devicetype = LLDPMED_POW_TYPE_PD;
                                                port->p_med_cap_enabled |=
                                                    LLDPMED_CAP_MDI_PD;
                                                switch (power & 0x30) {
                                                case 0x0:
-                                                       port->p_med_pow_source =
+                                                       port->p_med_power.source =
                                                            LLDPMED_POW_SOURCE_UNKNOWN;
                                                        break;
                                                case 0x10:
-                                                       port->p_med_pow_source =
+                                                       port->p_med_power.source =
                                                            LLDPMED_POW_SOURCE_PSE;
                                                        break;
                                                case 0x20:
-                                                       port->p_med_pow_source =
+                                                       port->p_med_power.source =
                                                            LLDPMED_POW_SOURCE_LOCAL;
                                                        break;
                                                default:
-                                                       port->p_med_pow_source =
+                                                       port->p_med_power.source =
                                                            LLDPMED_POW_SOURCE_BOTH;
                                                }
                                                break;
                                        default:
-                                               port->p_med_pow_devicetype =
+                                               port->p_med_power.devicetype =
                                                    LLDPMED_POW_TYPE_RESERVED;
                                        }
                                        switch (power & 0x0F) {
                                        case 0x0:
-                                               port->p_med_pow_priority =
+                                               port->p_med_power.priority =
                                                    LLDPMED_POW_PRIO_UNKNOWN;
                                                break;
                                        case 0x1:
-                                               port->p_med_pow_priority =
+                                               port->p_med_power.priority =
                                                    LLDPMED_POW_PRIO_CRITICAL;
                                                break;
                                        case 0x2:
-                                               port->p_med_pow_priority =
+                                               port->p_med_power.priority =
                                                    LLDPMED_POW_PRIO_HIGH;
                                                break;
                                        case 0x3:
-                                               port->p_med_pow_priority =
+                                               port->p_med_power.priority =
                                                    LLDPMED_POW_PRIO_LOW;
                                                break;
                                        default:
-                                               port->p_med_pow_priority =
+                                               port->p_med_power.priority =
                                                    LLDPMED_POW_PRIO_UNKNOWN;
                                        }
-                                       port->p_med_pow_val = PEEK_UINT16;
+                                       port->p_med_power.val = PEEK_UINT16;
                                        break;
                                case LLDP_TLV_MED_IV_HW:
                                case LLDP_TLV_MED_IV_SW:
index 51305e7c3319155c70c13dc72524269056a963ad..331691b97f886f37e8b0497384afed6d7fae9edb 100644 (file)
@@ -92,6 +92,14 @@ struct lldpd_med_loc {
        char                    *data;
        int                      data_len;
 };
+
+#define STRUCT_LLDPD_MED_POWER "(bbbw)"
+struct lldpd_med_power {
+       u_int8_t                 devicetype; /* PD or PSE */
+       u_int8_t                 source;
+       u_int8_t                 priority;
+       u_int16_t                val;
+};
 #endif
 
 struct lldpd_chassis {
@@ -169,14 +177,11 @@ struct lldpd_port {
        STRUCT_LLDPD_MED_LOC           \
        STRUCT_LLDPD_MED_LOC           \
        STRUCT_LLDPD_MED_LOC           \
-       "bbbw"
+       STRUCT_LLDPD_MED_POWER
        u_int16_t                p_med_cap_enabled;
        struct lldpd_med_policy  p_med_policy[LLDPMED_APPTYPE_LAST];
        struct lldpd_med_loc     p_med_location[LLDPMED_LOCFORMAT_LAST];
-       u_int8_t                 p_med_pow_devicetype; /* PD or PSE */
-       u_int8_t                 p_med_pow_source;
-       u_int8_t                 p_med_pow_priority;
-       u_int16_t                p_med_pow_val;
+       struct lldpd_med_power   p_med_power;
 #else
 #define STRUCT_LLDPD_PORT_MED ""
 #endif
index bc7e66460b68223fa5f54a0eb5cd5ea21b8f65b4..d3495d6dbaa9255d5ffd0b5aa3be9908a8b0382f 100644 (file)
@@ -540,10 +540,10 @@ Link Layer Discovery Protocol
                6;
        hardware.h_lport.p_med_policy[LLDPMED_APPTYPE_SOFTPHONEVOICE-1].dscp =
                46;
-       hardware.h_lport.p_med_pow_devicetype = LLDPMED_POW_TYPE_PSE;
-       hardware.h_lport.p_med_pow_source = LLDPMED_POW_SOURCE_PRIMARY;
-       hardware.h_lport.p_med_pow_priority = LLDPMED_POW_PRIO_HIGH;
-       hardware.h_lport.p_med_pow_val = 65;
+       hardware.h_lport.p_med_power.devicetype = LLDPMED_POW_TYPE_PSE;
+       hardware.h_lport.p_med_power.source = LLDPMED_POW_SOURCE_PRIMARY;
+       hardware.h_lport.p_med_power.priority = LLDPMED_POW_PRIO_HIGH;
+       hardware.h_lport.p_med_power.val = 65;
 
        /* Build packet */
        n = lldp_send(NULL, &hardware);
@@ -1415,10 +1415,10 @@ Link Layer Discovery Protocol
            LLDPMED_LOCFORMAT_CIVIC);
        ck_assert_int_eq(nport->p_med_location[LLDPMED_LOCFORMAT_COORD-1].format,
            0);
-       ck_assert_int_eq(nport->p_med_pow_val, 65);
-       ck_assert_int_eq(nport->p_med_pow_source, LLDPMED_POW_SOURCE_UNKNOWN);
-       ck_assert_int_eq(nport->p_med_pow_priority, LLDPMED_POW_PRIO_LOW);
-       ck_assert_int_eq(nport->p_med_pow_devicetype, LLDPMED_POW_TYPE_PSE);
+       ck_assert_int_eq(nport->p_med_power.val, 65);
+       ck_assert_int_eq(nport->p_med_power.source, LLDPMED_POW_SOURCE_UNKNOWN);
+       ck_assert_int_eq(nport->p_med_power.priority, LLDPMED_POW_PRIO_LOW);
+       ck_assert_int_eq(nport->p_med_power.devicetype, LLDPMED_POW_TYPE_PSE);
 }
 END_TEST
 #endif