Deleted Added
full compact
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}