VxWorks6.9上以太网2层发包程序

来源:互联网 发布:淘宝信用卡办理条件 编辑:程序博客网 时间:2024/06/05 05:34


#include <ipcom_pkt.h>
#include "ipnet_h.h"

typedef struct pkt_arp_struct
{
    /* ARP header, names taken from RFC 826 */
    UINT16    hrd;    /* Hardware address space (e.g. Ethernet,
                         Packet Radio Net.) */
    UINT16    pro;    /* Protocol address space. For Ethernet
                         hardware, this is from the set of Ethernet
                         types */
    UINT8     hln;    /* Hardware address length, 6 for Ethernet */
    UINT8     pln;    /* Protocol address length, 4 for IPv4 */
    UINT16    op;     /* Opcodes, IPNET_ARP_OP_REQUEST or
                         IPNET_ARP_OP_REPLY */

    UINT8     eth_src[6];
    UINT8     ip_src[4];

    UINT8     eth_dst[6];
    UINT8     ip_dst[4];
}pkt_arp;

STATUS gem1Send2(void)
{
// UINT8    dataBuffer[512];
 UINT8    src[6]={0x00,0x0A,0x35,0x01,0x02,0x23};
 UINT8    dst[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
 
 
 pkt_arp    *arp;
 
 Ipcom_pkt    *pkt;
 Ipnet_netif         *netif;
 
    END_OBJ     *pEnd;
    GEM_DRV_CTRL*pDrvCtrl;
   
   
    pEnd=endFindByName("gem",1);
    
     pDrvCtrl = (GEM_DRV_CTRL *)pEnd;
    
     if(NULL==pEnd)
     {
      printf("Could not find END obj\n");
      return ERROR;
      
     }
 
 netif=ipnet_if_nametonetif(0,"gem1");
 
   

    pkt = ipcom_pkt_malloc(sizeof(pkt_arp), IP_FLAG_FC_STACKCONTEXT);
    if (pkt)
    {
        pkt->start   = ipcom_conf_max_link_hdr_size;
        pkt->end     = pkt->start;
        pkt->ipstart = pkt->start;
        pkt->ifindex = netif->ipcom.ifindex;
    }

    arp = ipcom_pkt_push_back(pkt, sizeof(pkt_arp));
    arp->hrd = ip_htons(0x0001);
    arp->pro = ip_htons(0x0800);
    arp->hln = 6;
    arp->pln = sizeof(struct Ip_in_addr);
    arp->op  = ip_htons(0x0001);
 
 //(void)ipnet_if_output(netif, pkt);
   
    ipnet_eth_add_hdr(pkt,netif,dst,src,0x0608);
   
    mux2Send(pEnd,pkt);
 
 /*ipnet_if_indextonetif*/
}

原创粉丝点击