\hypertarget{ieee80211__wds_8c_source}{}\doxysection{ieee80211\+\_\+wds.\+c}
\label{ieee80211__wds_8c_source}\index{net80211/ieee80211\_wds.c@{net80211/ieee80211\_wds.c}}
\mbox{\hyperlink{ieee80211__wds_8c}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00001}00001 \textcolor{comment}{/*-\/}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00002}00002 \textcolor{comment}{ * SPDX-\/License-\/Identifier: BSD-\/2-\/Clause-\/FreeBSD}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00003}00003 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00004}00004 \textcolor{comment}{ * Copyright (c) 2007-\/2008 Sam Leffler, Errno Consulting}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00005}00005 \textcolor{comment}{ * All rights reserved.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00006}00006 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00007}00007 \textcolor{comment}{ * Redistribution and use in source and binary forms, with or without}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00008}00008 \textcolor{comment}{ * modification, are permitted provided that the following conditions}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00009}00009 \textcolor{comment}{ * are met:}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00010}00010 \textcolor{comment}{ * 1. Redistributions of source code must retain the above copyright}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00011}00011 \textcolor{comment}{ *    notice, this list of conditions and the following disclaimer.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00012}00012 \textcolor{comment}{ * 2. Redistributions in binary form must reproduce the above copyright}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00013}00013 \textcolor{comment}{ *    notice, this list of conditions and the following disclaimer in the}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00014}00014 \textcolor{comment}{ *    documentation and/or other materials provided with the distribution.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00015}00015 \textcolor{comment}{ *}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00016}00016 \textcolor{comment}{ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00017}00017 \textcolor{comment}{ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00018}00018 \textcolor{comment}{ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00019}00019 \textcolor{comment}{ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00020}00020 \textcolor{comment}{ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00021}00021 \textcolor{comment}{ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00022}00022 \textcolor{comment}{ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00023}00023 \textcolor{comment}{ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00024}00024 \textcolor{comment}{ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00025}00025 \textcolor{comment}{ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00026}00026 \textcolor{comment}{ */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00027}00027 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00028}00028 \textcolor{preprocessor}{\#include <sys/cdefs.h>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00029}00029 \textcolor{preprocessor}{\#ifdef \_\_FreeBSD\_\_}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00030}\mbox{\hyperlink{ieee80211__wds_8c_a8c3ef283470a68cd30afe9b8a72cb60f}{00030}} \mbox{\hyperlink{ieee80211__wds_8c_a8c3ef283470a68cd30afe9b8a72cb60f}{\_\_FBSDID}}(\textcolor{stringliteral}{"{}\$FreeBSD\$"{}});}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00031}00031 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00032}00032 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00033}00033 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00034}00034 \textcolor{comment}{ * IEEE 802.11 WDS mode support.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00035}00035 \textcolor{comment}{ */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00036}00036 \textcolor{preprocessor}{\#include "{}opt\_inet.h"{}}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00037}00037 \textcolor{preprocessor}{\#include "{}opt\_wlan.h"{}}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00038}00038 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00039}00039 \textcolor{preprocessor}{\#include <sys/param.h>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00040}00040 \textcolor{preprocessor}{\#include <sys/systm.h>} }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00041}00041 \textcolor{preprocessor}{\#include <sys/mbuf.h>}   }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00042}00042 \textcolor{preprocessor}{\#include <sys/malloc.h>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00043}00043 \textcolor{preprocessor}{\#include <sys/kernel.h>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00044}00044 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00045}00045 \textcolor{preprocessor}{\#include <sys/socket.h>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00046}00046 \textcolor{preprocessor}{\#include <sys/sockio.h>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00047}00047 \textcolor{preprocessor}{\#include <sys/endian.h>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00048}00048 \textcolor{preprocessor}{\#include <sys/errno.h>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00049}00049 \textcolor{preprocessor}{\#include <sys/proc.h>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00050}00050 \textcolor{preprocessor}{\#include <sys/sysctl.h>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00051}00051 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00052}00052 \textcolor{preprocessor}{\#include <net/if.h>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00053}00053 \textcolor{preprocessor}{\#include <net/if\_var.h>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00054}00054 \textcolor{preprocessor}{\#include <net/if\_media.h>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00055}00055 \textcolor{preprocessor}{\#include <net/if\_llc.h>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00056}00056 \textcolor{preprocessor}{\#include <net/ethernet.h>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00057}00057 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00058}00058 \textcolor{preprocessor}{\#include <net/bpf.h>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00059}00059 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00060}00060 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{ieee80211__var_8h}{net80211/ieee80211\_var.h}}>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00061}00061 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{ieee80211__wds_8h}{net80211/ieee80211\_wds.h}}>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00062}00062 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{ieee80211__input_8h}{net80211/ieee80211\_input.h}}>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00063}00063 \textcolor{preprocessor}{\#ifdef IEEE80211\_SUPPORT\_SUPERG}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00064}00064 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{ieee80211__superg_8h}{net80211/ieee80211\_superg.h}}>}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00065}00065 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00066}00066 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00067}00067 \textcolor{keyword}{static} \textcolor{keywordtype}{void} \mbox{\hyperlink{ieee80211__wds_8c_ab32df36dbab8cb0c7c11eb2cf8fb422a}{wds\_vattach}}(\textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211vap}{ieee80211vap}} *);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00068}00068 \textcolor{keyword}{static} \textcolor{keywordtype}{int} \mbox{\hyperlink{ieee80211__wds_8c_a2b1388271e4db9e041b50b6fafb8ac8e}{wds\_newstate}}(\textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211vap}{ieee80211vap}} *, \textcolor{keyword}{enum} \mbox{\hyperlink{ieee80211__proto_8h_a6c8e7861891c9e21e6a02ccdba514944}{ieee80211\_state}}, \textcolor{keywordtype}{int});}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00069}00069 \textcolor{keyword}{static}  \textcolor{keywordtype}{int} \mbox{\hyperlink{ieee80211__wds_8c_a5602fd6709afe208d6895e7febbcbaae}{wds\_input}}(\textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211__node}{ieee80211\_node}} *ni, \textcolor{keyword}{struct} mbuf *m,}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00070}00070             \textcolor{keyword}{const} \textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211__rx__stats}{ieee80211\_rx\_stats}} *rxs, \textcolor{keywordtype}{int}, \textcolor{keywordtype}{int});}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00071}00071 \textcolor{keyword}{static} \textcolor{keywordtype}{void} \mbox{\hyperlink{ieee80211__wds_8c_a0835753ffa584087f488cd68ab2b01e1}{wds\_recv\_mgmt}}(\textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211__node}{ieee80211\_node}} *, \textcolor{keyword}{struct} mbuf *, \textcolor{keywordtype}{int} subtype,}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00072}00072         \textcolor{keyword}{const} \textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211__rx__stats}{ieee80211\_rx\_stats}} *, \textcolor{keywordtype}{int}, \textcolor{keywordtype}{int});}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00073}00073 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00074}00074 \textcolor{keywordtype}{void}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00075}\mbox{\hyperlink{ieee80211__wds_8c_a135c3b08337ae995c99022d5696771df}{00075}} \mbox{\hyperlink{ieee80211__wds_8c_a135c3b08337ae995c99022d5696771df}{ieee80211\_wds\_attach}}(\textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211com}{ieee80211com}} *ic)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00076}00076 \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00077}00077         ic-\/>\mbox{\hyperlink{structieee80211com_a310b0d3a36b0d5c9a322e6a291d9652f}{ic\_vattach}}[\mbox{\hyperlink{__ieee80211_8h_ab624e38122a844713ca48c7307772ed1a6db2729957646bf5449bd2bfd0286897}{IEEE80211\_M\_WDS}}] = \mbox{\hyperlink{ieee80211__wds_8c_ab32df36dbab8cb0c7c11eb2cf8fb422a}{wds\_vattach}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00078}00078 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00079}00079 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00080}00080 \textcolor{keywordtype}{void}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00081}\mbox{\hyperlink{ieee80211__wds_8c_a13e4f7a900c64085627f8ca07a901dbf}{00081}} \mbox{\hyperlink{ieee80211__wds_8c_a13e4f7a900c64085627f8ca07a901dbf}{ieee80211\_wds\_detach}}(\textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211com}{ieee80211com}} *ic)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00082}00082 \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00083}00083 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00084}00084 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00085}00085 \textcolor{keyword}{static} \textcolor{keywordtype}{void}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00086}\mbox{\hyperlink{ieee80211__wds_8c_a01b22af94d8ef83df6e443d667bebe0f}{00086}} \mbox{\hyperlink{ieee80211__wds_8c_a01b22af94d8ef83df6e443d667bebe0f}{wds\_vdetach}}(\textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211vap}{ieee80211vap}} *vap)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00087}00087 \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00088}00088         \textcolor{keywordflow}{if} (vap-\/>\mbox{\hyperlink{structieee80211vap_a116ec25ffa4d694abe01c6b58d18384a}{iv\_bss}} != NULL) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00089}00089                 \textcolor{comment}{/* XXX locking? */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00090}00090                 \textcolor{keywordflow}{if} (vap-\/>\mbox{\hyperlink{structieee80211vap_a116ec25ffa4d694abe01c6b58d18384a}{iv\_bss}}-\/>\mbox{\hyperlink{structieee80211__node_abde209a166da888f0bc39df7627f10f2}{ni\_wdsvap}} == vap)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00091}00091                         vap-\/>\mbox{\hyperlink{structieee80211vap_a116ec25ffa4d694abe01c6b58d18384a}{iv\_bss}}-\/>\mbox{\hyperlink{structieee80211__node_abde209a166da888f0bc39df7627f10f2}{ni\_wdsvap}} = NULL;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00092}00092         \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00093}00093 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00094}00094 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00095}00095 \textcolor{keyword}{static} \textcolor{keywordtype}{void}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00096}\mbox{\hyperlink{ieee80211__wds_8c_ab32df36dbab8cb0c7c11eb2cf8fb422a}{00096}} \mbox{\hyperlink{ieee80211__wds_8c_ab32df36dbab8cb0c7c11eb2cf8fb422a}{wds\_vattach}}(\textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211vap}{ieee80211vap}} *vap)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00097}00097 \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00098}00098         vap-\/>\mbox{\hyperlink{structieee80211vap_afb26bef583b00e4d02e4854676a80cc1}{iv\_newstate}} = \mbox{\hyperlink{ieee80211__wds_8c_a2b1388271e4db9e041b50b6fafb8ac8e}{wds\_newstate}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00099}00099         vap-\/>\mbox{\hyperlink{structieee80211vap_ab225a61914234523f0f1f26e4759b3c5}{iv\_input}} = \mbox{\hyperlink{ieee80211__wds_8c_a5602fd6709afe208d6895e7febbcbaae}{wds\_input}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00100}00100         vap-\/>\mbox{\hyperlink{structieee80211vap_a5079a18ecb374649e03dd6a858193316}{iv\_recv\_mgmt}} = \mbox{\hyperlink{ieee80211__wds_8c_a0835753ffa584087f488cd68ab2b01e1}{wds\_recv\_mgmt}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00101}00101         vap-\/>\mbox{\hyperlink{structieee80211vap_a8bbc49a111f65bc934689b0d97beaf19}{iv\_opdetach}} = \mbox{\hyperlink{ieee80211__wds_8c_a01b22af94d8ef83df6e443d667bebe0f}{wds\_vdetach}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00102}00102 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00103}00103 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00104}00104 \textcolor{keyword}{static} \textcolor{keywordtype}{void}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00105}\mbox{\hyperlink{ieee80211__wds_8c_ac231316cb776e94357bf4fd7bbad397b}{00105}} \mbox{\hyperlink{ieee80211__wds_8c_ac231316cb776e94357bf4fd7bbad397b}{wds\_flush}}(\textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211__node}{ieee80211\_node}} *ni)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00106}00106 \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00107}00107         \textcolor{keyword}{struct }\mbox{\hyperlink{structieee80211com}{ieee80211com}} *ic = ni-\/>\mbox{\hyperlink{structieee80211__node_a2510619138beb9911b3cf058cc4991a6}{ni\_ic}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00108}00108         \textcolor{keyword}{struct }mbuf *m, *next;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00109}00109         int8\_t rssi, nf;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00110}00110 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00111}00111         m = \mbox{\hyperlink{ieee80211__ageq_8c_af7d7833a6994a2ab9a4c9fdc249bccd0}{ieee80211\_ageq\_remove}}(\&ic-\/>\mbox{\hyperlink{structieee80211com_a78d019dde427fcd2e12517c79a85e6e7}{ic\_stageq}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00112}00112             (\textcolor{keywordtype}{void} *)(uintptr\_t) \mbox{\hyperlink{ieee80211_8c_a58cce3a1bea31cbcf8f5ce833644a639}{ieee80211\_mac\_hash}}(ic, ni-\/>\mbox{\hyperlink{structieee80211__node_a358404f75db7624b64469b3d33900a41}{ni\_macaddr}}));}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00113}00113         \textcolor{keywordflow}{if} (m == NULL)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00114}00114                 \textcolor{keywordflow}{return};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00115}00115 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00116}00116         \mbox{\hyperlink{ieee80211__var_8h_a9c90e846ab7773b17fc49706dd551293}{IEEE80211\_NOTE}}(ni-\/>\mbox{\hyperlink{structieee80211__node_a6adce9156cd9d0e45eaa499acdef5092}{ni\_vap}}, \mbox{\hyperlink{ieee80211__var_8h_ad087c81871931593088e819c5c6adf14}{IEEE80211\_MSG\_WDS}}, ni,}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00117}00117             \textcolor{stringliteral}{"{}\%s"{}}, \textcolor{stringliteral}{"{}flush wds queue"{}});}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00118}00118         ic-\/>\mbox{\hyperlink{structieee80211com_a08bf1596b042245695feafbe3703b4f5}{ic\_node\_getsignal}}(ni, \&rssi, \&nf);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00119}00119         \textcolor{keywordflow}{for} (; m != NULL; m = next) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00120}00120                 next = m-\/>m\_nextpkt;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00121}00121                 m-\/>m\_nextpkt = NULL;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00122}00122                 \mbox{\hyperlink{ieee80211__proto_8h_a0e83a0d0aa7bc33fb96cf43e1de8f512}{ieee80211\_input}}(ni, m, rssi, nf);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00123}00123         \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00124}00124 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00125}00125 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00126}00126 \textcolor{keyword}{static} \textcolor{keywordtype}{int}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00127}\mbox{\hyperlink{ieee80211__wds_8c_a2d53a0b442d29ccd40821eddc1a1fada}{00127}} \mbox{\hyperlink{ieee80211__wds_8c_a2d53a0b442d29ccd40821eddc1a1fada}{ieee80211\_create\_wds}}(\textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211vap}{ieee80211vap}} *vap, \textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211__channel}{ieee80211\_channel}} *chan)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00128}00128 \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00129}00129         \textcolor{keyword}{struct }\mbox{\hyperlink{structieee80211com}{ieee80211com}} *ic = vap-\/>\mbox{\hyperlink{structieee80211vap_a043409de0850043e3574182889cdaac0}{iv\_ic}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00130}00130         \textcolor{keyword}{struct }\mbox{\hyperlink{structieee80211__node__table}{ieee80211\_node\_table}} *nt = \&ic-\/>\mbox{\hyperlink{structieee80211com_a61e5500229605827b95f01f3e95e5abc}{ic\_sta}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00131}00131         \textcolor{keyword}{struct }\mbox{\hyperlink{structieee80211__node}{ieee80211\_node}} *ni, *obss;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00132}00132 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00133}00133         \mbox{\hyperlink{ieee80211__var_8h_ac185ad5fc3b0a56653d4ea243a100a1c}{IEEE80211\_DPRINTF}}(vap, \mbox{\hyperlink{ieee80211__var_8h_ad087c81871931593088e819c5c6adf14}{IEEE80211\_MSG\_WDS}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00134}00134              \textcolor{stringliteral}{"{}\%s: creating link to \%s on channel \%u\(\backslash\)n"{}}, \_\_func\_\_,}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00135}00135              ether\_sprintf(vap-\/>\mbox{\hyperlink{structieee80211vap_a77a7b5cb36ce4622a5041c91dcb1f25c}{iv\_des\_bssid}}), \mbox{\hyperlink{ieee80211_8c_a0f2ce75abd2d6add7f014be6d9305980}{ieee80211\_chan2ieee}}(ic, chan));}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00136}00136 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00137}00137         \textcolor{comment}{/* NB: vap create must specify the bssid for the link */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00138}00138         KASSERT(vap-\/>\mbox{\hyperlink{structieee80211vap_a6b457135ea58b5e8526931b124209ac8}{iv\_flags}} \& \mbox{\hyperlink{ieee80211__var_8h_a20aaace0ebd0e04cbd39a041239091e4}{IEEE80211\_F\_DESBSSID}}, (\textcolor{stringliteral}{"{}no bssid"{}}));}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00139}00139         \textcolor{comment}{/* NB: we should only be called on RUN transition */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00140}00140         KASSERT(vap-\/>\mbox{\hyperlink{structieee80211vap_a80866880b00a3d4ef5d37df580155905}{iv\_state}} == \mbox{\hyperlink{ieee80211__proto_8h_a6c8e7861891c9e21e6a02ccdba514944a59e567dc5761d3a082d77011fc6c1a39}{IEEE80211\_S\_RUN}}, (\textcolor{stringliteral}{"{}!RUN state"{}}));}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00141}00141 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00142}00142         \textcolor{keywordflow}{if} ((vap-\/>\mbox{\hyperlink{structieee80211vap_a74aac287d91c2dd2da91ba4539d5fd43}{iv\_flags\_ext}} \& \mbox{\hyperlink{ieee80211__var_8h_a6560cacb614027508f2c1aee093a2bf1}{IEEE80211\_FEXT\_WDSLEGACY}}) == 0) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00143}00143                 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00144}00144 \textcolor{comment}{                 * Dynamic/non-\/legacy WDS.  Reference the associated}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00145}00145 \textcolor{comment}{                 * station specified by the desired bssid setup at vap}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00146}00146 \textcolor{comment}{                 * create.  Point ni\_wdsvap at the WDS vap so 4-\/address}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00147}00147 \textcolor{comment}{                 * frames received through the associated AP vap will}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00148}00148 \textcolor{comment}{                 * be dispatched upward (e.g. to a bridge) as though}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00149}00149 \textcolor{comment}{                 * they arrived on the WDS vap.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00150}00150 \textcolor{comment}{                 */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00151}00151                 \mbox{\hyperlink{ieee80211__freebsd_8h_acbf4e83e3551eb8f3a8e6dbc3ce836f5}{IEEE80211\_NODE\_LOCK}}(nt);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00152}00152                 obss = NULL;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00153}00153                 ni = \mbox{\hyperlink{ieee80211__node_8c_a855a6f5bbfefcd1e0b433241ca193ca4}{ieee80211\_find\_node\_locked}}(\&ic-\/>\mbox{\hyperlink{structieee80211com_a61e5500229605827b95f01f3e95e5abc}{ic\_sta}}, vap-\/>\mbox{\hyperlink{structieee80211vap_a77a7b5cb36ce4622a5041c91dcb1f25c}{iv\_des\_bssid}});}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00154}00154                 \textcolor{keywordflow}{if} (ni == NULL) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00155}00155                         \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00156}00156 \textcolor{comment}{                         * Node went away before we could hookup.  This}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00157}00157 \textcolor{comment}{                         * should be ok; no traffic will flow and a leave}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00158}00158 \textcolor{comment}{                         * event will be dispatched that should cause}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00159}00159 \textcolor{comment}{                         * the vap to be destroyed.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00160}00160 \textcolor{comment}{                         */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00161}00161                         \mbox{\hyperlink{ieee80211__var_8h_ac185ad5fc3b0a56653d4ea243a100a1c}{IEEE80211\_DPRINTF}}(vap, \mbox{\hyperlink{ieee80211__var_8h_ad087c81871931593088e819c5c6adf14}{IEEE80211\_MSG\_WDS}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00162}00162                             \textcolor{stringliteral}{"{}\%s: station \%s went away\(\backslash\)n"{}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00163}00163                             \_\_func\_\_, ether\_sprintf(vap-\/>\mbox{\hyperlink{structieee80211vap_a77a7b5cb36ce4622a5041c91dcb1f25c}{iv\_des\_bssid}}));}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00164}00164                         \textcolor{comment}{/* XXX stat? */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00165}00165                 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (ni-\/>\mbox{\hyperlink{structieee80211__node_abde209a166da888f0bc39df7627f10f2}{ni\_wdsvap}} != NULL) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00166}00166                         \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00167}00167 \textcolor{comment}{                         * Node already setup with a WDS vap; we cannot}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00168}00168 \textcolor{comment}{                         * allow multiple references so disallow.  If}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00169}00169 \textcolor{comment}{                         * ni\_wdsvap points at us that's ok; we should}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00170}00170 \textcolor{comment}{                         * do nothing anyway.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00171}00171 \textcolor{comment}{                         */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00172}00172                         \textcolor{comment}{/* XXX printf instead? */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00173}00173                         \mbox{\hyperlink{ieee80211__var_8h_ac185ad5fc3b0a56653d4ea243a100a1c}{IEEE80211\_DPRINTF}}(vap, \mbox{\hyperlink{ieee80211__var_8h_ad087c81871931593088e819c5c6adf14}{IEEE80211\_MSG\_WDS}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00174}00174                             \textcolor{stringliteral}{"{}\%s: station \%s in use with \%s\(\backslash\)n"{}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00175}00175                             \_\_func\_\_, ether\_sprintf(vap-\/>\mbox{\hyperlink{structieee80211vap_a77a7b5cb36ce4622a5041c91dcb1f25c}{iv\_des\_bssid}}),}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00176}00176                             ni-\/>\mbox{\hyperlink{structieee80211__node_abde209a166da888f0bc39df7627f10f2}{ni\_wdsvap}}-\/>\mbox{\hyperlink{structieee80211vap_aca4f7d70404f3fafac925ee534bf5c5f}{iv\_ifp}}-\/>if\_xname);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00177}00177                         \textcolor{comment}{/* XXX stat? */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00178}00178                 \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00179}00179                         \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00180}00180 \textcolor{comment}{                         * Committed to new node, setup state.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00181}00181 \textcolor{comment}{                         */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00182}00182                         obss = vap-\/>\mbox{\hyperlink{structieee80211vap_a116ec25ffa4d694abe01c6b58d18384a}{iv\_bss}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00183}00183                         vap-\/>\mbox{\hyperlink{structieee80211vap_a116ec25ffa4d694abe01c6b58d18384a}{iv\_bss}} = ni;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00184}00184                         ni-\/>\mbox{\hyperlink{structieee80211__node_abde209a166da888f0bc39df7627f10f2}{ni\_wdsvap}} = vap;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00185}00185                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00186}00186                 \mbox{\hyperlink{ieee80211__freebsd_8h_ae1544c71cd730128306dbb3bae6feed8}{IEEE80211\_NODE\_UNLOCK}}(nt);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00187}00187                 \textcolor{keywordflow}{if} (obss != NULL) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00188}00188                         \textcolor{comment}{/* NB: deferred to avoid recursive lock */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00189}00189                         \mbox{\hyperlink{ieee80211__node_8c_a233be47e72c5ab355a8ee331861beb78}{ieee80211\_free\_node}}(obss);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00190}00190                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00191}00191         \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00192}00192                 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00193}00193 \textcolor{comment}{                 * Legacy WDS vap setup.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00194}00194 \textcolor{comment}{                 */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00195}00195                 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00196}00196 \textcolor{comment}{                 * The far end does not associate so we just create}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00197}00197 \textcolor{comment}{                 * create a new node and install it as the vap's}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00198}00198 \textcolor{comment}{                 * bss node.  We must simulate an association and}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00199}00199 \textcolor{comment}{                 * authorize the port for traffic to flow.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00200}00200 \textcolor{comment}{                 * XXX check if node already in sta table?}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00201}00201 \textcolor{comment}{                 */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00202}00202                 ni = \mbox{\hyperlink{ieee80211__node_8c_ae5500a6c49105c7e3903219936178068}{ieee80211\_node\_create\_wds}}(vap, vap-\/>\mbox{\hyperlink{structieee80211vap_a77a7b5cb36ce4622a5041c91dcb1f25c}{iv\_des\_bssid}}, chan);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00203}00203                 \textcolor{keywordflow}{if} (ni != NULL) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00204}00204                         obss = vap-\/>\mbox{\hyperlink{structieee80211vap_a116ec25ffa4d694abe01c6b58d18384a}{iv\_bss}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00205}00205                         vap-\/>\mbox{\hyperlink{structieee80211vap_a116ec25ffa4d694abe01c6b58d18384a}{iv\_bss}} = \mbox{\hyperlink{ieee80211__node_8h_aad4a775184a92846122ebe76e6b2b48b}{ieee80211\_ref\_node}}(ni);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00206}00206                         ni-\/>\mbox{\hyperlink{structieee80211__node_a08f59d9e2e9ddc02963d445229b98b37}{ni\_flags}} |= \mbox{\hyperlink{ieee80211__node_8h_ae08947d11173c61e1ce452d5e306f21b}{IEEE80211\_NODE\_AREF}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00207}00207                         \textcolor{keywordflow}{if} (obss != NULL)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00208}00208                                 \mbox{\hyperlink{ieee80211__node_8c_a233be47e72c5ab355a8ee331861beb78}{ieee80211\_free\_node}}(obss);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00209}00209                         \textcolor{comment}{/* give driver a chance to setup state like ni\_txrate */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00210}00210                         \textcolor{keywordflow}{if} (ic-\/>\mbox{\hyperlink{structieee80211com_af8f74a56898ec611a0c3443e55a71284}{ic\_newassoc}} != NULL)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00211}00211                                 ic-\/>\mbox{\hyperlink{structieee80211com_af8f74a56898ec611a0c3443e55a71284}{ic\_newassoc}}(ni, 1);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00212}00212                         \textcolor{comment}{/* tell the authenticator about new station */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00213}00213                         \textcolor{keywordflow}{if} (vap-\/>\mbox{\hyperlink{structieee80211vap_a66310fc2572a3507ed4679e612ab3500}{iv\_auth}}-\/>\mbox{\hyperlink{structieee80211__authenticator_a54ba687c6fa4472ae863a4615ea15b9c}{ia\_node\_join}} != NULL)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00214}00214                                 vap-\/>\mbox{\hyperlink{structieee80211vap_a66310fc2572a3507ed4679e612ab3500}{iv\_auth}}-\/>\mbox{\hyperlink{structieee80211__authenticator_a54ba687c6fa4472ae863a4615ea15b9c}{ia\_node\_join}}(ni);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00215}00215                         \textcolor{keywordflow}{if} (ni-\/>\mbox{\hyperlink{structieee80211__node_a36e48112ddea919d19c898bee0d18eb5}{ni\_authmode}} != \mbox{\hyperlink{__ieee80211_8h_a831eabb053cc096dbcdc6d6264e2074da1b9ca7ab10ac2394acc8af90268a061d}{IEEE80211\_AUTH\_8021X}})}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00216}00216                                 \mbox{\hyperlink{ieee80211__node_8c_a7744a49edcaebd18271f87d24dd62a2e}{ieee80211\_node\_authorize}}(ni);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00217}00217 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00218}00218                         \mbox{\hyperlink{ieee80211__freebsd_8c_a57be79534d6b8be3b219c6ebc5e51b0c}{ieee80211\_notify\_node\_join}}(ni, 1 \textcolor{comment}{/*newassoc*/});}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00219}00219                         \textcolor{comment}{/* XXX inject l2uf frame */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00220}00220                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00221}00221         \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00222}00222 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00223}00223         \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00224}00224 \textcolor{comment}{         * Flush any pending frames now that were setup.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00225}00225 \textcolor{comment}{         */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00226}00226         \textcolor{keywordflow}{if} (ni != NULL)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00227}00227                 \mbox{\hyperlink{ieee80211__wds_8c_ac231316cb776e94357bf4fd7bbad397b}{wds\_flush}}(ni);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00228}00228         \textcolor{keywordflow}{return} (ni == NULL ? ENOENT : 0);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00229}00229 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00230}00230 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00231}00231 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00232}00232 \textcolor{comment}{ * Propagate multicast frames of an ap vap to all DWDS links.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00233}00233 \textcolor{comment}{ * The caller is assumed to have verified this frame is multicast.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00234}00234 \textcolor{comment}{ */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00235}00235 \textcolor{keywordtype}{void}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00236}\mbox{\hyperlink{ieee80211__wds_8c_aefac26beb5b85580abc7117ead625009}{00236}} \mbox{\hyperlink{ieee80211__wds_8c_aefac26beb5b85580abc7117ead625009}{ieee80211\_dwds\_mcast}}(\textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211vap}{ieee80211vap}} *vap0, \textcolor{keyword}{struct} mbuf *m)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00237}00237 \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00238}00238         \textcolor{keyword}{struct }\mbox{\hyperlink{structieee80211com}{ieee80211com}} *ic = vap0-\/>\mbox{\hyperlink{structieee80211vap_a043409de0850043e3574182889cdaac0}{iv\_ic}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00239}00239         \textcolor{keyword}{const} \textcolor{keyword}{struct }ether\_header *eh = mtod(m, \textcolor{keyword}{const} \textcolor{keyword}{struct} ether\_header *);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00240}00240         \textcolor{keyword}{struct }\mbox{\hyperlink{structieee80211__node}{ieee80211\_node}} *ni;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00241}00241         \textcolor{keyword}{struct }\mbox{\hyperlink{structieee80211vap}{ieee80211vap}} *vap;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00242}00242         \textcolor{keyword}{struct }ifnet *ifp;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00243}00243         \textcolor{keyword}{struct }mbuf *mcopy;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00244}00244         \textcolor{keywordtype}{int} err;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00245}00245 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00246}00246         KASSERT(ETHER\_IS\_MULTICAST(eh-\/>ether\_dhost),}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00247}00247             (\textcolor{stringliteral}{"{}\%s not mcast"{}}, ether\_sprintf(eh-\/>ether\_dhost)));}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00248}00248 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00249}00249         \textcolor{comment}{/* XXX locking */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00250}00250         TAILQ\_FOREACH(vap, \&ic-\/>ic\_vaps, iv\_next) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00251}00251                 \textcolor{comment}{/* only DWDS vaps are interesting */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00252}00252                 \textcolor{keywordflow}{if} (vap-\/>\mbox{\hyperlink{structieee80211vap_a22de8996244412911c0015d499eab3fb}{iv\_opmode}} != \mbox{\hyperlink{__ieee80211_8h_ab624e38122a844713ca48c7307772ed1a6db2729957646bf5449bd2bfd0286897}{IEEE80211\_M\_WDS}} ||}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00253}00253                     (vap-\/>\mbox{\hyperlink{structieee80211vap_a74aac287d91c2dd2da91ba4539d5fd43}{iv\_flags\_ext}} \& \mbox{\hyperlink{ieee80211__var_8h_a6560cacb614027508f2c1aee093a2bf1}{IEEE80211\_FEXT\_WDSLEGACY}}))}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00254}00254                         \textcolor{keywordflow}{continue};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00255}00255                 \textcolor{comment}{/* if it came in this interface, don't send it back out */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00256}00256                 ifp = vap-\/>\mbox{\hyperlink{structieee80211vap_aca4f7d70404f3fafac925ee534bf5c5f}{iv\_ifp}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00257}00257                 \textcolor{keywordflow}{if} (ifp == m-\/>m\_pkthdr.rcvif)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00258}00258                         \textcolor{keywordflow}{continue};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00259}00259                 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00260}00260 \textcolor{comment}{                 * Duplicate the frame and send it.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00261}00261 \textcolor{comment}{                 */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00262}00262                 mcopy = m\_copypacket(m, M\_NOWAIT);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00263}00263                 \textcolor{keywordflow}{if} (mcopy == NULL) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00264}00264                         if\_inc\_counter(ifp, IFCOUNTER\_OERRORS, 1);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00265}00265                         \textcolor{comment}{/* XXX stat + msg */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00266}00266                         \textcolor{keywordflow}{continue};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00267}00267                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00268}00268                 ni = \mbox{\hyperlink{ieee80211__node_8c_ac6ac5ca20c3a6847dec2bf1676cc55e3}{ieee80211\_find\_txnode}}(vap, eh-\/>ether\_dhost);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00269}00269                 \textcolor{keywordflow}{if} (ni == NULL) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00270}00270                         \textcolor{comment}{/* NB: ieee80211\_find\_txnode does stat+msg */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00271}00271                         if\_inc\_counter(ifp, IFCOUNTER\_OERRORS, 1);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00272}00272                         m\_freem(mcopy);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00273}00273                         \textcolor{keywordflow}{continue};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00274}00274                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00275}00275                 \textcolor{comment}{/* calculate priority so drivers can find the tx queue */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00276}00276                 \textcolor{keywordflow}{if} (\mbox{\hyperlink{ieee80211__output_8c_a4130b2f2e2c1c1c9ea9ba894d26488c5}{ieee80211\_classify}}(ni, mcopy)) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00277}00277                         \mbox{\hyperlink{ieee80211__var_8h_aad7ad14d0875572425fb5aae7b6aa7fc}{IEEE80211\_DISCARD\_MAC}}(vap,}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00278}00278                             \mbox{\hyperlink{ieee80211__var_8h_a20e15937f000b6e97722943e19436ed8}{IEEE80211\_MSG\_OUTPUT}} | \mbox{\hyperlink{ieee80211__var_8h_ad087c81871931593088e819c5c6adf14}{IEEE80211\_MSG\_WDS}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00279}00279                             eh-\/>ether\_dhost, NULL,}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00280}00280                             \textcolor{stringliteral}{"{}\%s"{}}, \textcolor{stringliteral}{"{}classification failure"{}});}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00281}00281                         vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_a8e927f6bdc0a63c4477540f813ee9d44}{is\_tx\_classify}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00282}00282                         if\_inc\_counter(ifp, IFCOUNTER\_OERRORS, 1);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00283}00283                         m\_freem(mcopy);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00284}00284                         \mbox{\hyperlink{ieee80211__node_8c_a233be47e72c5ab355a8ee331861beb78}{ieee80211\_free\_node}}(ni);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00285}00285                         \textcolor{keywordflow}{continue};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00286}00286                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00287}00287 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00288}00288                 BPF\_MTAP(ifp, m);               \textcolor{comment}{/* 802.3 tx */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00289}00289 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00290}00290                 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00291}00291 \textcolor{comment}{                 * Encapsulate the packet in prep for transmission.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00292}00292 \textcolor{comment}{                 */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00293}00293                 \mbox{\hyperlink{ieee80211__freebsd_8h_a542468f23bf9459e7918d70293af846f}{IEEE80211\_TX\_LOCK}}(ic);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00294}00294                 mcopy = \mbox{\hyperlink{ieee80211__output_8c_a2c16cc3bd96793cf4266798767aaec64}{ieee80211\_encap}}(vap, ni, mcopy);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00295}00295                 \textcolor{keywordflow}{if} (mcopy == NULL) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00296}00296                         \textcolor{comment}{/* NB: stat+msg handled in ieee80211\_encap */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00297}00297                         \mbox{\hyperlink{ieee80211__freebsd_8h_aae4ff96c05ead2bfe76fa94298b821ed}{IEEE80211\_TX\_UNLOCK}}(ic);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00298}00298                         \mbox{\hyperlink{ieee80211__node_8c_a233be47e72c5ab355a8ee331861beb78}{ieee80211\_free\_node}}(ni);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00299}00299                         \textcolor{keywordflow}{continue};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00300}00300                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00301}00301                 mcopy-\/>m\_flags |= M\_MCAST;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00302}00302                 MPASS((mcopy-\/>m\_pkthdr.csum\_flags \& CSUM\_SND\_TAG) == 0);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00303}00303                 mcopy-\/>m\_pkthdr.rcvif = (\textcolor{keywordtype}{void} *) ni;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00304}00304 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00305}00305                 err = \mbox{\hyperlink{ieee80211__freebsd_8c_ad981b4fbdb493f7deb6d5b71ccc07f54}{ieee80211\_parent\_xmitpkt}}(ic, mcopy);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00306}00306                 \mbox{\hyperlink{ieee80211__freebsd_8h_aae4ff96c05ead2bfe76fa94298b821ed}{IEEE80211\_TX\_UNLOCK}}(ic);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00307}00307                 \textcolor{keywordflow}{if} (!err) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00308}00308                         if\_inc\_counter(ifp, IFCOUNTER\_OPACKETS, 1);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00309}00309                         if\_inc\_counter(ifp, IFCOUNTER\_OMCASTS, 1);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00310}00310                         if\_inc\_counter(ifp, IFCOUNTER\_OBYTES,}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00311}00311                             m-\/>m\_pkthdr.len);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00312}00312                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00313}00313         \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00314}00314 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00315}00315 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00316}00316 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00317}00317 \textcolor{comment}{ * Handle DWDS discovery on receipt of a 4-\/address frame in}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00318}00318 \textcolor{comment}{ * ap mode.  Queue the frame and post an event for someone}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00319}00319 \textcolor{comment}{ * to plumb the necessary WDS vap for this station.  Frames}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00320}00320 \textcolor{comment}{ * received prior to the vap set running will then be reprocessed}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00321}00321 \textcolor{comment}{ * as if they were just received.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00322}00322 \textcolor{comment}{ */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00323}00323 \textcolor{keywordtype}{void}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00324}\mbox{\hyperlink{ieee80211__wds_8c_a4917ec9e627b2d525f9414967ff86999}{00324}} \mbox{\hyperlink{ieee80211__wds_8c_a4917ec9e627b2d525f9414967ff86999}{ieee80211\_dwds\_discover}}(\textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211__node}{ieee80211\_node}} *ni, \textcolor{keyword}{struct} mbuf *m)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00325}00325 \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00326}00326         \textcolor{keyword}{struct }\mbox{\hyperlink{structieee80211com}{ieee80211com}} *ic = ni-\/>\mbox{\hyperlink{structieee80211__node_a2510619138beb9911b3cf058cc4991a6}{ni\_ic}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00327}00327 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00328}00328         \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00329}00329 \textcolor{comment}{         * Save the frame with an aging interval 4 times}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00330}00330 \textcolor{comment}{         * the listen interval specified by the station. }}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00331}00331 \textcolor{comment}{         * Frames that sit around too long are reclaimed}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00332}00332 \textcolor{comment}{         * using this information.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00333}00333 \textcolor{comment}{         * XXX handle overflow?}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00334}00334 \textcolor{comment}{         * XXX per/vap beacon interval?}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00335}00335 \textcolor{comment}{         */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00336}00336         MPASS((m-\/>m\_pkthdr.csum\_flags \& CSUM\_SND\_TAG) == 0);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00337}00337         m-\/>m\_pkthdr.rcvif = (\textcolor{keywordtype}{void} *)(uintptr\_t)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00338}00338             \mbox{\hyperlink{ieee80211_8c_a58cce3a1bea31cbcf8f5ce833644a639}{ieee80211\_mac\_hash}}(ic, ni-\/>\mbox{\hyperlink{structieee80211__node_a358404f75db7624b64469b3d33900a41}{ni\_macaddr}});}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00339}00339         (void) \mbox{\hyperlink{ieee80211__ageq_8c_a3d4682fecdb92c565afd4cbff6ba7c5d}{ieee80211\_ageq\_append}}(\&ic-\/>\mbox{\hyperlink{structieee80211com_a78d019dde427fcd2e12517c79a85e6e7}{ic\_stageq}}, m,}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00340}00340             ((ni-\/>\mbox{\hyperlink{structieee80211__node_a7549f5f54f1cb8edbf40fc0af17aa9e2}{ni\_intval}} * ic-\/>\mbox{\hyperlink{structieee80211com_acd1125bdc60bcd89fdc4e28d813dcc2d}{ic\_lintval}}) << 2) / 1024);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00341}00341         \mbox{\hyperlink{ieee80211__freebsd_8c_a5f1d2eb293e18a6143aa8bd85bdc8b01}{ieee80211\_notify\_wds\_discover}}(ni);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00342}00342 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00343}00343 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00344}00344 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00345}00345 \textcolor{comment}{ * IEEE80211\_M\_WDS vap state machine handler.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00346}00346 \textcolor{comment}{ */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00347}00347 \textcolor{keyword}{static} \textcolor{keywordtype}{int}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00348}\mbox{\hyperlink{ieee80211__wds_8c_a2b1388271e4db9e041b50b6fafb8ac8e}{00348}} \mbox{\hyperlink{ieee80211__wds_8c_a2b1388271e4db9e041b50b6fafb8ac8e}{wds\_newstate}}(\textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211vap}{ieee80211vap}} *vap, \textcolor{keyword}{enum} \mbox{\hyperlink{ieee80211__proto_8h_a6c8e7861891c9e21e6a02ccdba514944}{ieee80211\_state}} nstate, \textcolor{keywordtype}{int} arg)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00349}00349 \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00350}00350         \textcolor{keyword}{struct }\mbox{\hyperlink{structieee80211com}{ieee80211com}} *ic = vap-\/>\mbox{\hyperlink{structieee80211vap_a043409de0850043e3574182889cdaac0}{iv\_ic}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00351}00351         \textcolor{keyword}{enum} \mbox{\hyperlink{ieee80211__proto_8h_a6c8e7861891c9e21e6a02ccdba514944}{ieee80211\_state}} ostate;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00352}00352         \textcolor{keywordtype}{int} error;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00353}00353 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00354}00354         \mbox{\hyperlink{ieee80211__freebsd_8h_a92da71d7f298d51a339c7d06a610b947}{IEEE80211\_LOCK\_ASSERT}}(ic);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00355}00355 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00356}00356         ostate = vap-\/>\mbox{\hyperlink{structieee80211vap_a80866880b00a3d4ef5d37df580155905}{iv\_state}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00357}00357         \mbox{\hyperlink{ieee80211__var_8h_ac185ad5fc3b0a56653d4ea243a100a1c}{IEEE80211\_DPRINTF}}(vap, \mbox{\hyperlink{ieee80211__var_8h_a0b669672e833a8e854063e445080fb59}{IEEE80211\_MSG\_STATE}}, \textcolor{stringliteral}{"{}\%s: \%s -\/> \%s\(\backslash\)n"{}}, \_\_func\_\_,}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00358}00358                 \mbox{\hyperlink{ieee80211__proto_8c_a7743c46d5b77e40c7abac1417ee35dd8}{ieee80211\_state\_name}}[ostate], \mbox{\hyperlink{ieee80211__proto_8c_a7743c46d5b77e40c7abac1417ee35dd8}{ieee80211\_state\_name}}[nstate]);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00359}00359         vap-\/>\mbox{\hyperlink{structieee80211vap_a80866880b00a3d4ef5d37df580155905}{iv\_state}} = nstate;                 \textcolor{comment}{/* state transition */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00360}00360         callout\_stop(\&vap-\/>\mbox{\hyperlink{structieee80211vap_aceb4e6c70ea3a018bd73938e08188240}{iv\_mgtsend}});               \textcolor{comment}{/* XXX callout\_drain */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00361}00361         \textcolor{keywordflow}{if} (ostate != \mbox{\hyperlink{ieee80211__proto_8h_a6c8e7861891c9e21e6a02ccdba514944a59ef76960ca7dbc77f222de31442b39e}{IEEE80211\_S\_SCAN}})}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00362}00362                 \mbox{\hyperlink{ieee80211__scan_8c_a99ddc07128337822b73b5fec195d411e}{ieee80211\_cancel\_scan}}(vap);        \textcolor{comment}{/* background scan */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00363}00363         error = 0;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00364}00364         \textcolor{keywordflow}{switch} (nstate) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00365}00365         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211__proto_8h_a6c8e7861891c9e21e6a02ccdba514944a5ddfd615e2f7a05d83ae61a24fa84692}{IEEE80211\_S\_INIT}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00366}00366                 \textcolor{keywordflow}{switch} (ostate) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00367}00367                 \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211__proto_8h_a6c8e7861891c9e21e6a02ccdba514944a59ef76960ca7dbc77f222de31442b39e}{IEEE80211\_S\_SCAN}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00368}00368                         \mbox{\hyperlink{ieee80211__scan_8c_a99ddc07128337822b73b5fec195d411e}{ieee80211\_cancel\_scan}}(vap);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00369}00369                         \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00370}00370                 \textcolor{keywordflow}{default}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00371}00371                         \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00372}00372                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00373}00373                 \textcolor{keywordflow}{if} (ostate != \mbox{\hyperlink{ieee80211__proto_8h_a6c8e7861891c9e21e6a02ccdba514944a5ddfd615e2f7a05d83ae61a24fa84692}{IEEE80211\_S\_INIT}}) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00374}00374                         \textcolor{comment}{/* NB: optimize INIT -\/> INIT case */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00375}00375                         \mbox{\hyperlink{ieee80211__node_8c_a48d9f97b3e2c622be71188b9a9a54a88}{ieee80211\_reset\_bss}}(vap);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00376}00376                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00377}00377                 \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00378}00378         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211__proto_8h_a6c8e7861891c9e21e6a02ccdba514944a59ef76960ca7dbc77f222de31442b39e}{IEEE80211\_S\_SCAN}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00379}00379                 \textcolor{keywordflow}{switch} (ostate) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00380}00380                 \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211__proto_8h_a6c8e7861891c9e21e6a02ccdba514944a5ddfd615e2f7a05d83ae61a24fa84692}{IEEE80211\_S\_INIT}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00381}00381                         \mbox{\hyperlink{ieee80211__scan_8c_ac5865fafa48f64b02212fb561735ef28}{ieee80211\_check\_scan\_current}}(vap);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00382}00382                         \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00383}00383                 \textcolor{keywordflow}{default}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00384}00384                         \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00385}00385                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00386}00386                 \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00387}00387         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211__proto_8h_a6c8e7861891c9e21e6a02ccdba514944a59e567dc5761d3a082d77011fc6c1a39}{IEEE80211\_S\_RUN}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00388}00388                 \textcolor{keywordflow}{if} (ostate == \mbox{\hyperlink{ieee80211__proto_8h_a6c8e7861891c9e21e6a02ccdba514944a5ddfd615e2f7a05d83ae61a24fa84692}{IEEE80211\_S\_INIT}}) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00389}00389                         \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00390}00390 \textcolor{comment}{                         * Already have a channel; bypass the scan}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00391}00391 \textcolor{comment}{                         * and startup immediately.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00392}00392 \textcolor{comment}{                         */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00393}00393                         error = \mbox{\hyperlink{ieee80211__wds_8c_a2d53a0b442d29ccd40821eddc1a1fada}{ieee80211\_create\_wds}}(vap, ic-\/>\mbox{\hyperlink{structieee80211com_af4f9f1d4120d065aec7ac8eae28a613a}{ic\_curchan}});}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00394}00394                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00395}00395                 \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00396}00396         \textcolor{keywordflow}{default}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00397}00397                 \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00398}00398         \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00399}00399         \textcolor{keywordflow}{return} error;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00400}00400 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00401}00401 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00402}00402 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00403}00403 \textcolor{comment}{ * Process a received frame.  The node associated with the sender}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00404}00404 \textcolor{comment}{ * should be supplied.  If nothing was found in the node table then}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00405}00405 \textcolor{comment}{ * the caller is assumed to supply a reference to iv\_bss instead.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00406}00406 \textcolor{comment}{ * The RSSI and a timestamp are also supplied.  The RSSI data is used}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00407}00407 \textcolor{comment}{ * during AP scanning to select a AP to associate with; it can have}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00408}00408 \textcolor{comment}{ * any units so long as values have consistent units and higher values}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00409}00409 \textcolor{comment}{ * mean ``better signal''.  The receive timestamp is currently not used}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00410}00410 \textcolor{comment}{ * by the 802.11 layer.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00411}00411 \textcolor{comment}{ */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00412}00412 \textcolor{keyword}{static} \textcolor{keywordtype}{int}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00413}\mbox{\hyperlink{ieee80211__wds_8c_a5602fd6709afe208d6895e7febbcbaae}{00413}} \mbox{\hyperlink{ieee80211__wds_8c_a5602fd6709afe208d6895e7febbcbaae}{wds\_input}}(\textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211__node}{ieee80211\_node}} *ni, \textcolor{keyword}{struct} mbuf *m,}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00414}00414     \textcolor{keyword}{const} \textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211__rx__stats}{ieee80211\_rx\_stats}} *rxs, \textcolor{keywordtype}{int} rssi, \textcolor{keywordtype}{int} nf)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00415}00415 \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00416}00416         \textcolor{keyword}{struct }\mbox{\hyperlink{structieee80211vap}{ieee80211vap}} *vap = ni-\/>\mbox{\hyperlink{structieee80211__node_a6adce9156cd9d0e45eaa499acdef5092}{ni\_vap}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00417}00417         \textcolor{keyword}{struct }\mbox{\hyperlink{structieee80211com}{ieee80211com}} *ic = ni-\/>\mbox{\hyperlink{structieee80211__node_a2510619138beb9911b3cf058cc4991a6}{ni\_ic}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00418}00418         \textcolor{keyword}{struct }ifnet *ifp = vap-\/>\mbox{\hyperlink{structieee80211vap_aca4f7d70404f3fafac925ee534bf5c5f}{iv\_ifp}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00419}00419         \textcolor{keyword}{struct }\mbox{\hyperlink{structieee80211__frame}{ieee80211\_frame}} *wh;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00420}00420         \textcolor{keyword}{struct }\mbox{\hyperlink{structieee80211__key}{ieee80211\_key}} *key;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00421}00421         \textcolor{keyword}{struct }ether\_header *eh;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00422}00422         \textcolor{keywordtype}{int} hdrspace, need\_tap = 1;     \textcolor{comment}{/* mbuf need to be tapped. */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00423}00423         uint8\_t dir, type, subtype, qos;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00424}00424         \textcolor{keywordtype}{int} is\_hw\_decrypted = 0;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00425}00425         \textcolor{keywordtype}{int} has\_decrypted = 0;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00426}00426 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00427}00427         \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00428}00428 \textcolor{comment}{         * Some devices do hardware decryption all the way through}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00429}00429 \textcolor{comment}{         * to pretending the frame wasn't encrypted in the first place.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00430}00430 \textcolor{comment}{         * So, tag it appropriately so it isn't discarded inappropriately.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00431}00431 \textcolor{comment}{         */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00432}00432         \textcolor{keywordflow}{if} ((rxs != NULL) \&\& (rxs-\/>\mbox{\hyperlink{structieee80211__rx__stats_ae991ec93c1a6947179e7c1ad04bd39a7}{c\_pktflags}} \& \mbox{\hyperlink{__ieee80211_8h_a22e866f1645ef672e40c943f388de39d}{IEEE80211\_RX\_F\_DECRYPTED}}))}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00433}00433                 is\_hw\_decrypted = 1;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00434}00434 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00435}00435         \textcolor{keywordflow}{if} (m-\/>m\_flags \& \mbox{\hyperlink{ieee80211__freebsd_8h_ae6eabe6bed459e58103e7ca2e64ea7c1}{M\_AMPDU\_MPDU}}) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00436}00436                 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00437}00437 \textcolor{comment}{                 * Fastpath for A-\/MPDU reorder q resubmission.  Frames}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00438}00438 \textcolor{comment}{                 * w/ M\_AMPDU\_MPDU marked have already passed through}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00439}00439 \textcolor{comment}{                 * here but were received out of order and been held on}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00440}00440 \textcolor{comment}{                 * the reorder queue.  When resubmitted they are marked}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00441}00441 \textcolor{comment}{                 * with the M\_AMPDU\_MPDU flag and we can bypass most of}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00442}00442 \textcolor{comment}{                 * the normal processing.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00443}00443 \textcolor{comment}{                 */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00444}00444                 wh = mtod(m, \textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211__frame}{ieee80211\_frame}} *);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00445}00445                 type = \mbox{\hyperlink{ieee80211_8h_a84fadc719a3ea4f27a789aee52d19a95}{IEEE80211\_FC0\_TYPE\_DATA}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00446}00446                 dir = wh-\/>\mbox{\hyperlink{structieee80211__frame_a4dbe6cbfce631e8083ac87a56b42f4f4}{i\_fc}}[1] \& \mbox{\hyperlink{ieee80211_8h_aaeeacbf8cb6fcb873f0f54e387cd34a1}{IEEE80211\_FC1\_DIR\_MASK}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00447}00447                 subtype = \mbox{\hyperlink{ieee80211_8h_ac26139da93766957cd82ff793a7bf28b}{IEEE80211\_FC0\_SUBTYPE\_QOS}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00448}00448                 hdrspace = \mbox{\hyperlink{ieee80211__var_8h_a3bb455a4e2448d830252821256de3111}{ieee80211\_hdrspace}}(ic, wh);        \textcolor{comment}{/* XXX optimize? */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00449}00449                 \textcolor{keywordflow}{goto} resubmit\_ampdu;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00450}00450         \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00451}00451 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00452}00452         KASSERT(ni != NULL, (\textcolor{stringliteral}{"{}null node"{}}));}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00453}00453 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00454}00454         type = -\/1;                      \textcolor{comment}{/* undefined */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00455}00455 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00456}00456         \textcolor{keywordflow}{if} (m-\/>m\_pkthdr.len < \textcolor{keyword}{sizeof}(\textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211__frame__min}{ieee80211\_frame\_min}})) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00457}00457                 \mbox{\hyperlink{ieee80211__var_8h_aad7ad14d0875572425fb5aae7b6aa7fc}{IEEE80211\_DISCARD\_MAC}}(vap, \mbox{\hyperlink{ieee80211__var_8h_a52d4c8ea23b5f09cf1b52af74aa2e0b1}{IEEE80211\_MSG\_ANY}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00458}00458                     ni-\/>\mbox{\hyperlink{structieee80211__node_a358404f75db7624b64469b3d33900a41}{ni\_macaddr}}, NULL,}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00459}00459                     \textcolor{stringliteral}{"{}too short (1): len \%u"{}}, m-\/>m\_pkthdr.len);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00460}00460                 vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_a01568652b0c95b47a40f6477876d8d6b}{is\_rx\_tooshort}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00461}00461                 \textcolor{keywordflow}{goto} out;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00462}00462         \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00463}00463         \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00464}00464 \textcolor{comment}{         * Bit of a cheat here, we use a pointer for a 3-\/address}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00465}00465 \textcolor{comment}{         * frame format but don't reference fields past outside}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00466}00466 \textcolor{comment}{         * ieee80211\_frame\_min w/o first validating the data is}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00467}00467 \textcolor{comment}{         * present.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00468}00468 \textcolor{comment}{         */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00469}00469         wh = mtod(m, \textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211__frame}{ieee80211\_frame}} *);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00470}00470 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00471}00471         \textcolor{keywordflow}{if} (!\mbox{\hyperlink{ieee80211_8h_a9065be563ef28f85f286f04d757c1c2d}{IEEE80211\_IS\_MULTICAST}}(wh-\/>\mbox{\hyperlink{structieee80211__frame_a3405747af3a0552866de899485a92889}{i\_addr1}}))}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00472}00472                 ni-\/>\mbox{\hyperlink{structieee80211__node_aca869131c91ab98a661d8dc8cbb83fd4}{ni\_inact}} = ni-\/>\mbox{\hyperlink{structieee80211__node_a6940b9c8d51d4a1a075969b97d121717}{ni\_inact\_reload}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00473}00473 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00474}00474         \textcolor{keywordflow}{if} ((wh-\/>\mbox{\hyperlink{structieee80211__frame_a4dbe6cbfce631e8083ac87a56b42f4f4}{i\_fc}}[0] \& \mbox{\hyperlink{ieee80211_8h_a6bc9eac6082c6d030af2b73eb48eb1ea}{IEEE80211\_FC0\_VERSION\_MASK}}) !=}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00475}00475             \mbox{\hyperlink{ieee80211_8h_ab5ac1e7eacc5abae4cb6b7506d17bd45}{IEEE80211\_FC0\_VERSION\_0}}) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00476}00476                 \mbox{\hyperlink{ieee80211__var_8h_aad7ad14d0875572425fb5aae7b6aa7fc}{IEEE80211\_DISCARD\_MAC}}(vap, \mbox{\hyperlink{ieee80211__var_8h_a52d4c8ea23b5f09cf1b52af74aa2e0b1}{IEEE80211\_MSG\_ANY}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00477}00477                     ni-\/>\mbox{\hyperlink{structieee80211__node_a358404f75db7624b64469b3d33900a41}{ni\_macaddr}}, NULL, \textcolor{stringliteral}{"{}wrong version, fc \%02x:\%02x"{}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00478}00478                     wh-\/>\mbox{\hyperlink{structieee80211__frame_a4dbe6cbfce631e8083ac87a56b42f4f4}{i\_fc}}[0], wh-\/>\mbox{\hyperlink{structieee80211__frame_a4dbe6cbfce631e8083ac87a56b42f4f4}{i\_fc}}[1]);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00479}00479                 vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_a0b0ae17e4af5cc735d1d2321e507ea9b}{is\_rx\_badversion}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00480}00480                 \textcolor{keywordflow}{goto} err;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00481}00481         \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00482}00482 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00483}00483         dir = wh-\/>\mbox{\hyperlink{structieee80211__frame_a4dbe6cbfce631e8083ac87a56b42f4f4}{i\_fc}}[1] \& \mbox{\hyperlink{ieee80211_8h_aaeeacbf8cb6fcb873f0f54e387cd34a1}{IEEE80211\_FC1\_DIR\_MASK}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00484}00484         type = wh-\/>\mbox{\hyperlink{structieee80211__frame_a4dbe6cbfce631e8083ac87a56b42f4f4}{i\_fc}}[0] \& \mbox{\hyperlink{ieee80211_8h_a25db43f225d4802140bdf903d3a9fb12}{IEEE80211\_FC0\_TYPE\_MASK}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00485}00485         subtype = wh-\/>\mbox{\hyperlink{structieee80211__frame_a4dbe6cbfce631e8083ac87a56b42f4f4}{i\_fc}}[0] \& \mbox{\hyperlink{ieee80211_8h_ae7203cff6b1b5405dd10e187928b44ca}{IEEE80211\_FC0\_SUBTYPE\_MASK}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00486}00486 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00487}00487         \textcolor{comment}{/* NB: WDS vap's do not scan */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00488}00488         \textcolor{keywordflow}{if} (m-\/>m\_pkthdr.len < \textcolor{keyword}{sizeof}(\textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211__frame__addr4}{ieee80211\_frame\_addr4}})) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00489}00489                 \mbox{\hyperlink{ieee80211__var_8h_aad7ad14d0875572425fb5aae7b6aa7fc}{IEEE80211\_DISCARD\_MAC}}(vap,}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00490}00490                     \mbox{\hyperlink{ieee80211__var_8h_a52d4c8ea23b5f09cf1b52af74aa2e0b1}{IEEE80211\_MSG\_ANY}}, ni-\/>\mbox{\hyperlink{structieee80211__node_a358404f75db7624b64469b3d33900a41}{ni\_macaddr}}, NULL,}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00491}00491                     \textcolor{stringliteral}{"{}too short (3): len \%u"{}}, m-\/>m\_pkthdr.len);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00492}00492                 vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_a01568652b0c95b47a40f6477876d8d6b}{is\_rx\_tooshort}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00493}00493                 \textcolor{keywordflow}{goto} out;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00494}00494         \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00495}00495         \textcolor{comment}{/* NB: the TA is implicitly verified by finding the wds peer node */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00496}00496         \textcolor{keywordflow}{if} (!\mbox{\hyperlink{ieee80211__var_8h_a87fba5bb95c383ed07ae42774b80386f}{IEEE80211\_ADDR\_EQ}}(wh-\/>\mbox{\hyperlink{structieee80211__frame_a3405747af3a0552866de899485a92889}{i\_addr1}}, vap-\/>\mbox{\hyperlink{structieee80211vap_a31bbdbec1c2fd8f9aba7146d23cbc895}{iv\_myaddr}}) \&\&}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00497}00497             !\mbox{\hyperlink{ieee80211__var_8h_a87fba5bb95c383ed07ae42774b80386f}{IEEE80211\_ADDR\_EQ}}(wh-\/>\mbox{\hyperlink{structieee80211__frame_a3405747af3a0552866de899485a92889}{i\_addr1}}, ifp-\/>if\_broadcastaddr)) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00498}00498                 \textcolor{comment}{/* not interested in */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00499}00499                 \mbox{\hyperlink{ieee80211__var_8h_aad7ad14d0875572425fb5aae7b6aa7fc}{IEEE80211\_DISCARD\_MAC}}(vap, \mbox{\hyperlink{ieee80211__var_8h_acbe7799bd67d02ffce4779d6bcef127d}{IEEE80211\_MSG\_INPUT}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00500}00500                     wh-\/>\mbox{\hyperlink{structieee80211__frame_a3405747af3a0552866de899485a92889}{i\_addr1}}, NULL, \textcolor{stringliteral}{"{}\%s"{}}, \textcolor{stringliteral}{"{}not to bss"{}});}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00501}00501                 vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_ab740d656bc162096f8ec0a4537973210}{is\_rx\_wrongbss}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00502}00502                 \textcolor{keywordflow}{goto} out;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00503}00503         \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00504}00504         \mbox{\hyperlink{ieee80211__node_8h_a49aa77fccc658184c2e1cb0423d26603}{IEEE80211\_RSSI\_LPF}}(ni-\/>\mbox{\hyperlink{structieee80211__node_acd9b896973634fdc13b62e5c52e45170}{ni\_avgrssi}}, rssi);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00505}00505         ni-\/>\mbox{\hyperlink{structieee80211__node_ab6ecd05a0c0e6dfc4f33e2ad58335299}{ni\_noise}} = nf;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00506}00506         \textcolor{keywordflow}{if} (\mbox{\hyperlink{ieee80211_8h_a678f5f4d092b12d3ad18de3b6c2797c0}{IEEE80211\_HAS\_SEQ}}(type, subtype)) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00507}00507                 uint8\_t tid = \mbox{\hyperlink{ieee80211__proto_8h_a759e791de78edfc8c7e2681e36d5d4b9}{ieee80211\_gettid}}(wh);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00508}00508                 \textcolor{keywordflow}{if} (\mbox{\hyperlink{ieee80211_8h_a9543b40af17f2e7a9e57989b20d9f218}{IEEE80211\_QOS\_HAS\_SEQ}}(wh) \&\&}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00509}00509                     \mbox{\hyperlink{ieee80211_8h_aaa22c1724f31c7ec10ac8ef846cabe37}{TID\_TO\_WME\_AC}}(tid) >= \mbox{\hyperlink{ieee80211_8h_a5c4bfc35baacedd7c710a4a6ec2fbc40}{WME\_AC\_VI}})}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00510}00510                         ic-\/>\mbox{\hyperlink{structieee80211com_aa2c5e7565465fa4a5a75843c5abfddab}{ic\_wme}}.\mbox{\hyperlink{structieee80211__wme__state_ad258c8feb1872b228ccbbc9c0f931b8e}{wme\_hipri\_traffic}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00511}00511                 \textcolor{keywordflow}{if} (! \mbox{\hyperlink{ieee80211__input_8h_a1c496cffaf6ec8fd28229557512036c9}{ieee80211\_check\_rxseq}}(ni, wh, wh-\/>\mbox{\hyperlink{structieee80211__frame_a3405747af3a0552866de899485a92889}{i\_addr1}}, rxs))}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00512}00512                         \textcolor{keywordflow}{goto} out;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00513}00513         \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00514}00514         \textcolor{keywordflow}{switch} (type) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00515}00515         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211_8h_a84fadc719a3ea4f27a789aee52d19a95}{IEEE80211\_FC0\_TYPE\_DATA}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00516}00516                 hdrspace = \mbox{\hyperlink{ieee80211__var_8h_a3bb455a4e2448d830252821256de3111}{ieee80211\_hdrspace}}(ic, wh);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00517}00517                 \textcolor{keywordflow}{if} (m-\/>m\_len < hdrspace \&\&}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00518}00518                     (m = m\_pullup(m, hdrspace)) == NULL) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00519}00519                         \mbox{\hyperlink{ieee80211__var_8h_aad7ad14d0875572425fb5aae7b6aa7fc}{IEEE80211\_DISCARD\_MAC}}(vap, \mbox{\hyperlink{ieee80211__var_8h_a52d4c8ea23b5f09cf1b52af74aa2e0b1}{IEEE80211\_MSG\_ANY}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00520}00520                             ni-\/>\mbox{\hyperlink{structieee80211__node_a358404f75db7624b64469b3d33900a41}{ni\_macaddr}}, NULL,}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00521}00521                             \textcolor{stringliteral}{"{}data too short: expecting \%u"{}}, hdrspace);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00522}00522                         vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_a01568652b0c95b47a40f6477876d8d6b}{is\_rx\_tooshort}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00523}00523                         \textcolor{keywordflow}{goto} out;               \textcolor{comment}{/* XXX */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00524}00524                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00525}00525                 \textcolor{keywordflow}{if} (dir != \mbox{\hyperlink{ieee80211_8h_a6f548c74a3fa1d3cf21c4e49ca2bc92b}{IEEE80211\_FC1\_DIR\_DSTODS}}) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00526}00526                         \mbox{\hyperlink{ieee80211__var_8h_ad6513f87fe114b46afa5019937f0cfec}{IEEE80211\_DISCARD}}(vap, \mbox{\hyperlink{ieee80211__var_8h_acbe7799bd67d02ffce4779d6bcef127d}{IEEE80211\_MSG\_INPUT}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00527}00527                             wh, \textcolor{stringliteral}{"{}data"{}}, \textcolor{stringliteral}{"{}incorrect dir 0x\%x"{}}, dir);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00528}00528                         vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_ac3dc389e9288b5b0176639c9242c7999}{is\_rx\_wrongdir}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00529}00529                         \textcolor{keywordflow}{goto} out;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00530}00530                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00531}00531                 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00532}00532 \textcolor{comment}{                 * Only legacy WDS traffic should take this path.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00533}00533 \textcolor{comment}{                 */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00534}00534                 \textcolor{keywordflow}{if} ((vap-\/>\mbox{\hyperlink{structieee80211vap_a74aac287d91c2dd2da91ba4539d5fd43}{iv\_flags\_ext}} \& \mbox{\hyperlink{ieee80211__var_8h_a6560cacb614027508f2c1aee093a2bf1}{IEEE80211\_FEXT\_WDSLEGACY}}) == 0) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00535}00535                         \mbox{\hyperlink{ieee80211__var_8h_ad6513f87fe114b46afa5019937f0cfec}{IEEE80211\_DISCARD}}(vap, \mbox{\hyperlink{ieee80211__var_8h_acbe7799bd67d02ffce4779d6bcef127d}{IEEE80211\_MSG\_INPUT}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00536}00536                             wh, \textcolor{stringliteral}{"{}data"{}}, \textcolor{stringliteral}{"{}\%s"{}}, \textcolor{stringliteral}{"{}not legacy wds"{}});}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00537}00537                         vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_ac3dc389e9288b5b0176639c9242c7999}{is\_rx\_wrongdir}}++;\textcolor{comment}{/*XXX*/}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00538}00538                         \textcolor{keywordflow}{goto} out;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00539}00539                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00540}00540                 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00541}00541 \textcolor{comment}{                 * Handle A-\/MPDU re-\/ordering.  If the frame is to be}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00542}00542 \textcolor{comment}{                 * processed directly then ieee80211\_ampdu\_reorder}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00543}00543 \textcolor{comment}{                 * will return 0; otherwise it has consumed the mbuf}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00544}00544 \textcolor{comment}{                 * and we should do nothing more with it.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00545}00545 \textcolor{comment}{                 */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00546}00546                 \textcolor{keywordflow}{if} ((m-\/>m\_flags \& \mbox{\hyperlink{ieee80211__freebsd_8h_afcaef6ffd452e4f6e210886fae1c7a2f}{M\_AMPDU}}) \&\&}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00547}00547                     \mbox{\hyperlink{ieee80211__ht_8c_a7fc03de3fcd5698e252b7aafe0b9d84f}{ieee80211\_ampdu\_reorder}}(ni, m, rxs) != 0) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00548}00548                         m = NULL;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00549}00549                         \textcolor{keywordflow}{goto} out;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00550}00550                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00551}00551         resubmit\_ampdu:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00552}00552 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00553}00553                 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00554}00554 \textcolor{comment}{                 * Handle privacy requirements.  Note that we}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00555}00555 \textcolor{comment}{                 * must not be preempted from here until after}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00556}00556 \textcolor{comment}{                 * we (potentially) call ieee80211\_crypto\_demic;}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00557}00557 \textcolor{comment}{                 * otherwise we may violate assumptions in the}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00558}00558 \textcolor{comment}{                 * crypto cipher modules used to do delayed update}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00559}00559 \textcolor{comment}{                 * of replay sequence numbers.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00560}00560 \textcolor{comment}{                 */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00561}00561                 \textcolor{keywordflow}{if} (is\_hw\_decrypted || wh-\/>\mbox{\hyperlink{structieee80211__frame_a4dbe6cbfce631e8083ac87a56b42f4f4}{i\_fc}}[1] \& \mbox{\hyperlink{ieee80211_8h_a625e18ed01fdcb5f069288f10ac122fb}{IEEE80211\_FC1\_PROTECTED}}) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00562}00562                         \textcolor{keywordflow}{if} ((vap-\/>\mbox{\hyperlink{structieee80211vap_a6b457135ea58b5e8526931b124209ac8}{iv\_flags}} \& \mbox{\hyperlink{ieee80211__var_8h_a8e6ba0e0dbcec72f0aac72575726c888}{IEEE80211\_F\_PRIVACY}}) == 0) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00563}00563                                 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00564}00564 \textcolor{comment}{                                 * Discard encrypted frames when privacy is off.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00565}00565 \textcolor{comment}{                                 */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00566}00566                                 \mbox{\hyperlink{ieee80211__var_8h_ad6513f87fe114b46afa5019937f0cfec}{IEEE80211\_DISCARD}}(vap, \mbox{\hyperlink{ieee80211__var_8h_acbe7799bd67d02ffce4779d6bcef127d}{IEEE80211\_MSG\_INPUT}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00567}00567                                     wh, \textcolor{stringliteral}{"{}WEP"{}}, \textcolor{stringliteral}{"{}\%s"{}}, \textcolor{stringliteral}{"{}PRIVACY off"{}});}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00568}00568                                 vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_afb833a632f5995315c768e345a9b7a11}{is\_rx\_noprivacy}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00569}00569                                 \mbox{\hyperlink{ieee80211__node_8h_a926f2feae60b626fc709cdeab779e028}{IEEE80211\_NODE\_STAT}}(ni, rx\_noprivacy);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00570}00570                                 \textcolor{keywordflow}{goto} out;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00571}00571                         \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00572}00572                         \textcolor{keywordflow}{if} (\mbox{\hyperlink{ieee80211__crypto_8c_a645a352b4424f6dbaf444ce7cc777220}{ieee80211\_crypto\_decap}}(ni, m, hdrspace, \&key) == 0) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00573}00573                                 \textcolor{comment}{/* NB: stats+msgs handled in crypto\_decap */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00574}00574                                 \mbox{\hyperlink{ieee80211__node_8h_a926f2feae60b626fc709cdeab779e028}{IEEE80211\_NODE\_STAT}}(ni, rx\_wepfail);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00575}00575                                 \textcolor{keywordflow}{goto} out;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00576}00576                         \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00577}00577                         wh = mtod(m, \textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211__frame}{ieee80211\_frame}} *);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00578}00578                         wh-\/>\mbox{\hyperlink{structieee80211__frame_a4dbe6cbfce631e8083ac87a56b42f4f4}{i\_fc}}[1] \&= \string~IEEE80211\_FC1\_PROTECTED;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00579}00579                         has\_decrypted = 1;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00580}00580                 \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00581}00581                         \textcolor{comment}{/* XXX M\_WEP and IEEE80211\_F\_PRIVACY */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00582}00582                         key = NULL;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00583}00583                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00584}00584 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00585}00585                 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00586}00586 \textcolor{comment}{                 * Save QoS bits for use below-\/-\/before we strip the header.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00587}00587 \textcolor{comment}{                 */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00588}00588                 \textcolor{keywordflow}{if} (subtype == \mbox{\hyperlink{ieee80211_8h_ac26139da93766957cd82ff793a7bf28b}{IEEE80211\_FC0\_SUBTYPE\_QOS}})}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00589}00589                         qos = \mbox{\hyperlink{ieee80211__proto_8h_a90cb6df8b0871f84afd691ff56ee292d}{ieee80211\_getqos}}(wh)[0];}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00590}00590                 \textcolor{keywordflow}{else}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00591}00591                         qos = 0;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00592}00592 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00593}00593                 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00594}00594 \textcolor{comment}{                 * Next up, any fragmentation.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00595}00595 \textcolor{comment}{                 */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00596}00596                 \textcolor{keywordflow}{if} (!\mbox{\hyperlink{ieee80211_8h_a9065be563ef28f85f286f04d757c1c2d}{IEEE80211\_IS\_MULTICAST}}(wh-\/>\mbox{\hyperlink{structieee80211__frame_a3405747af3a0552866de899485a92889}{i\_addr1}})) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00597}00597                         m = \mbox{\hyperlink{ieee80211__input_8c_af6d4edf9cbdd292ae2c5c4e0e9571ef7}{ieee80211\_defrag}}(ni, m, hdrspace, has\_decrypted);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00598}00598                         \textcolor{keywordflow}{if} (m == NULL) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00599}00599                                 \textcolor{comment}{/* Fragment dropped or frame not complete yet */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00600}00600                                 \textcolor{keywordflow}{goto} out;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00601}00601                         \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00602}00602                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00603}00603                 wh = NULL;              \textcolor{comment}{/* no longer valid, catch any uses */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00604}00604 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00605}00605                 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00606}00606 \textcolor{comment}{                 * Next strip any MSDU crypto bits.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00607}00607 \textcolor{comment}{                 */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00608}00608                 \textcolor{keywordflow}{if} (!\mbox{\hyperlink{ieee80211__crypto_8c_af6418bef4c519b883ea48d0177936aa3}{ieee80211\_crypto\_demic}}(vap, key, m, 0)) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00609}00609                         \mbox{\hyperlink{ieee80211__var_8h_aad7ad14d0875572425fb5aae7b6aa7fc}{IEEE80211\_DISCARD\_MAC}}(vap, \mbox{\hyperlink{ieee80211__var_8h_acbe7799bd67d02ffce4779d6bcef127d}{IEEE80211\_MSG\_INPUT}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00610}00610                             ni-\/>\mbox{\hyperlink{structieee80211__node_a358404f75db7624b64469b3d33900a41}{ni\_macaddr}}, \textcolor{stringliteral}{"{}data"{}}, \textcolor{stringliteral}{"{}\%s"{}}, \textcolor{stringliteral}{"{}demic error"{}});}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00611}00611                         vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_a9f032b105241a07f47b43ad93d583a2c}{is\_rx\_demicfail}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00612}00612                         \mbox{\hyperlink{ieee80211__node_8h_a926f2feae60b626fc709cdeab779e028}{IEEE80211\_NODE\_STAT}}(ni, rx\_demicfail);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00613}00613                         \textcolor{keywordflow}{goto} out;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00614}00614                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00615}00615 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00616}00616                 \textcolor{comment}{/* copy to listener after decrypt */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00617}00617                 \textcolor{keywordflow}{if} (\mbox{\hyperlink{ieee80211__var_8h_a052b21b650fae37b3d8e0e4e3616a3b4}{ieee80211\_radiotap\_active\_vap}}(vap))}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00618}00618                         \mbox{\hyperlink{ieee80211__radiotap_8c_ab5d57e466b7edf51a6b46d8eda9f0da1}{ieee80211\_radiotap\_rx}}(vap, m);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00619}00619                 need\_tap = 0;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00620}00620 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00621}00621                 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00622}00622 \textcolor{comment}{                 * Finally, strip the 802.11 header.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00623}00623 \textcolor{comment}{                 */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00624}00624                 m = \mbox{\hyperlink{ieee80211__input_8c_a3978af73adcc1fe1cc35f920a9ef926e}{ieee80211\_decap}}(vap, m, hdrspace, qos);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00625}00625                 \textcolor{keywordflow}{if} (m == NULL) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00626}00626                         \textcolor{comment}{/* XXX mask bit to check for both */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00627}00627                         \textcolor{comment}{/* don't count Null data frames as errors */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00628}00628                         \textcolor{keywordflow}{if} (subtype == \mbox{\hyperlink{ieee80211_8h_abcb0aeaf5e37c815858f913f34948a38}{IEEE80211\_FC0\_SUBTYPE\_NODATA}} ||}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00629}00629                             subtype == \mbox{\hyperlink{ieee80211_8h_ad81cc3b9a4c651b737bd3d84a515e659}{IEEE80211\_FC0\_SUBTYPE\_QOS\_NULL}})}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00630}00630                                 \textcolor{keywordflow}{goto} out;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00631}00631                         \mbox{\hyperlink{ieee80211__var_8h_aad7ad14d0875572425fb5aae7b6aa7fc}{IEEE80211\_DISCARD\_MAC}}(vap, \mbox{\hyperlink{ieee80211__var_8h_acbe7799bd67d02ffce4779d6bcef127d}{IEEE80211\_MSG\_INPUT}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00632}00632                             ni-\/>\mbox{\hyperlink{structieee80211__node_a358404f75db7624b64469b3d33900a41}{ni\_macaddr}}, \textcolor{stringliteral}{"{}data"{}}, \textcolor{stringliteral}{"{}\%s"{}}, \textcolor{stringliteral}{"{}decap error"{}});}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00633}00633                         vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_acce042378bddbe6fdfcc84ef35a8bbbe}{is\_rx\_decap}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00634}00634                         \mbox{\hyperlink{ieee80211__node_8h_a926f2feae60b626fc709cdeab779e028}{IEEE80211\_NODE\_STAT}}(ni, rx\_decap);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00635}00635                         \textcolor{keywordflow}{goto} err;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00636}00636                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00637}00637                 \textcolor{keywordflow}{if} (!(qos \& \mbox{\hyperlink{ieee80211_8h_adc3505e2b709ed96293529e199d3bb77}{IEEE80211\_QOS\_AMSDU}}))}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00638}00638                         eh = mtod(m, \textcolor{keyword}{struct} ether\_header *);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00639}00639                 \textcolor{keywordflow}{else}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00640}00640                         eh = NULL;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00641}00641                 \textcolor{keywordflow}{if} (!\mbox{\hyperlink{ieee80211__node_8h_a58a18d1f7d52ffefab4fb82a60d217a8}{ieee80211\_node\_is\_authorized}}(ni)) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00642}00642                         \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00643}00643 \textcolor{comment}{                         * Deny any non-\/PAE frames received prior to}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00644}00644 \textcolor{comment}{                         * authorization.  For open/shared-\/key}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00645}00645 \textcolor{comment}{                         * authentication the port is mark authorized}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00646}00646 \textcolor{comment}{                         * after authentication completes.  For 802.1x}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00647}00647 \textcolor{comment}{                         * the port is not marked authorized by the}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00648}00648 \textcolor{comment}{                         * authenticator until the handshake has completed.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00649}00649 \textcolor{comment}{                         */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00650}00650                         \textcolor{keywordflow}{if} (eh == NULL ||}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00651}00651                             eh-\/>ether\_type != htons(ETHERTYPE\_PAE)) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00652}00652                                 \mbox{\hyperlink{ieee80211__var_8h_aad7ad14d0875572425fb5aae7b6aa7fc}{IEEE80211\_DISCARD\_MAC}}(vap, \mbox{\hyperlink{ieee80211__var_8h_acbe7799bd67d02ffce4779d6bcef127d}{IEEE80211\_MSG\_INPUT}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00653}00653                                     ni-\/>\mbox{\hyperlink{structieee80211__node_a358404f75db7624b64469b3d33900a41}{ni\_macaddr}}, \textcolor{stringliteral}{"{}data"{}}, \textcolor{stringliteral}{"{}unauthorized or "{}}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00654}00654                                     \textcolor{stringliteral}{"{}unknown port: ether type 0x\%x len \%u"{}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00655}00655                                     eh == NULL ? -\/1 : eh-\/>ether\_type,}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00656}00656                                     m-\/>m\_pkthdr.len);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00657}00657                                 vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_a2d4dc739dca1b2eea63a6a8f24d38f9c}{is\_rx\_unauth}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00658}00658                                 \mbox{\hyperlink{ieee80211__node_8h_a926f2feae60b626fc709cdeab779e028}{IEEE80211\_NODE\_STAT}}(ni, rx\_unauth);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00659}00659                                 \textcolor{keywordflow}{goto} err;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00660}00660                         \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00661}00661                 \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00662}00662                         \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00663}00663 \textcolor{comment}{                         * When denying unencrypted frames, discard}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00664}00664 \textcolor{comment}{                         * any non-\/PAE frames received without encryption.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00665}00665 \textcolor{comment}{                         */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00666}00666                         \textcolor{keywordflow}{if} ((vap-\/>\mbox{\hyperlink{structieee80211vap_a6b457135ea58b5e8526931b124209ac8}{iv\_flags}} \& \mbox{\hyperlink{ieee80211__var_8h_afb8a151a74d8a9ec24ad6044d6035b28}{IEEE80211\_F\_DROPUNENC}}) \&\&}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00667}00667                             ((has\_decrypted == 0) \&\& (m-\/>m\_flags \& \mbox{\hyperlink{ieee80211__freebsd_8h_a68cb3206ffe0cd84e3b151bf4af56f08}{M\_WEP}}) == 0) \&\&}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00668}00668                             (is\_hw\_decrypted == 0) \&\&}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00669}00669                             (eh == NULL ||}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00670}00670                              eh-\/>ether\_type != htons(ETHERTYPE\_PAE))) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00671}00671                                 \textcolor{comment}{/*}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00672}00672 \textcolor{comment}{                                 * Drop unencrypted frames.}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00673}00673 \textcolor{comment}{                                 */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00674}00674                                 vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_afd218f0092712a3e1e101b6f59540da8}{is\_rx\_unencrypted}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00675}00675                                 \mbox{\hyperlink{ieee80211__node_8h_a926f2feae60b626fc709cdeab779e028}{IEEE80211\_NODE\_STAT}}(ni, rx\_unencrypted);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00676}00676                                 \textcolor{keywordflow}{goto} out;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00677}00677                         \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00678}00678                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00679}00679                 \textcolor{comment}{/* XXX require HT? */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00680}00680                 \textcolor{keywordflow}{if} (qos \& \mbox{\hyperlink{ieee80211_8h_adc3505e2b709ed96293529e199d3bb77}{IEEE80211\_QOS\_AMSDU}}) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00681}00681                         m = \mbox{\hyperlink{ieee80211__ht_8c_abdd3758220251c1d98a3247ffbb7cb74}{ieee80211\_decap\_amsdu}}(ni, m);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00682}00682                         \textcolor{keywordflow}{if} (m == NULL)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00683}00683                                 \textcolor{keywordflow}{return} \mbox{\hyperlink{ieee80211_8h_a84fadc719a3ea4f27a789aee52d19a95}{IEEE80211\_FC0\_TYPE\_DATA}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00684}00684                 \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00685}00685 \textcolor{preprocessor}{\#ifdef IEEE80211\_SUPPORT\_SUPERG}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00686}00686                         m = \mbox{\hyperlink{ieee80211__superg_8h_a8ae3649e9166a38efca8738eeae6f7ac}{ieee80211\_decap\_fastframe}}(vap, ni, m);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00687}00687                         \textcolor{keywordflow}{if} (m == NULL)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00688}00688                                 \textcolor{keywordflow}{return} \mbox{\hyperlink{ieee80211_8h_a84fadc719a3ea4f27a789aee52d19a95}{IEEE80211\_FC0\_TYPE\_DATA}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00689}00689 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00690}00690                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00691}00691                 \mbox{\hyperlink{ieee80211__input_8c_a45097fca17667ec2758ab669b6dfb8a8}{ieee80211\_deliver\_data}}(vap, ni, m);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00692}00692                 \textcolor{keywordflow}{return} \mbox{\hyperlink{ieee80211_8h_a84fadc719a3ea4f27a789aee52d19a95}{IEEE80211\_FC0\_TYPE\_DATA}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00693}00693 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00694}00694         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211_8h_a7fb8a8d6c5db6500162f51327f036f40}{IEEE80211\_FC0\_TYPE\_MGT}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00695}00695                 vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_aa028fb795e293d89afd6201a8ad5611a}{is\_rx\_mgmt}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00696}00696                 \mbox{\hyperlink{ieee80211__node_8h_a926f2feae60b626fc709cdeab779e028}{IEEE80211\_NODE\_STAT}}(ni, rx\_mgmt);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00697}00697                 \textcolor{keywordflow}{if} (dir != \mbox{\hyperlink{ieee80211_8h_aae938ba74f00c978fa095e62d04ceeea}{IEEE80211\_FC1\_DIR\_NODS}}) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00698}00698                         \mbox{\hyperlink{ieee80211__var_8h_ad6513f87fe114b46afa5019937f0cfec}{IEEE80211\_DISCARD}}(vap, \mbox{\hyperlink{ieee80211__var_8h_acbe7799bd67d02ffce4779d6bcef127d}{IEEE80211\_MSG\_INPUT}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00699}00699                             wh, \textcolor{stringliteral}{"{}data"{}}, \textcolor{stringliteral}{"{}incorrect dir 0x\%x"{}}, dir);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00700}00700                         vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_ac3dc389e9288b5b0176639c9242c7999}{is\_rx\_wrongdir}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00701}00701                         \textcolor{keywordflow}{goto} err;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00702}00702                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00703}00703                 \textcolor{keywordflow}{if} (m-\/>m\_pkthdr.len < \textcolor{keyword}{sizeof}(\textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211__frame}{ieee80211\_frame}})) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00704}00704                         \mbox{\hyperlink{ieee80211__var_8h_aad7ad14d0875572425fb5aae7b6aa7fc}{IEEE80211\_DISCARD\_MAC}}(vap, \mbox{\hyperlink{ieee80211__var_8h_a52d4c8ea23b5f09cf1b52af74aa2e0b1}{IEEE80211\_MSG\_ANY}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00705}00705                             ni-\/>\mbox{\hyperlink{structieee80211__node_a358404f75db7624b64469b3d33900a41}{ni\_macaddr}}, \textcolor{stringliteral}{"{}mgt"{}}, \textcolor{stringliteral}{"{}too short: len \%u"{}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00706}00706                             m-\/>m\_pkthdr.len);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00707}00707                         vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_a01568652b0c95b47a40f6477876d8d6b}{is\_rx\_tooshort}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00708}00708                         \textcolor{keywordflow}{goto} out;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00709}00709                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00710}00710 \textcolor{preprocessor}{\#ifdef IEEE80211\_DEBUG}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00711}00711                 \textcolor{keywordflow}{if} (ieee80211\_msg\_debug(vap) || \mbox{\hyperlink{ieee80211__var_8h_ae736725a076d792ddc945966a249036d}{ieee80211\_msg\_dumppkts}}(vap)) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00712}00712                         if\_printf(ifp, \textcolor{stringliteral}{"{}received \%s from \%s rssi \%d\(\backslash\)n"{}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00713}00713                             \mbox{\hyperlink{ieee80211__proto_8h_ab05e53677ec322fef90f47dbe18ac564}{ieee80211\_mgt\_subtype\_name}}(subtype),}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00714}00714                             ether\_sprintf(wh-\/>\mbox{\hyperlink{structieee80211__frame_a430db5a3aa3f6d0ccfa78347b1afbcb7}{i\_addr2}}), rssi);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00715}00715                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00716}00716 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00717}00717                 \textcolor{keywordflow}{if} (wh-\/>\mbox{\hyperlink{structieee80211__frame_a4dbe6cbfce631e8083ac87a56b42f4f4}{i\_fc}}[1] \& \mbox{\hyperlink{ieee80211_8h_a625e18ed01fdcb5f069288f10ac122fb}{IEEE80211\_FC1\_PROTECTED}}) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00718}00718                         \mbox{\hyperlink{ieee80211__var_8h_ad6513f87fe114b46afa5019937f0cfec}{IEEE80211\_DISCARD}}(vap, \mbox{\hyperlink{ieee80211__var_8h_acbe7799bd67d02ffce4779d6bcef127d}{IEEE80211\_MSG\_INPUT}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00719}00719                             wh, NULL, \textcolor{stringliteral}{"{}\%s"{}}, \textcolor{stringliteral}{"{}WEP set but not permitted"{}});}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00720}00720                         vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_a63f7b210dd607bc1515e3b0ad4a0a689}{is\_rx\_mgtdiscard}}++; \textcolor{comment}{/* XXX */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00721}00721                         \textcolor{keywordflow}{goto} out;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00722}00722                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00723}00723                 vap-\/>\mbox{\hyperlink{structieee80211vap_a5079a18ecb374649e03dd6a858193316}{iv\_recv\_mgmt}}(ni, m, subtype, rxs, rssi, nf);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00724}00724                 \textcolor{keywordflow}{goto} out;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00725}00725 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00726}00726         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211_8h_a1af5d6a0636cbfa7019ee5f5325f0ddc}{IEEE80211\_FC0\_TYPE\_CTL}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00727}00727                 vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_a5bef1435f5f0430b2fecb73cc3e88201}{is\_rx\_ctl}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00728}00728                 \mbox{\hyperlink{ieee80211__node_8h_a926f2feae60b626fc709cdeab779e028}{IEEE80211\_NODE\_STAT}}(ni, rx\_ctrl);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00729}00729                 \textcolor{keywordflow}{goto} out;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00730}00730 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00731}00731         \textcolor{keywordflow}{default}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00732}00732                 \mbox{\hyperlink{ieee80211__var_8h_ad6513f87fe114b46afa5019937f0cfec}{IEEE80211\_DISCARD}}(vap, \mbox{\hyperlink{ieee80211__var_8h_a52d4c8ea23b5f09cf1b52af74aa2e0b1}{IEEE80211\_MSG\_ANY}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00733}00733                     wh, \textcolor{stringliteral}{"{}bad"{}}, \textcolor{stringliteral}{"{}frame type 0x\%x"{}}, type);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00734}00734                 \textcolor{comment}{/* should not come here */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00735}00735                 \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00736}00736         \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00737}00737 err:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00738}00738         if\_inc\_counter(ifp, IFCOUNTER\_IERRORS, 1);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00739}00739 out:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00740}00740         \textcolor{keywordflow}{if} (m != NULL) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00741}00741                 \textcolor{keywordflow}{if} (need\_tap \&\& \mbox{\hyperlink{ieee80211__var_8h_a052b21b650fae37b3d8e0e4e3616a3b4}{ieee80211\_radiotap\_active\_vap}}(vap))}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00742}00742                         \mbox{\hyperlink{ieee80211__radiotap_8c_ab5d57e466b7edf51a6b46d8eda9f0da1}{ieee80211\_radiotap\_rx}}(vap, m);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00743}00743                 m\_freem(m);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00744}00744         \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00745}00745         \textcolor{keywordflow}{return} type;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00746}00746 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00747}00747 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00748}00748 \textcolor{keyword}{static} \textcolor{keywordtype}{void}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00749}\mbox{\hyperlink{ieee80211__wds_8c_a0835753ffa584087f488cd68ab2b01e1}{00749}} \mbox{\hyperlink{ieee80211__wds_8c_a0835753ffa584087f488cd68ab2b01e1}{wds\_recv\_mgmt}}(\textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211__node}{ieee80211\_node}} *ni, \textcolor{keyword}{struct} mbuf *m0, \textcolor{keywordtype}{int} subtype,}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00750}00750     \textcolor{keyword}{const} \textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211__rx__stats}{ieee80211\_rx\_stats}} *rxs, \textcolor{keywordtype}{int} rssi, \textcolor{keywordtype}{int} nf)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00751}00751 \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00752}00752         \textcolor{keyword}{struct }\mbox{\hyperlink{structieee80211vap}{ieee80211vap}} *vap = ni-\/>\mbox{\hyperlink{structieee80211__node_a6adce9156cd9d0e45eaa499acdef5092}{ni\_vap}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00753}00753         \textcolor{keyword}{struct }\mbox{\hyperlink{structieee80211com}{ieee80211com}} *ic = ni-\/>\mbox{\hyperlink{structieee80211__node_a2510619138beb9911b3cf058cc4991a6}{ni\_ic}};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00754}00754         \textcolor{keyword}{struct }\mbox{\hyperlink{structieee80211__frame}{ieee80211\_frame}} *wh;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00755}00755         u\_int8\_t *frm, *efrm;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00756}00756 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00757}00757         wh = mtod(m0, \textcolor{keyword}{struct} \mbox{\hyperlink{structieee80211__frame}{ieee80211\_frame}} *);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00758}00758         frm = (u\_int8\_t *)\&wh[1];}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00759}00759         efrm = mtod(m0, u\_int8\_t *) + m0-\/>m\_len;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00760}00760         \textcolor{keywordflow}{switch} (subtype) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00761}00761         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211_8h_a0de64dd6f28c6d6334d34c80bd28bf03}{IEEE80211\_FC0\_SUBTYPE\_ACTION}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00762}00762         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211_8h_ad0d55a3395fcc94d0686ceff54e62390}{IEEE80211\_FC0\_SUBTYPE\_ACTION\_NOACK}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00763}00763                 \textcolor{keywordflow}{if} (ni == vap-\/>\mbox{\hyperlink{structieee80211vap_a116ec25ffa4d694abe01c6b58d18384a}{iv\_bss}}) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00764}00764                         \mbox{\hyperlink{ieee80211__var_8h_ad6513f87fe114b46afa5019937f0cfec}{IEEE80211\_DISCARD}}(vap, \mbox{\hyperlink{ieee80211__var_8h_acbe7799bd67d02ffce4779d6bcef127d}{IEEE80211\_MSG\_INPUT}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00765}00765                             wh, NULL, \textcolor{stringliteral}{"{}\%s"{}}, \textcolor{stringliteral}{"{}unknown node"{}});}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00766}00766                         vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_a63f7b210dd607bc1515e3b0ad4a0a689}{is\_rx\_mgtdiscard}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00767}00767                 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (!\mbox{\hyperlink{ieee80211__var_8h_a87fba5bb95c383ed07ae42774b80386f}{IEEE80211\_ADDR\_EQ}}(vap-\/>\mbox{\hyperlink{structieee80211vap_a31bbdbec1c2fd8f9aba7146d23cbc895}{iv\_myaddr}}, wh-\/>\mbox{\hyperlink{structieee80211__frame_a3405747af3a0552866de899485a92889}{i\_addr1}})) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00768}00768                         \textcolor{comment}{/* NB: not interested in multicast frames. */}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00769}00769                         \mbox{\hyperlink{ieee80211__var_8h_ad6513f87fe114b46afa5019937f0cfec}{IEEE80211\_DISCARD}}(vap, \mbox{\hyperlink{ieee80211__var_8h_acbe7799bd67d02ffce4779d6bcef127d}{IEEE80211\_MSG\_INPUT}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00770}00770                             wh, NULL, \textcolor{stringliteral}{"{}\%s"{}}, \textcolor{stringliteral}{"{}not for us"{}});}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00771}00771                         vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_a63f7b210dd607bc1515e3b0ad4a0a689}{is\_rx\_mgtdiscard}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00772}00772                 \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (vap-\/>\mbox{\hyperlink{structieee80211vap_a80866880b00a3d4ef5d37df580155905}{iv\_state}} != \mbox{\hyperlink{ieee80211__proto_8h_a6c8e7861891c9e21e6a02ccdba514944a59e567dc5761d3a082d77011fc6c1a39}{IEEE80211\_S\_RUN}}) \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00773}00773                         \mbox{\hyperlink{ieee80211__var_8h_ad6513f87fe114b46afa5019937f0cfec}{IEEE80211\_DISCARD}}(vap, \mbox{\hyperlink{ieee80211__var_8h_acbe7799bd67d02ffce4779d6bcef127d}{IEEE80211\_MSG\_INPUT}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00774}00774                             wh, NULL, \textcolor{stringliteral}{"{}wrong state \%s"{}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00775}00775                             \mbox{\hyperlink{ieee80211__proto_8c_a7743c46d5b77e40c7abac1417ee35dd8}{ieee80211\_state\_name}}[vap-\/>\mbox{\hyperlink{structieee80211vap_a80866880b00a3d4ef5d37df580155905}{iv\_state}}]);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00776}00776                         vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_a63f7b210dd607bc1515e3b0ad4a0a689}{is\_rx\_mgtdiscard}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00777}00777                 \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00778}00778                         \textcolor{keywordflow}{if} (\mbox{\hyperlink{ieee80211__input_8c_a028ee40010fce66499989fadefe7c5b2}{ieee80211\_parse\_action}}(ni, m0) == 0)}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00779}00779                                 (void)ic-\/>\mbox{\hyperlink{structieee80211com_aa2eb6d34f12147685688c0178a00856c}{ic\_recv\_action}}(ni, wh, frm, efrm);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00780}00780                 \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00781}00781                 \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00782}00782 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00783}00783         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211_8h_a06e49951f70b198bce43e8cc2c0e47bb}{IEEE80211\_FC0\_SUBTYPE\_ASSOC\_REQ}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00784}00784         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211_8h_a680bb07072e7bda5cb709b3b2ce24190}{IEEE80211\_FC0\_SUBTYPE\_ASSOC\_RESP}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00785}00785         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211_8h_a48b4a2b5eef11ce5a68762425bb39a97}{IEEE80211\_FC0\_SUBTYPE\_REASSOC\_REQ}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00786}00786         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211_8h_ac218b7c2aff785cb8f24b063a835c95b}{IEEE80211\_FC0\_SUBTYPE\_REASSOC\_RESP}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00787}00787         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211_8h_a51791ebe35da5e79a89df6782786fa91}{IEEE80211\_FC0\_SUBTYPE\_PROBE\_REQ}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00788}00788         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211_8h_a82766a47c3f0b6956ec4ecb5ac8fc509}{IEEE80211\_FC0\_SUBTYPE\_PROBE\_RESP}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00789}00789         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211_8h_a9b0c6aa3709ffed8694e6dab3533a68d}{IEEE80211\_FC0\_SUBTYPE\_TIMING\_ADV}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00790}00790         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211_8h_aefaac0be730932e1085aee40abdb7bfb}{IEEE80211\_FC0\_SUBTYPE\_BEACON}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00791}00791         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211_8h_a36480564bb2efdc08fc14f131da6bf99}{IEEE80211\_FC0\_SUBTYPE\_ATIM}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00792}00792         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211_8h_a9b0e856b2c53fdeddbbb847592e88870}{IEEE80211\_FC0\_SUBTYPE\_DISASSOC}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00793}00793         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211_8h_af10cf0dfd70aef95fd185c979b7e375a}{IEEE80211\_FC0\_SUBTYPE\_AUTH}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00794}00794         \textcolor{keywordflow}{case} \mbox{\hyperlink{ieee80211_8h_a6c0622234f2ebb2645aa47d02fe44ea2}{IEEE80211\_FC0\_SUBTYPE\_DEAUTH}}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00795}00795                 \mbox{\hyperlink{ieee80211__var_8h_ad6513f87fe114b46afa5019937f0cfec}{IEEE80211\_DISCARD}}(vap, \mbox{\hyperlink{ieee80211__var_8h_acbe7799bd67d02ffce4779d6bcef127d}{IEEE80211\_MSG\_INPUT}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00796}00796                     wh, NULL, \textcolor{stringliteral}{"{}\%s"{}}, \textcolor{stringliteral}{"{}not handled"{}});}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00797}00797                 vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_a63f7b210dd607bc1515e3b0ad4a0a689}{is\_rx\_mgtdiscard}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00798}00798                 \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00799}00799 }
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00800}00800         \textcolor{keywordflow}{default}:}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00801}00801                 \mbox{\hyperlink{ieee80211__var_8h_ad6513f87fe114b46afa5019937f0cfec}{IEEE80211\_DISCARD}}(vap, \mbox{\hyperlink{ieee80211__var_8h_a52d4c8ea23b5f09cf1b52af74aa2e0b1}{IEEE80211\_MSG\_ANY}},}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00802}00802                     wh, \textcolor{stringliteral}{"{}mgt"{}}, \textcolor{stringliteral}{"{}subtype 0x\%x not handled"{}}, subtype);}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00803}00803                 vap-\/>\mbox{\hyperlink{structieee80211vap_a4a2ffbe9be4e85b08edc9b0e6bb194d6}{iv\_stats}}.\mbox{\hyperlink{structieee80211__stats_a3a4f14fe06dc51acdcef84930caffd77}{is\_rx\_badsubtype}}++;}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00804}00804                 \textcolor{keywordflow}{break};}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00805}00805         \}}
\DoxyCodeLine{\Hypertarget{ieee80211__wds_8c_source_l00806}00806 \}}

\end{DoxyCode}
