Допустим, имеются данные (до 512 байт).
Сначала формируете UDP-пакет, дописывая UDP-заголовок, см. тут:
http://book.itep.ru/4/44/udp_442.htmUDP-контрольную сумму можете не считать, используйте 0.
Затем формируете IP-пакет, дописывая IP-заголовок, см. тут:
http://book.itep.ru/4/44/ip_441.htmНадо считать IP контрольную сумму (16 bits modulo2).
Затем формируете ppp-пакет, см. тут:
http://book.itep.ru/3/ppp_35.htm(в дописываете ppp-заголовок в начале, ppp crc16 в конце, выполняете 7D-преобразование
по всему пакету и обрамляете символами 7E).
Секрет: обычно несжатый заголовок и 7D-преобразование всех символов меньше 20 приемлемо, независимо
от согласования на этапе LCP).
В итоге оправляете в ком-порт побайтно полученный пакет (начинается и заканчивается 7E).
При получении ppp-пакета проводите обратное 7D-преобразование и экстрагируете непосредственно данные (обычно по фиксированному смещению).