MCPcopy Create free account
hub / github.com/F-Stack/f-stack / IcmpAliasOut1

Function IcmpAliasOut1

freebsd/netinet/libalias/alias.c:478–520  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

476}
477
478static int
479IcmpAliasOut1(struct libalias *la, struct ip *pip, int create)
480{
481/*
482 Alias outgoing echo and timestamp requests.
483 De-alias outgoing echo and timestamp replies.
484*/
485 struct alias_link *lnk;
486 struct icmp *ic;
487
488 LIBALIAS_LOCK_ASSERT(la);
489 ic = (struct icmp *)ip_next(pip);
490
491/* Save overwritten data for when echo packet returns */
492 lnk = FindIcmpOut(la, pip->ip_src, pip->ip_dst, ic->icmp_id, create);
493 if (lnk != NULL) {
494 u_short alias_id;
495 int accumulate;
496
497 alias_id = GetAliasPort(lnk);
498
499/* Since data field is being modified, adjust ICMP checksum */
500 accumulate = ic->icmp_id;
501 accumulate -= alias_id;
502 ADJUST_CHECKSUM(accumulate, ic->icmp_cksum);
503
504/* Alias sequence number */
505 ic->icmp_id = alias_id;
506
507/* Change source address */
508 {
509 struct in_addr alias_address;
510
511 alias_address = GetAliasAddress(lnk);
512 DifferentialChecksum(&pip->ip_sum,
513 &alias_address, &pip->ip_src, 2);
514 pip->ip_src = alias_address;
515 }
516
517 return (PKT_ALIAS_OK);
518 }
519 return (PKT_ALIAS_IGNORED);
520}
521
522static int
523IcmpAliasOut2(struct libalias *la, struct ip *pip)

Callers 1

IcmpAliasOutFunction · 0.85

Calls 5

ip_nextFunction · 0.85
FindIcmpOutFunction · 0.85
GetAliasPortFunction · 0.85
GetAliasAddressFunction · 0.85
DifferentialChecksumFunction · 0.85

Tested by

no test coverage detected