강좌 & 팁
아래의 코드는 파일 오퍼레이션에 관련 함수를 등록 하고, net_device_ops 구조체의 init과 관련된 함수의 소스 입니다.
alloc_percpu 함수는 멀티코어 에서 각각 CPU 별로, 메모리를 할당 하는 메크로 입니다.
// 루프백 디바이스 초기화 static int loopback_dev_init(struct net_device *dev) { struct pcpu_lstats __percpu *lstats; lstats = alloc_percpu(struct pcpu_lstats); // 메모리 할당 if (!lstats) // 만일 메모리 할당이 되지 않으면 -ENOMEM 에러를 반환 return -ENOMEM; dev->ml_priv = (void __force *)lstats; // 프라이빗 구조체에 할당한 메모리를 연결 return 0; } // 루프백 디바이스에 할당한 메모리 해제 하기 static void loopback_dev_free(struct net_device *dev) { struct pcpu_lstats __percpu *lstats = (void __percpu __force *)dev->ml_priv; free_percpu(lstats); // init 함수에서 할당한 lstats 메모리 해제 free_netdev(dev); // loopback_net_init 함수에서 할당한 dev 메모리 해제 } // 파일 오퍼레이션 구조체에 함수 등록 하기 static const struct net_device_ops loopback_ops = { .ndo_init = loopback_dev_init, // 초기화 .ndo_start_xmit= loopback_xmit, // 데이터 전송 .ndo_get_stats = loopback_get_stats, // 상태값 읽기 }; |