alias.c (67980) | alias.c (74778) |
---|---|
1/* -*- mode: c; tab-width: 8; c-basic-indent: 4; -*- */ 2/* 3 Alias.c provides supervisory control for the functions of the 4 packet aliasing software. It consists of routines to monitor 5 TCP connection state, protocol-specific aliasing routines, 6 fragment handling and the following outside world functional 7 interfaces: SaveFragmentPtr, GetFragmentPtr, FragmentAliasIn, 8 PacketAliasIn and PacketAliasOut. --- 71 unchanged lines hidden (view full) --- 80 - Added hooks to handle PPTP. 81 82 Version 3.2 July, 2000 (salander and satoh) 83 - Added PacketUnaliasOut routine. 84 - Added hooks to handle RTSP/RTP. 85 86 See HISTORY file for additional revisions. 87 | 1/* -*- mode: c; tab-width: 8; c-basic-indent: 4; -*- */ 2/* 3 Alias.c provides supervisory control for the functions of the 4 packet aliasing software. It consists of routines to monitor 5 TCP connection state, protocol-specific aliasing routines, 6 fragment handling and the following outside world functional 7 interfaces: SaveFragmentPtr, GetFragmentPtr, FragmentAliasIn, 8 PacketAliasIn and PacketAliasOut. --- 71 unchanged lines hidden (view full) --- 80 - Added hooks to handle PPTP. 81 82 Version 3.2 July, 2000 (salander and satoh) 83 - Added PacketUnaliasOut routine. 84 - Added hooks to handle RTSP/RTP. 85 86 See HISTORY file for additional revisions. 87 |
88 $FreeBSD: head/sys/netinet/libalias/alias.c 67980 2000-10-30 17:24:12Z ru $ | 88 $FreeBSD: head/sys/netinet/libalias/alias.c 74778 2001-03-25 12:05:10Z brian $ |
89*/ 90 91#include <sys/types.h> 92 93#include <netinet/in_systm.h> 94#include <netinet/in.h> 95#include <netinet/ip.h> 96#include <netinet/ip_icmp.h> 97#include <netinet/tcp.h> 98#include <netinet/udp.h> 99 | 89*/ 90 91#include <sys/types.h> 92 93#include <netinet/in_systm.h> 94#include <netinet/in.h> 95#include <netinet/ip.h> 96#include <netinet/ip_icmp.h> 97#include <netinet/tcp.h> 98#include <netinet/udp.h> 99 |
100#include <stdio.h> 101 |
|
100#include "alias_local.h" 101#include "alias.h" 102 103#define NETBIOS_NS_PORT_NUMBER 137 104#define NETBIOS_DGM_PORT_NUMBER 138 105#define FTP_CONTROL_PORT_NUMBER 21 106#define IRC_CONTROL_PORT_NUMBER_1 6667 107#define IRC_CONTROL_PORT_NUMBER_2 6668 --- 148 unchanged lines hidden (view full) --- 256 u_short original_id; 257 int accumulate; 258 259 original_id = GetOriginalPort(link); 260 261/* Adjust ICMP checksum */ 262 accumulate = ic->icmp_id; 263 accumulate -= original_id; | 102#include "alias_local.h" 103#include "alias.h" 104 105#define NETBIOS_NS_PORT_NUMBER 137 106#define NETBIOS_DGM_PORT_NUMBER 138 107#define FTP_CONTROL_PORT_NUMBER 21 108#define IRC_CONTROL_PORT_NUMBER_1 6667 109#define IRC_CONTROL_PORT_NUMBER_2 6668 --- 148 unchanged lines hidden (view full) --- 258 u_short original_id; 259 int accumulate; 260 261 original_id = GetOriginalPort(link); 262 263/* Adjust ICMP checksum */ 264 accumulate = ic->icmp_id; 265 accumulate -= original_id; |
264 ADJUST_CHECKSUM(accumulate, ic->icmp_cksum) | 266 ADJUST_CHECKSUM(accumulate, ic->icmp_cksum); |
265 266/* Put original sequence number back in */ 267 ic->icmp_id = original_id; 268 269/* Put original address back into IP header */ 270 { 271 struct in_addr original_address; 272 --- 62 unchanged lines hidden (view full) --- 335 sptr = (u_short *) &(ip->ip_src); 336 accumulate = *sptr++; 337 accumulate += *sptr; 338 sptr = (u_short *) &original_address; 339 accumulate -= *sptr++; 340 accumulate -= *sptr; 341 accumulate += ud->uh_sport; 342 accumulate -= original_port; | 267 268/* Put original sequence number back in */ 269 ic->icmp_id = original_id; 270 271/* Put original address back into IP header */ 272 { 273 struct in_addr original_address; 274 --- 62 unchanged lines hidden (view full) --- 337 sptr = (u_short *) &(ip->ip_src); 338 accumulate = *sptr++; 339 accumulate += *sptr; 340 sptr = (u_short *) &original_address; 341 accumulate -= *sptr++; 342 accumulate -= *sptr; 343 accumulate += ud->uh_sport; 344 accumulate -= original_port; |
343 ADJUST_CHECKSUM(accumulate, ic->icmp_cksum) | 345 ADJUST_CHECKSUM(accumulate, ic->icmp_cksum); |
344 345/* Un-alias address in IP header */ 346 DifferentialChecksum(&pip->ip_sum, 347 (u_short *) &original_address, 348 (u_short *) &pip->ip_dst, 349 2); 350 pip->ip_dst = original_address; 351 --- 16 unchanged lines hidden (view full) --- 368 sptr = (u_short *) &(ip->ip_src); 369 accumulate = *sptr++; 370 accumulate += *sptr; 371 sptr = (u_short *) &original_address; 372 accumulate -= *sptr++; 373 accumulate -= *sptr; 374 accumulate += ic2->icmp_id; 375 accumulate -= original_id; | 346 347/* Un-alias address in IP header */ 348 DifferentialChecksum(&pip->ip_sum, 349 (u_short *) &original_address, 350 (u_short *) &pip->ip_dst, 351 2); 352 pip->ip_dst = original_address; 353 --- 16 unchanged lines hidden (view full) --- 370 sptr = (u_short *) &(ip->ip_src); 371 accumulate = *sptr++; 372 accumulate += *sptr; 373 sptr = (u_short *) &original_address; 374 accumulate -= *sptr++; 375 accumulate -= *sptr; 376 accumulate += ic2->icmp_id; 377 accumulate -= original_id; |
376 ADJUST_CHECKSUM(accumulate, ic->icmp_cksum) | 378 ADJUST_CHECKSUM(accumulate, ic->icmp_cksum); |
377 378/* Un-alias address in IP header */ 379 DifferentialChecksum(&pip->ip_sum, 380 (u_short *) &original_address, 381 (u_short *) &pip->ip_dst, 382 2); 383 pip->ip_dst = original_address; 384 --- 64 unchanged lines hidden (view full) --- 449 u_short alias_id; 450 int accumulate; 451 452 alias_id = GetAliasPort(link); 453 454/* Since data field is being modified, adjust ICMP checksum */ 455 accumulate = ic->icmp_id; 456 accumulate -= alias_id; | 379 380/* Un-alias address in IP header */ 381 DifferentialChecksum(&pip->ip_sum, 382 (u_short *) &original_address, 383 (u_short *) &pip->ip_dst, 384 2); 385 pip->ip_dst = original_address; 386 --- 64 unchanged lines hidden (view full) --- 451 u_short alias_id; 452 int accumulate; 453 454 alias_id = GetAliasPort(link); 455 456/* Since data field is being modified, adjust ICMP checksum */ 457 accumulate = ic->icmp_id; 458 accumulate -= alias_id; |
457 ADJUST_CHECKSUM(accumulate, ic->icmp_cksum) | 459 ADJUST_CHECKSUM(accumulate, ic->icmp_cksum); |
458 459/* Alias sequence number */ 460 ic->icmp_id = alias_id; 461 462/* Change source address */ 463 { 464 struct in_addr alias_address; 465 --- 63 unchanged lines hidden (view full) --- 529 sptr = (u_short *) &(ip->ip_dst); 530 accumulate = *sptr++; 531 accumulate += *sptr; 532 sptr = (u_short *) &alias_address; 533 accumulate -= *sptr++; 534 accumulate -= *sptr; 535 accumulate += ud->uh_dport; 536 accumulate -= alias_port; | 460 461/* Alias sequence number */ 462 ic->icmp_id = alias_id; 463 464/* Change source address */ 465 { 466 struct in_addr alias_address; 467 --- 63 unchanged lines hidden (view full) --- 531 sptr = (u_short *) &(ip->ip_dst); 532 accumulate = *sptr++; 533 accumulate += *sptr; 534 sptr = (u_short *) &alias_address; 535 accumulate -= *sptr++; 536 accumulate -= *sptr; 537 accumulate += ud->uh_dport; 538 accumulate -= alias_port; |
537 ADJUST_CHECKSUM(accumulate, ic->icmp_cksum) | 539 ADJUST_CHECKSUM(accumulate, ic->icmp_cksum); |
538 539/* 540 * Alias address in IP header if it comes from the host 541 * the original TCP/UDP packet was destined for. 542 */ 543 if (pip->ip_src.s_addr == ip->ip_dst.s_addr) { 544 DifferentialChecksum(&pip->ip_sum, 545 (u_short *) &alias_address, --- 21 unchanged lines hidden (view full) --- 567 sptr = (u_short *) &(ip->ip_dst); 568 accumulate = *sptr++; 569 accumulate += *sptr; 570 sptr = (u_short *) &alias_address; 571 accumulate -= *sptr++; 572 accumulate -= *sptr; 573 accumulate += ic2->icmp_id; 574 accumulate -= alias_id; | 540 541/* 542 * Alias address in IP header if it comes from the host 543 * the original TCP/UDP packet was destined for. 544 */ 545 if (pip->ip_src.s_addr == ip->ip_dst.s_addr) { 546 DifferentialChecksum(&pip->ip_sum, 547 (u_short *) &alias_address, --- 21 unchanged lines hidden (view full) --- 569 sptr = (u_short *) &(ip->ip_dst); 570 accumulate = *sptr++; 571 accumulate += *sptr; 572 sptr = (u_short *) &alias_address; 573 accumulate -= *sptr++; 574 accumulate -= *sptr; 575 accumulate += ic2->icmp_id; 576 accumulate -= alias_id; |
575 ADJUST_CHECKSUM(accumulate, ic->icmp_cksum) | 577 ADJUST_CHECKSUM(accumulate, ic->icmp_cksum); |
576 577/* 578 * Alias address in IP header if it comes from the host 579 * the original ICMP message was destined for. 580 */ 581 if (pip->ip_src.s_addr == ip->ip_dst.s_addr) { 582 DifferentialChecksum(&pip->ip_sum, 583 (u_short *) &alias_address, --- 167 unchanged lines hidden (view full) --- 751 accumulate = alias_port; 752 accumulate -= ud->uh_dport; 753 sptr = (u_short *) &alias_address; 754 accumulate += *sptr++; 755 accumulate += *sptr; 756 sptr = (u_short *) &original_address; 757 accumulate -= *sptr++; 758 accumulate -= *sptr; | 578 579/* 580 * Alias address in IP header if it comes from the host 581 * the original ICMP message was destined for. 582 */ 583 if (pip->ip_src.s_addr == ip->ip_dst.s_addr) { 584 DifferentialChecksum(&pip->ip_sum, 585 (u_short *) &alias_address, --- 167 unchanged lines hidden (view full) --- 753 accumulate = alias_port; 754 accumulate -= ud->uh_dport; 755 sptr = (u_short *) &alias_address; 756 accumulate += *sptr++; 757 accumulate += *sptr; 758 sptr = (u_short *) &original_address; 759 accumulate -= *sptr++; 760 accumulate -= *sptr; |
759 ADJUST_CHECKSUM(accumulate, ud->uh_sum) | 761 ADJUST_CHECKSUM(accumulate, ud->uh_sum); |
760 } 761 762/* Restore original IP address */ 763 DifferentialChecksum(&pip->ip_sum, 764 (u_short *) &original_address, 765 (u_short *) &pip->ip_dst, 766 2); 767 pip->ip_dst = original_address; --- 54 unchanged lines hidden (view full) --- 822 accumulate = ud->uh_sport; 823 accumulate -= alias_port; 824 sptr = (u_short *) &(pip->ip_src); 825 accumulate += *sptr++; 826 accumulate += *sptr; 827 sptr = (u_short *) &alias_address; 828 accumulate -= *sptr++; 829 accumulate -= *sptr; | 762 } 763 764/* Restore original IP address */ 765 DifferentialChecksum(&pip->ip_sum, 766 (u_short *) &original_address, 767 (u_short *) &pip->ip_dst, 768 2); 769 pip->ip_dst = original_address; --- 54 unchanged lines hidden (view full) --- 824 accumulate = ud->uh_sport; 825 accumulate -= alias_port; 826 sptr = (u_short *) &(pip->ip_src); 827 accumulate += *sptr++; 828 accumulate += *sptr; 829 sptr = (u_short *) &alias_address; 830 accumulate -= *sptr++; 831 accumulate -= *sptr; |
830 ADJUST_CHECKSUM(accumulate, ud->uh_sum) | 832 ADJUST_CHECKSUM(accumulate, ud->uh_sum); |
831 } 832 833/* Put alias port in UDP header */ 834 ud->uh_sport = alias_port; 835 836/* Change source address */ 837 DifferentialChecksum(&pip->ip_sum, 838 (u_short *) &alias_address, --- 240 unchanged lines hidden (view full) --- 1079 accumulate += *sptr; 1080 tc->th_seq = htonl(ntohl(tc->th_seq) + delta); 1081 sptr = (u_short *) &tc->th_seq; 1082 accumulate -= *sptr++; 1083 accumulate -= *sptr; 1084 } 1085 } 1086 | 833 } 834 835/* Put alias port in UDP header */ 836 ud->uh_sport = alias_port; 837 838/* Change source address */ 839 DifferentialChecksum(&pip->ip_sum, 840 (u_short *) &alias_address, --- 240 unchanged lines hidden (view full) --- 1081 accumulate += *sptr; 1082 tc->th_seq = htonl(ntohl(tc->th_seq) + delta); 1083 sptr = (u_short *) &tc->th_seq; 1084 accumulate -= *sptr++; 1085 accumulate -= *sptr; 1086 } 1087 } 1088 |
1087 ADJUST_CHECKSUM(accumulate, tc->th_sum) | 1089 ADJUST_CHECKSUM(accumulate, tc->th_sum); |
1088 1089/* Change source address */ 1090 sptr = (u_short *) &(pip->ip_src); 1091 accumulate = *sptr++; 1092 accumulate += *sptr; 1093 pip->ip_src = alias_address; 1094 sptr = (u_short *) &(pip->ip_src); 1095 accumulate -= *sptr++; 1096 accumulate -= *sptr; 1097 | 1090 1091/* Change source address */ 1092 sptr = (u_short *) &(pip->ip_src); 1093 accumulate = *sptr++; 1094 accumulate += *sptr; 1095 pip->ip_src = alias_address; 1096 sptr = (u_short *) &(pip->ip_src); 1097 accumulate -= *sptr++; 1098 accumulate -= *sptr; 1099 |
1098 ADJUST_CHECKSUM(accumulate, pip->ip_sum) | 1100 ADJUST_CHECKSUM(accumulate, pip->ip_sum); |
1099 1100 return(PKT_ALIAS_OK); 1101 } 1102 return(PKT_ALIAS_IGNORED); 1103} 1104 1105 1106 --- 363 unchanged lines hidden (view full) --- 1470 accumulate += *sptr; 1471 sptr = (u_short *) &original_address; 1472 accumulate -= *sptr++; 1473 accumulate -= *sptr; 1474 1475 if (pip->ip_p == IPPROTO_UDP) { 1476 accumulate += ud->uh_sport; 1477 accumulate -= original_port; | 1101 1102 return(PKT_ALIAS_OK); 1103 } 1104 return(PKT_ALIAS_IGNORED); 1105} 1106 1107 1108 --- 363 unchanged lines hidden (view full) --- 1472 accumulate += *sptr; 1473 sptr = (u_short *) &original_address; 1474 accumulate -= *sptr++; 1475 accumulate -= *sptr; 1476 1477 if (pip->ip_p == IPPROTO_UDP) { 1478 accumulate += ud->uh_sport; 1479 accumulate -= original_port; |
1478 ADJUST_CHECKSUM(accumulate, ud->uh_sum) | 1480 ADJUST_CHECKSUM(accumulate, ud->uh_sum); |
1479 } else { 1480 accumulate += tc->th_sport; 1481 accumulate -= original_port; | 1481 } else { 1482 accumulate += tc->th_sport; 1483 accumulate -= original_port; |
1482 ADJUST_CHECKSUM(accumulate, tc->th_sum) | 1484 ADJUST_CHECKSUM(accumulate, tc->th_sum); |
1483 } 1484 1485 /* Adjust IP checksum */ 1486 DifferentialChecksum(&pip->ip_sum, 1487 (u_short *) &original_address, 1488 (u_short *) &pip->ip_src, 1489 2); 1490 --- 20 unchanged lines hidden (view full) --- 1511 sptr = (u_short *) &(pip->ip_src); 1512 accumulate = *sptr++; 1513 accumulate += *sptr; 1514 sptr = (u_short *) &original_address; 1515 accumulate -= *sptr++; 1516 accumulate -= *sptr; 1517 accumulate += ic->icmp_id; 1518 accumulate -= original_id; | 1485 } 1486 1487 /* Adjust IP checksum */ 1488 DifferentialChecksum(&pip->ip_sum, 1489 (u_short *) &original_address, 1490 (u_short *) &pip->ip_src, 1491 2); 1492 --- 20 unchanged lines hidden (view full) --- 1513 sptr = (u_short *) &(pip->ip_src); 1514 accumulate = *sptr++; 1515 accumulate += *sptr; 1516 sptr = (u_short *) &original_address; 1517 accumulate -= *sptr++; 1518 accumulate -= *sptr; 1519 accumulate += ic->icmp_id; 1520 accumulate -= original_id; |
1519 ADJUST_CHECKSUM(accumulate, ic->icmp_cksum) | 1521 ADJUST_CHECKSUM(accumulate, ic->icmp_cksum); |
1520 1521 /* Adjust IP checksum */ 1522 DifferentialChecksum(&pip->ip_sum, 1523 (u_short *) &original_address, 1524 (u_short *) &pip->ip_src, 1525 2); 1526 1527 /* Un-alias source address and port number */ 1528 pip->ip_src = original_address; 1529 ic->icmp_id = original_id; 1530 1531 iresult = PKT_ALIAS_OK; 1532 } 1533 } 1534 return(iresult); 1535 1536} | 1522 1523 /* Adjust IP checksum */ 1524 DifferentialChecksum(&pip->ip_sum, 1525 (u_short *) &original_address, 1526 (u_short *) &pip->ip_src, 1527 2); 1528 1529 /* Un-alias source address and port number */ 1530 pip->ip_src = original_address; 1531 ic->icmp_id = original_id; 1532 1533 iresult = PKT_ALIAS_OK; 1534 } 1535 } 1536 return(iresult); 1537 1538} |