в общем это сделать прямо никак нельзя.
пришлось править lwip
при посылке пакета udp есть проверка:
стек ищет подходящий по маске и адресу назначения интерфейс
и при его нахождении пакет туда направляется
я поменял
CODE
/* iterate through netifs */
for(netif = netif_list; netif != NULL; netif = netif->next) {
/* network mask matches? */
if (netif_is_up(netif)) {
/* return netif on which to forward IP packet */
if (ip_addr_netcmp(dest, &(netif->ip_addr), &(netif->netmask))) {
return netif;
}
}
}
на
CODE
/* iterate through netifs */
for(netif = netif_list; netif != NULL; netif = netif->next) {
/* network mask matches? */
if (netif_is_up(netif)) {
/* return netif on which to forward IP packet */
if (ip_addr_cmp(dest, &(netif->ip_gw))) {
return netif;
}
}
}
при подъеме netif в самом начале программы в качестве адреса gw забиваю ip адрес конечного соединения.
так все работает