Presentation is loading. Please wait.

Presentation is loading. Please wait.

Socket Buffer 발표자 유 종 욱 발표일 2003년 10월.

Similar presentations


Presentation on theme: "Socket Buffer 발표자 유 종 욱 발표일 2003년 10월."— Presentation transcript:

1 Socket Buffer 발표자 유 종 욱 발표일 년 10월

2 1. Flow of Packet

3 Flow of Packet Device Input User Process sk_buff Skb_queue_tail
Skb_dequeue

4 2. Socket buffer Data Structure

5 주요 Field Struct sk_buff *next; Struct sk_buff *prev;
Linked-list 중에 다음 sk buff 에 대한 pointer Struct sk_buff *prev; Linked-list 중에 이전 sk buff 에 대한 pointer Struct sk_buff_head *list; 현재 sk_buff 가 속한 sk_buff_head에 대한 pointer Struct sock *sk; Queue 의 owner 인 struct sock 의 pointer Struct net_device *dev; 받거나 보낼 device pointer

6 주요 Field 각각의 layer 별 header point Union mac <- link layer
Struct ethhdr *ethernet; Union nh <- network layer Struct iphdr *iph; Struct ipv6hdr *ipv6h; Struct ipxhdr *ipxh; Union h <- transport layer Struct tcphdr *th; Struct udphdr *uh; Struct icmphdr *icmph; Struct igmphdr *igmph; Struct iphdr *ipiph; Struct spxhdr *spxh;

7 주요 Field Struct dst_entry *dst; Unsigned int len;
실제 데이터의 길이 Unsigned int data_len; 어떨때 어떤 값으로 바뀌는지는 잘모르겠음. Unsigned int truesize; 버퍼의 실제 길이 volatile char userd; 데이터가 사용자에게 넘어갔음을 나타냄 Unsigned char cloned; Header 가 복제되었음을 나타냄

8 주요 Field Unsigned short portocol; Unsigned char *head;
Device로부터 받은 패킷의 프로토콜 Unsigned char *head; 데이터 버퍼의 headerroom의 pointer Unsigned char *data; 데이터 버퍼의 data 부분의 pointer Unsigned char *tail; 데이터 버퍼의 tailroom의 pointer Unsigned char *end; 데이터 버퍼의 마지막의 pointer

9 sk_buff 의 구조 Header Room Data Tail Room truesize len
Sutuct sk_buff *next Sutuct sk_buff *prev Sutuct net_device *dev --- Union h Union nh Union mac Unsigned char *head Unsigned char *data Unsigned char *tail Unsigned char *end Header Room Link layer header Network layer header Transport layer header Data Tail Room truesize len

10 3. Socket buffer 관련 함수

11 주요 함수 struct sk_buff *alloc_skb(unsigned int size,int gfp_mask)
Head Data Tail End Tail Room size

12 주요 함수 static inline struct sk_buff *dev_alloc_skb(unsigned int length)
Data Tail Head End Head Room Tail Room 16 length

13 주요 함수 static inline void skb_reserve(struct sk_buff *skb, unsigned int len) Tail Room Head Data Tail End Tail Room Head Room Head End len Data Tail

14 주요 함수 static inline unsigned char *skb_put(struct sk_buff *skb, unsigned int len) Tail Room Head Data Tail End Tail Room Data Head End len Tail Tail Room Head Room End Data Tail Tail Room Head Room len End Data Tail

15 주요 함수 static inline unsigned char *skb_push(struct sk_buff *skb, unsigned int len) Tail Room Data Head Room End len Tail Tail Room Data Head Room End Tail

16 주요 함수 static inline void skb_trim(struct sk_buff *skb, unsigned int len) Tail Room Data Head Room len End Tail Tail Room Data Head Room End Tail

17 주요 함수 static inline unsigned char * pskb_pull(struct sk_buff *skb, unsigned int len) len Tail Room Data Head Room End Tail Tail Room Data Head Room End Tail

18 주요 함수 Sk_buff_head 의 linked list 관련 함수
static inline void skb_queue_head(struct sk_buff_head *list, struct sk_buff *newsk) Static inline void skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk) static inline struct sk_buff *skb_dequeue(struct sk_buff_head *list) static inline void skb_insert(struct sk_buff *old, struct sk_buff *newsk) static inline void skb_append(struct sk_buff *old, struct sk_buff *newsk) static inline struct sk_buff *skb_dequeue_tail(struct sk_buff_head *list)

19 주요 함수 기타 static inline int skb_headroom(const struct sk_buff *skb)
Headroom size를 반환 static inline int skb_tailroom(const struct sk_buff *skb) tailroom size를 반환 struct sk_buff *skb_clone(struct sk_buff *skb, int gfp_mask) duplicate an sk_buff struct sk_buff *skb_copy(const struct sk_buff *skb, int gfp_mask) create private copy of an sk_buff int skb_linearize(struct sk_buff *skb, int gfp_mask) keep head the same: replace data static inline void kfree_skb(struct sk_buff *skb) skb free

20 4. 끝(질의 & 응답)


Download ppt "Socket Buffer 발표자 유 종 욱 발표일 2003년 10월."

Similar presentations


Ads by Google