Страниц: [1]
  Печать  
Автор Тема: multicasting и io-net  (Прочитано 5051 раз)
pul_serg
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« : Января 06, 2006, 10:41:50 am »

есть фильтр в io-net. он должен послать драйверу, который естественно находится ниже по иерархии io-net, сообщение о включении хоста в группу. пример в DDK как принимать такое сообщение драйвером есть и то не правильный. вот сваял я нечто такое. но видать не работает. может кто подскажет?


void set_multicast()
{
npkt_t                  *npkt;
io_net_msg_join_mcast_t *ap;
   
// 1) Allocate a packet; we'll use this for communications
//    with io-net.

if ((npkt = nfm_alloc_npkt(sizeof (*ap))) == NULL) return;

ap=(io_net_msg_join_mcast_t *)npkt->org_data;

// 4) Generate the info for the advertisement message.
memset (ap, 0x00, sizeof (*ap));
ap ->type = _IO_NET_JOIN_MCAST;

ВОТ НЕ ЗНАЮ ЧЕГО ТУТ ПИСАТЬ. в хелпе вообще нет такой переменной mc_min. я ее вытащил из io-net.h
//   ap -> mc_min.addr_dl.sdl_len = sizeof (struct sockaddr_dl);
//   ap -> mc_min.addr_dl.sdl_family = AF_LINK;
//   ap -> sockaddr_dl.sdl_index  = null_lan;
//   ap -> mc_min.addr_dl.sdl_type = IFT_ETHER;
//   ap -> mc_min.addr_dl.sdl_nlen = strlen (ap -> mc_min.addr_dl.sdl_data);
//   ap -> mc_min.addr_dl.sdl_alen = 6;
//   memcpy (ap -> addr_dl.sdl_data + ap -> addr_dl.sdl_nlen, "x12x34x56x78x9axbc", 6);

npkt -> flags |= _NPKT_MSG;

npkt->cell=0;//null_cell;
npkt->endpoint=0;//null_endpoint;
npkt->iface=0;
            
if (ntc_ion->reg_tx_done(ntc_reg_hdl, npkt, NULL) == -1)
{
ntc_ion->free(npkt->org_data);
ntc_ion->free(npkt);
return;
}
            
if (ntc_ion->tx_down(ntc_reg_hdl, npkt) == TX_DOWN_OK)
{
}
else
{
ntc_ion->tx_done(ntc_reg_hdl, npkt);
}
                                                   
return ;
}
Записан
lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #1 : Января 06, 2006, 10:49:27 am »

pul_serg
в хелпе вообще нет такой переменной mc_min. я ее вытащил из io-net.h


.../product/ddk_en/network/io_net_msg_mcast.htm

Structure used for multicast address filtering

Synopsis:
typedef struct _io_net_msg_mcast;

struct _io_net_msg_mcast {
      uint16_t     type;
      uint32_t     flags;
      uint16_t     next;
      uint32_t     mc_min;
      uint32_t     mc_max;
};

mc_min and mc_max
Specifies the minimum and maximum addresses within a range of multicast addresses. The LLADDR macro, defined in <net/if_dl.h>, can be used to obtain a pointer to the actual, physical MAC address, e.g. if mcast points to struct io_net_msg_mcast, the start and end of the address range can be obtained as follows:
    LLADDR(mcast->mc_min.addr_dl)
    LLADDR(mcast->mc_max.addr_dl)
If type was _IO_NET_JOIN_MCAST, the driver should enable reception of packets whose destination addresses are within these inclusive address ranges.

If type was _IO_NET_REMOVE_MCAST, the driver should disable reception of packets whose destination addresses are within these inclusive address ranges (in this case, the address range will have previously been enabled via an _IO_NET_JOIN_MCAST message).

If the _IO_NET_MCAST_ALL flag was set, mc_min and mc_max are irrelevant, and shouldn't be referenced.
Записан

pul_serg
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #2 : Января 06, 2006, 11:57:33 am »

Цитировать
lestat
.../product/ddk_en/network/io_net_msg_mcast.htm

у тебя наверное 6.3 стоит. у меня 6.2.1 и такого файла у меня нет.
а если мне нужен всего один адрес мне его прописывать в mc_min и в mc_max?

еще бы знать как заполнять этот addr_dl?
Записан
lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #3 : Января 06, 2006, 12:27:56 pm »

pul_serg
у тебя наверное 6.3 стоит. у меня 6.2.1 и такого файла у меня нет.

Да. Бывает.
pul_serg
а если мне нужен всего один адрес мне его прописывать в mc_min и в mc_max?

1 адрес для мультикаста ?
Записан

pul_serg
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #4 : Января 06, 2006, 12:45:56 pm »

здесь какое то недопонимание наверное. мне нужно чтобы езернетная микросхема могла принимать пакеты по одному групповому адресу. как я понимаю, для этого драйвер должен прописать в саму микросхему этот адрес. а для того чтобы драйвер толкнуть, я ему и посылаю сообщение с типом _IO_NET_JOIN_MCAST. как я понимаю в mc_min и в mc_max прописываются групповые МАС адреса. или я не прав?
Записан
lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #5 : Января 06, 2006, 12:50:46 pm »

min должен быть равен max'у. Вопрос только в том, что 6.2.1 может и не использовать эти поля.
Записан

pul_serg
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #6 : Января 06, 2006, 12:56:19 pm »

а что тогда использует?

вот написал такое:
ap -> mc_min.addr_dl.sdl_len = sizeof (struct sockaddr_dl);
   ap -> mc_min.addr_dl.sdl_family = AF_LINK;
   ap -> mc_min.addr_dl.sdl_type = IFT_ETHER;
   ap -> mc_min.addr_dl.sdl_nlen = strlen (ap -> mc_min.addr_dl.sdl_data);
   ap -> mc_min.addr_dl.sdl_alen = 6;
   memcpy (ap -> mc_min.addr_dl.sdl_data + ap -> mc_min.addr_dl.sdl_nlen,
                     "x03x00x00x00x00x01", 6);

ap -> mc_max.addr_dl.sdl_len = sizeof (struct sockaddr_dl);
   ap -> mc_max.addr_dl.sdl_family = AF_LINK;
   ap -> mc_max.addr_dl.sdl_type = IFT_ETHER;
   ap -> mc_max.addr_dl.sdl_nlen = strlen (ap -> mc_max.addr_dl.sdl_data);
   ap -> mc_max.addr_dl.sdl_alen = 6;
   memcpy (ap -> mc_min.addr_dl.sdl_data + ap -> mc_max.addr_dl.sdl_nlen,
                     "x03x00x00x00x00x01", 6);

пакеты не приходят может давай через аську пообщаемся? оно так продуктивнее
Записан
lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #7 : Января 06, 2006, 12:59:18 pm »

pul_serg
а что тогда использует?

QNX 6.3.
pul_serg
может давай через аську пообщаемся?

У меня нет icq. принципиально.
pul_serg
оно так продуктивнее

Да я понятия не имею что и как сделано в 6.2.1, в 6.3 network часть серьезно поменялась и документирована гораздо лучше, поэтому в 6.2.1 может быть что угодно.
Записан

Страниц: [1]
  Печать  
 
Перейти в: