- isop->isop_faddr.siso_family = AF_ISO;
- if( name != (struct sockaddr_iso *)0 ) {
- bcopy((caddr_t)&name->siso_addr,
- (caddr_t)&isop->isop_faddr.siso_addr, sizeof(struct iso_addr));
- }
- IFDEBUG(D_TPISO)
- printf("PUT TP_FOREIGN addr\n");
- dump_isoaddr(&isop->isop_faddr);
- ENDDEBUG
+ sisop = &isop->isop_faddr;
+ backup = &isop->isop_sfaddr;
+ }
+ siso = ((*sisop == 0) ? (*sisop = backup) : *sisop);
+ IFDEBUG(D_TPISO)
+ printf("ISO_PUTNETADDR\n");
+ dump_isoaddr(isop->isop_faddr);
+ ENDDEBUG
+ siso->siso_addr = name->siso_addr;
+}
+
+/*
+ * CALLED FROM:
+ * tp_input() when a connection is being established by an
+ * incoming CR_TPDU, and considered for interception.
+ *
+ * FUNCTION and ARGUMENTS:
+ * compare a whole net addr from a struct sockaddr (name),
+ * with that implicitly stored in an isopcb (isop).
+ * The argument (which) takes values TP_LOCAL or TP_FOREIGN.
+ */
+iso_cmpnetaddr(isop, name, which)
+ register struct isopcb *isop;
+ register struct sockaddr_iso *name;
+ int which;
+{
+ struct sockaddr_iso **sisop, *backup;
+ register struct sockaddr_iso *siso;
+
+ switch (which) {
+ default:
+ printf("iso_cmpnetaddr: should panic\n");
+ return 0;
+ case TP_LOCAL:
+ sisop = &isop->isop_laddr;
+ backup = &isop->isop_sladdr;
+ break;
+ case TP_FOREIGN:
+ sisop = &isop->isop_faddr;
+ backup = &isop->isop_sfaddr;