MAC address 유효성 체크(Vender부분)를 하나요? 아니면 MAC address(Vender부분)부여에 규칙이 있나요?

emax77의 이미지

현재 ks8695칩셋을 사용해서 공유기 개발중입니다.
MAC을 변경해 가면서 테스트중 이상한 현상을 발견하여 질문 드립니다.

아래와 같이 구성하여 테스트를 진행하였습니다.

WAN ------------------- 공유기(ks8695) ----------------- PC(맥변경)

1.PC에서 ping 또는 DHCPDISCOVER를 공유기로 전송(PC는 MAC어드레스 변경해 가면서 테스트)
2.공유기가 변경된 MAC을 받아 응답/비응답 하는가 테스트

아래와 같이 정상적인 벤더의 MAC은 이상없이 공유기가 응답을 주는데
00:02:55:xx:xx:xx (hex) IBM Corporation
00:09:18:xx:xx:xx (hex) SAMSUNG TECHWIN CO.,LTD 등등..

MAC에 등록되지 않은 (01:00:00:xx:xx:xx)는 공유기의 ks8695칩셋에서 커널단으로 올려주질 않는군요.
추가로 아래와 같이 일반PC에서 테스한 결과 01:00:00:xx:xx:xx에 대한 응답을 하는군요.

일반PC(realtek RTL8168C/8111C) ----------------- PC(맥변경)

일반PC네트워크 카드는 realtek RTL8168C/8111C로 되어있네요.
칩셋마다 MAC에 대하여 유효성 체크나 룰이 있는지 궁금합니다.
아니면 MAC어드레스 벤더부분에 규칙이 존재하는지도 답변 부탁드립니다.

bushi의 이미지

주석 참고하세요.

static inline void random_ether_addr(u8 *addr)
{
        get_random_bytes (addr, ETH_ALEN);
        addr [0] &= 0xfe;       /* clear multicast bit */
        addr [0] |= 0x02;       /* set local assignment bit (IEEE802) */
}
리눅스 커널에 있는 코드인데, 주로 BSP 용의 드라이버에서 애용됩니다.
http://standards.ieee.org/regauth/oui/oui.txt 의 목록에서
첫번째비트와 두번째비트가 사용되지 않는 것을 확인하실 수 있습니다.
더 자세히 알고 싶다면 http://en.wikipedia.org/wiki/MAC_address 에서 출발해보세요.

OTL

emax77의 이미지

감사합니다.

결국 MAC어드레스 01:~~은 멀티케스트용 MAC주소로군요.

음.. 확실히 멀티케스트용(전송용 dest주소)가 src MAC으로 사용되었으니

잘못되긴 잘못되었군요..

브로드케스팅으로 말하면 src의 MAC이 FF:FF:FF:FF:FF:FF로 날린 격이니

칩에서 거부할만 하네요..

좋은 공부 되었습니다. 감사합니다.