Hello Albert,

Please provide more information about the order and content of the packets 
being transferred.

My guess is that the following would happen:
 1. PC sends to broadcast: ARP request for RTEMS IP
 2. RTEMS responds PC: ARP reply
 3. PC sends to RTEMS: PING request
 4. RTEMS sends to broadcast: ARP request for PING reply IP
 5. PC responds RTEMS: ARP reply
 6. RTEMS sends to PC: PING reply

Thus three Ethernet frames from the RTEMS machine.

You can use wireshark to sniff the traffic and present it in detail. I think 
you need wireshark or similar if you are going to develop a network driver for 
RTEMS.

Regards,
Daniel H

 On 03/17/2015 07:13 AM, Albert Chun-Chieh Huang wrote:
Hi, all,

I'm currently working on adding a network device driver to rtems. The source tree was grabbed on July, 2014. It's still not working properly right now. But I have some questions about the network stack code.

I added printf function in if_etheresubr.c in the directory 
cpukit/libnetworking/net/ as the following:
int
ether_output(struct ifnet *ifp, struct mbuf *m,
    struct sockaddr *dst, struct rtentry *rt0)
{
    short type;
    int s, error = 0;
    u_char  edst[6];
    register struct rtentry *rt;
    struct mbuf *mcopy = (struct mbuf *)0;
    register struct ether_header *eh;
    int len = m->m_pkthdr.len;
    struct arpcom *ac = (struct arpcom *)ifp;
#ifdef NETATALK
    struct at_ifaddr *aa;
#endif /* NETATALK */

    if ((ifp->if_flags & (IFF_UP|IFF_RUNNING)) != (IFF_UP|IFF_RUNNING))
        senderr(ENETDOWN);
    printk("ether_output: length = %d, if_flags = 0x%08x\n", len, 
ifp->if_flags);
========================================

And I got the following messages when I ping the RTEMS system on ARM:
=======================================================
ip_output 0, length = 84, MTU = 1500
ether_output: length = 84, if_flags = 0x00000847
ether_output: length = 28, if_flags = 0x00000847
if_ethersubr.c: m_len = 28, leading space = 68
if_ethersubr.c: MSIZE = 128, MLEN = 104
if_ethersubr.c: m_len = 42
=======================================================

During this period of time, there are only two kinds of packets, one is PING(echo reply), the other is ARP; the one with 84 bytes is PING, and the one with 28 is ARP, both will be added 14 bytes of Ethernet header later, and makes them 98 bytes and 42 bytes.

Here, ether_output() was called twice when a PING is sent from IP layer. Is it normal? I didn't get PING reply from this board. And I just want to make sure if ether_output being called twice normal or not, so that I can decide which way to go.

Thanks in advance.


Albert


_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to