<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:Courier New,courier,monaco,monospace,sans-serif;font-size:10pt">Hi all<br><br><span style="font-weight: bold;">Setup</span>:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PC1-------AP-----------STA----------PC2<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; eth0&nbsp;&nbsp; &nbsp; br0 &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; br0 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; eth0 &nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; eth0+ath0 &nbsp; &nbsp; eth0+ath0 &nbsp; <br><br><span style="font-weight: bold;">Invocation:</span> wpa_supplicant -Dmadwifi -iath0 -bbr0 -c/etc/wpa_cupplicant.conf<br><br><span style="font-weight: bold;">Background</span>: I wanted to achieve association with AP with a mac address of PC2 not with STA, thus rendering STA invisible to the AP. Things working fine till here. Can
 ping all nodes adding ebtables and iptables rules.<br><br><span style="font-weight: bold;">Goal</span>: Want to run WPA-PSK/WPA2-PSK for the authentication AP----STA. hostap/wpa_supplicant should be running on AP/STA (wpa_supplicant not to run on PC2 although STA has associated with PC2 mac).<br><br><span style="font-weight: bold;">Problem:</span>&nbsp; Now 4 way handshake fails to happen. As the wpa_supplicant sends 2 out of 4 message it sends it with own mac and i guess the hostapd rejects it as it associated with PC2 mac. i am using l2_packet_linux.c for layer two send. <br><br><span style="font-weight: bold;">What i have done</span>: modified the l2_packet send as follows. As well as i have enabled the l2-&gt;l2_hdr = 1 to include layer 2 header in l2_packet_init (my changes in <span style="color: rgb(0, 0, 255);">blue</span>)<br><br><span style="font-weight: bold;">Question</span>: Am i correct in my implementation. i can't still get the handshake
 going. Hostapd -dd shows<br><span style="font-style: italic;">eth0: &lt;PC2 MAC&gt; WPA: sending 1/4 msg of 4 way handshake</span><br style="font-style: italic;"><span style="font-style: italic;">eth0: &lt;PC2 MAC&gt; EAPOL-Key timeout</span><br><br><br><br><span style="font-family: lucida console,sans-serif;">int l2_packet_send(struct l2_packet_data *l2, const u8 *dst_addr, u16 proto,</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; const u8 *buf, size_t len)</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">{</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</span><br style="font-family: lucida console,sans-serif;"><span
 style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; <span style="color: rgb(0, 0, 255);">int ret;</span></span><br style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);"><span style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; struct l2_ethhdr *eth;</span><br style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);"><span style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; uint8_t src[ETH_ALEN] = {0x00, 0x13, 0x20, 0x5b, 0x40, 0xaa};// PC2 addr</span><br style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);"><span style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; size_t mlen = sizeof(*eth) + len;</span><br style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);"><span style="font-family: lucida
 console,sans-serif; color: rgb(0, 0, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; </span><br style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);"><span style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; eth = os_malloc(mlen);</span><br style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);"><span style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (!eth) return -1;</span><br style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);"><span style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; os_memset(&amp;eth, 0, sizeof(eth));</span><br style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);"><span style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
 os_memcpy(eth-&gt;h_dest, dst_addr, ETH_ALEN);</span><br style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);"><span style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; os_memcpy(eth-&gt;h_source, src, ETH_ALEN);</span><br style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);"><span style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; eth-&gt;h_proto = host_to_be16(proto);</span><br style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);"><span style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; os_memcpy(eth + 1, buf, len);</span><br style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);"><span style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ret = send(l2-&gt;fd,
 buf, mlen, 0);</span><br style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);"><span style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (ret &lt; 0) perror("l2_packet_send - error pramod ");</span><br style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);"><span style="font-family: lucida console,sans-serif; color: rgb(0, 0, 255);">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return ret;</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">#if 0</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; int ret;</span><br
 style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; if (l2 == NULL)</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return -1;</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; if (l2-&gt;l2_hdr) {</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ret = send(l2-&gt;fd, buf, len, 0);</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; wpa_printf(MSG_DEBUG, "pramod&nbsp; sending using send l2-&gt;l2_hdr=%d", l2-&gt;l2_hdr);</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida
 console,sans-serif;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (ret &lt; 0)</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; perror("l2_packet_send - send 55");</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; } else {</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; struct sockaddr_ll ll;</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; os_memset(&amp;ll, 0, sizeof(ll));</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ll.sll_family = AF_PACKET;</span><br
 style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ll.sll_ifindex = l2-&gt;ifindex;</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ll.sll_protocol = htons(proto);</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ll.sll_halen = ETH_ALEN;</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; os_memcpy(ll.sll_addr, dst_addr, ETH_ALEN);</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ret = sendto(l2-&gt;fd, buf, len, 0, (struct sockaddr *) &amp;ll,</span><br
 style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; sizeof(ll));</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; wpa_printf(MSG_DEBUG, "pramod&nbsp; sending using sendto l2-&gt;l2_hdr=%d", l2-&gt;l2_hdr);</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (ret &lt; 0)</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; perror("l2_packet_send - sendto");</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; }</span><br
 style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">&nbsp;&nbsp;&nbsp; return ret;</span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">#endif&nbsp;&nbsp;&nbsp; </span><br style="font-family: lucida console,sans-serif;"><span style="font-family: lucida console,sans-serif;">}</span><br><br><span style="font-weight: bold;">Finally:</span> if i am filling src dest proto of the ETH header is linux going to fill the CRC checksum? Is the is another way to implement this easily so that i can send the packets on the socket using my changed SRC mac address.<br><br><div>&nbsp;</div><div>Regards,</div>  <div>Anirban De</div>  <div>Yahoo: anirbande</div>  <div>Skype: anirbande</div>  <div>Gtalk : ade.sxc</div><div><br></div></div><br>
      <!--6--><hr size=1></hr> Add more friends to your messenger and enjoy! <a href="http://in.rd.yahoo.com/tagline_messenger_6/*http://messenger.yahoo.com/invite/"> Invite them now.</a></body></html>