Previous Page  7 / 11 Next Page
Information
Show Menu
Previous Page 7 / 11 Next Page
Page Background

Самоорганизация в древовидных персональных беспроводных сетях…

ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. Приборостроение. 2017. № 1

81

Номер кластера может быть определен исходя из логического адреса узла

1

int

,

0.

A i

A

K

 

Адрес родителя узла с адресом

A

из кластера с номером

i

равен

р

1

int

1,

1

( 1) 1,

A Ki

A

Ki

Ki

A K i

m

 

      

или 0, если узел является одним из шлюзов

р

0,

1.

А A Ki

  

Маршрут передачи сообщения.

Несмотря на наличие нескольких шлюзов

топология сети остается древовидной, поэтому маршрут передачи сообщения,

как и ранее, содержит в общем случае восходящую и нисходящую ветви. Для

определения адреса родителя и маршрутизации сообщений будем использовать

функции

GetParentMGW()

и

GetNextMGW()

, код которых показан ниже:

/* определение адреса родителя в многошлюзовой древовидной кластер-

ной сети */

unsigned int GetParentMGW(unsigned int A)

{

if(((A-1)&((1<<k)-1)) == 0) /* k — глобальная переменная */

return 0;

else

{

unsigned int a0 = ((A-1)>>k)*(1<<k)+1;

return (A-a0)/m + a0; /* m — глобальная переменная */

}

}

/* маршрутизация сообщения по дереву многошлюзовой кластерной сети

*/

unsigned int GetNextMGW(unsigned int Athis, unsigned int Adest)

{

/* если сообщение на координаторе, маршрутизируем его в нужный

кластер */

if(Athis == 0 && Adest > 0)

{

return ((Adest-1)>>k)*(1<<k) + 1;

}

/* маршрут из одного кластера в другой проходит через координатор

*/

if((Athis-1)>>k != (Adest-1)>>k)

{

return GetParentMGW(Athis);

}

/* пока адрес назначения больше моего адреса в пределах одного

кластера */

while(Adest > Athis)

{

/* родителем текущего адреса назначения

является текущий узел ? */

if(GetParentMGW(Adest) == Athis)

{

/* да, маршрут проходит через него */

return Adest;

}