It can also be from the driver if it ran out of buffer space to process a packet or some other error condition that resulted in a dropped packet.
Some drivers are nice and report the actual condition of the failure in sysctl output. For example if you have an em nic, run "sysctl -a | grep .em." and see what you get. Substitute the driver name as needed (bce, bge, igb, etc) but make sure not to put the number on the end, as in the sysctl tree it would be em.0 and not em0 or it may only have a general list of things.