Jest to bardzo późno i brak odpowiedzi, ale chciałem śledzić dokładnie to, co zrobiłem na wypadek, gdyby ktoś był zainteresowany.
Pracowałem z bardzo dziwnym sprzętem osadzonym, który nie ma przypisanego adresu MAC podczas produkcji. Oznacza to, że musimy przypisać jeden w oprogramowaniu.
Oczywistym rozwiązaniem jest umożliwienie użytkownikowi wybrania adresu MAC, o którym wiedzą, że jest dostępny w ich sieci, najlepiej z zakresu administrowanego lokalnie, i to właśnie zrobiłem. Jednak chciałem wybrać rozsądnie bezpieczną wartość domyślną, a także próbować ostrzec użytkownika, jeśli wystąpił konflikt.
W końcu uciekłem się do wybrania losowej wartości domyślnej w lokalnym zakresie, wybranym przez dokonanie pewnych odczytów sprzętowych, które mają umiarkowaną entropię. Celowo wykluczyłem początek i koniec zakresu przy założeniu, że umiarkowanie częściej wybiera się je ręcznie. Istnieje szansa, że w danej sieci będzie tylko jedno z tych urządzeń, a z pewnością mniej niż 20, więc szanse na konflikt są bardzo niskie, choć nie tak niskie, jak mogłyby być ze względu na dość przewidywalne liczby losowe.
Biorąc pod uwagę niskie szanse na wystąpienie problemu i pomimo doskonałych odpowiedzi powyżej, zdecydowałem się zrezygnować z wykrywania konfliktu i zrobić z ostrzeżeniem dla użytkownika, aby zwrócić uwagę na problemy z konfliktem MAC.
Jeśli zdecydowałem się zaimplementować wykrywanie konfliktów, to biorąc pod uwagę, że kontroluję cały stos sieci, prawdopodobnie wypatrzyłbym zbyt wielu nieznanych lub brakujących pakietów, a następnie wywołałbym zmianę adresu MAC lub ostrzegłam użytkownika, gdy to się stanie .
Mam nadzieję, że pomoże to komuś innemu - ale prawdopodobnie nie!
Dzięki za tę doskonałą odpowiedź. Dla moich celów może zależeć od IP - nie mam nadziei na obsługę sieci innych niż IP :). Na pewno będę śledzić. –