tcp_ipv4.c (46d3ceabd8d98ed0ad10f20c595ca784e34786c5) | tcp_ipv4.c (55be7a9c6074f749d617a7fc1914c9a23505438c) |
---|---|
1/* 2 * INET An implementation of the TCP/IP protocol suite for the LINUX 3 * operating system. INET is implemented using the BSD Socket 4 * interface as the means of communication with the user level. 5 * 6 * Implementation of the Transmission Control Protocol(TCP). 7 * 8 * IPv4 specific functions --- 307 unchanged lines hidden (view full) --- 316 * clear that the old packet has been 317 * dropped. This is the new "fast" path mtu 318 * discovery. 319 */ 320 tcp_simple_retransmit(sk); 321 } /* else let the usual retransmit timer handle it */ 322} 323 | 1/* 2 * INET An implementation of the TCP/IP protocol suite for the LINUX 3 * operating system. INET is implemented using the BSD Socket 4 * interface as the means of communication with the user level. 5 * 6 * Implementation of the Transmission Control Protocol(TCP). 7 * 8 * IPv4 specific functions --- 307 unchanged lines hidden (view full) --- 316 * clear that the old packet has been 317 * dropped. This is the new "fast" path mtu 318 * discovery. 319 */ 320 tcp_simple_retransmit(sk); 321 } /* else let the usual retransmit timer handle it */ 322} 323 |
324static void do_redirect(struct sk_buff *skb, struct sock *sk) 325{ 326 struct dst_entry *dst = __sk_dst_check(sk, 0); 327 328 if (dst && dst->ops->redirect) 329 dst->ops->redirect(dst, skb); 330} 331 |
|
324/* 325 * This routine is called by the ICMP module when it gets some 326 * sort of error condition. If err < 0 then the socket should 327 * be closed and the error returned to the user. If err > 0 328 * it's just the icmp type << 8 | icmp code. After adjustment 329 * header points to the first 8 bytes of the tcp header. We need 330 * to find the appropriate port. 331 * --- 57 unchanged lines hidden (view full) --- 389 seq = ntohl(th->seq); 390 if (sk->sk_state != TCP_LISTEN && 391 !between(seq, tp->snd_una, tp->snd_nxt)) { 392 NET_INC_STATS_BH(net, LINUX_MIB_OUTOFWINDOWICMPS); 393 goto out; 394 } 395 396 switch (type) { | 332/* 333 * This routine is called by the ICMP module when it gets some 334 * sort of error condition. If err < 0 then the socket should 335 * be closed and the error returned to the user. If err > 0 336 * it's just the icmp type << 8 | icmp code. After adjustment 337 * header points to the first 8 bytes of the tcp header. We need 338 * to find the appropriate port. 339 * --- 57 unchanged lines hidden (view full) --- 397 seq = ntohl(th->seq); 398 if (sk->sk_state != TCP_LISTEN && 399 !between(seq, tp->snd_una, tp->snd_nxt)) { 400 NET_INC_STATS_BH(net, LINUX_MIB_OUTOFWINDOWICMPS); 401 goto out; 402 } 403 404 switch (type) { |
405 case ICMP_REDIRECT: 406 do_redirect(icmp_skb, sk); 407 goto out; |
|
397 case ICMP_SOURCE_QUENCH: 398 /* Just silently ignore these. */ 399 goto out; 400 case ICMP_PARAMETERPROB: 401 err = EPROTO; 402 break; 403 case ICMP_DEST_UNREACH: 404 if (code > NR_ICMP_UNREACH) --- 2244 unchanged lines hidden --- | 408 case ICMP_SOURCE_QUENCH: 409 /* Just silently ignore these. */ 410 goto out; 411 case ICMP_PARAMETERPROB: 412 err = EPROTO; 413 break; 414 case ICMP_DEST_UNREACH: 415 if (code > NR_ICMP_UNREACH) --- 2244 unchanged lines hidden --- |