question of transmit large ethernet frame on qnx 4.24

hello all:
My system is based on qnx4.24 , netcard is intel 82559 chip. I find that netcard transmit ethernet frame which length is 1514 at best . Now , I wanna the netcard on my system to transmit ethernet frame that longer than 1514 (for example: 1518) , but i failed ! I don’t know if there is any resolvent , please tell me ! Need it to update driver of 82559 or replace the netcard?
Thanks in advance.

To my knowledge, it’s not possible.

You could try the netraw interface but I wouldn’t hold my breath.

There is some peculiar number which represents the maximum size of a 10Mbit Ethernet packet, and therfore a slightly smaller size for an IP packet, and furthermore a smaller size for a UDP packet.
It’s a hardware thing. It’s about 1500, so I guess that’s the limit you’ve reached. I would have thought that TX100 would have a larger limit for throughput reasons, but I don’t know this, nor whether QNX supports it.

mario and maschoen , thank you.
I find that trunk port in some 3 layer switch can transmits ethernet frame that longer than 1514 (for example: ethernet frame that added vlan tag , it’s length is 1518) , now I wanna let my system can transmit ethernet frame that longer than 1514 . My netcard is intel 82559 chip . Are your attitude that is determined by hardware (82559) , and is independent of os(qnx4.24 and netcard driver) ? can you commend some netcard that can support above function? thanks a lot.

It’s my understanding that 10Mbit Ethernet has some limit around 1500. I don’t know if it is 1514 or 1518. Whatever it is, it certainly is 1) a standard, 2) built into a lot of hardware. Is it possible that QNX is somewho arbitrarily giving you a slightly smaller limit, sure. But I doubt it.
Note that the size of an Ethernet frame, the amount of data in it, and the amount of data that you can put in it are three different things.

my system architecture is my application receive packet from qnx os , then my application Announce Forward it to “Net” process (by raw protocol register).Etherner port of my device connect to “trunk port” in three level switch(82559 is 100Mbit).
when i use the command : “ping -s 1468” test (Note : “” is a pc which connect to “access port” in three level switch . The pc is in the same VLAN with my device) , the length of packet which come from QNX Os is 1496(IP packer , length = 1468 + 8(icmp header) + 20(ip header) , this is date of ethernet frame) . Then My application adds 4 bytes vlan tag And ehternet header to the packet . At this time , the length is 1514 , It can pass the ping test.
But when ping length more than 1468 ,it can’t work. I catch Paccket on the ethernet port and notice the length of the ethernet frame which is catched is 1514. But it should longer than 1514 according to calculate .For example : “ping -s 1472” , the length of frame is 1472+8+20+4+14 = 1518 . Furthermore the tailof the ip packet has been cut 4 bytes . The rest part is completely correct . The vlan mark is normal.
Therefore , I guess that my system can only support transmitting 1514 ethernet frame at present . please give me some commends that help my system can support transmitting 1518 ethernet frame. thanks a lot.

You know, this is just a wild guess, but could you be forgetting a CRC somewhere in your calculation?

As far as making the system give you 4 more bytes, I wouldn’t count on it. Even if its some kind of oversite (bug) on QSSL’s part, it’s not likely to change.

BTW, I recall reading about a DOS attack in which ICMP messages of length 64K were being sent. If the article is correct, that means ICMP packets can span Ethernet packets. So my question to you is, what you mean by the “ping” not working? You also are not really indicating why you care? Do you need to send 1472 byte ICMP packets?

Unless you write a custome network driver or get QSS to change the driver I don’t think it’s possible.

maschoen , i wanna make my system support add|remove VLAN tag , Therefore i need my system support transmitting 1518 ethernet frame (i.e.“ping -s 1472” , the length of ethernet frame is 1472(icmp data)+8(icmp header)+20(ip header)+4(vlan header)+14(ethernet header) = 1518 ) . i said:“ping can’t work” , it mean that ping failed (no pass). At that time , the tail of the ethernet has been cut 4 bytes(the frame which don.t include crc part of ethernet frame ) , i guess that reason is “4bytes vlan header” and my system(netcard chip or netcard driveror Net process) can only support transmitting 1514 ethernet frame at best . maschoen,you said : “ICMP packets can span Ethernet packets” , Do you mean that ip fragmenting , i think it occur at src node of the packet , the src node don’t know my system will add vlan tag , Therefore the length it’s the largest fragment is 1514 according to ethernet protocol (for example : “ping -s 1800”).
maschoen , my application don’t calculate crc of ethernet frame , i guess netcard driver or Net process complete it.

mario , Are you sure only custome network driver that can make my system support transmitting 1518 ethernet frame? it is independent of Net or netcard hardware ? Will QSSL company provide the server that custome network driver ?
And how much it cost?

Well first it seems, at this time, only QSS knows the answer if you can send packet bigger then 1514. As I said my guess is it’s not supported and why would it be, it’s outside of the spec of ethernet. I’m no specialist of Ethernet protocol but I don’t think there is such a think as 1518 ethernet frame since it’s not an standard ethernet frame.

I don’t know the amount of worked required for supporting this, but if it’s not already supported in some undocumented way then I’m guestimating that it’s not going to be trivial.

I took a look at some specifications, and I’ll try one more time.
The hardware buffer for in an ethernet card is 1518 bytes long.
There is 14 bytes in the header.
There is 4 bytes of CRC as trailer
This gives you 1518-14-4 = 1500 bytes of data.
If you want to send 1500 bytes of data, you can’t include a vlan header.
If you want to include a vlan header, you can’t send 1500 bytes of data.
No amount of driver recoding will change this, sorry.

As to why you can’t send an ethernet frame spanning ping, I don’t know.
If you’d like to read an interesting article about how a 13 year old brought the website to its knees using a denial of service attack from 400+ computers using 64K pings, read on:

mario , maschoen , i wanna transmit 1518 ethernet frame (1500 bytes date , 4 bytes vlan tag , and 14 bytes ethernet frame header) , because length of ethernet frame from "trunk port " of “three level switch” is 1518 which is captured by i . i wanna make my system support remove|add vlan tag , so i want to know the amount of worked required for supporting this.

You don’t want to transmit a 1518 frame you want to transmit a 1522 frame, because in your calculation you forgot to include the CRC and CRC is part of the ethernet standard, you can’t just decide to remove it because you need the extra 4 bytes for your own use (the vlan tag).

The answer is only QSS knows the amount of worked required. And I’d bet only not every model of network card could support extending the packet beyond its specification.

The only solution that comes to mind, is writting a PPP like driver (which support variable MTU) but not for a serial card, for a real network card. Downside is you would only be able to use it for TCP/IP communication, no QNX networking.

Aside from that I think you will need QSS to modify the whole networking subsystem, that is going to be very expensive…

As you can see no one here know the real answer, you will have to talk to QSS or at least look somewhere else for an answer.

Mario, I really don’t think what he wants is possible. Your solution would involve having Ethernet packets spanning Ethernet packets. It would require special software on both sides of the connection, and would be non-standard. All to squeeze 4 more bytes out? The Ethernet packet length has been around a long long long time. I first ran into it in 1979.

I agree Mitch, but my understanding is all he want is add remove tag, which I assume are special packet sent just on rare occasion. Obviously if it has to be in every packet then i agree this will never work, unless the network card is connected to a special switch that remove the extra info, recalculate the checksum and resend the packet.

If only a single packet for config purpose is required, then maybe somewhere out there there is a network card that can have its Ethernet packet size reprogrammed (kind of like Jumbo packet for 1G).

I wouldn’t want to have to find a solution to this problem with a low budget…

maschoen , i really capture packet ethernet frame from "trunk port " of “three level switch” whose length is 1518(don’t include crc) by “ethereal” (a capture packet software).i don’t know if it don’t follow standard length of Ethernet packet , but it is exist . i only wanna to know way how to implement it .
mario , maschoen , thank you very much for your help.

Please post your solution if you ever found one.

What you describe is by definition not Ethernet, so it is not surprising that you can’t read it.