реклама на сайте
подробности

 
 
> посоветуйте алгоритм
romez777
сообщение Jun 28 2010, 10:43
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077



Приветствую,

пишу библиотеку к Layer-2 24-портовому свитчу (25 порт - внутренний для связи с cpu), и одна из функций - VLAN. Неудобство в том, что каждый порт представлен двумя регистрами: один 16 битный, второй - 9бит. Каждый из этих регистров имеет такой смысл (цитирую даташит): "the ports which p1~p25 can forward to". Для примера:

порты {5, 6, 7, 8, 25} помещаем в vlan группу 1, соответственно пишем следующие рег-ры:

reg5-1 to 0x00f0, reg5-2 to 0x100 (for port 5)
reg6-1 to 0x00f0, reg6-2 to 0x100 (for port 6)
reg7-1 to 0x00f0, reg7-2 to 0x100 (for port 7)
reg8-1 to 0x00f0, reg8-2 to 0x100 (for port 8)
reg25-1 to 0x00f0, reg25-2 to 0x100 (for port 25)

Стал сочинять ф-цию и застрял:

int vlan_port_add(int unit, unsigned int vid, unsigned int port)
{
int p;
long portmask;
uint16_t val;

portmask = getPortmask(vid); /* current bitmask stored in NVRAM */
portmask |= 1 << (port - 1);
savePortmask(vid, portmask);
mask = portmask;

for (p = 0; p < PORT_MAX; p++) {
if (mask & 1) {
addr = R_VLAN_ENTRY_BASE + (p * 2); /* evaluate register address */
val = portmask & 0x0000ffff;
writeReg(unit, addr, val);
/* XXX */
}
mask >>= 1;
}
...
}

Но этот код правильно работает только для младших битов. Т.е. пробегая по маске, записываем в регистры, соответствующие установленным битам, и если доберемся до битов 17-24, и порты им соответствующие, должны быть в VLAN группе вместет с портами, например, 1-4, то в регистры портов reg1-2, reg2-2, reg3-2 и пр. ничего не пишется (см. пример выше).

Надеюсь понятно изложил smile.gif Код, само собой не идеален, но мне скорее нужна идея реализации, алгоритм.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 20:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01429 секунд с 7
ELECTRONIX ©2004-2016