title: sendto function does not use MAC address provided in struct sockaddr_ll when sending raw packets
body: <p>I am trying to send an OAM ethernet frame using raw socket. I was successful in doing so. </p>
  
  <p>The send function I have written is:</p>
  
  <pre><code>    int send_frame(sock_info *info,char *buf,int length)
      {
         struct sockaddr_ll dest_addr;
         memset(&amp;dest_addr,0,sizeof(struct sockaddr_ll));
         dest_addr.sll_family = PF_PACKET;
         dest_addr.sll_protocol = htons(8902);
         dest_addr.sll_ifindex = info-&gt;if_index;
         dest_addr.sll_halen = ETH_MAC_ADDR_LEN;
         dest_addr.sll_pkttype = PACKET_OTHERHOST;
         dest_addr.sll_hatype   = ARPHRD_ETHER;
         memset(dest_addr.sll_addr,0,8);
  
         dest_addr.sll_addr[0] = 0x00;
         dest_addr.sll_addr[1] = 0xE0;
         dest_addr.sll_addr[2] = 0x0C;
         dest_addr.sll_addr[3] = 0x00;
         dest_addr.sll_addr[4] = 0x95;
         dest_addr.sll_addr[5] = 0x02;
  
         return sendto(info-&gt;sock_fd, buf, length, 0, (struct sockaddr*) &amp;dest_addr, sizeof(struct sockaddr_ll));
      }
  </code></pre>
  
  <p>I was unable to capture the packet using wireshark. After tryiing too many things, I found out that buffer used to send should have all ethernet frame fields (starting from destination address). When I added the destination and source address and other ethernet fields into the buffer, I was able to capture the packet using wireshark. So the send function doesn't use the MAC address stored in <code>dest_addr.sll_addr</code>.</p>
  
  <p>My question is, Then what's the need of <code>sll_addr</code> field in the <code>struct sockaddr_ll</code>? Manuals say that it is the destination MAC address.</p>