Date: Thu, 19 Jun 2008 20:20:51 GMT From: Gleb Kurtsou <gk@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 143785 for review Message-ID: <200806192020.m5JKKpTY059839@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=143785 Change 143785 by gk@gk_h1 on 2008/06/19 20:20:05 IFC Affected files ... .. //depot/projects/soc2008/gk_l2filter/sys-net/if_tap.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_tun.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp.h#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_asconf.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_auth.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_bsd_addr.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_bsd_addr.h#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_cc_functions.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_header.h#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_indata.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_input.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_lock_bsd.h#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_os_bsd.h#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_output.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_pcb.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_pcb.h#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_peeloff.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_sysctl.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_sysctl.h#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_timer.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_uio.h#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_usrreq.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_var.h#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctputil.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/tcp_lro.c#1 branch .. //depot/projects/soc2008/gk_l2filter/sys-netinet/tcp_lro.h#1 branch .. //depot/projects/soc2008/gk_l2filter/sys-netinet/tcp_syncache.c#2 integrate Differences ... ==== //depot/projects/soc2008/gk_l2filter/sys-net/if_tap.c#2 (text+ko) ==== @@ -31,7 +31,7 @@ */ /* - * $FreeBSD: src/sys/net/if_tap.c,v 1.72 2008/04/15 16:54:39 emax Exp $ + * $FreeBSD: src/sys/net/if_tap.c,v 1.73 2008/06/11 18:55:19 ed Exp $ * $Id: if_tap.c,v 0.21 2000/07/23 21:46:02 max Exp $ */ @@ -132,7 +132,7 @@ static struct cdevsw tap_cdevsw = { .d_version = D_VERSION, - .d_flags = D_PSEUDO | D_NEEDGIANT, + .d_flags = D_PSEUDO | D_NEEDGIANT | D_NEEDMINOR, .d_open = tapopen, .d_close = tapclose, .d_read = tapread, ==== //depot/projects/soc2008/gk_l2filter/sys-net/if_tun.c#2 (text+ko) ==== @@ -13,7 +13,7 @@ * UCL. This driver is based much more on read/write/poll mode of * operation though. * - * $FreeBSD: src/sys/net/if_tun.c,v 1.164 2007/10/24 19:03:57 rwatson Exp $ + * $FreeBSD: src/sys/net/if_tun.c,v 1.165 2008/06/11 18:55:19 ed Exp $ */ #include "opt_atalk.h" @@ -162,7 +162,7 @@ static struct cdevsw tun_cdevsw = { .d_version = D_VERSION, - .d_flags = D_PSEUDO | D_NEEDGIANT, + .d_flags = D_PSEUDO | D_NEEDGIANT | D_NEEDMINOR, .d_open = tunopen, .d_close = tunclose, .d_read = tunread, ==== //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp.h#2 (text+ko) ==== @@ -30,13 +30,16 @@ /* $KAME: sctp.h,v 1.18 2005/03/06 16:04:16 itojun Exp $ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/netinet/sctp.h,v 1.24 2008/05/20 13:47:44 rrs Exp $"); +__FBSDID("$FreeBSD: src/sys/netinet/sctp.h,v 1.25 2008/06/14 07:58:05 rrs Exp $"); #ifndef _NETINET_SCTP_H_ #define _NETINET_SCTP_H_ #include <sys/types.h> + +#define SCTP_PACKED __attribute__((packed)) + /* * SCTP protocol - RFC2960. */ @@ -46,27 +49,25 @@ uint32_t v_tag; /* verification tag of packet */ uint32_t checksum; /* Adler32 C-Sum */ /* chunks follow... */ -} +} SCTP_PACKED; -__attribute__((packed)); - /* * SCTP Chunks */ - struct sctp_chunkhdr { - uint8_t chunk_type; /* chunk type */ - uint8_t chunk_flags; /* chunk flags */ - uint16_t chunk_length; /* chunk length */ - /* optional params follow */ - } __attribute__((packed)); +struct sctp_chunkhdr { + uint8_t chunk_type; /* chunk type */ + uint8_t chunk_flags; /* chunk flags */ + uint16_t chunk_length; /* chunk length */ + /* optional params follow */ +} SCTP_PACKED; /* * SCTP chunk parameters */ - struct sctp_paramhdr { - uint16_t param_type; /* parameter type */ - uint16_t param_length; /* parameter length */ - } __attribute__((packed)); +struct sctp_paramhdr { + uint16_t param_type; /* parameter type */ + uint16_t param_length; /* parameter length */ +} SCTP_PACKED; /* * user socket options: socket API defined @@ -303,49 +304,42 @@ /* * error cause parameters (user visisble) */ - struct sctp_error_cause { - uint16_t code; - uint16_t length; - /* optional cause-specific info may follow */ - } __attribute__((packed)); +struct sctp_error_cause { + uint16_t code; + uint16_t length; + /* optional cause-specific info may follow */ +} SCTP_PACKED; - struct sctp_error_invalid_stream { - struct sctp_error_cause cause; /* code=SCTP_ERROR_INVALID_STRE - * AM */ - uint16_t stream_id; /* stream id of the DATA in error */ - uint16_t reserved; - } __attribute__((packed)); +struct sctp_error_invalid_stream { + struct sctp_error_cause cause; /* code=SCTP_ERROR_INVALID_STREAM */ + uint16_t stream_id; /* stream id of the DATA in error */ + uint16_t reserved; +} SCTP_PACKED; - struct sctp_error_missing_param { - struct sctp_error_cause cause; /* code=SCTP_ERROR_MISSING_PARA - * M */ - uint32_t num_missing_params; /* number of missing - * parameters */ - /* uint16_t param_type's follow */ - } __attribute__((packed)); +struct sctp_error_missing_param { + struct sctp_error_cause cause; /* code=SCTP_ERROR_MISSING_PARAM */ + uint32_t num_missing_params; /* number of missing parameters */ + /* uint16_t param_type's follow */ +} SCTP_PACKED; - struct sctp_error_stale_cookie { - struct sctp_error_cause cause; /* code=SCTP_ERROR_STALE_COOKIE - * */ - uint32_t stale_time; /* time in usec of staleness */ - } __attribute__((packed)); +struct sctp_error_stale_cookie { + struct sctp_error_cause cause; /* code=SCTP_ERROR_STALE_COOKIE */ + uint32_t stale_time; /* time in usec of staleness */ +} SCTP_PACKED; - struct sctp_error_out_of_resource { - struct sctp_error_cause cause; /* code=SCTP_ERROR_OUT_OF_RESOU - * RCES */ - } __attribute__((packed)); +struct sctp_error_out_of_resource { + struct sctp_error_cause cause; /* code=SCTP_ERROR_OUT_OF_RESOURCES */ +} SCTP_PACKED; - struct sctp_error_unresolv_addr { - struct sctp_error_cause cause; /* code=SCTP_ERROR_UNRESOLVABLE - * _ADDR */ +struct sctp_error_unresolv_addr { + struct sctp_error_cause cause; /* code=SCTP_ERROR_UNRESOLVABLE_ADDR */ - } __attribute__((packed)); +} SCTP_PACKED; - struct sctp_error_unrecognized_chunk { - struct sctp_error_cause cause; /* code=SCTP_ERROR_UNRECOG_CHUN - * K */ - struct sctp_chunkhdr ch; /* header from chunk in error */ - } __attribute__((packed)); +struct sctp_error_unrecognized_chunk { + struct sctp_error_cause cause; /* code=SCTP_ERROR_UNRECOG_CHUNK */ + struct sctp_chunkhdr ch;/* header from chunk in error */ +} SCTP_PACKED; /* * Main SCTP chunk types we place these here so natd and f/w's in user land @@ -401,18 +395,18 @@ * in sat */ /* Data Chuck Specific Flags */ -#define SCTP_DATA_FRAG_MASK 0x03 -#define SCTP_DATA_MIDDLE_FRAG 0x00 -#define SCTP_DATA_LAST_FRAG 0x01 -#define SCTP_DATA_FIRST_FRAG 0x02 -#define SCTP_DATA_NOT_FRAG 0x03 -#define SCTP_DATA_UNORDERED 0x04 - +#define SCTP_DATA_FRAG_MASK 0x03 +#define SCTP_DATA_MIDDLE_FRAG 0x00 +#define SCTP_DATA_LAST_FRAG 0x01 +#define SCTP_DATA_FIRST_FRAG 0x02 +#define SCTP_DATA_NOT_FRAG 0x03 +#define SCTP_DATA_UNORDERED 0x04 +#define SCTP_DATA_SACK_IMMEDIATELY 0x08 /* ECN Nonce: SACK Chunk Specific Flags */ -#define SCTP_SACK_NONCE_SUM 0x01 +#define SCTP_SACK_NONCE_SUM 0x01 /* CMT DAC algorithm SACK flag */ -#define SCTP_SACK_CMT_DAC 0x80 +#define SCTP_SACK_CMT_DAC 0x80 /* * PCB flags (in sctp_flags bitmask). @@ -541,4 +535,6 @@ +#undef SCTP_PACKED + #endif /* !_NETINET_SCTP_H_ */ ==== //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_asconf.c#2 (text+ko) ==== @@ -31,7 +31,7 @@ /* $KAME: sctp_asconf.c,v 1.24 2005/03/06 16:04:16 itojun Exp $ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/netinet/sctp_asconf.c,v 1.36 2008/05/20 13:47:44 rrs Exp $"); +__FBSDID("$FreeBSD: src/sys/netinet/sctp_asconf.c,v 1.37 2008/06/14 07:58:05 rrs Exp $"); #include <netinet/sctp_os.h> #include <netinet/sctp_var.h> #include <netinet/sctp_sysctl.h> @@ -264,7 +264,7 @@ } /* end switch */ /* if 0.0.0.0/::0, add the source address instead */ - if (zero_address && sctp_nat_friendly) { + if (zero_address && SCTP_BASE_SYSCTL(sctp_nat_friendly)) { sa = (struct sockaddr *)&sa_source; sctp_asconf_get_source_ip(m, sa); SCTPDBG(SCTP_DEBUG_ASCONF1, @@ -416,7 +416,7 @@ return m_reply; } /* if deleting 0.0.0.0/::0, delete all addresses except src addr */ - if (zero_address && sctp_nat_friendly) { + if (zero_address && SCTP_BASE_SYSCTL(sctp_nat_friendly)) { result = sctp_asconf_del_remote_addrs_except(stcb, (struct sockaddr *)&sa_source); @@ -534,7 +534,7 @@ } /* if 0.0.0.0/::0, use the source address instead */ - if (zero_address && sctp_nat_friendly) { + if (zero_address && SCTP_BASE_SYSCTL(sctp_nat_friendly)) { sa = (struct sockaddr *)&sa_source; sctp_asconf_get_source_ip(m, sa); SCTPDBG(SCTP_DEBUG_ASCONF1, @@ -667,7 +667,7 @@ if (ack->data != NULL) { sctp_m_freem(ack->data); } - SCTP_ZONE_FREE(sctppcbinfo.ipi_zone_asconf_ack, ack); + SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_asconf_ack), ack); ack = ack_next; } } @@ -814,7 +814,7 @@ send_reply: ack_cp->ch.chunk_length = htons(ack_cp->ch.chunk_length); /* save the ASCONF-ACK reply */ - ack = SCTP_ZONE_GET(sctppcbinfo.ipi_zone_asconf_ack, + ack = SCTP_ZONE_GET(SCTP_BASE_INFO(ipi_zone_asconf_ack), struct sctp_asconf_ack); if (ack == NULL) { sctp_m_freem(m_ack); @@ -1392,7 +1392,7 @@ TAILQ_INSERT_TAIL(&stcb->asoc.asconf_queue, aa, next); #ifdef SCTP_DEBUG - if (sctp_debug_on && SCTP_DEBUG_ASCONF2) { + if (SCTP_BASE_SYSCTL(sctp_debug_on) && SCTP_DEBUG_ASCONF2) { if (type == SCTP_ADD_IP_ADDRESS) { SCTP_PRINTF("asconf_queue_mgmt: inserted asconf ADD_IP_ADDRESS: "); SCTPDBG_ADDR(SCTP_DEBUG_ASCONF2, sa); @@ -1479,7 +1479,7 @@ net->error_count = 0; } stcb->asoc.overall_error_count = 0; - if (sctp_logging_level & SCTP_THRESHOLD_LOGGING) { + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_THRESHOLD_LOGGING) { sctp_misc_ints(SCTP_THRESHOLD_CLEAR, stcb->asoc.overall_error_count, 0, @@ -2336,7 +2336,7 @@ ifa->localifa_flags &= ~SCTP_ADDR_DEFER_USE; } sctp_free_ifa(ifa); - SCTP_ZONE_FREE(sctppcbinfo.ipi_zone_laddr, l); + SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_laddr), l); SCTP_DECR_LADDR_COUNT(); l = l_next; } @@ -2392,7 +2392,7 @@ struct sctp_inpcb *inp; /* go through all our PCB's */ - LIST_FOREACH(inp, &sctppcbinfo.listhead, sctp_list) { + LIST_FOREACH(inp, &SCTP_BASE_INFO(listhead), sctp_list) { struct sctp_tcb *stcb; /* process for all associations for this endpoint */ @@ -3188,7 +3188,7 @@ SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_ASCONF, ENOMEM); return (ENOMEM); } - wi = SCTP_ZONE_GET(sctppcbinfo.ipi_zone_laddr, + wi = SCTP_ZONE_GET(SCTP_BASE_INFO(ipi_zone_laddr), struct sctp_laddr); if (wi == NULL) { SCTP_FREE(asc, SCTP_M_ASC_IT); @@ -3203,7 +3203,7 @@ if (inp->laddr_count < 2) { /* can't delete the last local address */ SCTP_FREE(asc, SCTP_M_ASC_IT); - SCTP_ZONE_FREE(sctppcbinfo.ipi_zone_laddr, wi); + SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_laddr), wi); SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_ASCONF, EINVAL); return (EINVAL); } ==== //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_auth.c#2 (text+ko) ==== @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/netinet/sctp_auth.c,v 1.19 2008/01/28 10:31:12 rrs Exp $"); +__FBSDID("$FreeBSD: src/sys/netinet/sctp_auth.c,v 1.20 2008/06/14 07:58:05 rrs Exp $"); #include <netinet/sctp_os.h> #include <netinet/sctp.h> @@ -43,8 +43,8 @@ #include <netinet/sctp_auth.h> #ifdef SCTP_DEBUG -#define SCTP_AUTH_DEBUG (sctp_debug_on & SCTP_DEBUG_AUTH1) -#define SCTP_AUTH_DEBUG2 (sctp_debug_on & SCTP_DEBUG_AUTH2) +#define SCTP_AUTH_DEBUG (SCTP_BASE_SYSCTL(sctp_debug_on) & SCTP_DEBUG_AUTH1) +#define SCTP_AUTH_DEBUG2 (SCTP_BASE_SYSCTL(sctp_debug_on) & SCTP_DEBUG_AUTH2) #endif /* SCTP_DEBUG */ @@ -1988,7 +1988,7 @@ "SCTP: peer sent chunk list w/o AUTH\n"); return (-1); } - if (!sctp_asconf_auth_nochk && peer_supports_asconf && + if (!SCTP_BASE_SYSCTL(sctp_asconf_auth_nochk) && peer_supports_asconf && !peer_supports_auth) { SCTPDBG(SCTP_DEBUG_AUTH1, "SCTP: peer supports ASCONF but not AUTH\n"); ==== //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_bsd_addr.c#2 (text+ko) ==== @@ -31,7 +31,7 @@ /* $KAME: sctp_output.c,v 1.46 2005/03/06 16:04:17 itojun Exp $ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/netinet/sctp_bsd_addr.c,v 1.18 2008/04/16 17:24:18 rrs Exp $"); +__FBSDID("$FreeBSD: src/sys/netinet/sctp_bsd_addr.c,v 1.19 2008/06/14 07:58:05 rrs Exp $"); #include <netinet/sctp_os.h> #include <netinet/sctp_var.h> @@ -48,7 +48,6 @@ #include <netinet/sctp_indata.h> #include <sys/unistd.h> - /* Declare all of our malloc named types */ /* Note to Michael/Peter for mac-os, @@ -85,17 +84,17 @@ void sctp_wakeup_iterator(void) { - wakeup(&sctppcbinfo.iterator_running); + wakeup(&SCTP_BASE_INFO(iterator_running)); } static void sctp_iterator_thread(void *v) { SCTP_IPI_ITERATOR_WQ_LOCK(); - sctppcbinfo.iterator_running = 0; + SCTP_BASE_INFO(iterator_running) = 0; while (1) { - msleep(&sctppcbinfo.iterator_running, - &sctppcbinfo.ipi_iterator_wq_mtx, + msleep(&SCTP_BASE_INFO(iterator_running), + &SCTP_BASE_INFO(ipi_iterator_wq_mtx), 0, "waiting_for_work", 0); sctp_iterator_worker(); } @@ -108,7 +107,7 @@ ret = kproc_create(sctp_iterator_thread, (void *)NULL, - &sctppcbinfo.thread_proc, + &SCTP_BASE_INFO(thread_proc), RFPROC, SCTP_KTHREAD_PAGES, SCTP_KTRHEAD_NAME); @@ -172,6 +171,7 @@ case IFT_PPP: case IFT_LOOP: case IFT_SLIP: + case IFT_GIF: case IFT_IP: case IFT_IPOVERCDLC: case IFT_IPOVERCLAW: @@ -185,6 +185,7 @@ return (result); } + static void sctp_init_ifns_for_vrf(int vrfid) { @@ -204,20 +205,16 @@ if (ifa->ifa_addr == NULL) { continue; } - if ((ifa->ifa_addr->sa_family != AF_INET) && - (ifa->ifa_addr->sa_family != AF_INET6) - ) { + if ((ifa->ifa_addr->sa_family != AF_INET) && (ifa->ifa_addr->sa_family != AF_INET6)) { /* non inet/inet6 skip */ continue; } if (ifa->ifa_addr->sa_family == AF_INET6) { - ifa6 = (struct in6_ifaddr *)ifa; - ifa_flags = ifa6->ia6_flags; if (IN6_IS_ADDR_UNSPECIFIED(&((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr)) { /* skip unspecifed addresses */ continue; } - } else if (ifa->ifa_addr->sa_family == AF_INET) { + } else { if (((struct sockaddr_in *)ifa->ifa_addr)->sin_addr.s_addr == 0) { continue; } @@ -226,26 +223,23 @@ /* non desired type */ continue; } - if ((ifa->ifa_addr->sa_family == AF_INET6) || - (ifa->ifa_addr->sa_family == AF_INET)) { - if (ifa->ifa_addr->sa_family == AF_INET6) { - ifa6 = (struct in6_ifaddr *)ifa; - ifa_flags = ifa6->ia6_flags; - } else { - ifa_flags = 0; - } - sctp_ifa = sctp_add_addr_to_vrf(vrfid, - (void *)ifn, - ifn->if_index, - ifn->if_type, - ifn->if_xname, - (void *)ifa, - ifa->ifa_addr, - ifa_flags, 0 - ); - if (sctp_ifa) { - sctp_ifa->localifa_flags &= ~SCTP_ADDR_DEFER_USE; - } + if (ifa->ifa_addr->sa_family == AF_INET6) { + ifa6 = (struct in6_ifaddr *)ifa; + ifa_flags = ifa6->ia6_flags; + } else { + ifa_flags = 0; + } + sctp_ifa = sctp_add_addr_to_vrf(vrfid, + (void *)ifn, + ifn->if_index, + ifn->if_type, + ifn->if_xname, + (void *)ifa, + ifa->ifa_addr, + ifa_flags, + 0); + if (sctp_ifa) { + sctp_ifa->localifa_flags &= ~SCTP_ADDR_DEFER_USE; } } } @@ -269,24 +263,20 @@ sctp_init_ifns_for_vrf(vrfid); } -static uint8_t first_time = 0; - - void sctp_addr_change(struct ifaddr *ifa, int cmd) { struct sctp_ifa *ifap = NULL; uint32_t ifa_flags = 0; - struct in6_ifaddr *ifa6; /* * BSD only has one VRF, if this changes we will need to hook in the * right things here to get the id to pass to the address managment * routine. */ - if (first_time == 0) { + if (SCTP_BASE_VAR(first_time) == 0) { /* Special test to see if my ::1 will showup with this */ - first_time = 1; + SCTP_BASE_VAR(first_time) = 1; sctp_init_ifns_for_vrf(SCTP_DEFAULT_VRFID); } if ((cmd != RTM_ADD) && (cmd != RTM_DELETE)) { @@ -296,24 +286,22 @@ if (ifa->ifa_addr == NULL) { return; } - if ((ifa->ifa_addr->sa_family != AF_INET) && - (ifa->ifa_addr->sa_family != AF_INET6) - ) { + if ((ifa->ifa_addr->sa_family != AF_INET) && (ifa->ifa_addr->sa_family != AF_INET6)) { /* non inet/inet6 skip */ return; } if (ifa->ifa_addr->sa_family == AF_INET6) { - ifa6 = (struct in6_ifaddr *)ifa; - ifa_flags = ifa6->ia6_flags; + ifa_flags = ((struct in6_ifaddr *)ifa)->ia6_flags; if (IN6_IS_ADDR_UNSPECIFIED(&((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr)) { /* skip unspecifed addresses */ return; } - } else if (ifa->ifa_addr->sa_family == AF_INET) { + } else { if (((struct sockaddr_in *)ifa->ifa_addr)->sin_addr.s_addr == 0) { return; } } + if (sctp_is_desired_interface_type(ifa) == 0) { /* non desired type */ return; @@ -323,7 +311,7 @@ ifa->ifa_ifp->if_index, ifa->ifa_ifp->if_type, ifa->ifa_ifp->if_xname, (void *)ifa, ifa->ifa_addr, ifa_flags, 1); - } else if (cmd == RTM_DELETE) { + } else { sctp_del_addr_from_vrf(SCTP_DEFAULT_VRFID, ifa->ifa_addr, ifa->ifa_ifp->if_index, @@ -336,6 +324,21 @@ } } +void + sctp_add_or_del_interfaces(int (*pred) (struct ifnet *), int add){ + struct ifnet *ifn; + struct ifaddr *ifa; + + TAILQ_FOREACH(ifn, &ifnet, if_list) { + if (!(*pred) (ifn)) { + continue; + } + TAILQ_FOREACH(ifa, &ifn->if_addrlist, ifa_list) { + sctp_addr_change(ifa, add ? RTM_ADD : RTM_DELETE); + } + } +} + struct mbuf * sctp_get_mbuf_for_msg(unsigned int space_needed, int want_header, int how, int allonebuf, int type) @@ -368,7 +371,7 @@ SCTP_BUF_NEXT(m) = NULL; } #ifdef SCTP_MBUF_LOGGING - if (sctp_logging_level & SCTP_MBUF_LOGGING_ENABLE) { + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_MBUF_LOGGING_ENABLE) { if (SCTP_BUF_IS_EXTENDED(m)) { sctp_log_mb(m, SCTP_MBUF_IALLOC); } @@ -379,12 +382,6 @@ #ifdef SCTP_PACKET_LOGGING - -int packet_log_writers = 0; -int packet_log_end = 0; -uint8_t packet_log_buffer[SCTP_PACKET_LOG_SIZE]; - - void sctp_packet_log(struct mbuf *m, int length) { @@ -406,40 +403,40 @@ /* Can't log this packet I have not a buffer big enough */ return; } - if (length < (SCTP_MIN_V4_OVERHEAD + sizeof(struct sctp_cookie_ack_chunk))) { + if (length < (int)(SCTP_MIN_V4_OVERHEAD + sizeof(struct sctp_cookie_ack_chunk))) { return; } - atomic_add_int(&packet_log_writers, 1); + atomic_add_int(&SCTP_BASE_VAR(packet_log_writers), 1); try_again: - if (packet_log_writers > SCTP_PKTLOG_WRITERS_NEED_LOCK) { + if (SCTP_BASE_VAR(packet_log_writers) > SCTP_PKTLOG_WRITERS_NEED_LOCK) { SCTP_IP_PKTLOG_LOCK(); grabbed_lock = 1; again_locked: - value = packet_log_end; - newval = packet_log_end + total_len; + value = SCTP_BASE_VAR(packet_log_end); + newval = SCTP_BASE_VAR(packet_log_end) + total_len; if (newval >= SCTP_PACKET_LOG_SIZE) { /* we wrapped */ thisbegin = 0; thisend = total_len; } else { - thisbegin = packet_log_end; + thisbegin = SCTP_BASE_VAR(packet_log_end); thisend = newval; } - if (!(atomic_cmpset_int(&packet_log_end, value, thisend))) { + if (!(atomic_cmpset_int(&SCTP_BASE_VAR(packet_log_end), value, thisend))) { goto again_locked; } } else { - value = packet_log_end; - newval = packet_log_end + total_len; + value = SCTP_BASE_VAR(packet_log_end); + newval = SCTP_BASE_VAR(packet_log_end) + total_len; if (newval >= SCTP_PACKET_LOG_SIZE) { /* we wrapped */ thisbegin = 0; thisend = total_len; } else { - thisbegin = packet_log_end; + thisbegin = SCTP_BASE_VAR(packet_log_end); thisend = newval; } - if (!(atomic_cmpset_int(&packet_log_end, value, thisend))) { + if (!(atomic_cmpset_int(&SCTP_BASE_VAR(packet_log_end), value, thisend))) { goto try_again; } } @@ -448,14 +445,14 @@ printf("Insanity stops a log thisbegin:%d thisend:%d writers:%d lock:%d end:%d\n", thisbegin, thisend, - packet_log_writers, + SCTP_BASE_VAR(packet_log_writers), grabbed_lock, - packet_log_end); - packet_log_end = 0; + SCTP_BASE_VAR(packet_log_end)); + SCTP_BASE_VAR(packet_log_end) = 0; goto no_log; } - lenat = (int *)&packet_log_buffer[thisbegin]; + lenat = (int *)&SCTP_BASE_VAR(packet_log_buffer)[thisbegin]; *lenat = total_len; lenat++; *lenat = value; @@ -465,7 +462,7 @@ *tick_tock = sctp_get_tick_count(); copyto = (void *)lenat; thisone = thisend - sizeof(int); - lenat = (int *)&packet_log_buffer[thisone]; + lenat = (int *)&SCTP_BASE_VAR(packet_log_buffer)[thisone]; *lenat = thisbegin; if (grabbed_lock) { SCTP_IP_PKTLOG_UNLOCK(); @@ -476,7 +473,7 @@ if (grabbed_lock) { SCTP_IP_PKTLOG_UNLOCK(); } - atomic_subtract_int(&packet_log_writers, 1); + atomic_subtract_int(&SCTP_BASE_VAR(packet_log_writers), 1); } @@ -492,14 +489,14 @@ int did_delay = 0; tocopy = length; - if (length < (2 * sizeof(int))) { + if (length < (int)(2 * sizeof(int))) { /* not enough room */ return (0); } if (SCTP_PKTLOG_WRITERS_NEED_LOCK) { - atomic_add_int(&packet_log_writers, SCTP_PKTLOG_WRITERS_NEED_LOCK); + atomic_add_int(&SCTP_BASE_VAR(packet_log_writers), SCTP_PKTLOG_WRITERS_NEED_LOCK); again: - if ((did_delay == 0) && (packet_log_writers != SCTP_PKTLOG_WRITERS_NEED_LOCK)) { + if ((did_delay == 0) && (SCTP_BASE_VAR(packet_log_writers) != SCTP_PKTLOG_WRITERS_NEED_LOCK)) { /* * we delay here for just a moment hoping the * writer(s) that were present when we entered will @@ -515,12 +512,12 @@ } SCTP_IP_PKTLOG_LOCK(); lenat = (int *)target; - *lenat = packet_log_end; + *lenat = SCTP_BASE_VAR(packet_log_end); lenat++; this_copy = min((length - sizeof(int)), SCTP_PACKET_LOG_SIZE); - memcpy((void *)lenat, (void *)packet_log_buffer, this_copy); + memcpy((void *)lenat, (void *)SCTP_BASE_VAR(packet_log_buffer), this_copy); if (SCTP_PKTLOG_WRITERS_NEED_LOCK) { - atomic_subtract_int(&packet_log_writers, + atomic_subtract_int(&SCTP_BASE_VAR(packet_log_writers), SCTP_PKTLOG_WRITERS_NEED_LOCK); } SCTP_IP_PKTLOG_UNLOCK(); ==== //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_bsd_addr.h#2 (text+ko) ==== @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/netinet/sctp_bsd_addr.h,v 1.7 2008/04/16 17:24:18 rrs Exp $"); +__FBSDID("$FreeBSD: src/sys/netinet/sctp_bsd_addr.h,v 1.8 2008/06/14 07:58:05 rrs Exp $"); #ifndef __sctp_bsd_addr_h__ #define __sctp_bsd_addr_h__ @@ -58,5 +58,7 @@ void sctp_addr_change(struct ifaddr *ifa, int cmd); +void sctp_add_or_del_interfaces(int (*pred) (struct ifnet *), int add); + #endif #endif ==== //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_cc_functions.c#2 (text+ko) ==== @@ -43,7 +43,7 @@ #include <netinet/sctp_asconf.h> #include <netinet/sctp_cc_functions.h> #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/netinet/sctp_cc_functions.c,v 1.5 2008/05/20 13:47:44 rrs Exp $"); +__FBSDID("$FreeBSD: src/sys/netinet/sctp_cc_functions.c,v 1.6 2008/06/14 07:58:05 rrs Exp $"); void sctp_set_initial_cc_param(struct sctp_tcb *stcb, struct sctp_nets *net) { @@ -55,7 +55,7 @@ net->cwnd = min((net->mtu * 4), max((2 * net->mtu), SCTP_INITIAL_CWND)); net->ssthresh = stcb->asoc.peers_rwnd; - if (sctp_logging_level & (SCTP_CWND_MONITOR_ENABLE | SCTP_CWND_LOGGING_ENABLE)) { + if (SCTP_BASE_SYSCTL(sctp_logging_level) & (SCTP_CWND_MONITOR_ENABLE | SCTP_CWND_LOGGING_ENABLE)) { sctp_log_cwnd(stcb, net, 0, SCTP_CWND_INITIALIZATION); } } @@ -71,7 +71,7 @@ * (net->fast_retran_loss_recovery == 0))) */ TAILQ_FOREACH(net, &asoc->nets, sctp_next) { - if ((asoc->fast_retran_loss_recovery == 0) || (sctp_cmt_on_off == 1)) { + if ((asoc->fast_retran_loss_recovery == 0) || (SCTP_BASE_SYSCTL(sctp_cmt_on_off) == 1)) { /* out of a RFC2582 Fast recovery window? */ if (net->net_ack > 0) { /* @@ -88,7 +88,7 @@ net->ssthresh = 2 * net->mtu; } net->cwnd = net->ssthresh; - if (sctp_logging_level & SCTP_CWND_MONITOR_ENABLE) { + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_CWND_MONITOR_ENABLE) { sctp_log_cwnd(stcb, net, (net->cwnd - old_cwnd), SCTP_CWND_LOG_FROM_FR); } @@ -165,7 +165,7 @@ } } #endif - if (sctp_early_fr) { + if (SCTP_BASE_SYSCTL(sctp_early_fr)) { /* * So, first of all do we need to have a Early FR * timer running? @@ -201,7 +201,7 @@ } /* if nothing was acked on this destination skip it */ if (net->net_ack == 0) { - if (sctp_logging_level & SCTP_CWND_LOGGING_ENABLE) { + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_CWND_LOGGING_ENABLE) { sctp_log_cwnd(stcb, net, 0, SCTP_CWND_LOG_FROM_SACK); } continue; @@ -232,10 +232,11 @@ * * Should we stop any running T3 timer here? */ - if (sctp_cmt_on_off && sctp_cmt_pf && ((net->dest_state & SCTP_ADDR_PF) == - SCTP_ADDR_PF)) { + if (SCTP_BASE_SYSCTL(sctp_cmt_on_off) && + SCTP_BASE_SYSCTL(sctp_cmt_pf) && + ((net->dest_state & SCTP_ADDR_PF) == SCTP_ADDR_PF)) { net->dest_state &= ~SCTP_ADDR_PF; - net->cwnd = net->mtu * sctp_cmt_pf; + net->cwnd = net->mtu * SCTP_BASE_SYSCTL(sctp_cmt_pf); SCTPDBG(SCTP_DEBUG_INDATA1, "Destination %p moved from PF to reachable with cwnd %d.\n", net, net->cwnd); /* @@ -259,7 +260,7 @@ */ #endif - if (asoc->fast_retran_loss_recovery && will_exit == 0 && sctp_cmt_on_off == 0) { + if (asoc->fast_retran_loss_recovery && will_exit == 0 && SCTP_BASE_SYSCTL(sctp_cmt_on_off) == 0) { /* * If we are in loss recovery we skip any cwnd * update @@ -270,26 +271,26 @@ * CMT: CUC algorithm. Update cwnd if pseudo-cumack has * moved. */ - if (accum_moved || (sctp_cmt_on_off && net->new_pseudo_cumack)) { + if (accum_moved || (SCTP_BASE_SYSCTL(sctp_cmt_on_off) && net->new_pseudo_cumack)) { /* If the cumulative ack moved we can proceed */ if (net->cwnd <= net->ssthresh) { /* We are in slow start */ if (net->flight_size + net->net_ack >= net->cwnd) { - if (net->net_ack > (net->mtu * sctp_L2_abc_variable)) { - net->cwnd += (net->mtu * sctp_L2_abc_variable); - if (sctp_logging_level & SCTP_CWND_MONITOR_ENABLE) { + if (net->net_ack > (net->mtu * SCTP_BASE_SYSCTL(sctp_L2_abc_variable))) { + net->cwnd += (net->mtu * SCTP_BASE_SYSCTL(sctp_L2_abc_variable)); + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_CWND_MONITOR_ENABLE) { sctp_log_cwnd(stcb, net, net->mtu, SCTP_CWND_LOG_FROM_SS); } } else { net->cwnd += net->net_ack; - if (sctp_logging_level & SCTP_CWND_MONITOR_ENABLE) { + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_CWND_MONITOR_ENABLE) { sctp_log_cwnd(stcb, net, net->net_ack, SCTP_CWND_LOG_FROM_SS); } } } else { - if (sctp_logging_level & SCTP_CWND_LOGGING_ENABLE) { + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_CWND_LOGGING_ENABLE) { sctp_log_cwnd(stcb, net, net->net_ack, SCTP_CWND_LOG_NOADV_SS); } @@ -305,19 +306,19 @@ (net->partial_bytes_acked >= net->cwnd)) { net->partial_bytes_acked -= net->cwnd; net->cwnd += net->mtu; - if (sctp_logging_level & SCTP_CWND_MONITOR_ENABLE) { + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_CWND_MONITOR_ENABLE) { sctp_log_cwnd(stcb, net, net->mtu, SCTP_CWND_LOG_FROM_CA); } } else { - if (sctp_logging_level & SCTP_CWND_LOGGING_ENABLE) { + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_CWND_LOGGING_ENABLE) { sctp_log_cwnd(stcb, net, net->net_ack, SCTP_CWND_LOG_NOADV_CA); } } } } else { - if (sctp_logging_level & SCTP_CWND_LOGGING_ENABLE) { + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_CWND_LOGGING_ENABLE) { sctp_log_cwnd(stcb, net, net->mtu, SCTP_CWND_LOG_NO_CUMACK); } @@ -351,7 +352,7 @@ net->cwnd = net->mtu; net->partial_bytes_acked = 0; - if (sctp_logging_level & SCTP_CWND_MONITOR_ENABLE) { + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_CWND_MONITOR_ENABLE) { sctp_log_cwnd(stcb, net, net->cwnd - old_cwnd, SCTP_CWND_LOG_FROM_RTX); } } @@ -369,7 +370,7 @@ net->RTO <<= 1; } net->cwnd = net->ssthresh; - if (sctp_logging_level & SCTP_CWND_MONITOR_ENABLE) { + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_CWND_MONITOR_ENABLE) { sctp_log_cwnd(stcb, net, (net->cwnd - old_cwnd), SCTP_CWND_LOG_FROM_SAT); } } @@ -478,7 +479,7 @@ } if (net->cwnd - old_cwnd != 0) { /* log only changes */ - if (sctp_logging_level & SCTP_CWND_MONITOR_ENABLE) { + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_CWND_MONITOR_ENABLE) { sctp_log_cwnd(stcb, net, (net->cwnd - old_cwnd), SCTP_CWND_LOG_FROM_SAT); } @@ -495,7 +496,7 @@ net->ssthresh = net->cwnd; net->cwnd = (net->flight_size + (burst_limit * net->mtu)); - if (sctp_logging_level & SCTP_CWND_MONITOR_ENABLE) { + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_CWND_MONITOR_ENABLE) { sctp_log_cwnd(stcb, net, (net->cwnd - old_cwnd), SCTP_CWND_LOG_FROM_BRST); } } @@ -516,7 +517,7 @@ if (net->cwnd < net->ssthresh) /* still in SS move to CA */ net->ssthresh = net->cwnd - 1; - if (sctp_logging_level & SCTP_CWND_MONITOR_ENABLE) { + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_CWND_MONITOR_ENABLE) { sctp_log_cwnd(stcb, net, (old_cwnd - net->cwnd), SCTP_CWND_LOG_FROM_FR); } } @@ -619,12 +620,12 @@ /* normal mode */ if (net->net_ack > net->mtu) { net->cwnd += net->mtu; - if (sctp_logging_level & SCTP_CWND_MONITOR_ENABLE) { + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_CWND_MONITOR_ENABLE) { sctp_log_cwnd(stcb, net, net->mtu, SCTP_CWND_LOG_FROM_SS); } } else { net->cwnd += net->net_ack; - if (sctp_logging_level & SCTP_CWND_MONITOR_ENABLE) { + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_CWND_MONITOR_ENABLE) { sctp_log_cwnd(stcb, net, net->net_ack, SCTP_CWND_LOG_FROM_SS); } } @@ -638,7 +639,7 @@ net->last_hs_used = indx; incr = ((sctp_cwnd_adjust[indx].increase) << 10); net->cwnd += incr; - if (sctp_logging_level & SCTP_CWND_MONITOR_ENABLE) { + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_CWND_MONITOR_ENABLE) { sctp_log_cwnd(stcb, net, incr, SCTP_CWND_LOG_FROM_SS); } } @@ -680,7 +681,7 @@ net->last_hs_used = indx; } } - if (sctp_logging_level & SCTP_CWND_MONITOR_ENABLE) { + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_CWND_MONITOR_ENABLE) { sctp_log_cwnd(stcb, net, (net->cwnd - old_cwnd), SCTP_CWND_LOG_FROM_FR); } } @@ -696,7 +697,7 @@ * (net->fast_retran_loss_recovery == 0))) */ TAILQ_FOREACH(net, &asoc->nets, sctp_next) { - if ((asoc->fast_retran_loss_recovery == 0) || (sctp_cmt_on_off == 1)) { >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200806192020.m5JKKpTY059839>