#define TYPE   0x0800

struct _data_str{
  unsigned char data[5];
};

struct timer_list my_timer;

static void send_packet(void)
{
  struct net_device * dev;
  struct sk_buff * skb;
  struct iphdr * iph;
  struct udphdr * udph;
  struct _data_str *data_str;

  dev = dev_get_by_name(&init_net, "eth0");

  skb = dev_alloc_skb(2*(dev->addr_len+4) + LL_MAX_HEADER + sizeof(struct data_str) + sizeof(struct iphdr) + sizeof(struct udphdr));
  if(skb == NULL)
    return;

  if (skb_linearize(skb) < 0)
    return;

  skb_reset_network_header(skb);

  skb_reserve(skb, LL_MAX_HEADER);
  skb->dev = dev;
  dev_hard_header(skb, dev, ETH_P_IP, "x00x1dx08x7fx46xf8", dev->dev_addr, skb->len);

  iph = (struct iphdr*)skb_put(skb, sizeof(struct iphdr));
  iph->daddr = 0x0101a8c0;
  iph->saddr = 0x2601a8c0;
  iph->version = IPVERSION;
  //iph->ihl = sizeof(struct iphdr) / 4;
  iph->ihl = 5;
  iph->tos = 0;
  iph->id = 0;
  iph->frag_off = 0;
  iph->protocol = IPPROTO_UDP;
  iph->check = 0;
  iph->ttl = 64;
  iph->check = 0;
  iph->check = ip_fast_csum((unsigned char *)iph, iph->ihl);

  iph->tot_len = htons(sizeof(struct iphdr) + sizeof(struct udphdr) + sizeof(data_str->data));

  udph = (struct udphdr*)skb_put(skb, sizeof(struct udphdr));
  udph->source = htons(1234);
  udph->dest = htons(1235);
  udph->len = htons(sizeof(struct udphdr));
  udph->check = 0;

  data_str = (struct _data_str*)skb_put(skb,sizeof(struct _data_str));// + 2*(dev->addr_len+4));
  memset(data_str->data, 0, sizeof(data_str->data));
  memset(data_str->data, 'A', sizeof(data_str->data)-1);

  dev_queue_xmit(skb);
  return;
}

위 내용은 modue에서 사용되는 함수입니다. 문자열 "AAAA" 를 전송하게 되는데요.
패킷을 잡아서 보면 IP header checksum 이 틀리다고 나옵니다만 어디가 틀린지 모르겠습니다ㅠㅠ
몇시간동안 삽질 했다가 질문드립니다. 그리고 UDP checksum 초기화 할 때는 csum_tcpudp_magic() 함수
쓰면 되는건가요?
번호 제목 글쓴이 날짜 조회 수
공지 [공지] 프로그래밍 관련 Q&A 게시판 입니다. woos 2016.04.09 22269
418 커널 스터디에 관해서;;. 질문드립니다. [5] 한상은 2007.07.11 8693
417 컴파일러 최적화 부분에서... [2] 김국진이 2010.09.04 8666
416 리눅스에서 FIQ 사용 하는법 아시나요? 홍문화 2010.06.11 8656
415 signal에 대한 질문입니다 많은 조언 부탁드립니다 ㅠㅠ [19] 송창인 2011.04.06 8598
414 arm 보드 구매에 대한 조언 부탁 드립니다. [1] 김성준 2007.10.27 8581
413 HP-UX 링크 옵션 질문입니다. [6] 조운현 2011.04.06 8575
» sk_buff 을 이용한 UDP 패킷 전송 질문있습니다ㅠㅠ [1] 김숙현 2012.10.05 8556
411 리눅스의 스케쥴링에 따른 priority는 어떻게 설정해주나요? [5] 심우진 2011.04.12 8539
410 스터디 참여에 관해서 질문이있습니다. [1] 최대진 2007.09.12 8530
409 defconfig,Kconfig... ?? [1] 서보일 2012.07.26 8510
408 사운드 드라이버 관련 질문입니다. [2] 조현호 2013.03.25 8479
407 trap_init() 설명 부탁드려요~ [3] 이창만 2008.11.18 8433
406 라이브러리 프로파일링 [2] 김경태 2011.01.12 8431
405 리눅스 커널패닉 덤프를 분석하려면 필요한 선수지식 [4] 아척 2013.07.31 8427
404 LINUX ARM switch_mm 관련해서 문의 드립니다. [20] 송원식 2011.08.12 8381
403 C 개발 표준 [2] 조운현 2011.06.01 8373
402 커널 모듈에서 특정 사용자 프로세스의 메모리 공간을 접근하고 싶습니다. [3] 남현우 2009.04.01 8326
401 qemu에서 커널을 debugging 하고 싶습니다. [4] 하이디제이 2012.05.07 8287
400 모집 공고 보고 참석 메일 보냈는데요. [1] 문경원 2007.10.17 8273
399 page table 질문 [3] 김광식 2012.08.21 8267
XE Login