hello,
How can I modify the kernel to support jumbo packets? Is there a patch available that I can reference?
Has anyone else completed this task - I can't imagine that it hasn't come up before.
Thanks,
Brandy
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
hello,
How can I modify the kernel to support jumbo packets? Is there a patch available that I can reference?
Has anyone else completed this task - I can't imagine that it hasn't come up before.
Thanks,
Brandy
Hi Brandy,
It seems you posted the same question back in Feb this year and Jeff had replied to your query then.
http://e2e.ti.com/support/embedded/f/354/p/92937/323242.aspx#323242
Can you please use the same thread for any follow-up questions instead of opening a new thread?
Thanks,
Sekhar
No, I think I want to keep this thread open. I am unwilling to accept that there is no way to change the driver to use jumbo packets. Additionally, in the other thread, sprueq6a.pdf never defines the maximum value of RXMAXLEN.
This is the description of the data field in the ethernet packet defination:
Data field. This field carries the datagram containing the upper layer protocol frame, that is, IP layer datagram. The maximum transfer unit (MTU) of Ethernet is (RXMAXLEN - 18) bytes. This means that if the upper layer protocol datagram exceeds (RXMAXLEN - 18) bytes, then the host has to fragment the datagram and send it in multiple Ethernet packets. The minimum size of the data field is 46 bytes. This means that if the upper layer datagram is less then 46 bytes, the data field has to be extended to 46 bytes by appending extra bits after the data field, but prior to calculating and appending the FCS.
The document only ever defines the reset value of RXMAXLEN and it also says that it is a 16bit value, meaning it can handle 9000.
I think the davinci_emac.c was not written to handle jumbo packets. Please just tell me what to change to make it work. I tried to change just the value of the EMAC_DEF_MAX_FRAME_SIZE. It does not throw an error but it also does not send an entire jumbo packet. What am I missing?
This is a necessity to the success of my project.
Please get whomever is necessary involved - jumbo packets are not a trend and should be addressed in your kernel anyhow.
Hi Brandy,
Brandy Jabkiewicz said:The document only ever defines the reset value of RXMAXLEN and it also says that it is a 16bit value, meaning it can handle 9000.
I think Jeff was referring to the 1500 byte limit for data mentioned in Figure 4 on page 19.
Brandy Jabkiewicz said:I think the davinci_emac.c was not written to handle jumbo packets. Please just tell me what to change to make it work. I tried to change just the value of the EMAC_DEF_MAX_FRAME_SIZE. It does not throw an error but it also does not send an entire jumbo packet. What am I missing?
This is a necessity to the success of my project.
Please get whomever is necessary involved - jumbo packets are not a trend and should be addressed in your kernel anyhow.
Did you also change the MTU using the ifconfig command? This will boil down to the change_mtu interface if the EMAC driver in kernel. You add that in the EMAC driver in a manner that is very similar to what is done in drivers/net/sundance.c file
http://lxr.linux.no/#linux+v2.6.39/drivers/net/sundance.c#L695
Also, you need to ensure you are connected to a gigabit network and the peer supports jumbo frames. The best way to test would be to connect two DM6467 EVMs back to back while doing this test (unless you have a peer you know for sure supports jumbo frames).
Thanks,
Sekhar
Hi Brandy,
Add the following modifications (shown in red) to the davinci_emac.c file:
static const struct net_device_ops emac_netdev_ops = {
.ndo_open = emac_dev_open,
.ndo_stop = emac_dev_stop,
.ndo_start_xmit = emac_dev_xmit,
.ndo_set_multicast_list = emac_dev_mcast_set,
.ndo_change_mtu = emac_dev_change_mtu,
.ndo_set_mac_address = emac_dev_setmac_addr,
.ndo_do_ioctl = emac_devioctl,
.ndo_tx_timeout = emac_dev_tx_timeout,
.ndo_get_stats = emac_dev_getnetstats,
#ifdef CONFIG_NET_POLL_CONTROLLER
.ndo_poll_controller = emac_poll_controller,
#endif
};
#define ETH_JUMBO_DATA_LEN 9000
static int emac_dev_change_mtu(struct net_device *dev, int new_mtu)
{
if (new_mtu < 68 || new_mtu > ETH_JUMBO_DATA_LEN)
return -EINVAL;
dev->mtu = new_mtu;
return 0;
}
Regards,
David Weber
Avnet Electronics Marketing
Thanks David, I appreciate avnet's help.
I tried this and it worked great! i did have problems setting my windows 7 laptop to jumbo packets though, once I got that straightened out it was good.
Brandy