Некоторые пояснения.

Все параметры в 16-ричном виде (кроме device :). Порядок - как они будут
в пакете. Т.е. если HelloTime=2, то это будет не 0002 (по аналогии с 
нормальной записью 0x0002), а 0200 (т.е. младший байт идет первым).
Они могут идти сплошными цифрами или разделяться двоеточием (т.е. допустима 
как запись 01020304 так и запись 01:02:03:04).

Параметр -v вынуждает программу писать не в сокет (он тогда вообще не 
открывается), а в файл packet.dmp. Пишется с добавлением, т.е. файл 
открывается в режиме append. Размер пакета - 60 байт.
Кроме того, с -v пишется разбор параметров (типа Forward Delay: Ok).
Если параметр введен с ошибкой, то функция get_hex_value() сругается и
будет понятно, какой именно введен неправильно.
Рекомендуется воспользоваться этим режимом для первичного задания параметров, 
убедиться, что все правильно, после чего уже баловаться с сетью ;)

Чтобы не мучиться с ком. строкой, лучше оформить это дело в виде скрипта (см. 
пример test). Т.е. все параметры задать в виде переменных, а потом вызывать 
программу с длинной стандартной ком. строкой.

Проверить мне не на чем. У меня был дамп пакетов, я добился, чтобы в файл при 
аналогичных параметрах попадало тоже самое. Структуру строил "с конца", т.е. 
отсчитывал байты с Forward Delay. Непонятен остался байт со значением 03 после 
заголовка LLC (4242). Фиг знает, может он от железа зависит, надо проверять.
Вобщем, пробуй.

зы. Прилагаемый stp скомпилен статически. Под линукс, естессно ;)

cu.