>> Read No. 58836 article  
16진수 값을 넣고 싶어요...ㅜ.ㅜ

등록 2002-10-11 21:23:00     조회 10
이름 강경모    

		아래의 소스에서 (리눅스 커널에 있는 소스입니다./usr/src/linux/net/ipv4/arp.c 파일의 일부입
니다.)  ******************로 체크된 memcopy의 src_hw 부분을 제가 원하는 값으로 강제로 집어 넣고
 싶은데요.  그래서.._-------------------------------이렇게 한 부분을 제가 넣었습니다.
 결국 제가 하고 싶은 것은 unsigned char br_hwaddr에 16진수로 FF(0xFF)인 unsigned char를 넣고 싶은 
것입니다. 그것도 6개를 쫙 붙여서... (찍어보니까..y 자 위에 점 두개 찍혀있는 그런 문자던
데....)   그런데...이 부분을..즉..제가 수정한 부분만을 따로 띄어내서 컴파일 하면..정상적
으로 동작합니다.  그러나 이렇게 수정하고..커널 컴파일을 하면..커널 패닉이 나고..에러
들이 쫙 뜨면서..아무것도 안 먹습니다...  한..2틀동안 이것 저것 해보면서..커널 컴파일만.
.40번을 넘게 햇습니다.  도와주세요..어디가 문제인지..ㅜ.ㅜ
  void arp_send(int type, int ptype, u32 dest_ip,
	      struct net_device *dev, u32 src_ip,
	      unsigned char *dest_hw, unsigned char *src_hw,
	      unsigned char *target_hw)
{
	struct sk_buff *skb;
	struct arphdr *arp;
	unsigned char *arp_ptr;
  ------------------------------------------------------
제가 새로 넣은 부분입니다.
       unsigned char buffer[6];
       unsigned char *br_hwaddr;
       unsigned char *br_hwaddr_temp;
       *br_hwaddr_temp = (unsigned char)255;
        strcat(buffer, br_hwaddr_temp);
       strcat(buffer, br_hwaddr_temp);
       strcat(buffer, br_hwaddr_temp);
       strcat(buffer, br_hwaddr_temp);
       strcat(buffer, br_hwaddr_temp);
       strcat(buffer, br_hwaddr_temp);
        br_hwaddr = buffer;
 여기까지..추가.
------------------------------------------------------------
 	/*
	 *	No arp on this interface.
	 */
 	if (dev->flags&IFF_NOARP)
		return;
 	/*
	 *	Allocate a buffer
	 */
 	skb = alloc_skb(sizeof(struct arphdr)+ 2*(dev->addr_len+4)
				+ dev->hard_header_len + 15, GFP_ATOMIC);
	if (skb == NULL)
		return;
 	skb_reserve(skb, (dev->hard_header_len+15)&~15);
	skb->nh.raw = skb->data;
	arp = (struct arphdr *) skb_put(skb,sizeof(struct arphdr) + 2*(dev->addr_len+4));
	skb->dev = dev;
	skb->protocol = __constant_htons (ETH_P_ARP);
	if (src_hw == NULL)
		src_hw = dev->dev_addr;
	if (dest_hw == NULL)
		dest_hw = dev->broadcast;
 	/*
	 *	Fill the device header for the ARP frame
	 */
	if (dev->hard_header &&
	    dev->hard_header(skb,dev,ptype,dest_hw,src_hw,skb->len) < 0)
		goto out;
 	/*
	 * Fill out the arp protocol part.
	 *
	 * The arp hardware type should match the device type, except for FDDI,
	 * which (according to RFC 1390) should always equal 1 (Ethernet).
	 */
	/*
	 *	Exceptions everywhere. AX.25 uses the AX.25 PID value not the
	 *	DIX code for the protocol. Make these device structure fields.
	 */
	switch (dev->type) {
	default:
		arp->ar_hrd = htons(dev->type);
		arp->ar_pro = __constant_htons(ETH_P_IP);
		break;
 #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
	case ARPHRD_AX25:
		arp->ar_hrd = __constant_htons(ARPHRD_AX25);
		arp->ar_pro = __constant_htons(AX25_P_IP);
		break;
 #if defined(CONFIG_NETROM) || defined(CONFIG_NETROM_MODULE)
	case ARPHRD_NETROM:
		arp->ar_hrd = __constant_htons(ARPHRD_NETROM);
		arp->ar_pro = __constant_htons(AX25_P_IP);
		break;
#endif
#endif
 #ifdef CONFIG_FDDI
	case ARPHRD_FDDI:
		arp->ar_hrd = __constant_htons(ARPHRD_ETHER);
		arp->ar_pro = __constant_htons(ETH_P_IP);
		break;
#endif
#ifdef CONFIG_TR
	case ARPHRD_IEEE802_TR:
		arp->ar_hrd = __constant_htons(ARPHRD_IEEE802);
		arp->ar_pro = __constant_htons(ETH_P_IP);
		break;
#endif
	}
 	arp->ar_hln = dev->addr_len;
	arp->ar_pln = 4;
	arp->ar_op = htons(type);
 	arp_ptr=(unsigned char *)(arp+1);
 ******************************************************
/*	memcpy(arp_ptr, src_hw, dev->addr_len); <---이 부분아래와 같이 수정하고 주석으로 막아놨습니다.?
         memcpy(arp_ptr, br_hwaddr, dev->addr_len); <-이렇게 바꿨습니다.
********************************************************
	arp_ptr+=dev->addr_len;
	memcpy(arp_ptr, &src_ip,4);
	arp_ptr+=4;
	if (target_hw != NULL)
		memcpy(arp_ptr, target_hw, dev->addr_len);
	else
		memset(arp_ptr, 0, dev->addr_len);
	arp_ptr+=dev->addr_len;
	memcpy(arp_ptr, &dest_ip, 4);
 	dev_queue_xmit(skb);
	return;
 out:
	kfree_skb(skb);
}
이름
암호
Register [ localhost 목록보기 윗글 아랫글
글쓰기
답장쓰기 수정 삭제
정규표현식 [ 상세 검색 ]
페이지로딩: [ 0.46 초 ] 작업시간: [ 0 초 ]

Copyleft 1999-2026 by JSBoard Open Project
Theme Designed by IDOO All right reserved
[TOP]

적수네 동네
+
| 적수네 동네
| 공부방
| 리눅스 잡지 서고
| LSN 소스
| 링크 모음
+---+
게시판
+
| 떠들어보세!
| 질문과 답변
| 새소식과 정보
| 1원짜리 팁?
| 대화방
+---+
칼럼?
+
| 세하 훔쳐보기
| Welcome2nite
| 혜진의 염장판
+---+
리눅스 상표권
+
| 반대 서명란
| 토론 게시판
+---+
GNU
+
| GNU 선언문
| GNU GPL
| GNU 미러 목록
+---+
프로젝트?
+
| 리눅스카운터
| RC5DES
| 실질헌법 제작
+---+
커널 소식
+
| 안정 버젼: 2.4.14
+---+
테마 선택
+
LSN 방송국?
+
| OFF AIR
+---+
회원
+
| 로그인
+---+
[ 적수네 동네 ] [ 리눅스 상표권 독점 반대 ] [ 한글 리눅스 문서 프로젝트 ] [ KrLine ] [ 사랑넷 ] [ Valid HTML 4.0! ] [ SlashDot ] [ Freshmeat ]
Copyleft (C) 1998-2001 Byeong-Chan Kim . License
TIME: 1791138588
System by WYZsoft, HDD by I.O.Linux, Mizi Research, Embryo, WOWLINUX, Domain by SarangNet, Network by KrLine.