diff --git a/src/capwap/Makefile b/src/capwap/Makefile index bae68c75..0a4d40a5 100644 --- a/src/capwap/Makefile +++ b/src/capwap/Makefile @@ -121,6 +121,7 @@ CAPWAPOBJS= \ cw_readelem_radio_administrative_state.o \ cw_readelem_radio_operational_state.o \ cw_readelem_statistics_timer.o \ + cw_readelem_mtu_discovery_padding.o \ cw_readelem_wtp_reboot_statistics.o\ cwmsg_addelem_vendor_cisco_ap_timesync.o \ lw_checksum.o diff --git a/src/capwap/cw_readelem_mtu_discovery_padding.c b/src/capwap/cw_readelem_mtu_discovery_padding.c new file mode 100644 index 00000000..79b9f175 --- /dev/null +++ b/src/capwap/cw_readelem_mtu_discovery_padding.c @@ -0,0 +1,40 @@ +/* + This file is part of libcapwap. + + libcapwap is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + libcapwap is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Foobar. If not, see . + +*/ + + +#include "capwap.h" +#include "cw_log.h" + +int cw_readelem_mtu_discovery_padding(int type, uint8_t * msgelem, int len) +{ + if (type != CWMSGELEM_MTU_DISCOVERY_PADDING) + return 0; + if (!cw_dbg_is_level(DBG_CW_RFC)) + return 1; + + int i, n = 0; + for (i = 0; i < len; i++) { + if (msgelem[i] != 0xff) + n++; + } + if (n) + cw_dbg(DBG_CW_RFC, + "MTU discovery padding msgelem contains %d non-0xFF byte(s) out of %d, See RFC 5415.", + n, len); + return 1; +} diff --git a/src/capwap/cwread_discovery_request.c b/src/capwap/cwread_discovery_request.c index 8783c24d..de03eaf1 100644 --- a/src/capwap/cwread_discovery_request.c +++ b/src/capwap/cwread_discovery_request.c @@ -61,6 +61,11 @@ static int wtpinfo_readelem_discovery_req(void *eparm, int type, (e->wtpinfo, type, msgelem, len)) goto foundX; + /* non-mandatory mesage lements */ + if (cw_readelem_mtu_discovery_padding(type,msgelem,len)) + return 1; + + return 0; foundX: cw_mand_elem_found(e->mand, type);