lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [lwip-users] Build Simple packet and send out using UDP


From: Taranowski, Thomas (SWCOE)
Subject: RE: [lwip-users] Build Simple packet and send out using UDP
Date: Mon, 18 Aug 2008 17:16:44 -0400

Since I don’t typically have access to a convenient stdio I use the following to log data.  It uses the standard syslog port, and builds the udp header up from lwip structures, and sends it out netif_default.

 

 

//Do a low level system log, useful for debugging issues with the stack

extern "C" netif *netif_default;

void sys_log(char *str) {

  if(!netif_default) {

    return;

  }

 

  //Must use a buffer that the driver can access, and do 1 time initiaization

  //of protocol headers

 

  //Build a MAC/IP/UDP header

  static eth_hdr *eth;

  static ip_hdr *ip;

  static udp_hdr *udp;

 

  static char* driver_buf=0;

  if(!driver_buf) {

    driver_buf = (char*)memp_malloc(MEMP_PBUF_POOL);

    eth = (eth_hdr*)driver_buf;

    ip = (ip_hdr*)(driver_buf + sizeof(eth_hdr));

    udp = (udp_hdr*)(((char*)ip) + sizeof(ip_hdr));

 

    //Ethernet

    eth->dest.addr[0]

      = eth->dest.addr[1]

      = eth->dest.addr[2]

      = eth->dest.addr[3]

      = eth->dest.addr[4]

      = eth->dest.addr[5]

      = 0xff;

    memcpy(&eth->src, netif_default->hwaddr, sizeof(eth->src));

    eth->type = htons(ETHTYPE_IP);

    //IP

    IPH_VHLTOS_SET(ip, 4, IP_HLEN/4, 0);

    IPH_ID_SET(ip, 0);

    IPH_OFFSET_SET(ip, 0);

    IPH_TTL_SET(ip, 20);

    IPH_PROTO_SET(ip, IP_PROTO_UDP);

    ip_addr dest;

    dest.addr=0xffffffff;

    ip_addr_set(&(ip->dest), &dest);

    ip_addr_set(&(ip->src), &(netif_default->ip_addr));

    IPH_CHKSUM_SET(ip, 0);

    //UDP

    udp->dest = udp->src = "">

    udp->chksum = 0;

 

  }

  int str_len = strlen(str);

 

  //Fix up IP header

  IPH_LEN(ip) = sizeof(ip_hdr) + sizeof(udp_hdr) + str_len;

  IPH_CHKSUM_SET(ip, 0);

  IPH_CHKSUM_SET(ip, inet_chksum(ip, IP_HLEN));

 

  //UDP payload length

  udp->len = htons(str_len + sizeof(udp_hdr));

 

  //append payload

  strncpy((char*)( ((char*)udp) + sizeof(udp_hdr)), str, str_len);

  CLegacyDevice *legacyDevice = (CLegacyDevice*)netif_default->state;

  legacyDevice->send(driver_buf, str_len + sizeof(udp_hdr) + sizeof(ip_hdr) + sizeof(eth_hdr));

 

}


From: address@hidden [mailto:address@hidden On Behalf Of Gary Olson
Sent: Monday, August 18, 2008 10:02 AM
To: address@hidden
Subject: [lwip-users] Build Simple packet and send out using UDP

 

Hi,

  Thank you Kieran for the help last week with my question on capturing multiple ports using UDP.

I implemented the advice I received and it worked correctly.  I would now like to learn how I

Can create a simple short packet and send this packet to a PC.  The reason I need to do this

Is that I want to throttle the PC Bandwidth.  I want to tell the PC to stop send the board

Packets when the board cannot handle a packet. Or to restart the PC to begin sending

Packets again. 

 

By the way if anyone is interested I created a thread in Xilinx Forums page about my multiple port

Problem at :

 

http://forums.xilinx.com/xlnx/board/message?board.id=EDK&thread.id=4539

 

 

Thank You,

  Gary Olson

 

 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]