diff --git a/ChangeLog b/ChangeLog index 2745a49..6edccfd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,27 @@ +openonload-201606-u1.3 +---------------------- + +Update sfc net driver to v4.10.7.1001 + +Support for recent Linux kernel versions (4.11) +Support for recent Linux distributions (RHEL 6.9, Debian 9, Ubuntu 17.04) + +SF-117344-KI/bug66544: fix MSG_WARM behaviour when called on different socket but same stack as send() +SF-118285-KI/bug66847: check fget() result in epoll calls to avoid NULL dereference +SF-117911-KI/bug67477: retain original security context after allocating packet buffers +SF-117847-KI/bug68310: improve TCP_CORK behaviour when option is removed with fragmented send queue +SF-117847-KI/bug68640: ensure setting TCP_NODELAY while TCP_CORK in use results in flush of pending packet +SF-118230-KI/bug68653: avoid crash in onload_iptables +SF-118033-KI/bug69492: fix leak of syn-recv socket state and state corruption when failing to allocate internal state +SF-118296-KI/bug69764: fix detection and handling of non-Ethernet interfaces, e.g. IP tunnels. +SF-118224-KI/bug70468: fix close() trampolining with kernel built with CONFIG_HARDENED_USERCOPY +SF-118106-KI/bug70825: fix TCP RTT estimation with ONLOAD_MSG_WARM and no TCP timestamp option +SF-118231-KI/bug71078: avoid possible deadlock between fd handover, setsockopt, and UDP send without bind() +SF-118229-KI/bug71157: TCPDirect could send 1 byte beyond advertised receiver's window +SF-118299-KI:bug71526: correctly detect bonding failure for multicast over VLAN-over-bond interface +bug67748: report error correctly if ONLOAD_MSG_WARM used after connection is broken + + openonload-201606-u1.2 ---------------------- diff --git a/README b/README index 1a913d4..c60f5c4 100644 --- a/README +++ b/README @@ -112,6 +112,6 @@ Any questions? ========== - version: openonload-201606-u1.2 -revision: 06a15eb5da2e (ool1606-u1-hotfix) openonload-201606-u1.2-rc2 - date: Thu Mar 16 10:33:01 GMT 2017 + version: openonload-201606-u1.3 +revision: cc0b8136197b (ool1606-u1-hotfix) openonload-201606-u1.3 + date: Thu 22 Jun 10:29:32 BST 2017 diff --git a/ReleaseNotes b/ReleaseNotes index 27b0b1c..33bd817 100644 --- a/ReleaseNotes +++ b/ReleaseNotes @@ -1,3 +1,45 @@ +OpenOnload-201606-u1.3 +====================== + +This is a minor update release to OpenOnload201606-u1.2 containing a +number of important bug fixes, an updated net driver, and support for +recent Linux kernels and enterprise distributions. + +Please see the ChangeLog for a list of bugs fixed. + +Testing for this release has included the current beta version of +RHEL7.4, and any issues found have been addressed. We therefore +anticipate that it should work with this distribution, but we won't +be able to confirm this until the final version is available. + +This release includes support for Linux kernel 4.11. 4.10 kernel +support was added in the previous release. During testing of this +release we have discovered an issue with signal handling of 32 bit +applications running on a 64 bit kernel for kernel versions 4.10 or +later. This is not a regression from the previous release. It will +be addressed in the next update release. Until that is available we +recommend avoiding onloading 32 bit applications that use signals on +Linux kernel versions 4.10 or later. + +The Release Notes for OpenOnload-201606-u1.2 are included below. +For more details see the TCPDirect User Guide and Onload User Guide. + +Linux distribution support +-------------------------- + +This package is supported on: +- Red Hat Enterprise Linux 6.7 - 6.8 +- Red Hat Enterprise Linux 7.1 - 7.3 (and potentially RHEL7.4) +- SuSE Linux Enterprise Server 11 sp4 +- SuSE Linux Enterprise Server 12 sp1 and sp2 +- Canonical Ubuntu Server LTS 14.04, 16.04 +- Canonical Ubuntu Server 16.10, 17.04 +- Debian 7 "Wheezy" +- Debian 8 "Jessie" +- Debian 9 "Stretch" +- Linux kernels 2.6.32 - 4.11 + + OpenOnload-201606-u1.2 ====================== diff --git a/ReleaseNotes-sfc b/ReleaseNotes-sfc index 6aaf7a1..c7532ad 100644 --- a/ReleaseNotes-sfc +++ b/ReleaseNotes-sfc @@ -1,6 +1,6 @@ Solarflare 4.X Linux network driver =================================== -Version: 4.10.3.1003 +Version: 4.10.7.1000 Overview @@ -14,7 +14,7 @@ Supported hardware platforms The drivers contained in this package support the following Solarflare adapters: -- Solarflare Flareon [Ultra] Server Adapters: +- Solarflare Server Adapters: - Solarflare SFN8522 Dual Port SFP+ Server Adapter - Solarflare SFN8542 Dual Port QSFP+ Server Adapter - Solarflare SFN7002F Dual Port SFP+ Server Adapter @@ -49,7 +49,7 @@ adapters: - HP Ethernet 10Gb 570FLB Adapter - HP Ethernet 10Gb 570M Adapter - HP Ethernet 10Gb 572SFP+ Adapter - - Lenovo SFN7122F 2x10GbE SFP+ Flareon Ultra Adapter + - Lenovo SFN7122F 2x10GbE SFP+ Adapter Building and installation @@ -73,7 +73,7 @@ kernel Installation of the driver can be confirmed by typing: modinfo sfc | grep version and checking for the line: - version: 4.10.0.1012 + version: 4.10.7.1000 All network interfaces available on the system can be found with: ifconfig -a @@ -97,19 +97,18 @@ Linux distribution support for Solarflare Adapters -------------------------------------------------- This driver package is supported on: - - RedHat Enterprise Linux 5.10, 5.11 - - RedHat Enterprise Linux 6.5, 6.6, 6.7, 6.8 + - RedHat Enterprise Linux 6.7, 6.8, 6.9 - Redhat Messaging Realtime and Grid 2.5 - - RedHat Enterprise Linux 7.0, 7.1, 7.2 - - RedHat Enterprise Linux for Realtime 7.1, 7.2 + - RedHat Enterprise Linux 7.2, 7.3, 7.4 + - RedHat Enterprise Linux for Realtime 7.2 7.3 - SuSE Linux Enterprise Server 11 sp3, sp4 - SuSE Linux Enterprise RealTime Extension 11 - - SuSE Linux Enterprise Server 12 base release, sp1 + - SuSE Linux Enterprise Server 12 sp2, sp3 - Canonical Ubuntu Server LTS 14.04, 16.04 - Canonical Ubuntu Server - - Debian 7 "Wheezy" 7.X - Debian 8 "Jessie" 8.X - - Linux 2.6.18 to 4.9-rc1 + - Linux 2.6.18 to 4.11 This driver has been tested as a VF driver using KVM / ESXi 5.5 and ESXi 6.0 @@ -326,6 +325,45 @@ Issue 50868: Changelog --------- +### v4.10.7.1000 -- Update release to match EO5 release +[General changes] + ~ Kernel compatibility for RHEL 7.4 + ~ Change to newer API to avoid the following deprecation warning: + hwmon_device_register() is deprecated. + Please convert the driver to use hwmon_device_register_with_info(). + ~ Expose the sfc_pps work queue in sysfs so that CPU affinity can be + controlled. + + +### v4.10.6.1002 -- Update release (SF17.1) +[General changes]: + ~ Kernel compatibility extended to Linux 4.11. + ~ Adjust to core networking busy polling support available in Linux 4.11. + +[XDP preview] + ~ Preview of RX side XDP support. + ~ This allows for RX filtering to use the DROP target and for RX packet + modification (e.g. decapsulation). + ~ Additionally header expansion is supported (e.g. encapsulation). + +Issue 69569: + ~ Fix timestamp being 1s behind if the minor nanosecond timestamp happened to + be exactly on 0. + + +### v4.10.4.1005 -- GA release to match openonload-201606-u1.2 +[General changes] + ~ Kernel compatability extended to Linux 4.10. + +Issue 68158: + ~ Fix driver build without PTP support. + +Issue 67994: + ~ Fix for pps_get_ts() only returning microsecond resolution with RHEL 7.2. + ~ (Note this did not affect other RHEL 7.X releases). + ~ This would affect the PTP convergence accuracy that is achieved. + + ### v4.10.4.1000 -- GA release for ESXi adding support for SFN8542 adapters. [General VMware ESXi 5.5, 6.0 and 6.5 support] ~ GA support for ESXi and SFN8542 Solarflare adapters. @@ -405,13 +443,15 @@ Support for stateless checksum offloads for NVGRE,VXLAN,GENEVE encapsulation on SFN8XXX adapters is still considered a BETA at this time. [General changes] - ~ Add support for "ethtool -C stats-block-usecs". - Default is 1 sec, but this can be reduced in order to accurately sample every - second from a script ~ Fail gracefully when PCIe BARs are unassigned (better detection of BIOS issues which have been seen after a PCI bus rescan). ~ Add support for software TX timestamping. +[SFN8000 series support] + ~ Add support for "ethtool -C stats-block-usecs". + Default is 1 sec, but this can be reduced in order to accurately sample every + second from a script. + [overlays support] ~ Add encap TNI to debugfs filter dump. ~ Set UDP tunnel port list (for GENEVE and VxLAN) on driver load. This may @@ -582,6 +622,43 @@ Issue 60796: ~ Fix efx_mcdi_acquire_sync() returning -ETIMEDOUT on impolite unplug. +### v4.7.0.1046 -- Update release for EOL 3 + +Please note that network interface names may change across this driver update. +See issue 64065 below. + +[General changes] + ~ Build fixes for linux 4.10 kernels. + ~ Build fixes for RHEL 7.4 kernels. + ~ Provide an option to place external network port PHY into power down when the + network interface is administratively down. This means the link partner also + sees link down. Currently this is controlled via an ethtool private flag: + - To enable/disable: + ethtool --set-priv-flags DEVNAME phy-power-follows-link (on|off) + - To show current state: + ethtool --show-priv-flags DEVNAME + +[SFN8522 support] + ~ Support IPv6 flow-steering in ethtool rxnfc API (still needs support in + ethtool) + ~ Support encap-over-IPv6 in ethtool n-tuple API (still needs support in + ethtool) + +Issue 69569: + ~ Fix timestamp being 1s behind if the minor nanosecond timestamp happened to + be exactly on 0. + +Issue 67994: + ~ Fix for pps_get_ts() only returning microsecond resolution with RHEL 7.2. + ~ (Note this did not affect other RHEL 7.X releases). + ~ This would affect the PTP convergence accuracy that is achieved. + +Issue 64065: + ~ Stop setting dev_port and instead implement get_phys_port_id for PFs. This + makes network interface names assigned by systemd more consistent with other + network drivers e.g. enp130s0f1d1 becomes enp130s0f1. + + ### v4.7.0.1035 -- Update release [General changes] @@ -1776,5 +1853,5 @@ Issue 19951 Copyright --------- -Copyright 2009-2016 Solarflare Communications Inc. All rights reserved. +Copyright 2009-2017 Solarflare Communications Inc. All rights reserved. Use is subject to license terms. diff --git a/prebuilt/gnu/lib/cplane/debug/libocplane0.a b/prebuilt/gnu/lib/cplane/debug/libocplane0.a index abcbe75..0d5b842 100644 Binary files a/prebuilt/gnu/lib/cplane/debug/libocplane0.a and b/prebuilt/gnu/lib/cplane/debug/libocplane0.a differ diff --git a/prebuilt/gnu/lib/cplane/libocplane0.a b/prebuilt/gnu/lib/cplane/libocplane0.a index a3fc0ca..f709126 100644 Binary files a/prebuilt/gnu/lib/cplane/libocplane0.a and b/prebuilt/gnu/lib/cplane/libocplane0.a differ diff --git a/prebuilt/gnu_ppc32/lib/cplane/debug/libocplane0.a b/prebuilt/gnu_ppc32/lib/cplane/debug/libocplane0.a index f20d1d7..b75b371 100644 Binary files a/prebuilt/gnu_ppc32/lib/cplane/debug/libocplane0.a and b/prebuilt/gnu_ppc32/lib/cplane/debug/libocplane0.a differ diff --git a/prebuilt/gnu_ppc32/lib/cplane/libocplane0.a b/prebuilt/gnu_ppc32/lib/cplane/libocplane0.a index e3c8f57..79c3808 100644 Binary files a/prebuilt/gnu_ppc32/lib/cplane/libocplane0.a and b/prebuilt/gnu_ppc32/lib/cplane/libocplane0.a differ diff --git a/prebuilt/gnu_ppc64/lib/cplane/debug/libocplane0.a b/prebuilt/gnu_ppc64/lib/cplane/debug/libocplane0.a index ef192c0..8db942f 100644 Binary files a/prebuilt/gnu_ppc64/lib/cplane/debug/libocplane0.a and b/prebuilt/gnu_ppc64/lib/cplane/debug/libocplane0.a differ diff --git a/prebuilt/gnu_ppc64/lib/cplane/libocplane0.a b/prebuilt/gnu_ppc64/lib/cplane/libocplane0.a index def6ec1..4eecd4b 100644 Binary files a/prebuilt/gnu_ppc64/lib/cplane/libocplane0.a and b/prebuilt/gnu_ppc64/lib/cplane/libocplane0.a differ diff --git a/prebuilt/gnu_x86_64/lib/cplane/debug/libocplane0.a b/prebuilt/gnu_x86_64/lib/cplane/debug/libocplane0.a index d10d7e3..ad8d952 100644 Binary files a/prebuilt/gnu_x86_64/lib/cplane/debug/libocplane0.a and b/prebuilt/gnu_x86_64/lib/cplane/debug/libocplane0.a differ diff --git a/prebuilt/gnu_x86_64/lib/cplane/libocplane0.a b/prebuilt/gnu_x86_64/lib/cplane/libocplane0.a index 42c9273..3457cb5 100644 Binary files a/prebuilt/gnu_x86_64/lib/cplane/libocplane0.a and b/prebuilt/gnu_x86_64/lib/cplane/libocplane0.a differ diff --git a/prebuilt/gnu_x86_64/lib/zf/debug/libonload_zf.so.1.1.1 b/prebuilt/gnu_x86_64/lib/zf/debug/libonload_zf.so.1.1.1 index 4aa4795..79ced40 100755 Binary files a/prebuilt/gnu_x86_64/lib/zf/debug/libonload_zf.so.1.1.1 and b/prebuilt/gnu_x86_64/lib/zf/debug/libonload_zf.so.1.1.1 differ diff --git a/prebuilt/gnu_x86_64/lib/zf/debug/libonload_zf_static.a b/prebuilt/gnu_x86_64/lib/zf/debug/libonload_zf_static.a index 20a12ed..25532ed 100644 Binary files a/prebuilt/gnu_x86_64/lib/zf/debug/libonload_zf_static.a and b/prebuilt/gnu_x86_64/lib/zf/debug/libonload_zf_static.a differ diff --git a/prebuilt/gnu_x86_64/lib/zf/libonload_zf.so.1.1.1 b/prebuilt/gnu_x86_64/lib/zf/libonload_zf.so.1.1.1 index 1340c51..fd36240 100755 Binary files a/prebuilt/gnu_x86_64/lib/zf/libonload_zf.so.1.1.1 and b/prebuilt/gnu_x86_64/lib/zf/libonload_zf.so.1.1.1 differ diff --git a/prebuilt/gnu_x86_64/lib/zf/libonload_zf_static.a b/prebuilt/gnu_x86_64/lib/zf/libonload_zf_static.a index 1a20fbe..ef678ba 100644 Binary files a/prebuilt/gnu_x86_64/lib/zf/libonload_zf_static.a and b/prebuilt/gnu_x86_64/lib/zf/libonload_zf_static.a differ diff --git a/prebuilt/gnu_x86_64/tools/zf/debug/zf_stackdump b/prebuilt/gnu_x86_64/tools/zf/debug/zf_stackdump index 8a39695..4530b5c 100755 Binary files a/prebuilt/gnu_x86_64/tools/zf/debug/zf_stackdump and b/prebuilt/gnu_x86_64/tools/zf/debug/zf_stackdump differ diff --git a/prebuilt/gnu_x86_64/tools/zf/zf_stackdump b/prebuilt/gnu_x86_64/tools/zf/zf_stackdump index 7fd650a..29a130e 100755 Binary files a/prebuilt/gnu_x86_64/tools/zf/zf_stackdump and b/prebuilt/gnu_x86_64/tools/zf/zf_stackdump differ diff --git a/prebuilt/i686_linux/lib/cplane/debug/lib.a b/prebuilt/i686_linux/lib/cplane/debug/lib.a index 075cef8..8e9c57d 100644 Binary files a/prebuilt/i686_linux/lib/cplane/debug/lib.a and b/prebuilt/i686_linux/lib/cplane/debug/lib.a differ diff --git a/prebuilt/i686_linux/lib/cplane/lib.a b/prebuilt/i686_linux/lib/cplane/lib.a index 273682a..750cdc8 100644 Binary files a/prebuilt/i686_linux/lib/cplane/lib.a and b/prebuilt/i686_linux/lib/cplane/lib.a differ diff --git a/prebuilt/ppc64_linux/lib/cplane/debug/lib.a b/prebuilt/ppc64_linux/lib/cplane/debug/lib.a index 8b6ae91..3f03a9a 100644 Binary files a/prebuilt/ppc64_linux/lib/cplane/debug/lib.a and b/prebuilt/ppc64_linux/lib/cplane/debug/lib.a differ diff --git a/prebuilt/ppc64_linux/lib/cplane/lib.a b/prebuilt/ppc64_linux/lib/cplane/lib.a index 136a896..2842958 100644 Binary files a/prebuilt/ppc64_linux/lib/cplane/lib.a and b/prebuilt/ppc64_linux/lib/cplane/lib.a differ diff --git a/prebuilt/x86_64_linux/lib/cplane/debug/lib.a b/prebuilt/x86_64_linux/lib/cplane/debug/lib.a index 46ff263..c990daf 100644 Binary files a/prebuilt/x86_64_linux/lib/cplane/debug/lib.a and b/prebuilt/x86_64_linux/lib/cplane/debug/lib.a differ diff --git a/prebuilt/x86_64_linux/lib/cplane/lib.a b/prebuilt/x86_64_linux/lib/cplane/lib.a index 3ee736c..a3bad65 100644 Binary files a/prebuilt/x86_64_linux/lib/cplane/lib.a and b/prebuilt/x86_64_linux/lib/cplane/lib.a differ diff --git a/scripts/onload_misc/openonload.spec b/scripts/onload_misc/openonload.spec index 98f70be..9e11309 100644 --- a/scripts/onload_misc/openonload.spec +++ b/scripts/onload_misc/openonload.spec @@ -41,7 +41,7 @@ # support older distros) to update this spec to use kernel modules packaging # templates. -%define pkgversion 201606-u1.2 +%define pkgversion 201606-u1.3 %{!?kernel: %{expand: %%define kernel %%(uname -r)}} %{!?target_cpu: %{expand: %%define target_cpu %{_host_cpu}}} diff --git a/src/driver/linux_affinity/kernel_compat.sh b/src/driver/linux_affinity/kernel_compat.sh index cf0a025..99f5905 100755 --- a/src/driver/linux_affinity/kernel_compat.sh +++ b/src/driver/linux_affinity/kernel_compat.sh @@ -121,10 +121,18 @@ EFRM_HAVE_SK_SLEEP_FUNC symtype sk_sleep include/net/sock.h wait_queue_head_t *( # when using this to check for HAVE_SET_RESTORE_SIGMASK as well as for # EFRM_HAVE_SET_RESTORE_SIGMASK. EFRM_HAVE_SET_RESTORE_SIGMASK symbol set_restore_sigmask include/linux/sched.h +EFRM_HAVE_SET_RESTORE_SIGMASK1 symbol set_restore_sigmask include/linux/sched/signal.h EFRM_ALLOC_FILE_TAKES_STRUCT_PATH symtype alloc_file include/linux/file.h struct file *(struct path *, fmode_t, const struct file_operations *) EFRM_ALLOC_FILE_TAKES_CONST_STRUCT_PATH symtype alloc_file include/linux/file.h struct file *(const struct path *, fmode_t, const struct file_operations *) +EFRM_HAVE_PRANDOM_U32 symbol prandom_u32 include/linux/random.h + +EFRM_HAVE_NEW_FAULT memtype struct_vm_operations_struct fault include/linux/mm.h int (*)(struct vm_fault *vmf) + +EFRM_HAVE_SCHED_TASK_H file include/linux/sched/task.h +EFRM_HAVE_CRED_H file include/linux/cred.h + # TODO move onload-related stuff from net kernel_compat " | egrep -v -e '^#' -e '^$' | sed 's/[ \t][ \t]*/:/g' } diff --git a/src/driver/linux_char/mmap.c b/src/driver/linux_char/mmap.c index 3a46a5f..c41dc43 100644 --- a/src/driver/linux_char/mmap.c +++ b/src/driver/linux_char/mmap.c @@ -305,7 +305,14 @@ static struct page* vm_op_nopage(struct vm_area_struct* vma, #ifndef EFRM_VMA_HAS_NOPAGE -static int vm_op_fault(struct vm_area_struct *vma, struct vm_fault *vmf) { +static int vm_op_fault( +#ifndef EFRM_HAVE_NEW_FAULT + struct vm_area_struct *vma, +#endif + struct vm_fault *vmf) { +#ifdef EFRM_HAVE_NEW_FAULT + struct vm_area_struct *vma = vmf->vma; +#endif struct page* ret; ret = vm_op_nopage(vma, VM_FAULT_ADDRESS(vmf), NULL); diff --git a/src/driver/linux_cplane/char.c b/src/driver/linux_cplane/char.c index 18d8acd..770bef1 100644 --- a/src/driver/linux_cplane/char.c +++ b/src/driver/linux_cplane/char.c @@ -139,8 +139,15 @@ static struct page* cicp_vm_op_nopage(struct vm_area_struct* vma, return pg; } #ifndef EFRM_VMA_HAS_NOPAGE -static int cicp_vm_op_fault(struct vm_area_struct *vma, struct vm_fault *vmf) +static int cicp_vm_op_fault( +#ifndef EFRM_HAVE_NEW_FAULT + struct vm_area_struct *vma, +#endif + struct vm_fault *vmf) { +#ifdef EFRM_HAVE_NEW_FAULT + struct vm_area_struct *vma = vmf->vma; +#endif vmf->page = cicp_vm_op_nopage(vma, VM_FAULT_ADDRESS(vmf), NULL); return ( vmf->page == NULL ) ? VM_FAULT_SIGBUS : 0; } diff --git a/src/driver/linux_cplane/driver.c b/src/driver/linux_cplane/driver.c index 660538d..2602919 100644 --- a/src/driver/linux_cplane/driver.c +++ b/src/driver/linux_cplane/driver.c @@ -2709,12 +2709,6 @@ cicpos_handle_llap_msg(cicpos_parse_state_t *session, struct nlmsghdr *nlhdr) ci_assert_gt(rlen, 0); ci_assert(NULL != ifinfomsg); - /* we are only interested in ethernet interfaces */ - if (ifinfomsg->ifi_type != ARPHRD_ETHER && - ifinfomsg->ifi_type != ARPHRD_LOOPBACK) - { /*ci_log("Only interested in ethernet interfaces");*/ - return 0; - } attr = (struct rtattr *)IFLA_RTA(ifinfomsg); add = (nlhdr->nlmsg_type == RTM_NEWLINK); @@ -2735,7 +2729,8 @@ cicpos_handle_llap_msg(cicpos_parse_state_t *session, struct nlmsghdr *nlhdr) break; case IFLA_ADDRESS: - CI_MAC_ADDR_SET(&mac, RTA_DATA(attr)); + if (ifinfomsg->ifi_type == ARPHRD_ETHER) + CI_MAC_ADDR_SET(&mac, RTA_DATA(attr)); break; case IFLA_IFNAME: diff --git a/src/driver/linux_net/efx.c b/src/driver/linux_net/efx.c index db41d46..2f7f796 100644 --- a/src/driver/linux_net/efx.c +++ b/src/driver/linux_net/efx.c @@ -78,7 +78,9 @@ #include "mcdi_proxy.h" #endif #endif - +#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_XDP) +#include +#endif #if defined(EFX_NOT_UPSTREAM) && defined(EFX_GCOV) #include "../linux/gcov.h" #endif @@ -645,8 +647,8 @@ static int efx_poll(struct net_device *dev, int *budget_ret) * since efx_nic_eventq_read_ack() will have no effect if * interrupts have already been disabled. */ - napi_complete(napi); - efx_nic_eventq_read_ack(channel); + if (napi_complete_done(napi, spent)) + efx_nic_eventq_read_ack(channel); } #if defined(EFX_USE_KCOMPAT) && defined(EFX_WANT_DRIVER_BUSY_POLL) @@ -1025,7 +1027,7 @@ static int efx_start_datapath(struct efx_nic *efx) efx->rx_dma_len = (efx->rx_prefix_size + EFX_MAX_FRAME_LEN(efx->net_dev->mtu) + efx->type->rx_buffer_padding); - rx_buf_len = (sizeof(struct efx_rx_page_state) + + rx_buf_len = (sizeof(struct efx_rx_page_state) + XDP_PACKET_HEADROOM + efx->rx_ip_align + efx->rx_dma_len); if (rx_buf_len <= PAGE_SIZE) { efx->rx_scatter = efx->type->always_rx_scatter; @@ -1227,10 +1229,20 @@ static void efx_remove_channel(struct efx_channel *channel) { struct efx_tx_queue *tx_queue; struct efx_rx_queue *rx_queue; +#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_XDP) + struct bpf_prog *xdp_prog; +#endif netif_dbg(channel->efx, drv, channel->efx->net_dev, "destroy chan %d\n", channel->channel); +#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_XDP) + xdp_prog = rtnl_dereference(channel->xdp_prog); + rcu_assign_pointer(channel->xdp_prog, NULL); + if (xdp_prog) + bpf_prog_put(xdp_prog); +#endif + efx_for_each_channel_rx_queue(rx_queue, channel) { efx_remove_rx_queue(rx_queue); efx_destroy_rx_queue(rx_queue); @@ -4089,6 +4101,18 @@ void efx_watchdog(struct net_device *net_dev) efx_schedule_reset(efx, RESET_TYPE_TX_WATCHDOG); } +#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_XDP) +static unsigned int efx_xdp_max_mtu(struct efx_nic *efx) +{ + /* The maximum MTU that we can fit in a single page, allowing for + * framing, overhead and XDP headroom. */ + int overhead = EFX_MAX_FRAME_LEN(0) + sizeof(struct efx_rx_page_state) + + efx->rx_prefix_size + efx->type->rx_buffer_padding + + efx->rx_ip_align + XDP_PACKET_HEADROOM; + + return PAGE_SIZE - overhead; +} +#endif /* Context: process, rtnl_lock() held. */ int efx_change_mtu(struct net_device *net_dev, int new_mtu) @@ -4115,6 +4139,16 @@ int efx_change_mtu(struct net_device *net_dev, int new_mtu) } #endif +#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_XDP) + if (rtnl_dereference(efx->channel[0]->xdp_prog) && + (new_mtu > efx_xdp_max_mtu(efx))) { + netif_err(efx, drv, efx->net_dev, + "Requested MTU of %d too big for XDP (max: %d)\n", + new_mtu, efx_xdp_max_mtu(efx)); + return -EINVAL; + } +#endif + netif_dbg(efx, drv, efx->net_dev, "changing MTU to %d\n", new_mtu); efx_device_detach_sync(efx); @@ -4536,6 +4570,52 @@ void efx_geneve_del_port(struct net_device *dev, sa_family_t sa_family, #endif #endif +#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_XDP) +static int efx_xdp_setup_prog(struct efx_nic *efx, struct bpf_prog *prog) +{ + struct bpf_prog *old_prog; + struct efx_channel *channel; + + if (prog && (efx->net_dev->mtu > efx_xdp_max_mtu(efx))) { + netif_err(efx, drv, efx->net_dev, + "Unable to configure XDP with MTU of %d (max: %d)\n", + efx->net_dev->mtu, efx_xdp_max_mtu(efx)); + return -EINVAL; + } + + if (prog) { + prog = bpf_prog_add(prog, efx->n_channels); + if (IS_ERR(prog)) + return PTR_ERR(prog); + } + + efx_for_each_channel(channel, efx) { + old_prog = rtnl_dereference(channel->xdp_prog); + rcu_assign_pointer(channel->xdp_prog, prog); + if (old_prog) + bpf_prog_put(old_prog); + } + + return 0; +} + +/* Context: process, rtnl_lock() held. */ +static int efx_xdp(struct net_device *dev, struct netdev_xdp *xdp) +{ + struct efx_nic *efx = netdev_priv(dev); + + switch (xdp->command) { + case XDP_SETUP_PROG: + return efx_xdp_setup_prog(efx, xdp->prog); + case XDP_QUERY_PROG: + xdp->prog_attached = efx->channel[0]->xdp_prog != NULL; + return 0; + default: + return -EINVAL; + } +} +#endif + #if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_NET_DEVICE_OPS) extern const struct net_device_ops efx_netdev_ops; #endif @@ -6498,7 +6578,11 @@ const struct net_device_ops efx_netdev_ops = { #ifdef CONFIG_SFC_SRIOV #if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_NDO_SET_VF_MAC) .ndo_set_vf_mac = efx_sriov_set_vf_mac, +#if defined(EFX_USE_KCOMPAT) && defined(EFX_HAVE_NDO_EXT_SET_VF_VLAN_PROTO) + .extended.ndo_set_vf_vlan = efx_sriov_set_vf_vlan, +#else .ndo_set_vf_vlan = efx_sriov_set_vf_vlan, +#endif .ndo_get_vf_config = efx_sriov_get_vf_config, #endif #if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_VF_LINK_STATE) @@ -6530,6 +6614,7 @@ const struct net_device_ops efx_netdev_ops = { .ndo_rx_flow_steer = efx_filter_rfs, #endif #endif + #if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_NDO_UDP_TUNNEL_ADD) .ndo_udp_tunnel_add = efx_udp_tunnel_add, .ndo_udp_tunnel_del = efx_udp_tunnel_del, @@ -6543,6 +6628,13 @@ const struct net_device_ops efx_netdev_ops = { .ndo_del_geneve_port = efx_geneve_del_port, #endif #endif +#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_XDP) + .ndo_xdp = efx_xdp, +#endif + +#if defined(EFX_USE_KCOMPAT) && defined(EFX_HAVE_NET_DEVICE_OPS_EXTENDED) + .ndo_size = sizeof(struct net_device_ops), +#endif }; #endif diff --git a/src/driver/linux_net/ethtool.c b/src/driver/linux_net/ethtool.c index 66c9bc9..0bcbbbb 100644 --- a/src/driver/linux_net/ethtool.c +++ b/src/driver/linux_net/ethtool.c @@ -102,6 +102,9 @@ static const struct efx_sw_stat_desc efx_sw_stat_desc[] = { EFX_ETHTOOL_UINT_CHANNEL_STAT(rx_frm_trunc), EFX_ETHTOOL_UINT_CHANNEL_STAT(rx_merge_events), EFX_ETHTOOL_UINT_CHANNEL_STAT(rx_merge_packets), +#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_XDP) + EFX_ETHTOOL_UINT_CHANNEL_STAT(rx_xdp_drops), +#endif }; #define EFX_ETHTOOL_SW_STAT_COUNT ARRAY_SIZE(efx_sw_stat_desc) diff --git a/src/driver/linux_net/kernel_compat.c b/src/driver/linux_net/kernel_compat.c index 56c77ad..351be85 100644 --- a/src/driver/linux_net/kernel_compat.c +++ b/src/driver/linux_net/kernel_compat.c @@ -39,6 +39,9 @@ #ifdef EFX_HAVE_LINUX_EXPORT_H #include #endif +#if defined(EFX_NEED_HWMON_DEVICE_REGISTER_WITH_INFO) && !defined(__VMKLNX__) +#include +#endif /* * Kernel backwards compatibility @@ -758,3 +761,24 @@ struct dentry *d_hash_and_lookup(struct dentry *dir, struct qstr *name) return d_lookup(dir, name); } #endif + +#if defined(EFX_NEED_BOOL_NAPI_COMPLETE_DONE) && defined(EFX_HAVE_OLD_NAPI) +bool napi_complete_done(struct napi_struct *napi, int spent __always_unused) +{ + napi_complete(napi); + return true; +} +#endif + +#if defined(EFX_NEED_HWMON_DEVICE_REGISTER_WITH_INFO) && !defined(__VMKLNX__) +struct EFX_HWMON_DEVICE_REGISTER_TYPE *hwmon_device_register_with_info( + struct device *dev, + const char *name __always_unused, + void *drvdata __always_unused, + const struct hwmon_chip_info *info __always_unused, + const struct attribute_group **extra_groups __always_unused) +{ + return hwmon_device_register(dev); +} +#endif + diff --git a/src/driver/linux_net/kernel_compat.h b/src/driver/linux_net/kernel_compat.h index 9bb71e3..bb1766d 100644 --- a/src/driver/linux_net/kernel_compat.h +++ b/src/driver/linux_net/kernel_compat.h @@ -2124,6 +2124,26 @@ unsigned int cpumask_local_spread(unsigned int i, int node); } while (0) #endif +#ifdef EFX_NEED_WQ_SYSFS + #define WQ_SYSFS 0 +#endif +#ifndef WQ_MEM_RECLAIM + #define WQ_MEM_RECLAIM 0 +#endif + +#ifdef EFX_HAVE_ALLOC_WORKQUEUE +#ifndef EFX_HAVE_NEW_ALLOC_WORKQUEUE + #define efx_alloc_workqueue(_fmt, _flags, _max, _name) \ + alloc_workqueue(_name, _flags, _max) +#else + #define efx_alloc_workqueue(_fmt, _flags, _max, _name) \ + alloc_workqueue(_fmt, _flags, _max, _name) +#endif +#else + #define efx_alloc_workqueue(_fmt, _flags, _max, _name) \ + create_singlethread_workqueue(_name) +#endif + #if defined(EFX_HAVE_OLD_NAPI) #ifndef EFX_USE_GRO @@ -3088,4 +3108,46 @@ static inline void efx_netif_napi_del(struct napi_struct *napi) #define EFX_WANT_DRIVER_BUSY_POLL #endif +#if defined(EFX_NEED_BOOL_NAPI_COMPLETE_DONE) +#if !defined(EFX_HAVE_OLD_NAPI) +static inline bool efx_napi_complete_done(struct napi_struct *napi, + int spent __always_unused) +{ + napi_complete(napi); + return true; +} +#define napi_complete_done efx_napi_complete_done +#else +/* Old NAPI needs the definition of efx_channel for this to work. Don't drag + * net_driver.h for that. */ +bool napi_complete_done(struct napi_struct *napi, int spent); +#endif +#endif + +#if defined(EFX_NEED_HWMON_DEVICE_REGISTER_WITH_INFO) && !defined(__VMKLNX__) +struct hwmon_chip_info; +struct attribute_group; + +#ifdef EFX_HAVE_HWMON_CLASS_DEVICE +#define EFX_HWMON_DEVICE_REGISTER_TYPE class_device +#else +#define EFX_HWMON_DEVICE_REGISTER_TYPE device +#endif + +struct EFX_HWMON_DEVICE_REGISTER_TYPE *hwmon_device_register_with_info( + struct device *dev, + const char *name __always_unused, + void *drvdata __always_unused, + const struct hwmon_chip_info *info __always_unused, + const struct attribute_group **extra_groups __always_unused); +#endif + +#if defined(EFX_HAVE_XDP) && !defined(EFX_HAVE_XDP_TRACE) +#define trace_xdp_exception(dev, prog, act) +#endif + +#if !defined(EFX_HAVE_XDP_HEAD) +#define XDP_PACKET_HEADROOM 0 +#endif + #endif /* EFX_KERNEL_COMPAT_H */ diff --git a/src/driver/linux_net/kernel_compat.sh b/src/driver/linux_net/kernel_compat.sh index 6571fe9..69c0da6 100755 --- a/src/driver/linux_net/kernel_compat.sh +++ b/src/driver/linux_net/kernel_compat.sh @@ -129,6 +129,9 @@ EFX_NEED_IPV6_HDR nsymbol ipv6_hdr include/linux/ipv6.h EFX_NEED_WORK_API_WRAPPERS nmember struct_delayed_work timer include/linux/workqueue.h EFX_USE_CANCEL_DELAYED_WORK_SYNC symbol cancel_delayed_work_sync include/linux/workqueue.h EFX_USE_CANCEL_WORK_SYNC symbol cancel_work_sync include/linux/workqueue.h +EFX_NEED_WQ_SYSFS nsymbol WQ_SYSFS include/linux/workqueue.h +EFX_HAVE_ALLOC_WORKQUEUE symbol alloc_workqueue include/linux/workqueue.h +EFX_HAVE_NEW_ALLOC_WORKQUEUE custom EFX_USE_ETHTOOL_ETH_TP_MDIX symbol eth_tp_mdix include/linux/ethtool.h EFX_USE_ETHTOOL_GET_PERM_ADDR symbol get_perm_addr include/linux/ethtool.h EFX_USE_ETHTOOL_FLAGS symbol get_flags include/linux/ethtool.h @@ -197,8 +200,10 @@ EFX_HAVE_SRIOV_CONFIGURE member struct_pci_driver sriov_co EFX_HAVE_PCI_DRIVER_RH member struct_pci_driver_rh sriov_configure include/linux/pci.h EFX_HAVE_PHYSFN member struct_pci_dev physfn include/linux/pci.h EFX_HAVE_NET_DEVICE_OPS symbol net_device_ops include/linux/netdevice.h +EFX_HAVE_NET_DEVICE_OPS_EXTENDED symbol net_device_ops_extended include/linux/netdevice.h EFX_HAVE_NDO_SET_VF_MAC member struct_net_device_ops ndo_set_vf_mac include/linux/netdevice.h EFX_HAVE_NDO_SET_VF_VLAN_PROTO memtype struct_net_device_ops ndo_set_vf_vlan include/linux/netdevice.h int (*)(struct net_device *, int, u16, u8, __be16) +EFX_HAVE_NDO_EXT_SET_VF_VLAN_PROTO memtype struct_net_device_ops_extended ndo_set_vf_vlan include/linux/netdevice.h int (*)(struct net_device *, int, u16, u8, __be16) EFX_HAVE_NDO_SET_VF_SPOOFCHK member struct_net_device_ops ndo_set_vf_spoofchk include/linux/netdevice.h EFX_HAVE_NDO_SET_FEATURES member struct_net_device_ops ndo_set_features include/linux/netdevice.h EFX_HAVE_NDO_FEATURES_CHECK member struct_net_device_ops ndo_features_check include/linux/netdevice.h @@ -395,6 +400,10 @@ EFX_HAVE_HW_ENC_FEATURES member struct_net_device hw_enc_features include/linux/ EFX_NEED_SKB_INNER_TRANSPORT_OFFSET nsymbol skb_inner_transport_offset include/linux/skbuff.h EFX_HAVE_SKB_XMIT_MORE bitfield struct_sk_buff xmit_more include/linux/skbuff.h EFX_HAVE_NDO_ADD_VXLAN_PORT member struct_net_device_ops ndo_add_vxlan_port include/linux/netdevice.h +EFX_NEED_PAGE_REF_ADD nfile include/linux/page_ref.h +EFX_NEED_D_HASH_AND_LOOKUP nexport d_hash_and_lookup include/linux/dcache.h fs/dcache.c +EFX_HAVE_KTIME_UNION custom +EFX_NEED_HWMON_DEVICE_REGISTER_WITH_INFO nsymbol hwmon_device_register_with_info include/linux/hwmon.h EFX_HAVE_NDO_UDP_TUNNEL_ADD member struct_net_device_ops ndo_udp_tunnel_add include/linux/netdevice.h EFX_NEED_PAGE_REF_ADD nfile include/linux/page_ref.h EFX_HAVE_NEW_FLOW_KEYS member struct_flow_keys basic include/net/flow_dissector.h @@ -403,6 +412,10 @@ EFX_HAVE_NDO_ADD_GENEVE_PORT member struct_net_device_ops ndo_add_geneve_port in EFX_NEED_D_HASH_AND_LOOKUP nexport d_hash_and_lookup include/linux/dcache.h fs/dcache.c EFX_HAVE_NETDEV_MTU_LIMITS member struct_net_device max_mtu include/linux/netdevice.h EFX_HAVE_KTIME_UNION custom +EFX_NEED_BOOL_NAPI_COMPLETE_DONE nsymtype napi_complete_done include/linux/netdevice.h bool (struct napi_struct *, int) +EFX_HAVE_XDP symbol netdev_xdp include/linux/netdevice.h +EFX_HAVE_XDP_TRACE file include/trace/events/xdp.h +EFX_HAVE_XDP_HEAD member struct_xdp_buff data_hard_start include/linux/filter.h " | egrep -v -e '^#' -e '^$' | sed 's/[ \t][ \t]*/:/g' } @@ -1049,6 +1062,32 @@ void f(void) " } +function do_EFX_HAVE_KTIME_UNION +{ + defer_test_compile pos " +#include + +void f(void) +{ + ktime_t t; + t.tv64 = 0; +} +" +} + +function do_EFX_HAVE_NEW_ALLOC_WORKQUEUE +{ + # The old macro only accepts 3 arguments. + defer_test_compile pos ' +#include + +void f(void) +{ + alloc_workqueue("%s", 0, 0, "test"); +} +' +} + quiet=false verbose=false diff --git a/src/driver/linux_net/mcdi_mon.c b/src/driver/linux_net/mcdi_mon.c index 45ea182..5dda576 100644 --- a/src/driver/linux_net/mcdi_mon.c +++ b/src/driver/linux_net/mcdi_mon.c @@ -428,7 +428,9 @@ int efx_mcdi_mon_probe(struct efx_nic *efx) goto fail; } - hwmon->device = hwmon_device_register(&efx->pci_dev->dev); + hwmon->device = hwmon_device_register_with_info(&efx->pci_dev->dev, + efx->name, hwmon, + NULL, NULL); if (IS_ERR(hwmon->device)) { rc = PTR_ERR(hwmon->device); goto fail; diff --git a/src/driver/linux_net/net_driver.h b/src/driver/linux_net/net_driver.h index e4c5a64..a38f942 100644 --- a/src/driver/linux_net/net_driver.h +++ b/src/driver/linux_net/net_driver.h @@ -82,7 +82,7 @@ * **************************************************************************/ -#define EFX_DRIVER_VERSION "4.10.4.1005" +#define EFX_DRIVER_VERSION "4.10.7.1001" #ifdef DEBUG #define EFX_BUG_ON_PARANOID(x) BUG_ON(x) @@ -531,7 +531,6 @@ struct efx_rx_queue { unsigned int ptr_mask; bool refill_enabled; bool flush_pending; - unsigned int added_count; unsigned int notified_count; unsigned int removed_count; @@ -715,8 +714,7 @@ struct efx_sarfs_state { * @irq_moderation_us: IRQ moderation value (in microseconds) * @napi_dev: Net device used with NAPI * @napi_str: NAPI control structure - * @state: state for NAPI vs busy polling - * @state_lock: lock protecting @state + * @xdp_prog: Current XDP programme for this queue. * @eventq: Event queue buffer * @eventq_mask: Event queue pointer mask * @eventq_read_ptr: Event queue read pointer @@ -737,6 +735,7 @@ struct efx_sarfs_state { * lack of descriptors * @n_rx_merge_events: Number of RX merged completion events * @n_rx_merge_packets: Number of RX packets completed by merged events + * @n_rx_xdp_drops: Count of RX packets dropped due to XDP * @rx_pkt_n_frags: Number of fragments in next packet to be delivered by * __efx_rx_packet(), or zero if there is none * @rx_pkt_index: Ring index of first buffer for next packet to be delivered @@ -763,6 +762,9 @@ struct efx_channel { unsigned int irq_moderation_us; struct net_device *napi_dev; struct napi_struct napi_str; +#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_XDP) + struct bpf_prog __rcu *xdp_prog; +#endif #if defined(EFX_USE_KCOMPAT) && defined(EFX_WANT_DRIVER_BUSY_POLL) #ifdef CONFIG_NET_RX_BUSY_POLL unsigned long busy_poll_state; @@ -810,6 +812,9 @@ struct efx_channel { unsigned int n_rx_nodesc_trunc; unsigned int n_rx_merge_events; unsigned int n_rx_merge_packets; +#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_XDP) + unsigned int n_rx_xdp_drops; +#endif unsigned int rx_pkt_n_frags; unsigned int rx_pkt_index; diff --git a/src/driver/linux_net/ptp.c b/src/driver/linux_net/ptp.c index 55e0124..1dce1c8 100644 --- a/src/driver/linux_net/ptp.c +++ b/src/driver/linux_net/ptp.c @@ -290,8 +290,6 @@ struct efx_ptp_data; * @s_assert: sys assert time of hw_pps event * @n_assert: nic assert time of hw_pps event * @s_delta: computed delta between nic and sys clocks - * @hw_pps_work: work struct for handling hw_pps events - * @hw_pps_workwq: work queue for handling hw_pps events * @nic_hw_pps_enabled: Are hw_pps events enabled * @fd_count: Number of open fds * @major: device major number @@ -305,8 +303,6 @@ struct efx_pps_data { struct timespec64 s_assert; ktime_t n_assert; struct timespec64 s_delta; - struct work_struct hw_pps_work; - struct workqueue_struct *hw_pps_workwq; bool nic_hw_pps_enabled; int fd_count; int major; @@ -2163,24 +2159,6 @@ int efx_ptp_pps_get_event(struct efx_nic *efx, struct efx_ts_get_pps *event) return 0; } -static void efx_ptp_hw_pps_worker(struct work_struct *work) -{ - struct efx_pps_data *pps = - container_of(work, struct efx_pps_data, hw_pps_work); - - /* Get the sequence number from the packet - * check against the last one, if new then add - * to queue */ - - pps->s_assert = timespec64_sub(ktime_to_timespec64(pps->n_assert), - pps->ptp->last_delta); - pps->s_delta = pps->ptp->last_delta; - pps->last_ev++; - - if (waitqueue_active(&pps->read_data)) - wake_up(&pps->read_data); -} - int efx_ptp_hw_pps_enable(struct efx_nic *efx, struct efx_ts_hw_pps *data) { struct efx_pps_data *pps_data; @@ -2274,11 +2252,6 @@ static int efx_ptp_create_pps(struct efx_ptp_data *ptp) if (!pps) return -ENOMEM; - INIT_WORK(&pps->hw_pps_work, efx_ptp_hw_pps_worker); - pps->hw_pps_workwq = create_singlethread_workqueue("sfc_hw_pps"); - if (!pps->hw_pps_workwq) - goto fail1; - init_waitqueue_head(&pps->read_data); pps->nic_hw_pps_enabled = false; @@ -2286,14 +2259,12 @@ static int efx_ptp_create_pps(struct efx_ptp_data *ptp) &efx_sysfs_ktype, &ptp->efx->pci_dev->dev.kobj, "pps_stats")) - goto fail2; + goto fail1; pps->ptp = ptp; ptp->pps_data = pps; return 0; -fail2: - destroy_workqueue(pps->hw_pps_workwq); fail1: kfree(pps); ptp->pps_data = NULL; @@ -2306,13 +2277,6 @@ static void efx_ptp_destroy_pps(struct efx_ptp_data *ptp) if (!ptp->pps_data) return; -#if !defined(EFX_USE_KCOMPAT) || defined(EFX_USE_CANCEL_WORK_SYNC) - cancel_work_sync(&ptp->pps_data->hw_pps_work); - flush_workqueue(ptp->pps_data->hw_pps_workwq); -#endif - - destroy_workqueue(ptp->pps_data->hw_pps_workwq); - kobject_del(&ptp->pps_data->kobj); kfree(ptp->pps_data); @@ -2345,8 +2309,22 @@ static const struct ptp_clock_info efx_phc_clock_info = { #if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_PHC_SUPPORT) || defined(EFX_NOT_UPSTREAM) static int efx_create_pps_worker(struct efx_ptp_data *ptp) { + char busdevice[10]; + + snprintf(busdevice, sizeof(busdevice), "%02x:%02x", + ptp->efx->pci_dev->bus->number, + PCI_SLOT(ptp->efx->pci_dev->devfn)); + INIT_WORK(&ptp->pps_work, efx_ptp_pps_worker); - ptp->pps_workwq = create_singlethread_workqueue("sfc_pps"); +#if defined(EFX_NOT_UPSTREAM) + ptp->pps_workwq = efx_alloc_workqueue("sfc_pps_%s", WQ_UNBOUND | + WQ_MEM_RECLAIM | WQ_SYSFS, 1, + busdevice); +#else + ptp->pps_workwq = alloc_workqueue("sfc_pps_%s", WQ_UNBOUND | + WQ_MEM_RECLAIM | WQ_SYSFS, 1, + busdevice); +#endif if (!ptp->pps_workwq) return -ENOMEM; return 0; @@ -3214,8 +3192,16 @@ static void hw_pps_event_pps(struct efx_nic *efx, struct efx_ptp_data *ptp) EFX_QWORD_FIELD(ptp->evt_frags[1], MCDI_EVENT_DATA), ptp->ts_corrections.pps_in); - if (pps->nic_hw_pps_enabled) - queue_work(pps->hw_pps_workwq, &pps->hw_pps_work); + if (pps->nic_hw_pps_enabled) { + pps->s_assert = timespec64_sub( + ktime_to_timespec64(pps->n_assert), + pps->ptp->last_delta); + pps->s_delta = pps->ptp->last_delta; + pps->last_ev++; + + if (waitqueue_active(&pps->read_data)) + wake_up(&pps->read_data); + } } #endif @@ -3342,7 +3328,7 @@ void __efx_rx_skb_attach_timestamp(struct efx_channel *channel, diff = (pkt_timestamp_minor - channel->sync_timestamp_minor) & (MINOR_TICKS_PER_SECOND - 1); /* do we roll over a second boundary and need to carry the one? */ - carry = channel->sync_timestamp_minor + diff > MINOR_TICKS_PER_SECOND ? + carry = channel->sync_timestamp_minor + diff >= MINOR_TICKS_PER_SECOND ? 1 : 0; if (diff <= MINOR_TICKS_PER_SECOND / EXPECTED_SYNC_EVENTS_PER_SECOND + diff --git a/src/driver/linux_net/rx.c b/src/driver/linux_net/rx.c index d142cd6..af47bf8 100644 --- a/src/driver/linux_net/rx.c +++ b/src/driver/linux_net/rx.c @@ -53,10 +53,19 @@ #ifdef CONFIG_SFC_TRACING #include #endif +#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_XDP) +#include +#endif +#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_XDP_TRACE) +#include +#endif /* Preferred number of descriptors to fill at once */ #define EFX_RX_PREFERRED_BATCH 8U +/* Maximum rx prefix used by any architecture. */ +#define EFX_MAX_RX_PREFIX_SIZE 16 + #if !defined(EFX_NOT_UPSTREAM) || defined(EFX_RX_PAGE_SHARE) /* Number of RX buffers to recycle pages for. When creating the RX page recycle * ring, this number is divided by the number of buffers per page to calculate @@ -249,6 +258,7 @@ static void efx_init_rx_buffer(struct efx_rx_queue *rx_queue, dma_addr = state->dma_addr; page_offset += sizeof(struct efx_rx_page_state); + page_offset += XDP_PACKET_HEADROOM; index = rx_queue->added_count & rx_queue->ptr_mask; rx_buf = efx_rx_buffer(rx_queue, index); @@ -1066,6 +1076,46 @@ static void efx_rx_deliver(struct efx_channel *channel, u8 *eh, netif_receive_skb(skb); } +#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_XDP) +static u32 efx_do_xdp(struct efx_nic *efx, struct efx_channel *channel, + struct bpf_prog *xdp_prog, u8 *eh, u16 len, s16 *offset) +{ + struct xdp_buff xdp; + void *orig_data; + u32 xdp_act; + + xdp.data = eh; +#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_XDP_HEAD) + xdp.data_hard_start = xdp.data - XDP_PACKET_HEADROOM; +#endif + xdp.data_end = xdp.data + len; + orig_data = xdp.data; + + xdp_act = bpf_prog_run_xdp(xdp_prog, &xdp); + + if (orig_data != xdp.data) + *offset = xdp.data - orig_data; + + switch (xdp_act) { + case XDP_PASS: + return XDP_PASS; + + case XDP_DROP: + return XDP_DROP; + + case XDP_TX: + WARN_ONCE(1, "XDP TX is not supported\n"); + return XDP_DROP; + + default: + bpf_warn_invalid_xdp_action(xdp_act); + case XDP_ABORTED: + trace_xdp_exception(efx->net_dev, xdp_prog, xdp_act); + return XDP_DROP; + } +} +#endif + /* Handle a received packet. Second half: Touches packet payload. */ void __efx_rx_packet(struct efx_channel *channel) { @@ -1076,6 +1126,9 @@ void __efx_rx_packet(struct efx_channel *channel) struct efx_rx_buffer *rx_buf = efx_rx_buffer(&channel->rx_queue, channel->rx_pkt_index); u8 *eh = efx_rx_buf_va(rx_buf); +#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_XDP) + struct bpf_prog *xdp_prog; +#endif #if defined(EFX_NOT_UPSTREAM) && defined(EFX_USE_FAKE_VLAN_RX_ACCEL) struct vlan_ethhdr *veh = (struct vlan_ethhdr *) eh; #endif @@ -1110,6 +1163,50 @@ void __efx_rx_packet(struct efx_channel *channel) goto out; } +#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_XDP) + rcu_read_lock(); + xdp_prog = rcu_dereference(channel->xdp_prog); + if (!xdp_prog) { + rcu_read_unlock(); + } else { + u8 rx_prefix[EFX_MAX_RX_PREFIX_SIZE]; + s16 offset = 0; + u32 xdp_act; + + EFX_WARN_ON_PARANOID(efx->rx_prefix_size > EFX_MAX_RX_PREFIX_SIZE); + + dma_sync_single_for_cpu(&efx->pci_dev->dev, rx_buf->dma_addr, + rx_buf->len, DMA_FROM_DEVICE); + + /* Save the rx prefix. */ + memcpy(rx_prefix, eh - efx->rx_prefix_size, + efx->rx_prefix_size); + + xdp_act = efx_do_xdp(efx, channel, xdp_prog, eh, rx_buf->len, + &offset); + rcu_read_unlock(); + + if (xdp_act == XDP_DROP) { + struct efx_rx_queue *rx_queue; + + rx_queue = efx_channel_get_rx_queue(channel); + efx_free_rx_buffers(rx_queue, rx_buf, + channel->rx_pkt_n_frags); + channel->n_rx_xdp_drops++; + goto out; + } + + if (offset) { + /* Adjust pointers and lengths and restore prefix. */ + eh += offset; + rx_buf->page_offset += offset; + rx_buf->len -= offset; + memcpy(eh - efx->rx_prefix_size, rx_prefix, + efx->rx_prefix_size); + } + } +#endif + #if defined(EFX_NOT_UPSTREAM) && defined(EFX_USE_FAKE_VLAN_RX_ACCEL) /* Fake VLAN tagging */ #if defined(EFX_HAVE_VLAN_RX_PATH) diff --git a/src/driver/linux_net/sriov.c b/src/driver/linux_net/sriov.c index 5b8284a..b7b1bf7 100644 --- a/src/driver/linux_net/sriov.c +++ b/src/driver/linux_net/sriov.c @@ -98,7 +98,7 @@ int efx_sriov_set_vf_mac(struct net_device *net_dev, int vf_i, u8 *mac) return -EOPNOTSUPP; } -#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_NDO_SET_VF_VLAN_PROTO) +#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_NDO_SET_VF_VLAN_PROTO) || defined(EFX_HAVE_NDO_EXT_SET_VF_VLAN_PROTO) int efx_sriov_set_vf_vlan(struct net_device *net_dev, int vf_i, u16 vlan, u8 qos, __be16 vlan_proto) #else @@ -113,7 +113,7 @@ int efx_sriov_set_vf_vlan(struct net_device *net_dev, int vf_i, u16 vlan, (qos & ~(VLAN_PRIO_MASK >> VLAN_PRIO_SHIFT))) return -EINVAL; -#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_NDO_SET_VF_VLAN_PROTO) +#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_NDO_SET_VF_VLAN_PROTO) || defined(EFX_HAVE_NDO_EXT_SET_VF_VLAN_PROTO) if (vlan_proto != htons(ETH_P_8021Q)) return -EPROTONOSUPPORT; #endif diff --git a/src/driver/linux_net/sriov.h b/src/driver/linux_net/sriov.h index d275c8c..0dafe02 100644 --- a/src/driver/linux_net/sriov.h +++ b/src/driver/linux_net/sriov.h @@ -32,7 +32,7 @@ void efx_sriov_init_max_vfs(struct efx_nic *efx, unsigned int pf_index); int efx_sriov_set_vf_mac(struct net_device *net_dev, int vf_i, u8 *mac); -#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_NDO_SET_VF_VLAN_PROTO) +#if !defined(EFX_USE_KCOMPAT) || defined(EFX_HAVE_NDO_SET_VF_VLAN_PROTO) || defined(EFX_HAVE_NDO_EXT_SET_VF_VLAN_PROTO) int efx_sriov_set_vf_vlan(struct net_device *net_dev, int vf_i, u16 vlan, u8 qos, __be16 vlan_proto); #else diff --git a/src/driver/linux_onload/cscope.out b/src/driver/linux_onload/cscope.out new file mode 100644 index 0000000..9afd464 --- /dev/null +++ b/src/driver/linux_onload/cscope.out @@ -0,0 +1,85329 @@ +cscope 15 $HOME/incoming/onload_tests/src/driver/linux_onload 0000497856 + @bonding.c + +12  + ~ + +13  + ~ + +14  + ~ + +15  + ~ + +16  + ~ + +17  + ~ + +19  + ~ + +20  + ~ + +21  + ~ + +22  + ~ + +23  + ~ + +24  + ~ + +25  + ~ + +27  + ~ + +29  + ~"ld_.h +" + +31 #i +CI_CFG_TEAMING + + +33 #i +LINUX_VERSION_CODE + < +KERNEL_VERSION +(2,6,24) + +34  + #DEV_GET_BY_NAME +( +n + + `dev_g_by_me +) + + ) + +36  + #DEV_GET_BY_NAME +( +n + + `dev_g_by_me +(& +_t +, (n)) + + ) + +40  + goo_bd_pl_ba + = ( +HZ +/10); + +41 +modu_m +( +oo_bd_pl_ba +, , +S_IRUGO + | +S_IWUSR +); + +42 +MODULE_PARM_DESC +( +oo_bd_pl_ba +, + +49 * + $ci_chr +(cڡ * +s +, +size_t + +cou +,  +c +) + +51  ; +cou +-- && * +s + != '\0'; ++s ) + +52 if* +s + =() +c + ) + +53  (*) +s +; + +54  +NULL +; + +55 + } +} + +56  + #chr + +ci_chr + + + ) + +58  + sci_bdg_iame + { + +59  + miame +[ +IFNAMSIZ +]; + +60 +ci_dΚk + + mli_lk +; + +64  + sci_bdg_m_substi + { + +65 +ci_ut32 + + mmaddr +; + +66 +ci_dΚk + + mli_lk +; + +70  + sci_bdg_sysfs_ad + { + +71  +fe +* + mf +; + +72 +mm_gmt_t + + md_fs +; + +76  + $ci_bdg_t_sysfs_ad +(* +fame +, + +77  +ci_bdg_sysfs_ad +* +e +) + +79 +e +-> +f + = + `fp_ݒ +( +fame +, +O_RDONLY +, 0); + +80 i + `IS_ERR +( +e +-> +f +) ) + +81  - +EIO +; + +83 i( +e +-> +f +-> +f_ + = +NULL +|| (e->f->f_-> +ad + == NULL) ) { + +84 + `fp_o +( +e +-> +f +, +NULL +); + +85  - +EIO +; + +88 +e +-> +d_fs + = + `g_fs +(); + +89 + `t_fs +( +KERNEL_DS +); + +92 + } +} + +95  + $ci_bdg_do_sysfs_ad +( +ci_bdg_sysfs_ad +* +e +, + +96 * +da +,  +cou +) + +98  +rc +; + +101 +rc + = +e +-> +f +-> +f_ +-> + `ad +(e->f, ( +__ur + *) +da +, +cou +, + +102 & +e +-> +f +-> +f_pos +); + +106 if +rc + =- +ERESTARTNOINTR + ) + +107 + `r_tsk_thad_ag +( +cut +, +TIF_SIGPENDING +); + +110 }  +rc + =- +ERESTARTNOINTR + ||=- +ERESTARTSYS + ); + +111  +rc +; + +112 + } +} + +115  + $ci_bdg_fish_sysfs_ad +( +ci_bdg_sysfs_ad +* +e +) + +117 + `t_fs +( +e +-> +d_fs +); + +119 + `fp_o +( +e +-> +f +, +NULL +); + +122 + } +} + +125  + $ci_bdg_ad_sysfs_fe +(* +fame +, * +da +,  +cou +) + +127  +rc +; + +128  +ci_bdg_sysfs_ad + +e +; + +130 +rc + = + `ci_bdg_t_sysfs_ad +( +fame +, & +e +); + +131 if +rc + != 0 ) + +132  +rc +; + +134 +rc + = + `ci_bdg_do_sysfs_ad +(& +e +, +da +, +cou +); + +136 + `ci_bdg_fish_sysfs_ad +(& +e +); + +138  +rc +; + +139 + } +} + +150  +le + * + $le_to_rg +(* +buf +,  +cou +,  +wle +, + +151 * +bys_csumed +) + +153 * +e + = + `chr +( +buf +, +cou +, +wle +); + +155 i +e + = +NULL + ) { + +156 * +bys_csumed + = 0; + +157  +buf +; + +160 * +e + = '\0'; + +162 * +bys_csumed + = ( +e + - +buf +) + 1; + +163 i* +bys_csumed + < +cou + ) + +164 +e +++; + +166 +e + = +NULL +; + +167  +e +; + +168 + } +} + +171  + #SYSFS_BASE + "/sys/ass/t/%s/bdg/%s" + + ) + +172  + #SYSFS_BASE_STRLEN + 24 + + ) + +173  + #SYSFS_MODE_LEAF + "mode" + + ) + +174  + #SYSFS_MODE_LEAF_STRLEN + 4 + + ) + +175  + #SYSFS_ACTIVESLAVE_LEAF + "aive_ave" + + ) + +176  + #SYSFS_ACTIVESLAVE_LEAF_STRLEN + 12 + + ) + +177  + #SYSFS_SLAVES_LEAF + "aves" + + ) + +178  + #SYSFS_SLAVES_LEAF_STRLEN + 6 + + ) + +179  + #SYSFS_HASHPOLICY_LEAF + "xm_hash_picy" + + ) + +180  + #SYSFS_HASHPOLICY_LEAF_STRLEN + 16 + + ) + +182  + #PROC_NET_BONDING_BASE + "/oc/t/bdg/%s" + + ) + +183  + #PROC_NET_BONDING_STRLEN + 18 + + ) + +185  + #SYSFS_READ_BLOCK_SIZE + 128 + + ) + +187  + $ci_bdg_g_mode +(* +bd_me +, * +mode +) + +189 * +bufr +; + +190 * +pbuf +; + +191 * +fame +; + +192  +n +; + +194 +bufr + = + `kmloc +( +SYSFS_READ_BLOCK_SIZE + + 1, +GFP_KERNEL +); + +195 i +bufr + = +NULL + ) + +196  - +ENOMEM +; + +198 +n + = + ` +( +bd_me ++ +SYSFS_BASE_STRLEN + + +SYSFS_MODE_LEAF_STRLEN + + 1; + +199 +fame + = + `kmloc +( +n +, +GFP_KERNEL +); + +200 i +fame + = +NULL + ) { + +201 + `k +( +bufr +); + +202  - +ENOMEM +; + +205 + `rtf +( +fame +, +SYSFS_BASE +, +bd_me +, +SYSFS_MODE_LEAF +); + +207 +n + = + `ci_bdg_ad_sysfs_fe +( +fame +, +bufr +, +SYSFS_READ_BLOCK_SIZE +); + +209 + `k +( +fame +); + +211 i +n + < 0 ) { + +212 + `k +( +bufr +); + +213  +n +; + +218 +pbuf + = + `le_to_rg +( +bufr +, +n +, '\n', &len); + +219 i +n + == 0 ) { + +220 + `k +( +bufr +); + +221  - +EINVAL +; + +224 +pbuf + = + `chr +( +bufr +, +n +, ' '); + +225 i +pbuf + = +NULL + ) { + +226 + `k +( +bufr +); + +227  - +EINVAL +; + +230 +n + = + `ssnf +( +pbuf +, " %d", +mode +); + +231 i +n + != 1 ) { + +232 + `k +( +bufr +); + +233  - +EINVAL +; + +236 + `k +( +bufr +); + +239 + } +} + +242  + $ci_bdg_g_hash_picy +(* +bd_me +, * +picy +) + +244 * +bufr +; + +245 * +pbuf +; + +246 * +fame +; + +247  +n +; + +249 +bufr + = + `kmloc +( +SYSFS_READ_BLOCK_SIZE + + 1, +GFP_KERNEL +); + +250 i +bufr + = +NULL + ) + +251  - +ENOMEM +; + +253 +n + = + ` +( +bd_me +) + + +254 +SYSFS_BASE_STRLEN + + +SYSFS_HASHPOLICY_LEAF_STRLEN + + 1; + +255 +fame + = + `kmloc +( +n +, +GFP_KERNEL +); + +256 i +fame + = +NULL + ) { + +257 + `k +( +bufr +); + +258  - +ENOMEM +; + +261 + `rtf +( +fame +, +SYSFS_BASE +, +bd_me +, +SYSFS_HASHPOLICY_LEAF +); + +263 +n + = + `ci_bdg_ad_sysfs_fe +( +fame +, +bufr +, +SYSFS_READ_BLOCK_SIZE +); + +265 + `k +( +fame +); + +267 i +n + < 0 ) { + +268 + `k +( +bufr +); + +269  +n +; + +274 +pbuf + = + `le_to_rg +( +bufr +, +n +, '\n', &len); + +275 i +n + == 0 ) { + +276 + `k +( +bufr +); + +277  - +EINVAL +; + +280 +pbuf + = + `chr +( +bufr +, +n +, ' '); + +281 i +pbuf + = +NULL + ) { + +282 + `k +( +bufr +); + +283  - +EINVAL +; + +286 +n + = + `ssnf +( +pbuf +, " %d", +picy +); + +287 i +n + != 1 ) { + +288 + `k +( +bufr +); + +289  - +EINVAL +; + +292 + `k +( +bufr +); + +295 + } +} + +297 #i +LINUX_VERSION_CODE + > +KERNEL_VERSION +(2,6,39) + +299  + $ci_bdg_g_ab_aive_ave +(* +bd_me +, * +aive +, + +300  +aive_n +) + +302 * +bufr +; + +303 * +fame +; + +304  +n +; + +306 +bufr + = + `kmloc +( +SYSFS_READ_BLOCK_SIZE + + 1, +GFP_KERNEL +); + +307 i +bufr + = +NULL + ) + +308  - +ENOMEM +; + +310 +n + = + ` +( +bd_me +) + + +311 +SYSFS_BASE_STRLEN + + +SYSFS_ACTIVESLAVE_LEAF_STRLEN + + 1; + +312 +fame + = + `kmloc +( +n +, +GFP_KERNEL +); + +313 i +fame + = +NULL + ) { + +314 + `k +( +bufr +); + +315  - +ENOMEM +; + +318 + `rtf +( +fame +, +SYSFS_BASE +, +bd_me +, +SYSFS_ACTIVESLAVE_LEAF +); + +320 +n + = + `ci_bdg_ad_sysfs_fe +( +fame +, +bufr +, +SYSFS_READ_BLOCK_SIZE +); + +322 + `k +( +fame +); + +324 i +n + < 0 ) { + +325 + `k +( +bufr +); + +326  +n +; + +329 i +n + == 0 ) { + +330 + `k +( +bufr +); + +331  - +ENOENT +; + +336 + `le_to_rg +( +bufr +, +n +, '\n', &len); + +337 i +n + == 0 ) { + +338 + `k +( +bufr +); + +339  - +EINVAL +; + +342 i( +n + < +aive_n +) + +343 + `ry +( +aive +, +bufr +); + +345 + `k +( +bufr +); + +346  - +EINVAL +; + +349 + `k +( +bufr +); + +351  +n +; + +352 + } +} + +356 ( + tci_bdg_li_y_ +)( + tci_di +*, *, , *); + +358  + $ci_bdg_g_li +(* +fame +, +ci_di + * +ouut_li +, + +359 +ci_bdg_li_y_ + * +y_ +, + +360 * +g +) + +362 * +bufr +; + +363 * +sch +; + +364 * +pbuf +; + +365  +ci_bdg_sysfs_ad + +e +; + +366  +rc +, +ad_n + = 0, +le_n +, +bufr_offt + = 0, +ov_n + = 0; + +368 +bufr + = + `kmloc +( +SYSFS_READ_BLOCK_SIZE + + 1, +GFP_KERNEL +); + +369 i +bufr + = +NULL + ) + +370  - +ENOMEM +; + +372 +rc + = + `ci_bdg_t_sysfs_ad +( +fame +, & +e +); + +373 if +rc + != 0 ) { + +374 + `k +( +bufr +); + +375  +rc +; + +379 +ov_n + = +ad_n + - +bufr_offt +; + +380 if +ov_n + ) { + +381 +sch + = + `kmloc +( +SYSFS_READ_BLOCK_SIZE + + 1, +GFP_KERNEL +); + +382 i +sch + = +NULL + ) { + +383 +rc + = - +ENOMEM +; + +384  +de +; + +387 + `memy +( +sch +, +bufr ++ +bufr_offt +, +ov_n +); + +388 + `memy +( +bufr +, +sch +, +ov_n +); + +389 + `k +( +sch +); + +395 +rc + = + `ci_bdg_do_sysfs_ad +(& +e +, +bufr + + +ov_n +, + +396 +SYSFS_READ_BLOCK_SIZE + - +ov_n +); + +398 if +rc + < 0 ) { + +399 if + `ci_di_n_emy +( +ouut_li +) ) { + +401 +rc + = 0; + +403  +de +; + +405 if +rc + == 0 ) + +406  +de +; + +408 +ad_n + = +rc + + +ov_n +; + +409 +bufr_offt + = 0; + +410 +pbuf + = +bufr +; + +413 +pbuf + = + `le_to_rg +( +bufr + + +bufr_offt +, + +414 +ad_n + - +bufr_offt +, + +415 '\n', & +le_n +); + +416 i( +le_n +) { + +417 + `y_ +( +ouut_li +, +bufr ++ +bufr_offt +, +le_n +, +g +); + +418 +bufr_offt + + +le_n +; + +420 }  +bufr_offt + < +ad_n + && +pbuf + ! +NULL + && +le_n + != 0); + +421 }  +ad_n + = +SYSFS_READ_BLOCK_SIZE + && +bufr_offt + > 0); + +423 +rc + = 0; + +425 +de +: + +426 + `k +( +bufr +); + +427 + `ci_bdg_fish_sysfs_ad +(& +e +); + +428  +rc +; + +429 + } +} + +432  + $ci_bdg_g_iames_y_ +( +ci_di +* +ii +, * +le +, + +433  +le_n +, * +g +) + +435 * +xt +; + +436  +ci_bdg_iame + * +iame +; + +439 +iame + = + `kmloc +(( +ci_bdg_iame +), +GFP_KERNEL +); + +441 if +iame + = +NULL +) + +444 + `ci_as +( +le + ! +NULL +); + +445 + `ci_as +( +le_n +); + +447  +le_n + > 0 && (* +le + == '\n' || *line == ' ' || *line == '\0') ) { + +448 ++ +le +; + +449 -- +le_n +; + +452 if +le_n + == 0 ) + +455 +xt + = + `chr +( +le +, +le_n +, ' '); + +457 if +xt + ! +NULL + ) { + +458 + `ci_as +( +xt + - +le + < +IFNAMSIZ +); + +459 + `y +( +iame +->iame, +le +, +xt + -ine); + +460 +iame +->iame[ +xt + - +le +] = '\0'; + +461 +xt +++; + +462 +le_n + -( +xt + - +le +); + +465 + `y +( +iame +->iame, +le +, +IFNAMSIZ +); + +466 +le_n + = 0; + +469 + `ci_di_push +( +ii +, & +iame +-> +li_lk +); + +471 +le + = +xt +; + +472 }  +le + ! +NULL +); + +473 + } +} + +476  + $ci_bdg_g_mas +( +ci_di + * +mas +) + +478  + `ci_bdg_g_li +("/sys/ass/t/bdg_mas", +mas +, + +479 +ci_bdg_g_iames_y_ +, +NULL +); + +480 + } +} + +483  + $ci_bdg_g_aves +(* +bd_me +, +ci_di + * +aves +) + +485 * +fame +; + +486  +n +, +rc +; + +488 +n + = + ` +( +bd_me ++ +SYSFS_BASE_STRLEN + + +SYSFS_SLAVES_LEAF_STRLEN +; + +489 +fame + = + `kmloc +( +n +, +GFP_KERNEL +); + +490 i +fame + = +NULL + ) + +491  - +ENOMEM +; + +493 + `rtf +( +fame +, +SYSFS_BASE +, +bd_me +, +SYSFS_SLAVES_LEAF +); + +495 +rc + = + `ci_bdg_g_li +( +fame +, +aves +, + +496 +ci_bdg_g_iames_y_ +, +NULL +); + +498 + `k +( +fame +); + +500  +rc +; + +501 + } +} + +504  + $ci_bdg_g_xm_picy_ags +(* +g +, * +ags +) + +506  +t_devi + * +t_dev + = (t_devi *) +g +; + +507  +hash_picy + = +CICP_BOND_XMIT_POLICY_NONE +; + +508  +mode +; + +510 if + `ci_bdg_g_mode +( +t_dev +-> +me +, & +mode +) != 0 ) + +513 if +mode + = +CICP_BOND_MODE_ACTIVE_BACKUP + || + +514 +mode + = +CICP_BOND_MODE_802_3AD + ) { + +515 if +mode + = +CICP_BOND_MODE_802_3AD + ) + +516 if + `ci_bdg_g_hash_picy +( +t_dev +-> +me +, & +hash_picy +) != 0 ) + +519 if +hash_picy + = +CICP_BOND_XMIT_POLICY_NONE + ) + +520 (* +ags +&=~ +CICP_LLAP_TYPE_USES_HASH +; + +522 (* +ags +| +CICP_LLAP_TYPE_USES_HASH +; + +524 if +hash_picy + = +CICP_BOND_XMIT_POLICY_LAYER34 + ) + +525 (* +ags +| +CICP_LLAP_TYPE_XMIT_HASH_LAYER4 +; + +527 (* +ags +&=~ +CICP_LLAP_TYPE_XMIT_HASH_LAYER4 +; + +531 + } +} + +534 #i +LINUX_VERSION_CODE + > +KERNEL_VERSION +(2,6,39) + +536  + sci_ad_oc_t_bdg_e + { + +537  + mcut_ave +[ +IFNAMSIZ +]; + +538  + magg_id +; + +543 + $ci_bdg_g__aive_aves_y_ +( +ci_di +* +aive_aves +, + +544 * +le +,  +le_n +, + +545 * +g +) + +547  +n +, +agg_id +; + +548  +ave_me +[ +IFNAMSIZ +]; + +549  +ci_bdg_iame + * +iame +; + +550  +ci_ad_oc_t_bdg_e +* +e + = + +551 ( +ci_ad_oc_t_bdg_e +*) +g +; + +553 +n + = + `ssnf +( +le +, " Aggg ID: %d", & +agg_id +); + +555 if +n + == 1 ) { + +556 if +e +-> +agg_id + == -1 ) + +557 +e +-> +agg_id + =gg_id; + +559 if +e +-> +cut_ave +[0] != '\0' ) { + +560 if +e +-> +agg_id + ==gg_id ) { + +561 +iame + = + `kmloc +(( +ci_bdg_iame +), +GFP_KERNEL +); + +562 if +iame + ! +NULL + ) { + +563 + `ry +( +iame +->iame, +e +-> +cut_ave +); + +564 + `ci_di_push +( +aive_aves +, & +iame +-> +li_lk +); + +567 +e +-> +cut_ave +[0] = '\0'; + +570 + `OO_DEBUG_BONDING +( + `ci_log +("Aggregator ID found without known slave")); + +575 +n + = + `ssnf +( +le +, "SvI: %s", +ave_me +); + +576 if +n + == 1 ) + +577 + `ry +( +e +-> +cut_ave +, +ave_me +); + +579 + } +} + +582  + $ci_bdg_g__aive_ave +(* +bd_me +, * +ave_me +) + +584  +n +, +rc +; + +585 * +fame +; + +586  +ci_ad_oc_t_bdg_e + +e +; + +587 +ci_di + +aive_aves +; + +589 +e +. +agg_id + = -1; + +590 +e +. +cut_ave +[0] = '\0'; + +591 + `ci_di_ +(& +aive_aves +); + +593 +n + = + ` +( +bd_me ++ +PROC_NET_BONDING_STRLEN + + 1; + +594 +fame + = + `kmloc +( +n +, +GFP_KERNEL +); + +595 i +fame + = +NULL + ) + +596  - +ENOMEM +; + +598 + `rtf +( +fame +, +PROC_NET_BONDING_BASE +, +bd_me +); + +600 +rc + = + `ci_bdg_g_li +( +fame +, & +aive_aves +, + +601 +ci_bdg_g__aive_aves_y_ +, & +e +); + +602 + `k +( +fame +); + +604 if +rc + != 0 ) + +607 +rc + = 0; + +608  + `ci_di_n_emy +(& +aive_aves +) ) { + +609 +ci_dΚk + * +lk + = + `ci_di_p +(& +aive_aves +); + +610  +ci_bdg_iame +* +iame + = + +611 + `CI_CONTAINER +( +ci_bdg_iame +, +li_lk +, +lk +); + +612 if + `rcmp +( +ave_me +, +iame +->ifname) == 0 ) + +613 +rc + = 1; + +614 + `k +( +iame +); + +617  +rc +; + +618 + } +} + +623  + sci_ad_oc_t_igmp_e + { + +624  + m_right_tdev +; + +625  + mifdex +; + +629  + $ci_bdg_g_m_subs_y_ +( +ci_di +* +substis +, + +630 * +le +,  +le_n +, + +631 * +g +) + +633  +ci_ad_oc_t_igmp_e +* +e + = + +634 ( +ci_ad_oc_t_igmp_e +*) +g +; + +635  +ci_bdg_m_substi + * +sub +; + +636  +n +, +ifdex +; + +638 if +e +-> +_right_tdev + ) { + +639 if +le +[0] >= '0' &&ine[0] <= '9' ) + +644 +e +-> +_right_tdev + = 0; + +647 +sub + = + `kmloc +(( +ci_bdg_m_substi +), +GFP_KERNEL +); + +648 if +sub + ! +NULL + ) { + +649 +n + = + `ssnf +( +le +, " %x", & +sub +-> +maddr +); + +651 if +n + == 1 ) { + +652 + `ci_di_push +( +substis +, & +sub +-> +li_lk +); + +653 + `OO_DEBUG_BONDING +( + `ci_log +("Found maddr %x foret dev %d", + +654 +sub +-> +maddr +, +e +-> +ifdex +)); + +657 + `k +( +sub +); + +658 + `OO_DEBUG_BONDING +( + `ci_log +("P (1蚆%s", +le +)); + +663 if +le +[0] >= '0' &&ine[0] <= '9' ) { + +665 +n + = + `ssnf +( +le +, "%d", & +ifdex +); + +666 if +n + == 1 ) { + +667 if +ifdex + = +e +->ifindex ) + +668 +e +-> +_right_tdev + = 1; + +671 + `OO_DEBUG_BONDING +( + `ci_log +("P (2蚆%s", +le +)); + +673 + } +} + +676  + $ci_bdg_g_m_subs +( +ifdex +, +ci_di +* +substis +) + +678  +ci_ad_oc_t_igmp_e + +e +; + +680 +e +. +_right_tdev + = 0; + +681 +e +. +ifdex + = ifindex; + +683  + `ci_bdg_g_li +("/oc/t/igmp", +substis +, + +684 +ci_bdg_g_m_subs_y_ +, & +e +); + +685 + } +} + +688  + sigmp_v3_pt + { + +689 +ci_ut8 + + mty +; + +690 +ci_ut8 + + mrved1 +; + +692 +ci_ut16 + + mchecksum +; + +693 +ci_ut16 + + mrved2 +; + +695 +ci_ut16 + + mn_cds +; + +696 +ci_ut8 + + mcd_ty +; + +697 +ci_ut8 + + maux_da_n +; + +699 +ci_ut16 + + mn_c +; + +701 +ci_ut32 + + mmaddr +; + +704  + s_rour_t_ti + { + +705 +ci_ut8 + + mty +; + +706 +ci_ut8 + + mn +; + +707 +ci_ut16 + + mvue +; + +710  + $ci_bdg_nd_igmp_pt +( +t_devi + * +tdev +, + +711 +ci_ut32 + +maddr +, + +712 +ci__addr_t_t + +c +) + +714  +igmp_v3_pt + * +pt_pkt +; + +715  +_rour_t_ti + * +rour_t +; + +716 +ci_4_hdr + * + +; + +717 +ci_ut16 +* +buf +; + +718  +csum_l +; + +719  +rc +, +n +; + +721 +n + = ( +ci_4_hdr +) + + +722 ( +_rour_t_ti +) + + +723 ( +igmp_v3_pt +); + +725 + + = + `kmloc +( +n +, +GFP_KERNEL +); + +726 +rour_t + = ( +_rour_t_ti + *)( + + + 1); + +727 +pt_pkt + = ( +igmp_v3_pt + *)( +rour_t + + 1); + +728 + +-> +_ihl_vsi + = + +729 + `CI_IP4_IHL_VERSION +(( +ci_4_hdr +) + + +730 ( +_rour_t_ti +)); + +731 + +-> +_tos + = ( +ci_ut8 +) +CI_IP_DFLT_TOS +; + +732 + +-> +_ag_off_be16 + = +CI_IP4_FRAG_DONT +; + +733 + +-> +_l + = ( +ci_ut8 +)1; + +734 + +-> +_oc + = ( +ci_ut8 +) +IPPROTO_IGMP +; + +736 + +-> +_t_n_be16 + = + `CI_BSWAP_BE16 +( +n +); + +737 + +-> +_id_be16 + = 0; + +738 + +-> +_ddr_be32 + = +c +; + +739 + +-> +_daddr_be32 + = + `CI_BSWAP_BE32 +(0xe0000016); + +741 +rour_t +-> +ty + = 0x94; + +742 +rour_t +-> +n + = 4; + +743 +rour_t +-> +vue + = 0; + +745 +pt_pkt +-> +ty + = 0x22; + +746 +pt_pkt +-> +rved1 + = 0; + +747 +pt_pkt +-> +checksum + = 0; + +748 +pt_pkt +-> +rved2 + = 0; + +749 +pt_pkt +-> +n_cds + = + `CI_BSWAP_BE16 +(1); + +750 +pt_pkt +-> +cd_ty + = 4; + +751 +pt_pkt +-> +aux_da_n + = 0; + +752 +pt_pkt +-> +n_c + = 0; + +753 +pt_pkt +-> +maddr + = maddr; + +755 +buf + = ( +ci_ut16 + *) +pt_pkt +; + +757 +csum_l + = +buf +[0] + buf[3] + buf[4] + buf[6] + buf[7]; + +758 +csum_l + = (csum_partial >> 16u) + (csum_partial & 0xffff); + +759 +csum_l + += (csum_partial >> 16u); + +760 +pt_pkt +-> +checksum + = ~ +csum_l + & 0xffff; + +762 +rc + = + `ci_w_sock_nd_bdtodev +( +tdev +-> +ifdex +,dev-> +me +, + +763 + +-> +_daddr_be32 +, (*), +n +); + +765 + `k +( + +); + +767  +rc +; + +768 + } +} + +776 +ci_le +  + $ci_bdg_g_ave_is_aive +( +t_devi + * +ma_t_dev +, + +777  +t_devi + * +ave_t_dev +, + +778  +ma_rowid +) + +780  +aive +; + +781 #i +LINUX_VERSION_CODE + < + `KERNEL_VERSION +(2,6,39) + +782 #ifde +IFF_SLAVE_INACTIVE + + +784 +aive + = ( +ave_t_dev +-> +iv_ags + & +IFF_SLAVE_INACTIVE +) == 0; + +788 +aive + = ( +ave_t_dev +-> +ags + & +IFF_NOARP +) == 0; + +791  +aive_if +[ +IFNAMSIZ +]; + +792  +rc +, +mode +; + +794 if + `ci_bd_g_mode +(& +CI_GLOBAL_CPLANE +, +ma_rowid +, + +795 +ma_t_dev +-> +ifdex +, & +mode +) < 0 ) + +800 if +mode + = +CICP_BOND_MODE_ACTIVE_BACKUP + ) { + +801 +rc + = + `ci_bdg_g_ab_aive_ave +( +ma_t_dev +-> +me +, +aive_if +, + +802 +IFNAMSIZ +); + +803 if +rc + < 0 ) { + +804 + `OO_DEBUG_BONDING +( + `ci_log +("Error %deadingctive interface on bond %s", + +805 +rc +, +ma_t_dev +-> +me +)); + +810 +aive + = + `cmp +( +ave_t_dev +-> +me +, +aive_if +, +IFNAMSIZ +) == 0; + +816 + `ci_as +( +mode + = +CICP_BOND_MODE_802_3AD +); + +818 +rc + = + `ci_bdg_g__aive_ave +( +ma_t_dev +-> +me +, + +819 +ave_t_dev +-> +me +); + +820 if +rc + < 0 ) + +822 +aive + = +rc +; + +826  +aive + && + +827 ( +ave_t_dev +-> +ags + & +IFF_UP +) && + +828 + `tif_rušg +( +ave_t_dev +); + +829 + } +} + +831  +oo_igmp__ov +; + +833  + $ci_bdg_ov +( +t_devi + * +t_dev +, + +834 +ci_hwpt_id_t + +hwpt +, + +835  +l +) + +837 +ci_di + +m_subs +; + +838 +ci_dΚk +* +lk +; + +839  +ci_bdg_m_substi +* +sub +; + +840  +rowid +; + +842 if +hwpt + ! +CI_HWPORT_ID_BAD + ) + +843 + `ci_log +("Ac˿tg %usg OnOd", +t_dev +-> +me +); + +845 + `ci_log +("Nهc˿tg %usg OnOd", +t_dev +-> +me +); + +847 + `OO_DEBUG_BONDING +( + `ci_log +("Faov %s/%dhwp܈%d", +t_dev +-> +me +, + +848 +t_dev +-> +ifdex +, +hwpt +)); + +850 +rowid + = + `ci_bd_fd_rowid +(& +CI_GLOBAL_CPLANE +, +t_dev +-> +ifdex +); + +851 if +rowid + == -1 ) + +852 + `OO_DEBUG_BONDING +( + `ci_log +("Noow for master %d in bondable", + +853 +t_dev +-> +ifdex +)); + +860 if + `ci_έ_upde_aive_hwpt +(& +CI_GLOBAL_CPLANE +, +t_dev +-> +ifdex +, + +861 +hwpt +, +rowid +, +l +) ) + +862 + `OO_DEBUG_BONDING +( + `ci_log +("Failover hwport update failed")); + +864 if +hwpt + ! +CI_HWPORT_ID_BAD + && +oo_igmp__ov + ) { + +865 + `ci_di_ +(& +m_subs +); + +867 + `ci_bdg_g_m_subs +( +t_dev +-> +ifdex +, & +m_subs +); + +868  + `ci_di_n_emy +(& +m_subs +) ) { + +869 +ci__addr_t_t + +c +; + +870 +lk + = + `ci_di_p +(& +m_subs +); + +871 +sub + = + `CI_CONTAINER +( +ci_bdg_m_substi +, +li_lk +, + +872 +lk +); + +873 if + `cios_if_g_ifdex_addr +(& +CI_GLOBAL_CPLANE +, + +874 +t_dev +-> +ifdex +, + +875 & +c +) == 0 ) + +876 + `ci_bdg_nd_igmp_pt +( +t_dev +, +sub +-> +maddr +, +c +); + +877 + `k +( +sub +); + +885 + `cios_if_bd_chge +(& +CI_GLOBAL_CPLANE +, +t_dev +-> +ifdex +); + +887 + } +} + +890  + $ci_bdg_check_mode +( +t_devi + * +ma_t_dev +, + +891  +ma_rowid +, * +l +) + +893  +rc +, +mode +, +d_mode +; + +895 +rc + = + `ci_bdg_g_mode +( +ma_t_dev +-> +me +, & +mode +); + +896 if +rc + != 0 ) { + +897 + `OO_DEBUG_BONDING +( + `ci_log +("E %ddg mod bd %s", +rc +, + +898 +ma_t_dev +-> +me +)); + +899  +rc +; + +902 +rc + = + `ci_bd_g_mode +(& +CI_GLOBAL_CPLANE +, +ma_rowid +, + +903 +ma_t_dev +-> +ifdex +, & +d_mode +); + +904 if +rc + != 0 ) + +905  +rc +; + +907 if +mode + ! +d_mode +) { + +908 +rc + = + `ci_bd_upde_mode +(& +CI_GLOBAL_CPLANE +, +ma_rowid +, + +909 +ma_t_dev +-> +ifdex +, +mode +); + +910 if +rc + != 0 ) + +911  +rc +; + +914 if +mode + ! +CICP_BOND_MODE_ACTIVE_BACKUP + && + +915 +mode + ! +CICP_BOND_MODE_802_3AD + ) { + +916 * +l + = 1; + +917 + `OO_DEBUG_BONDING +( + `ci_log +("Unaccelerated mode %d bond %s", + +918 +mode +, +ma_t_dev +-> +me +)); + +921  +mode +; + +922 + } +} + +925  + $ci_bdg_check_ave +( +ci_bdg_iame +* +ave +, + +926  +t_devi +* +ma_t_dev +, + +927  +ma_rowid +) + +929  +t_devi +* +ave_t_dev +; + +930  +ave_rowid +, +n_sfc_pt + = 0, +rc +; + +931 +ci_p_t + +p +; + +933 +ave_t_dev + = + `DEV_GET_BY_NAME +( +ave +-> +iame +); + +934 if +ave_t_dev + ! +NULL + ) { + +935 +ave_rowid + = + `ci_bd_fd_rowid +(& +CI_GLOBAL_CPLANE +, + +936 +ave_t_dev +-> +ifdex +); + +937 if +ave_rowid + == -1 ) { + +938 +ave_rowid + = + +939 + `ci_bd_add_ave +(& +CI_GLOBAL_CPLANE +, +ma_t_dev +-> +ifdex +, + +940 +ave_t_dev +-> +ifdex +); + +941 if +ave_rowid + >= 0 ) { + +942 + `OO_DEBUG_BONDING +( + `ci_log +("Added slave %s/%do master %s", + +943 +ave_t_dev +-> +me +, + +944 +ave_t_dev +-> +ifdex +, + +945 +ma_t_dev +-> +me +)); + +948 + `OO_DEBUG_BONDING +( + `ci_log +("Failedodd slave %sow %d", + +949 +ave +-> +iame +, +ave_rowid +)); + +950 + `dev_put +( +ave_t_dev +); + +951  +ave_rowid +; + +954 if( +rc + = + `ci_bd_check_ave_owr +(& +CI_GLOBAL_CPLANE +, +ave_rowid +, + +955 +ave_t_dev +-> +ifdex +, + +956 +ma_t_dev +-> +ifdex +)) != 0 ) { + +957 + `OO_DEBUG_BONDING +( + `ci_log +("Slave %d moved master from %do %d", + +958 +ave_t_dev +-> +ifdex +, +rc +, + +959 +ma_t_dev +-> +ifdex +)); + +960 +rc + = + `ci_bd_move_ave +(& +CI_GLOBAL_CPLANE +,c, + +961 +ave_t_dev +-> +ifdex +); + +962 if +rc + != 0 ) { + +963 + `OO_DEBUG_BONDING +( + `ci_log +("E %demovg svom ma", +rc +)); + +964 + `dev_put +( +ave_t_dev +); + +965  +rc +; + +968 +ave_rowid + = + `ci_bd_add_ave +(& +CI_GLOBAL_CPLANE +, + +969 +ma_t_dev +-> +ifdex +, + +970 +ave_t_dev +-> +ifdex +); + +971 if +ave_rowid + < 0 ) { + +972 + `OO_DEBUG_BONDING +( + `ci_log +("Failedodd moved slave %srror %d", + +973 +ave +-> +iame +, +ave_rowid +)); + +974 + `dev_put +( +ave_t_dev +); + +975  +ave_rowid +; + +981 +rc + = + `ci_bd_t_aive +(& +CI_GLOBAL_CPLANE +, + +982 +ma_rowid +, +ma_t_dev +-> +ifdex +, + +983 +ave_rowid +, +ave_t_dev +-> +ifdex +, + +984 + `ci_bdg_g_ave_is_aive +( +ma_t_dev +, + +985 +ave_t_dev +, + +986 +ma_rowid +)); + +987 if +rc + != 0 ) { + +988 + `OO_DEBUG_BONDING +( + `ci_log +("Failedo set slave %sow %d (in)active: %d", + +989 +ave +-> +iame +, +ave_rowid +, +rc +)); + +990 + `dev_put +( +ave_t_dev +); + +991  +rc +; + +994 +rc + = + `ci_bd_mk_row +(& +CI_GLOBAL_CPLANE +, +ave_rowid +, + +995 +ave_t_dev +-> +ifdex +); + +996 if +rc + != 0 ) { + +997 + `OO_DEBUG_BONDING +( + `ci_log +("Failedo mark slave %sow %d: %d", + +998 +ave +-> +iame +, +ave_rowid +, +rc +)); + +999 + `dev_put +( +ave_t_dev +); + +1000  +rc +; + +1003 +rc + = + `ci_έ_g_psuti +(& +CI_GLOBAL_CPLANE +, +ave_t_dev +-> +ifdex +, + +1004 & +p +); + +1005 if +rc + != 0 ) { + +1006 + `OO_DEBUG_BONDING +( + `ci_log +("Failedo get slavencapsulation %s %d", + +1007 +ave +-> +iame +, +rc +)); + +1008 + `dev_put +( +ave_t_dev +); + +1009  +rc +; + +1012 if!( +p +. +ty + & +CICP_LLAP_TYPE_SFC +) || + +1013 ( +p +. +ty + & +CICP_LLAP_TYPE_VLAN +) ) + +1014 +n_sfc_pt + = 1; + +1016 + `dev_put +( +ave_t_dev +); + +1019 + `OO_DEBUG_BONDING +( + `ci_log +("Ntdev mchg sv%s", +ave +-> +iame +)); + +1023  +n_sfc_pt +; + +1024 + } +} + +1027  + $ci_bdg_check_aves +( +t_devi +* +ma_t_dev +, + +1028  +ma_rowid +, * +l +) + +1030  +n_sfc_pt + = 0; + +1031  +no_aves + = 1; + +1032  +u + = 0; + +1033 +ci_di + +aves +; + +1034  +ci_bdg_iame +* +ave +; + +1035  +rc +; + +1037 + `ci_di_ +(& +aves +); + +1038 +rc + = + `ci_bdg_g_aves +( +ma_t_dev +-> +me +, & +aves +); + +1039 i( +rc + != 0) { + +1040 + `OO_DEBUG_BONDING +( + `ci_log +("E %ddg bdg sves", +rc +)); + +1041 + `ci_as +( + `ci_di_is_emy +(& +aves +)); + +1044  + `ci_di_n_emy +(& +aves +) ) { + +1045 +ave + = + `CI_CONTAINER +( +ci_bdg_iame +, +li_lk +, + +1046 + `ci_di_p +(& +aves +)); + +1047 +rc + = + `ci_bdg_check_ave +( +ave +, +ma_t_dev +, +ma_rowid +); + +1048 if +rc + < 0 ) + +1049 +u + = 1; + +1051 +n_sfc_pt + | +rc +; + +1052 +no_aves + = 0; + +1054 + `k +( +ave +); + +1057 + `ci_bd_u_unmked__bd +(& +CI_GLOBAL_CPLANE +, + +1058 +ma_t_dev +-> +ifdex +); + +1060 if +u + ) + +1062 if +no_aves + ) { + +1063 + `OO_DEBUG_BONDING +( + `ci_log +("No slaves in bond %s,otccelerating", + +1064 +ma_t_dev +-> +me +)); + +1067 if +n_sfc_pt + ) { + +1068 + `OO_DEBUG_BONDING +( + `ci_log +("Non-SFCort in bond %s,otccelerating", + +1069 +ma_t_dev +-> +me +)); + +1070 * +l + = 1; + +1075 + } +} + +1078  + $ci_bdg_check_aive +( +t_devi +* +ma_t_dev +, + +1079  +ma_row_id +) + +1081  +rc +; + +1082 +ci_hwpt_id_t + +hwpt +, +cu_hwpt +; + +1084 +rc + = + `ci_bd_g_n_aive_aves +(& +CI_GLOBAL_CPLANE +, +ma_row_id +, + +1085 +ma_t_dev +-> +ifdex +); + +1086 if +rc + < 0 ) + +1087  +rc +; + +1088 if +rc + == 0 ) + +1091 +cu_hwpt + = + `ci_έ_g_hwpt +(& +CI_GLOBAL_CPLANE +, + +1092 +ma_t_dev +-> +ifdex +); + +1098 +rc + = + `ci_bd_check_aive_ave_hwpt +(& +CI_GLOBAL_CPLANE +, + +1099 +ma_row_id +, + +1100 +ma_t_dev +-> +ifdex +, + +1101 +cu_hwpt +, + +1102 & +hwpt +); + +1103 if +rc + != 0 ) + +1104  +rc +; + +1106 if +hwpt + ! +cu_hwpt + ) { + +1107 + `OO_DEBUG_BONDING +( + `ci_log +("update %s/%d hwport %d->%d", + +1108 +ma_t_dev +-> +me +, ma_t_dev-> +ifdex +, + +1109 +cu_hwpt +, +hwpt +)); + +1110 + `ci_bdg_ov +( +ma_t_dev +, +hwpt +, 0); + +1111 + `OO_DEBUG_BONDING +( + `ci_log +("update %s/%d hwportow %d", + +1112 +ma_t_dev +-> +me +, ma_t_dev-> +ifdex +, + +1113 + `ci_έ_g_hwpt +(& +CI_GLOBAL_CPLANE +, + +1114 +ma_t_dev +-> +ifdex +))); + +1118 + } +} + +1121  + $ci_bdg_check_hash_picy +( +t_devi + * +t_dev +, + +1122  +rowid +,  +mode +, * +l +) + +1124  +w_hash_picy + = +CICP_BOND_XMIT_POLICY_NONE +; + +1125  +rc +; + +1126 if +mode + = +CICP_BOND_MODE_802_3AD + ) + +1127 if + `ci_bdg_g_hash_picy +( +t_dev +-> +me +, & +w_hash_picy +) != 0 ) + +1130 +rc + = + `ci_bd_t_hash_picy +(& +CI_GLOBAL_CPLANE +, +rowid +, +mode +, + +1131 +t_dev +-> +ifdex +, +w_hash_picy +); + +1132 if +rc + < 0 ) + +1133  +rc +; + +1135 if +mode + = +CICP_BOND_MODE_802_3AD + ) { + +1136 if +w_hash_picy + = +CICP_BOND_XMIT_POLICY_LAYER2 + || + +1137 +w_hash_picy + = +CICP_BOND_XMIT_POLICY_LAYER23 + || + +1138 +w_hash_picy + = +CICP_BOND_XMIT_POLICY_LAYER34 + ) + +1141 * +l + = 1; + +1147 + } +} + +1150  + $ci_bdg_oss_ma +( +ci_bdg_iame + * +ma +) + +1152  +t_devi +* +ma_t_dev +; + +1153  +rc +, +ma_rowid +, +mode +, +l + = 0; + +1154 +ci_p_t + +p +; + +1156 +ma_t_dev + = + `DEV_GET_BY_NAME +( +ma +-> +iame +); + +1157 if +ma_t_dev + = +NULL + ) { + +1158 + `OO_DEBUG_BONDING +( + `ci_log +("Can't findetdev for master %s", + +1159 +ma +-> +iame +)); + +1163 if!( +ma_t_dev +-> +ags + & +IFF_UP +) ) + +1164  +out0 +; + +1166 +rc + = + `ci_bd_fd_rowid +(& +CI_GLOBAL_CPLANE +, +ma_t_dev +-> +ifdex +); + +1167 if +rc + < 0 ) { + +1168 + `OO_DEBUG_BONDING +( + `ci_log +("Can't findow for master %s: %d", + +1169 +ma +-> +iame +, +rc +)); + +1170  +out0 +; + +1172 +ma_rowid + = +rc +; + +1174 +rc + = + `ci_bdg_check_mode +( +ma_t_dev +, +ma_rowid +, & +l +); + +1175 if +rc + < 0 ) + +1176  +out1 +; + +1177 +mode + = +rc +; + +1179 +rc + = + `ci_bdg_check_hash_picy +( +ma_t_dev +, +ma_rowid +, +mode +, & +l +); + +1180 if +rc + != 0 ) + +1181  +out1 +; + +1183 +rc + = + `ci_bdg_check_aves +( +ma_t_dev +, +ma_rowid +, & +l +); + +1184 if +rc + != 0 ) + +1185  +out1 +; + +1190 +rc + = + `ci_bdg_check_aive +( +ma_t_dev +, +ma_rowid +); + +1191 if +rc + != 0 ) + +1192  +out1 +; + +1194 +out1 +: + +1195 if +rc + != 0 && + +1196 (( + `ci_έ_g_hwpt +(& +CI_GLOBAL_CPLANE +, +ma_t_dev +-> +ifdex +) != + +1197 +CI_HWPORT_ID_BAD +) || + +1198 ( +l + && + +1199 ( + `ci_έ_g_psuti +(& +CI_GLOBAL_CPLANE +, + +1200 +ma_t_dev +-> +ifdex +, + +1201 & +p +) == 0) && + +1202 ( +p +. +ty + & +CICP_LLAP_TYPE_CAN_ONLOAD_BAD_HWPORT +))) ) + +1203 + `ci_bdg_ov +( +ma_t_dev +, +CI_HWPORT_ID_BAD +, +l +); + +1205 +out0 +: + +1206 + `dev_put +( +ma_t_dev +); + +1207 + } +} + +1210  + $ci_bdg_wkem_ +(* +cڋxt +) + +1212 +ci_di + +mas +; + +1213  +ci_bdg_iame +* +ma +; + +1214  +rc +; + +1216 + `ci_di_ +(& +mas +); + +1218 +rc + = + `ci_bdg_g_mas +(& +mas +); + +1219 if +rc + != 0 ) { + +1220 + `OO_DEBUG_BONDING +( + `ci_log +("E %ddg bdg mas", +rc +)); + +1221 + `ci_as +( + `ci_di_is_emy +(& +mas +)); + +1222 + `ci_bdg_t_tim_riod +( +HZ +, 0); + +1226  + `ci_di_n_emy +(& +mas +) ) { + +1227 +ma + = + `CI_CONTAINER +( +ci_bdg_iame +, +li_lk +, + +1228 + `ci_di_p +(& +mas +)); + +1230 + `ci_bdg_oss_ma +( +ma +); + +1232 + `k +( +ma +); + +1236 + } +} + +1239 +omic_t + + gtim_rušg +; + +1240  +tim_li + + gbdg_tim +; + +1241 +ci_wkem_t + + gbdg_wkem +; + +1243  + gtim_riod +; + +1244  + gtim_occuns +; + +1245  + gϡ_tim_jiffs +; + +1247  +oo_bd_pl_ba +; + +1249  + $ci_bdg_g_tim_riod +() + +1251 if +tim_occuns + > 0 ) { + +1252 if(-- +tim_occuns +) == 0 ) + +1253 +tim_riod + = +oo_bd_pl_ba +; + +1255  +tim_riod +; + +1256 + } +} + +1259  + $ci_bdg_tim_ +( +l +) + +1261 if + `omic_ad +(& +tim_rušg +) == 0 ) + +1264 +ϡ_tim_jiffs + = +jiffs +; + +1266 + `ci_wkqueue_add +(& +CI_GLOBAL_WORKQUEUE +, & +bdg_wkem +); + +1268 + `mod_tim +(& +bdg_tim +, +jiffs + + + `ci_bdg_g_tim_riod +()); + +1269 + } +} + +1274  + $ci_bdg_t_tim_riod +( +riod +,  +occuns +) + +1276 #i +CI_CFG_TEAMING + + +1277 +tim_riod + = +riod +; + +1278 +tim_occuns + = +occuns +; + +1280 if + `omic_ad +(& +tim_rušg +) ) + +1281 + `mod_tim +(& +bdg_tim +, +ϡ_tim_jiffs + + +riod +); + +1283 + } +} + +1286  + $ci_bdg_ +() + +1288 #i +CI_CFG_TEAMING + + +1289 + `ci_wkem_ +(& +bdg_wkem +, +ci_bdg_wkem_ +, +NULL +); + +1291 + `_tim +(& +bdg_tim +); + +1292 +bdg_tim +. +funi + = & +ci_bdg_tim_ +; + +1293 +bdg_tim +. +da + = 0; + +1294 + `omic_t +(& +tim_rušg +, 1); + +1295 +ϡ_tim_jiffs + = +jiffs +; + +1296 + `ci_bdg_t_tim_riod +( +oo_bd_pl_ba +, 0); + +1299 + } +} + +1302  + $ci_bdg_fi +() + +1304 #i +CI_CFG_TEAMING + + +1305 + `omic_t +(& +tim_rušg +, 0); + +1307 + `ci_wkqueue_ush +(& +CI_GLOBAL_WORKQUEUE +); + +1308 + `d_tim_sync +(& +bdg_tim +); + +1309 + `ci_wkqueue_ush +(& +CI_GLOBAL_WORKQUEUE +); + +1312 + } +} + + @compat.c + +21  + ~ + +22  + ~ + +23  + ~ + +24  + ~ + +25  + ~ + +28 +ci_ive_t + * + +29 + $ci_riv +( +fe + * +fp +) + +31 if +fp +-> +f_ + !& +oo_fs + ) + +32  +NULL +; + +34  ( +ci_ive_t + *)( +fp +-> +ive_da +); + +35 + } +} + +37  +fe + * + +38 + $ci_ivf +( +ci_ive_t + * +iv +) + +40  +iv +-> +_fp +; + +41 + } +} + +44 #i +CI_MEMLEAK_DEBUG_ALLOC_TABLE + + +46  +ci_loc_y + * + gci_loc_b +[ +CI_ALLOC_TABLE_BULKS +]; + +47  + gci_loc_b_sz + = 0; + +48 +EXPORT_SYMBOL +( +ci_loc_b_add +); + +49 +EXPORT_SYMBOL +( +ci_loc_b_d +); + + @driver.c + +13  + ~ + +14  + ~ + +15  + ~ + +16  + ~ + +17  + ~ + +18  + ~ + +19  + ~ + +20  + ~ + +21  + ~ + +22  + ~ + +23  + ~ + +24  + ~"ld_.h +" + +25  + ~ + +26  + ~ + +28 #i +defed +( +__x86_64__ +&& +LINUX_VERSION_CODE + < +KERNEL_VERSION +(2,6,11) + +29  + #NEED_IOCTL32 + + + ) + +30  + ~ + +31  + ~ + +35  + ~ + +44 +MODULE_AUTHOR +("Solarflare Communications"); + +45 +MODULE_LICENSE +("GPL"); + +46 +MODULE_VERSION +( +ONLOAD_VERSION +); + +58  + gci_driv_debug_bs +; + +60  + gno_ + = 0; + +62 +CI_DEBUG +( +no_shed_e_nic +;) + +63 +CI_DEBUG +( +EXPORT_SYMBOL +( +no_shed_e_nic +);) + +65 +modu_m +( +no_ +, , +S_IRUGO +); + +66 +MODULE_PARM_DESC +( +no_ +, + +69  + goo_debug_bs + = +__OO_DEBUGERR__ +; + +70 +modu_m +( +oo_debug_bs +, , +S_IRUGO + | +S_IWUSR +); + +71 +MODULE_PARM_DESC +( +oo_debug_bs +, "Onload driverogevel"); + +73 +CI_DEBUG +( +oo_debug_code_v +;) + +74 +CI_DEBUG +( +modu_m +( +oo_debug_code_v +, , +S_IRUGO + | +S_IWUSR +);) + +76 +CI_DEBUG +( +modu_m +( +no_shed_e_nic +, , +S_IRUGO + | +S_IWUSR +);) + +78  + gci__log + = 0xf; + +79 +modu_m +( +ci__log +, +ut +, +S_IRUGO + | +S_IWUSR +); + +80 +MODULE_PARM_DESC +( +ci__log +, "Onloadransportogevel"); + +82  + goo_igmp__ov + = 0; + +83 +modu_m +( +oo_igmp__ov +, , +S_IRUGO + | +S_IWUSR +); + +84 +MODULE_PARM_DESC +( +oo_igmp__ov +, + +87 +modu_m +( +ci_log_tis +, , +S_IRUGO + | +S_IWUSR +); + +88 +MODULE_PARM_DESC +( +ci_log_tis +, + +91 +modu_m +( +oof_shed_kp_thsh +, , +S_IRUGO + | +S_IWUSR +); + +92 +MODULE_PARM_DESC +( +oof_shed_kp_thsh +, + +97 +modu_m +( +oof_shed_l_thsh +, , +S_IRUGO + | +S_IWUSR +); + +98 +MODULE_PARM_DESC +( +oof_shed_l_thsh +, + +103  + gphys_mode_gid + = -2; + +104 +modu_m +( +phys_mode_gid +, , +S_IRUGO + | +S_IWUSR +); + +105 +MODULE_PARM_DESC +( +phys_mode_gid +, + +111  + gtimesync_riod + = 500; + +112 +modu_m +( +timesync_riod +, , +S_IRUGO + | +S_IWUSR +); + +113 +MODULE_PARM_DESC +( +timesync_riod +, + +117  + g_sigls_d_ex + = 1; + +118 +modu_m +( +_sigls_d_ex +, , +S_IRUGO +); + +119 +MODULE_PARM_DESC +( +_sigls_d_ex +, + +128  + gmax_y2_rs + = 50; + +129 +modu_m +( +max_y2_rs +, , +S_IRUGO +); + +130 +MODULE_PARM_DESC +( +max_y2_rs +, + +133  + gmax_rous + = 256; + +134 +modu_m +( +max_rous +, , +S_IRUGO +); + +135 +MODULE_PARM_DESC +( +max_rous +, + +137  + gmax_ighs + = 1024; + +138 +modu_m +( +max_ighs +, , +S_IRUGO +); + +139 +MODULE_PARM_DESC +( +max_ighs +, + +145  +eb_e_f_iscsi +(); + +146  +eb_nup__iscsi +(); + +155  + $eb_fds_dump +( +pid +) + +157  +sk_ru +* +t +; + +158  +fe +* +fp +; + +159 +ci_ive_t +* +iv +; + +160  +fd +, +rc + = 0; + +162 +t + = + `ci_lock_sk_by_pid +( +pid +); + +164 if! +t + ) { + +165 + `ci_log +("%s: badid %d", +__FUNCTION__ +, +pid +); + +166 +rc + = - +ENOENT +; + +169 if! +t +-> +fes + ) { + +170 + `ci_log +("%s: fepoinu ipid %d", +__FUNCTION__ +, +pid +); + +171 +rc + = - +EINVAL +; + +174 +ci_fdb + * +fdt +; + +176 + `_lock +(& +t +-> +fes +-> +fe_lock +); + +177 +fdt + = + `ci_fes_fdb +( +t +-> +fes +); + +179  +fd + = 0; fd < +fdt +-> +max_fds +; ++fd ) { + +180 +fp + = +fdt +-> +fd +[fd]; + +181 if! +fp + ) ; + +182 +iv + = 0; + +184 if +fp +-> +f_ + =& +oo_fs + ) { + +185 + `ci_log +("pid=%d fd=%d =>b", +pid +, +fd +); + +186 +iv + = ( +ci_ive_t +* +fp +-> +ive_da +; + +188 if +fp +-> +f_ + =& +lux_t_hr_fs_t + ) { + +189 + `ci_log +("pid=%d fd=%d => TCP", +pid +, +fd +); + +190 +iv + = ( +ci_ive_t +* +fp +-> +ive_da +; + +192 if +fp +-> +f_ + =& +lux_t_hr_fs_udp + ) { + +193 + `ci_log +("pid=%d fd=%d => UDP", +pid +, +fd +); + +194 +iv + = ( +ci_ive_t +* +fp +-> +ive_da +; + +196 #i +CI_CFG_USERSPACE_PIPE + + +197 if +fp +-> +f_ + =& +lux_t_hr_fs_pe_ad + ) { + +198 + `ci_log +("pid=%d fd=%d => PIPE READER", +pid +, +fd +); + +199 +iv + = ( +ci_ive_t +* +fp +-> +ive_da +; + +201 if +fp +-> +f_ + =& +lux_t_hr_fs_pe_wr + ) { + +202 + `ci_log +("pid=%d fd=%d => PIPE WRITER", +pid +, +fd +); + +203 +iv + = ( +ci_ive_t +* +fp +-> +ive_da +; + +207 + `ci_log +("pid=%d fd=%d => oth", +pid +, +fd +); + +209 #ide +NDEBUG + + +210 if +iv + ) + `THR_PRIV_DUMP +(priv, " "); + +214 + `_uock +(& +t +-> +fes +-> +fe_lock +); + +217 + `ci_uock_sk +(); + +220  +rc +; + +221 + } +} + +225 #i +CI_MEMLEAK_DEBUG_ALLOC_TABLE + + +227 +ci_nole +  + +228 + $iol_debug_loc_b + ( +ci_ive_t + * +iv +, +ulg + +g +) + +230 i(! + `ci_is_sydm +() - +EPERM +; + +233  +ci_loc_fo + +lol +; + +235 + `cy_om_ur_t +(& +lol +, ( +ddr_t + +g +, + +236 +CI_ALLOC_INFO_SIZEOF_CTRL +, - +EFAULT +); + +237 + `ci_log +("Processingequest for memoryllocationable: bulk #%u", + +238 +lol +. +bulk +); + +239 i( +lol +. +bulk + < ( +ci_loc_b_sz + >> +CI_ALLOC_TABLE_BULK_2 +)) { + +240 + `cy_to_ur_t +(( +ddr_t +)(() +g + + + +241 +CI_ALLOC_INFO_SIZEOF_CTRL +), + +242 +ci_loc_b +[ +lol +. +bulk +], + +243 ( +lol +. +s +), + +244 - +EFAULT +); + +246  - +E2BIG +; + +251 + } +} + +268  + $oo_f_ݒ +( +ode +* inode,  +fe +* +fp +) + +270 +ci_ive_t +* +iv +; + +272 + `OO_DEBUG_VERB +( + `ci_log +("ci_char_fop_open:")); + +274 if( +iv + = + `CI_ALLOC_OBJ +( +ci_ive_t +)= +NULL + ) + +275  - +ENOMEM +; + +277 + `CI_ZERO +( +iv +); + +278 +iv +-> +_fp + = +fp +; + +279 +iv +-> +fd_ty + = +CI_PRIV_TYPE_NONE +; + +281 +fp +-> +ive_da + = (* +iv +; + +282 +fp +-> +f_ + = & +oo_fs +; + +285 + } +} + +293  + $oo_f_a +( +ode +* inode,  +fe +* +fp +) + +295 +ci_ive_t + * +iv + = (ci_ive_* +fp +-> +ive_da +; + +297 + `OO_DEBUG_VERB +( + `ci_log +("ci_ch_f_o %d", +iv +-> +fd_ty +)); + +300 +fp +-> +ive_da + = 0; + +301 i( +iv +-> +thr + ! +NULL +) { + +302 + `TCP_HELPER_RESOURCE_ASSERT_VALID +( +iv +-> +thr +, 0); + +303 + `eb_thr_a +( +iv +-> +thr +); + +305 + `ld_iv_ +( +iv +); + +307 + } +} + +310 #i +OO_OPS_TABLE_HAS_NAME + + +311  + #OP_NAME +( + +(()-> +me +) + + ) + +313  + #OP_NAME +( + +"" + + ) + +321  + $oo_f_uocked_iol +( +fe +* +fp +,  +cmd +,  +g +) + +323 +ci_ive_t + * +iv + = +fp +-> +ive_da +; + +324  +__ur +* +gp + = (__ur* +g +; + +325  +lol_g +[10]; + +326 +oo_ݔis_b_t +* + +; + +327  +ioc_ + = + `_IOC_NR +( +cmd +); + +328 * +lol_p +; + +329  +rc +; + +331 if +eb_t_driv +. +fe_fs_to_dr + ! +NULL + ) + +332 + `oo_fe_f_dr_li_now +( +NULL +); + +334 if +ioc_ + > +OO_OP_END + || + `_IOC_TYPE +( +cmd +! +OO_LINUX_IOC_BASE + ) { + +345 #i! + `defed + ( +__PPC__ +) + +346 + `BUILD_BUG_ON +( + `_IOC_TYPE +( +TIOCSSOFTCAR +!_IOC_TYPE( +TCGETS +)); + +347 if + `_IOC_TYPE +( +cmd +!_IOC_TYPE( +TCGETS +) || + +348 + `_IOC_NR +( +cmd +> _IOC_NR( +TIOCSSOFTCAR +) ) { + +353 if +cmd + ! +TCGETS + && cmd ! +TIOCGPGRP +) { + +355 + `OO_DEBUG_ERR +( + `ci_log +("%s: bad cmd=%xype=%d(%d)r=%d(%d)", + +356 +__FUNCTION__ +, +cmd +, + `_IOC_TYPE +(cmd), +OO_LINUX_IOC_BASE +, + +357 +ioc_ +, +OO_OP_END +)); + +359  - +EINVAL +; + +361 + + = & +oo_ݔis +[ +ioc_ +]; + +362 if + +-> +ioc_cmd + ! +cmd + ) { + +366 + `ci_log +("%s: ioȏb bad cmd=%xr=%ury=%x", +__FUNCTION__ +, + +367 +cmd +, +ioc_ +, + +-> +ioc_cmd +); + +368  - +EINVAL +; + +372 if + `_IOC_SIZE +( +cmd +<( +lol_g +) ) { + +373 +lol_p + = & +lol_g +; + +376 + `CI_DEBUG +(i( + `_IOC_SIZE +( +cmd +=0 +lol_p + = +NULL +;) + +379 if( +lol_p + = + `kmloc +( + `_IOC_SIZE +( +cmd +), +GFP_KERNEL +)= +NULL + ) + +380  - +ENOMEM +; + +381 + `memt +( +lol_p +, 0, + `_IOC_SIZE +( +cmd +)); + +384 + `OO_DEBUG_OS +( + `ci_log +("%s: %srg=%lx,%s%s,%d)", +__FUNCTION__ +, + `OP_NAME +( + +), +g +, + +385 + `_IOC_DIR +( +cmd +& +_IOC_WRITE + ? "W" : "", + +386 + `_IOC_DIR +( +cmd +& +_IOC_READ + ? "R" : "", + `_IOC_SIZE +(cmd))); + +389 if( + `_IOC_DIR +( +cmd +& +_IOC_WRITE +) ) + +390 if + `cy_om_ur +( +lol_p +, +gp +, + `_IOC_SIZE +( +cmd +)) ) { + +391 +rc + = - +EFAULT +; + +392  +nup_out +; + +396 +rc + = + +-> + `hdr +( +iv +, +lol_p +); + +401 if( +rc + =0 ||=- +ERESTARTSYS +&& ( + `_IOC_DIR +( +cmd +& +_IOC_READ +) ) + +402 if + `cy_to_ur +( +gp +, +lol_p +, + `_IOC_SIZE +( +cmd +)) ) { + +403 +rc + = - +EFAULT +; + +404  +nup_out +; + +407 +nup_out +: + +408 if +lol_p + !& +lol_g + ) + +409 + `k +( +lol_p +); + +410 + `OO_DEBUG_OS +( + `ci_log +("%s: %srg=%lx=> %d", +__FUNCTION__ +, + +411 + `OP_NAME +( + +), +g +, +rc +)); + +412  +rc +; + +413 + } +} + +416 #i! +HAVE_UNLOCKED_IOCTL + + +417  + $oo_f_iol +( +ode +* inode,  +fe + * +fp +, + +418  +cmd +,  +g +) + +420  + `oo_f_uocked_iol +( +fp +, +cmd +, +g +); + +421 + } +} + +425  +fe_ݔis + + goo_fs + = { + +426 . +owr + = +THIS_MODULE +, + +427 . + gݒ + = +oo_f_ݒ +, + +428 . + ga + = +oo_f_a +, + +429 #i +HAVE_UNLOCKED_IOCTL + + +430 . + guocked_iol + = +oo_f_uocked_iol +, + +432 . + giol + = +oo_f_iol +, + +434 #i +HAVE_COMPAT_IOCTL + + +435 . + gcomt_iol + = +oo_f_comt_iol +, + +437 . + gmm + = +oo_f_mm +, + +447  + goo_dev_maj +; + +448 cڡ * + goo_dev_me + = +EFAB_DEV_NAME +; + +451 + $ci_chrdev_ +( +fe_ݔis + * +fs +, cڡ * +me +) + +453  +rc +, +maj + = 0; + +455 i(( +rc + = + `gi_chrdev +( +maj +, +me +, +fs +)) < 0) { + +456 + `ci_log +("%s: c'gi ch devi %d", +me +, +rc +); + +457  +rc +; + +459 i( +maj + == 0) + +460 +maj + = +rc +; + +461 +oo_dev_maj + = +maj +; + +463 #ifde +NEED_IOCTL32 + + +468  +ioc +; + +469  +ioc + = 0; io< +OO_OP_END +; ++ioc ) + +470 + `gi_iol32_cvsi +( +oo_ݔis +[ +ioc +]. +ioc_cmd +, +NULL +); + +474  +rc +; + +475 + } +} + +479 + $ci_chrdev_dt +(cڡ * +me +) + +481 if +oo_dev_maj + ) + +482 + `uegi_chrdev +( +oo_dev_maj +, +me +); + +484 #ifde +NEED_IOCTL32 + + +487  +ioc +; + +488  +ioc + = 0; io< +OO_OP_END +; ++ioc ) + +489 + `uegi_iol32_cvsi +( +oo_ݔis +[ +ioc +]. +ioc_cmd +); + +492 + } +} + +495  + $ld_ny_checks +() + +497 cڡ  +dma_t_off + = + `CI_MEMBER_OFFSET +( +ci__pkt_fmt +, +dma_t +); + +498 if +FALCON_RX_USR_BUF_SIZE + + +dma_t_off + > +CI_CFG_PKT_BUF_SIZE + ) { + +499 + `ci_log +("ERROR: FALCON_RX_USR_BUF_SIZE=%d dma_start_off=%d BUF_SIZE=%d", + +500 +FALCON_RX_USR_BUF_SIZE +, +dma_t_off +, +CI_CFG_PKT_BUF_SIZE +); + +501  - +EINVAL +; + +503 if +FALCON_RX_USR_BUF_SIZE + + +dma_t_off + < +CI_CFG_PKT_BUF_SIZE + - 64 ) + +504 + `ci_log +("WARNING: FALCON_RX_USR_BUF_SIZE=%d could be bigger", + +505 +FALCON_RX_USR_BUF_SIZE +); + +507 + } +} + +516  +__ + + $ld_modu_ +() + +518  +rc +; + +520 + `ci_t_log_efix +("[onload] "); + +521 + `ci_log +("%%s", +ONLOAD_PRODUCT +, +ONLOAD_VERSION +); + +522 + `ci_log +("%s", +ONLOAD_COPYRIGHT +); + +526 +lux_t_hr_fs_t +. +owr + = +THIS_MODULE +; + +527 +lux_t_hr_fs_udp +. +owr + = +THIS_MODULE +; + +528 #i +CI_CFG_USERSPACE_PIPE + + +529 +lux_t_hr_fs_pe_wr +. +owr + = +THIS_MODULE +; + +530 +lux_t_hr_fs_pe_ad +. +owr + = +THIS_MODULE +; + +533 +rc + = + `ld_ny_checks +(); + +534 if +rc + < 0 ) + +535  +_ny +; + +537 +rc + = + `ci_cfg_drv_ +(); + +538 if +rc + < 0 ) { + +539 + `ci_log +("%s: ERROR: ci_cfg_drv_ faed (%d)", +__FUNCTION__ +, +rc +); + +540  +_cfg_drv_ +; + +543 + `oo_mm_tbl_ +(); + +545 +rc + = + `eb_lux_ampޚe_ +( +no_ +); + +546 if +rc + < 0 ) { + +547 + `ci_log +("%s: ERROR:fab_linux_trampoline_ctor failed (%d)", + +548 +__FUNCTION__ +, +rc +); + +549  +ed_ampޚe +; + +552 +rc + = + `ci_l_oc_s +(); + +553 if +rc + < 0 ) { + +554 + `ci_log +("%s: ERROR: ci_l_oc_ed (%d)", +__FUNCTION__ +, +rc +); + +555  +_oc +; + +558 +rc + = + `eb_t_driv_ +( +max_ighs +, +max_y2_rs +, +max_rous +); + +559 if +rc + != 0 ) + +560  +__ +; + +562 +rc + = + `ci_bdg_ +(); + +563 if +rc + < 0 ) { + +564 + `ci_log +("%s: ERROR: ci_bdg_ faed (%d)", +__FUNCTION__ +, +rc +); + +565  +_bdg +; + +568 + `eb_e_f_iscsi +(); + +570 +rc + = + `oo_drivlk_gi +(); + +571 if +rc + < 0 ) + +572  +ed_drivlk +; + +575 +rc + = + `ldfs_ +(); + +576 if( +rc + < 0 ) + +577  +ed_ldfs +; + +580 +rc + = + `ci_chrdev_ +(& +oo_fs +, +oo_dev_me +); + +581 if +rc + < 0 ) + +582  +ed_chrdev +; + +584 +rc + = + `oo_l_chrdev_ +(); + +585 if +rc + < 0 ) + +586  +ed_ldev_ +; + +588 + `OO_DEBUG_LOAD +( + `ci_log +("Onload module initialised successfully.")); + +591 + `oo_l_chrdev_dt +(); + +592 +ed_ldev_ +: + +593 + `ci_chrdev_dt +( +EFAB_DEV_NAME +); + +594 +ed_chrdev +: + +595 + `ldfs_fi +(); + +596 +ed_ldfs +: + +597 + `oo_drivlk_uegi_nf +(); + +598 + `oo_drivlk_uegi_dl +(); + +599 +ed_drivlk +: + +600 + `ci_bdg_fi +(); + +601 +_bdg +: + +602 + `eb_t_driv_dt +(); + +603 +__ +: + +604 + `ci_unl_oc_s +(); + +605 +_oc +: + +606 + `eb_lux_ampޚe_dt +( +no_ +); + +607 +ed_ampޚe +: + +608 + `ci_cfg_drv_dt +(); + +609 +_cfg_drv_ +: + +610 +_ny +: + +611  +rc +; + +612 + } +} + +614 +modu_ +( +ld_modu_ +); + +617  + $ld_modu_ex +() + +619 + `OO_DEBUG_LOAD +( + `ci_log +("Onload module unloading")); + +621 + `oo_l_chrdev_dt +(); + +622 + `ci_chrdev_dt +( +oo_dev_me +); + +623 + `ldfs_fi +(); + +625 + `ci_bdg_fi +(); + +627 + `oo_drivlk_uegi_nf +(); + +636 + `eb_t_driv_dt +(); + +638 + `oo_drivlk_uegi_dl +(); + +640 + `ci_unl_oc_s +(); + +641 + `OO_DEBUG_VERB +( + `ci_log +("Unregistered client driver")); + +643 + `eb_lux_ampޚe_dt +( +no_ +); + +645 + `eb_nup__iscsi +(); + +646 + `ci_cfg_drv_dt +(); + +647 + `OO_DEBUG_LOAD +( + `ci_log +("Onload module unloaded")); + +648 + } +} + +650 +modu_ex +( +ld_modu_ex +); + +655 +EXPORT_SYMBOL +( +ci_tif_ +); + +656 +EXPORT_SYMBOL +( +ci_tif_dt +); + + @driverlink_ip.c + +11  + ~ + +12  + ~ + +13  + ~ + +15  + ~ + +16  + ~ + +17  + ~ + +18  + ~ + +19  + ~ + +20  + ~ + +21  + ~ + +22  + ~ + +23  + ~ + +24  + ~ + +25  + ~"ld_.h +" + +26  + ~"ld_kl_comt.h +" + +27  + ~ + +30  + goo_u_vns + = 1; + +31 +modu_m +( +oo_u_vns +, , +S_IRUGO +); + +32 +MODULE_PARM_DESC +( +oo_u_vns +, + +35  + goo_bd_pl_ak + = ( +HZ +/100); + +36 +modu_m +( +oo_bd_pl_ak +, , +S_IRUGO + | +S_IWUSR +); + +37 +MODULE_PARM_DESC +( +oo_bd_pl_ak +, + +41  + goo_bd_ak_pls + = 20; + +42 +modu_m +( +oo_bd_ak_pls +, , +S_IRUGO + | +S_IWUSR +); + +43 +MODULE_PARM_DESC +( +oo_bd_ak_pls +, + +48 #i +LINUX_VERSION_CODE + < +KERNEL_VERSION +(2,6,27) + +51 #ide +VLAN_DEV_INFO + + +52  + #VLAN_DEV_INFO +( +tdev + + `vn_dev_fo +ґdev) + + ) + +54 #ide +vn_dev__dev + + +55  +le +  +t_devi + * + +56 + $vn_dev__dev +(cڡ  +t_devi + * +dev +) + +58  + `VLAN_DEV_INFO +( +dev +)-> +_dev +; + +59 + } +} + +61 #ide +vn_dev_vn_id + + +62  +le + +u16 + + $vn_dev_vn_id +(cڡ  +t_devi + * +dev +) + +64  + `VLAN_DEV_INFO +( +dev +)-> +vn_id +; + +65 + } +} + +70 #i +CI_CFG_TEAMING + + +71 #ifde +IFF_BONDING + + +72  + #NETDEV_IS_BOND_MASTER +( +_dev +) \ + +73 (( +_dev +-> +ags + & ( +IFF_MASTER +)&& (_dev-> +iv_ags + & +IFF_BONDING +)) + + ) + +74  + #NETDEV_IS_BOND +( +_dev +) \ + +75 (( +_dev +-> +ags + & ( +IFF_MASTER + | +IFF_SLAVE +)&& (_dev-> +iv_ags + & +IFF_BONDING +)) + + ) + +77  + #NETDEV_IS_BOND_MASTER +( +_dev +(_dev-> +ags + & ( +IFF_MASTER +)) + + ) + +78  + #NETDEV_IS_BOND +( +_dev +(_dev-> +ags + & ( +IFF_MASTER + | +IFF_SLAVE +)) + + ) + +81  + #NETDEV_IS_BOND_MASTER +( +_dev +0 + + ) + +82  + #NETDEV_IS_BOND +( +_dev +0 + + ) + +87  +le +  + $oo_nf_dev_mch +(cڡ  +t_devi + * +t_dev +) + +89 if +t_dev +-> +iv_ags + & +IFF_802_1Q_VLAN + ) + +90 +t_dev + = + `vn_dev__dev +(net_dev); + +92 #i +CI_CFG_TEAMING + + +93 if + `NETDEV_IS_BOND_MASTER +( +t_dev +) ) + +97  + `efx_dl_tdev_is_ours +( +t_dev +); + +98 + } +} + +101  + $oo_nf_skb_g_yld +( +sk_buff +* +skb +, ** +pda +, * + +) + +103 if + `skb_is_nlr +( +skb +) ) { + +105  +hd_n + = + `skb_hdn +( +skb +); + +106 +skb_ag_t +* +ag + = & + `skb_shfo +( +skb +)-> +ags +[0]; + +108 if + `skb_shfo +( +skb +)-> +ag_li + || +ag +-> +ge_offt + < +hd_n + ) + +110 * +pda + = + `skb_ag_addss +( +ag +- +hd_n +; + +111 * + + = +ag +-> +size + + +hd_n +; + +114 * +pda + = +skb +-> +da +; + +115 * + + = +skb +-> +n +; + +118 + } +} + +120 #i +defed + ( +RHEL_MAJOR +&& defed ( +RHEL_MINOR +) + +121 #i +RHEL_MAJOR + =7 && +RHEL_MINOR + >= 2 + +123  + #EFRM_HAVE_NETFILTER_INDEV_OUTDEV + +yes + + + ) + +128  +oo_tfr_p +( + +129 #ifde +EFRM_HAVE_NETFILTER_HOOK_STATE + + +130 cڡ  +nf_hook_s +* +s +, + +131  +sk_buff +* +skb +, + +132 #ifde +EFRM_HAVE_NETFILTER_INDEV_OUTDEV + + +133 cڡ  +t_devi +* +dev +, + +134 cڡ  +t_devi +* +outdev +, + +136  + #dev + +e +-> + + + + ) + +138 cڡ  +nf_hook_e + * +e + + +140 #ifde +EFRM_HAVE_NETFILTER_HOOK_OPS + + +141 cڡ  +nf_hook_s +* +s +, + +142  +sk_buff +* +skb +, + +144  +hooknum +, + +145 #ifde +EFRM_HAVE_NETFILTER_INDIRECT_SKB + + +147  +sk_buff +** +pskb +, + +148  + #skb + (* +pskb +) + + ) + +150  +sk_buff +* +skb +, + +153 cڡ  +t_devi +* +dev +, + +154 cڡ  +t_devi +* +outdev +, + +155 (* +ok +)( +sk_buff +*) + +160 * +da +; + +161  +n +; + +163 if + `oo_nf_dev_mch +( +dev +) && + +164 + `oo_nf_skb_g_yld +( +skb +, & +da +, & +n +) && + +165 +n + >( +ci_h_p +) ) { + +166 + `ci_hd_p_pkt +(& +CI_GLOBAL_CPLANE +, + +167 ( +ci_h_hdr +* + `skb_mac_hd +( +skb +), + +168 ( +ci_h_p +* +da +, + +169 +dev +-> +ifdex +, indev-> +ags + & +IFF_SLAVE +); + +172  +NF_ACCEPT +; + +173 + } +} + +174 #unde +dev + + +175 #unde +skb + + +178 #ide +CONFIG_NETFILTER + + +183  +nf_hook_s + + goo_tfr_p_hook + = { + +184 . +hook + = +oo_tfr_p +, + +185 . + gowr + = +THIS_MODULE +, + +186 #ifde +EFX_HAVE_NFPROTO_CONSTANTS + + +187 . + gpf + = +NFPROTO_ARP +, + +189 . + gpf + = +NF_ARP +, + +191 . + ghooknum + = +NF_ARP_IN +, + +194  +oo_tfr_ +( + +195 #ifde +EFRM_HAVE_NETFILTER_HOOK_STATE + + +196 cڡ  +nf_hook_s +* +s +, + +197  +sk_buff +* +skb +, + +198 #ifde +EFRM_HAVE_NETFILTER_INDEV_OUTDEV + + +199 cڡ  +t_devi +* +dev +, + +200 cڡ  +t_devi +* +outdev +, + +202  + #dev + +e +-> + + + + ) + +204 cڡ  +nf_hook_e + * +e + + +206 #ifde +EFRM_HAVE_NETFILTER_HOOK_OPS + + +207 cڡ  +nf_hook_s +* +s +, + +208  +sk_buff +* +skb +, + +210  +hooknum +, + +211 #ifde +EFRM_HAVE_NETFILTER_INDIRECT_SKB + + +213  +sk_buff +** +pskb +, + +214  + #skb + (* +pskb +) + + ) + +216  +sk_buff +* +skb +, + +219 cڡ  +t_devi +* +dev +, + +220 cڡ  +t_devi +* +outdev +, + +221 (* +ok +)( +sk_buff +*) + +225 * +da +; + +226  +n +; + +228 if + `oo_nf_dev_mch +( +dev +) && + +229 + `oo_nf_skb_g_yld +( +skb +, & +da +, & +n +) && + +230 + `efx_dlfr_hdr +( +dev +-> +ifdex +, +eb_t_driv +. +dlfr +, + +231 (cڡ +ci_h_hdr +* + `skb_mac_hd +( +skb +), + +232 +da +, +n +) ) { + +233 + `k_skb +( +skb +); + +234  +NF_STOLEN +; + +236  +NF_ACCEPT +; + +238 + } +} + +239 #unde +dev + + +240 #unde +skb + + +242  +nf_hook_s + + goo_tfr__hook + = { + +243 . +hook + = +oo_tfr_ +, + +244 . + gowr + = +THIS_MODULE +, + +245 #ifde +EFX_HAVE_NFPROTO_CONSTANTS + + +246 . + gpf + = +NFPROTO_IPV4 +, + +248 . + gpf + = +PF_INET +, + +250 #ifde +NF_IP_PRE_ROUTING + + +251 . + ghooknum + = +NF_IP_PRE_ROUTING +, + +253 . + ghooknum + = +NF_INET_PRE_ROUTING +, + +255 . + giܙy + = +NF_IP_PRI_FIRST +, + +259  + $oo_em_t_back +( +em_ +* + +, * +g +) + +261  +oo_nic +* +ic +; + +262 +ci_tif +* +ni +; + +263  +hwpt +, +tf_i +; + +264  +ifdex + = + `em__g_ifdex +( + +); + +265 +ci_qlock_e_t + +lock_ags +; + +266 +ci_dΚk + * +lk +; + +268 if( +ic + = + `oo_nic_fd_ifdex +( +ifdex +)! +NULL + ) { + +269 +hwpt + = +ic + - +oo_nics +; + +277 + `ci_qlock_lock +(& +THR_TABLE +. +lock +, & +lock_ags +); + +278 + `CI_DLLIST_FOR_EACH +( +lk +, & +THR_TABLE +. +d_acks +) { + +279 +t_hr_sour_t + * +thr +; + +280 +thr + = + `CI_CONTAINER +( +t_hr_sour_t +, +l_acks_lk +, +lk +); + +281 +ni + = & +thr +-> +tif +; + +284 if( +tf_i + = +ni +-> +hwpt_to_tf_i +[ +hwpt +]) >= 0 ) + +285 + `t_hr_t_ack +( +ni +, +tf_i +); + +287 + `ci_qlock_uock +(& +THR_TABLE +. +lock +, & +lock_ags +); + +289 +ni + = +NULL +; + +290  + `e_tifs_uocked +(& +ni +) == 0 ) + +291 if( +tf_i + = +ni +-> +hwpt_to_tf_i +[ +hwpt +]) >= 0 ) + +292 + `t_hr_t_ack +( +ni +, +tf_i +); + +294 + } +} + +296  +em__backs + + goo_em__backs + = { + +297 +oo_em_t_back + + +314  +oo_nic + * + $oo_tdev_may_add +(cڡ  +t_devi + * +t_dev +) + +316  +em_ +*frm_client; + +317  +efhw_nic +*fhw_nic; + +318  +oo_nic +* +ic +; + +319  +rc +; + +321 + `BUG_ON +(! + `tif_rušg +( +t_dev +)); + +323 +ic + = + `oo_nic_fd_ifdex +( +t_dev +-> +ifdex +); + +325 if +ic + = +NULL + ) { + +326 +rc + = + `em__g +( +t_dev +-> +ifdex +, & +oo_em__backs +, + +327 +NULL +, & +em_ +); + +328 if +rc + != 0 ) + +330  +1 +; + +332 +ic + = + `oo_nic_add +( +em_ +); + +333 if +ic + = +NULL + ) { + +334 + `ci_log +("%s: oo_nic_add(ifdex=%ded", +__func__ +, +t_dev +-> +ifdex +); + +335  +2 +; + +339 if +t_dev +-> +ags + & +IFF_UP + ) { + +340 +efhw_nic + = + `em__g_nic +( +ic +-> +em_ +); + +341 + `oof_hwpt_up_down +( + `oo_nic_hwpt +( +ic +), 1, + +342 +efhw_nic +-> +devty +. +ch + = +EFHW_ARCH_EF10 + ? 1:0, + +343 +efhw_nic +-> +ags + & +NIC_FLAG_VLAN_FILTERS +); + +346  +ic +; + +348 +2 +: + +349 + `em__put +( +em_ +); + +350 +1 +: + +351  +NULL +; + +352 + } +} + +354  + $oo_tdev_move +( +oo_nic + * +ic +) + +356  +em_ + *efrm_client; + +358 +em_ + = +ic +->efrm_client; + +359 + `oo_nic_move +( +ic +); + +360 + `em__put +( +em_ +); + +361 + } +} + +363  + $oo_dl_obe +( +efx_dl_devi +* +dl_dev +, + +364 cڡ  +t_devi +* +t_dev +, + +365 cڡ  +efx_dl_devi_fo +* +dev_fo +, + +366 cڡ * +sic_v +) + +368  +oo_nic +* +ic + = +NULL +; + +370 #i +EFX_DRIVERLINK_API_VERSION + >= 8 + +371  +efx_dl_lc_sours + * +s +; + +373 + `efx_dl_f_ch_devi_fo_mchg +( +dev_fo +, +EFX_DL_FALCON_RESOURCES +, + +374  +efx_dl_lc_sours +, + +375 +hdr +, +s +) { + +376 if +s +-> +rx_u_buf_size + > +FALCON_RX_USR_BUF_SIZE + ) { + +377 + `ci_log +("%s: ERROR: N drivx_u_buf_siz%u > %u", +__func__ +, + +378 +s +-> +rx_u_buf_size +, +FALCON_RX_USR_BUF_SIZE +); + +384 if + `tif_rušg +( +t_dev +) ) { + +385 +ic + = + `oo_tdev_may_add +( +t_dev +); + +386 if +ic + = +NULL + ) + +389 +dl_dev +-> +iv + = (*) +t_dev +; + +391 + } +} + +394  + $oo_dl_move +( +efx_dl_devi +* +dl_dev +) + +396  +t_devi + * +t_dev + = +dl_dev +-> +iv +; + +397  +oo_nic +* +ic +; + +398 +ci_qlock_e_t + +lock_ags +; + +400 + `ci_qlock_lock +(& +THR_TABLE +. +lock +, & +lock_ags +); + +401 if + `ci_di_n_emy +(& +THR_TABLE +. +l_acks +) ) { + +402 + `ci_log +("Driverlink unregistering but still stacksresent"); + +403 + `ci_as +(0); + +405 + `ci_qlock_uock +(& +THR_TABLE +. +lock +, & +lock_ags +); + +407 +ic + = + `oo_nic_fd_ifdex +( +t_dev +-> +ifdex +); + +408 if +ic + ! +NULL + ) + +409 + `oo_tdev_move +( +ic +); + +410 + } +} + +413  + $oo_dl_t_sud +( +efx_dl_devi +* +dl_dev +) + +415 + `ci_log +("%s:", +__FUNCTION__ +); + +416 + } +} + +419  + $oo_dl_t_sume +( +efx_dl_devi +* +dl_dev +,  +ok +) + +421 + `ci_log +("%s:", +__FUNCTION__ +); + +422 + } +} + +425  + $oo_fixup_wakeup_bakage +( +ifdex +) + +435  +oo_nic +* +ic +; + +436 +ci_tif +* +ni + = +NULL +; + +437  +hwpt +, +tf_i +; + +438 if( +ic + = + `oo_nic_fd_ifdex +( +ifdex +)! +NULL + ) { + +439 +hwpt + = +ic + - +oo_nics +; + +440  + `e_tifs_uocked +(& +ni +) == 0 ) + +441 if( +tf_i + = +ni +-> +hwpt_to_tf_i +[ +hwpt +]) >= 0 ) + +442 + `ci_b_r +(& +ni +-> +e +-> +evq_imed +, +tf_i +); + +444 + } +} + +447  + $oo_tdev_up +( +t_devi +* +tdev +) + +449  +oo_nic +* +ic +; + +452 if + `em_nic_e +( +tdev +-> +ifdex +) ) { + +453 + `oo_tdev_may_add +( +tdev +); + +454 + `oo_fixup_wakeup_bakage +( +tdev +-> +ifdex +); + +457 +ci_p_t + +p +; + +459 +p +. +ty + = +CICP_LLAP_TYPE_NONE +; + +460 +p +. +vn_id + = 0; + +462 #i +CI_CFG_TEAMING + + +463 if + `NETDEV_IS_BOND_MASTER +( +tdev +) ) { + +464 + `OO_DEBUG_BONDING +( + `ci_log +("Bd ma %UP", +tdev +-> +me +)); + +465 +p +. +ty + | +CICP_LLAP_TYPE_BOND +; + +469 if +oo_u_vns + && ( +tdev +-> +iv_ags + & +IFF_802_1Q_VLAN +) ) { + +470 +p +. +ty + | +CICP_LLAP_TYPE_VLAN +; + +471 +p +. +vn_id + = + `vn_dev_vn_id +( +tdev +); + +473 if + `NETDEV_IS_BOND_MASTER +( + `vn_dev__dev +( +tdev +)) ) + +474 +p +. +ty + | +CICP_LLAP_TYPE_BOND +; + +477 if +p +. +ty + ! +CICP_LLAP_TYPE_NONE + ) { + +478 #i +CI_CFG_TEAMING + + +479 if +p +. +ty + & +CICP_LLAP_TYPE_BOND + ) { + +480 +ci_p_t + +d_p +; + +481 +ci_ifid_t + +ma_ifdex +; + +483 if +p +. +ty + & +CICP_LLAP_TYPE_VLAN + ) { + +484  +t_devi + * +_dev + = + `vn_dev__dev +( +tdev +); + +485 +ma_ifdex + = +_dev +-> +ifdex +; + +486 + `ci_bdg_g_xm_picy_ags +( +_dev +, & +p +. +ty +); + +489 +ma_ifdex + = +tdev +-> +ifdex +; + +490 + `ci_bdg_g_xm_picy_ags +( +tdev +, & +p +. +ty +); + +493 if + `ci_έ_g_psuti +(& +CI_GLOBAL_CPLANE +, +tdev +-> +ifdex +, + +494 & +d_p +) != 0 ) + +495 + `cios_έ_impt +(& +CI_GLOBAL_CPLANE +, +NULL +, +tdev +-> +ifdex +, + +496 +tdev +-> +mtu +, 1,dev-> +me +, +NULL +, NULL); + +498 +OO_DEBUG_BONDING + + +499 ( + `ci_log +("NETDEV_UP changingncap on %d from %do %d", + +500 +tdev +-> +ifdex +, +d_p +. +ty +, +p +.type)); + +502 + `ci_έ_t_bd +(& +CI_GLOBAL_CPLANE +, +tdev +-> +ifdex +, + +503 +ma_ifdex +, & +p +); + +504 if +p +. +ty + & +CICP_LLAP_TYPE_VLAN + ) + +505 + `ci_έ_t_vn +(& +CI_GLOBAL_CPLANE +, +tdev +-> +ifdex +, + +506 +ma_ifdex +); + +510 if( +p +. +ty + & +CICP_LLAP_TYPE_VLAN +) && + +511 + `em_nic_e +( + `vn_dev__dev +( +tdev +)-> +ifdex +) ) { + +512  +t_devi +* +_dev + = + `vn_dev__dev +( +tdev +); + +513 +ic + = + `oo_nic_fd_ifdex +( +_dev +-> +ifdex +); + +514 if +ic + = +NULL + ) + +516 +ic + = + `oo_tdev_may_add +( +_dev +); + +517 if +ic + ! +NULL + ) { + +518 + `ci_έ_t_hwpt +(& +CI_GLOBAL_CPLANE +, +tdev +-> +ifdex +, + +519 + `CI_HWPORT_ID +( +ic + - +oo_nics +), & +p +); + +520 if +p +. +ty + & +CICP_LLAP_TYPE_VLAN + ) + +521 + `ci_έ_t_vn +(& +CI_GLOBAL_CPLANE +, +tdev +-> +ifdex +, + +522 +_dev +-> +ifdex +); + +525 + `OO_DEBUG_BONDING +( + `ci_log +("Failedo configure VLAN if %dsarent " + +527 +tdev +-> +ifdex +, +_dev +->ifindex)); + +531 #i +CI_CFG_TEAMING + + +532 if + `NETDEV_IS_BOND +( +tdev +) ) + +533 + `ci_bdg_t_tim_riod +( +oo_bd_pl_ak +, +oo_bd_ak_pls +); + +535 + } +} + +538  + $oo_tdev_gog_down +( +t_devi +* +tdev +) + +540 +ci_qlock_e_t + +lock_ags +; + +541  +oo_nic + * +ic +; + +543 +ic + = + `oo_nic_fd_ifdex +( +tdev +-> +ifdex +); + +544 if +ic + ! +NULL + ) { + +545 + `oof_hwpt_up_down +( + `oo_nic_hwpt +( +ic +), 0, 0, 0); + +546 + `ci_qlock_lock +(& +THR_TABLE +. +lock +, & +lock_ags +); + +547 if + `ci_di_is_emy +(& +THR_TABLE +. +l_acks +) ) + +548 + `oo_tdev_move +( +ic +); + +550 + `ci_log +("Unableo oo_nic_remove(ifindex=%d, hwport=%d) because of " + +551 "ݒ scks", +tdev +-> +ifdex +, + `oo_nic_hwpt +( +ic +)); + +552 + `ci_qlock_uock +(& +THR_TABLE +. +lock +, & +lock_ags +); + +555 if( +tdev +-> +iv_ags + & +IFF_802_1Q_VLAN +) || + +556 + `NETDEV_IS_BOND_MASTER +( +tdev +) ) { + +560 + `ci_έ_t_hwpt +(& +CI_GLOBAL_CPLANE +, +tdev +-> +ifdex +, + +561 +CI_HWPORT_ID_BAD +, +NULL +); + +564 #i +CI_CFG_TEAMING + + +565 if + `NETDEV_IS_BOND_MASTER +( +tdev +) ) + +566 + `ci_bd_move_ma +(& +CI_GLOBAL_CPLANE +, +tdev +-> +ifdex +); + +569 #i +CI_CFG_TEAMING + + +570 if + `NETDEV_IS_BOND +( +tdev +) ) + +571 + `ci_bdg_t_tim_riod +( +oo_bd_pl_ak +, +oo_bd_ak_pls +); + +573 + } +} + +577  + $oo_tdev_evt +( +nifr_block + * +this +, + +578  +evt +, * +r +) + +580  +t_devi + * +tdev + = + `tdev_nifr_fo_to_dev +( +r +); + +582  +evt + ) { + +583  +NETDEV_UP +: + +584 + `oo_tdev_up +( +tdev +); + +587  +NETDEV_GOING_DOWN +: + +588 + `oo_tdev_gog_down +( +tdev +); + +591  +NETDEV_CHANGEMTU +: + +592 + `oo_fixup_wakeup_bakage +( +tdev +-> +ifdex +); + +595 #i +CI_CFG_TEAMING + && +LINUX_VERSION_CODE + > + `KERNEL_VERSION +(2,6,27) + +596  +NETDEV_BONDING_FAILOVER +: + +597 + `ci_bdg_t_tim_riod +( +oo_bd_pl_ak +, +oo_bd_ak_pls +); + +605  +NOTIFY_DONE +; + +606 + } +} + +609  +nifr_block + + goo_tdev_nifr + = { + +610 . +nifr_ + = +oo_tdev_evt +, + +614  +efx_dl_driv + + goo_dl_driv + = { + +615 . +me + = "onload", + +616 #i +EFX_DRIVERLINK_API_VERSION + >= 8 + +617 . + gags + = +EFX_DL_DRIVER_CHECKS_FALCON_RX_USR_BUF_SIZE +, + +619 . + gobe + = +oo_dl_obe +, + +620 . + gmove + = +oo_dl_move +, + +621 . + gt_sud + = +oo_dl_t_sud +, + +622 . + gt_sume + = +oo_dl_t_sume + + +626  + $oo_drivlk_gi +() + +628  +rc +; + +630 +rc + = + `gi_tdevi_nifr +(& +oo_tdev_nifr +); + +631 i( +rc + != 0) + +632  +1 +; + +634 +rc + = + `efx_dl_gi_driv +(& +oo_dl_driv +); + +635 i( +rc + != 0) + +636  +2 +; + +638 +rc + = + `nf_gi_hook +(& +oo_tfr_p_hook +); + +639 if +rc + < 0 ) + +640  +3 +; + +642 +rc + = + `nf_gi_hook +(& +oo_tfr__hook +); + +643 if +rc + < 0 ) + +644  +4 +; + +648 +4 +: + +649 + `nf_uegi_hook +(& +oo_tfr_p_hook +); + +650 +3 +: + +651 + `efx_dl_uegi_driv +(& +oo_dl_driv +); + +652 +2 +: + +653 + `uegi_tdevi_nifr +(& +oo_tdev_nifr +); + +654 +1 +: + +655 + `ci_log +("%s:fx_dl_gi_driv faed (%d)", +__FUNCTION__ +, +rc +); + +656  +rc +; + +657 + } +} + +660  + $oo_drivlk_uegi_nf +() + +662 + `nf_uegi_hook +(& +oo_tfr__hook +); + +663 + `nf_uegi_hook +(& +oo_tfr_p_hook +); + +664 + `uegi_tdevi_nifr +(& +oo_tdev_nifr +); + +665 + } +} + +667  + $oo_drivlk_uegi_dl +() + +669 + `efx_dl_uegi_driv +(& +oo_dl_driv +); + +670 + } +} + + @epoll_device.c + +12  + ~ + +14 #i +CI_CFG_USERSPACE_EPOLL + + +16  + ~ + +17  + ~ + +18  + ~ + +19  + ~ + +20  + ~ + +21  + ~ + +22  + ~"ld_.h +" + +23  + ~ + +25 #i +LINUX_VERSION_CODE + > +KERNEL_VERSION +(2,6,29) + +28  + #OO_EPOLL_NEED_NEST_PROTECTION + + + ) + +32 #ide +__MODULE_PARM_TYPE + + +33  + #__MODULE_PARM_TYPE +( +me +, +_ty +) \ + +34 + `__MODULE_INFO +( +rmty +, +me +## +ty +, #m":" +_ty +) + + ) + +40  +t_max_acks +(cڡ * +v +,  +kl_m + * +kp +); + +41  + gl2_max_acks + = +CI_CFG_EPOLL_MAX_STACKS +; + +42 +modu_m_ +( +l2_max_acks +, +t_max_acks +, +m_g_ut +, + +43 & +l2_max_acks +, +S_IRUGO +); + +44 +__MODULE_PARM_TYPE +( +l2_max_acks +, "uint"); + +45  + gl_max_acks + = +CI_CFG_EPOLL_MAX_STACKS +; + +46 +modu_m_ +( +l_max_acks +, +t_max_acks +, +m_g_ut +, + +47 & +l_max_acks +, +S_IRUGO +); + +48 +__MODULE_PARM_TYPE +( +l_max_acks +, "uint"); + +49 +MODULE_PARM_DESC +( +l_max_acks +, + +52  + soo_l2_ive + { + +53  +fe + * + mko +; + +54 +lock_t + + mlock +; + +55  + mdo_ +; + +56 #ifde +OO_EPOLL_NEED_NEST_PROTECTION + + +57  +li_hd + + mbusy_sks +; + +59 +t_hr_sour_t +** + macks +; + +61 #ifde +OO_EPOLL_NEED_NEST_PROTECTION + + +62  + soo_l_busy_sk + { + +63  +li_hd + + mlk +; + +64  +sk_ru + * + msk +; + +72  + soo_l1_ive + { + +74  +oo_l1_shed + * + msh +; + +75  +ge + * + mge +; + +78 +pl_b + + m +; + +79 +wa_queue_t + + mwa +; + +80 +wa_queue_hd_t + * + mwhd +; + +83  +fe + * + mos_fe +; + +85 +lock_t + + mlock +; + +86 +t_hr_sour_t +** + macks +; + +92  + soo_l_fe_ive + { + +93  + mty +; + +94  + #OO_EPOLL_TYPE_UNKNOWN + 0 + + ) + +95  + #OO_EPOLL_TYPE_1 + 1 + + ) + +96  + #OO_EPOLL_TYPE_2 + 2 + + ) + +98  +oo_l1_ive + + mp1 +; + +99  +oo_l2_ive + + mp2 +; + +100 } + mp +; + +104  +le +  + $oo_l_l_cy_to_kl +( +oo_l_em + * +em_u +, + +105 +ci_ut32 + +l_l_n +, + +106  +oo_l_em + * +de +) + +108 if +l_l_n + > +CI_CFG_EPOLL_MAX_POSTPONED + ) + +109  - +EFAULT +; + +110 if + `cy_om_ur +( +de +, +em_u +, + +111 ( +oo_l_em +* +l_l_n +) ) + +112  - +EFAULT +; + +114 + } +} + +117  +le +  + $oo_l_wn_pope_r +( +ci_ut32 + +l_n +, + +118  +fd +,  +i +,  +rc +, + +119 +ci_t32 + +maxevts +) + +121 if +rc + && ( +i + ! +l_n + - 1 || +maxevts + != 0) ) { + +122 + `ci_log +("postponedpoll_ctl(fd=%d)eturnedrror %d; ignoring", + +123 +fd +, +rc +); + +124 + `ci_log +("consider disabling EF_EPOLL_CTL_FASTo get " + +127 + } +} + +133  + $t_max_acks +(cڡ * +v +,  +kl_m + * +kp +) + +135  +rc + = + `m_t_ut +( +v +, +kp +); + +136 if +rc + != 0 ) + +137  +rc +; + +140 if +l2_max_acks + ! +CI_CFG_EPOLL_MAX_STACKS + && + +141 +l_max_acks + = +CI_CFG_EPOLL_MAX_STACKS +) + +142 +l_max_acks + = +l2_max_acks +; + +145 if +l_max_acks + == 0 ) + +146 +l_max_acks + = +CI_CFG_EPOLL_MAX_STACKS +; + +149 + } +} + +151  + $oo_l2_ +( +oo_l2_ive + * +iv +,  +kfd +) + +153  +fe + * +ko + = + `fg +( +kfd +); + +154  +size + = ( +iv +-> +acks +[0]* +l_max_acks +; + +156 if +ko + = +NULL + ) + +157  - +EBADF +; + +159 +iv +-> +acks + = + `kmloc +( +size +, +GFP_KERNEL +); + +160 if +iv +-> +acks + = +NULL + ) + +161  - +ENOMEM +; + +162 + `memt +( +iv +-> +acks +, 0, +size +); + +164 + `_lock_ +(& +iv +-> +lock +); + +165 #ifde +OO_EPOLL_NEED_NEST_PROTECTION + + +166 + `INIT_LIST_HEAD +(& +iv +-> +busy_sks +); + +168 +iv +-> +ko + = kepo; + +170 + } +} + +172  + $oo_l2_ +( +oo_l_fe_ive + * +iv +, + +173 +ci_fixed_dest_t + +kfd +) + +175  +rc +; + +177 +rc + = + `oo_l2_ +(& +iv +-> +p +. +p2 +, () +kfd +); + +178 if +rc + != 0 ) + +179  +rc +; + +180 +iv +-> +ty + = +OO_EPOLL_TYPE_2 +; + +182 + } +} + +184  + $oo_l2_add_ack +( +oo_l2_ive +* +iv +, + +185 +t_hr_sour_t +* +fd_thr +) + +187  +i +; + +192  +i + = 0; i < +l_max_acks +; ++i ) + +193 if +iv +-> +acks +[ +i +] = +fd_thr + ) + +195 if( + `uiky + +iv +-> +acks +[ +i +] = +NULL + )) + +199 + `_lock +(& +iv +-> +lock +); + +200  +i + = 0; i < +l_max_acks +; ++i ) { + +201 if +iv +-> +acks +[ +i +] = +fd_thr + ) + +203 if +iv +-> +acks +[ +i +] ! +NULL + ) + +205 +iv +-> +acks +[ +i +] = +fd_thr +; + +208 + `eb_t_hr_k_f_cou_c +( +fd_thr +); + +211 + `_uock +(& +iv +-> +lock +); + +212  +i + < +l_max_acks +; + +213 + } +} + +214  + $oo_l1_add_ack +( +oo_l1_ive +* +iv +, + +215 +t_hr_sour_t +* +fd_thr +) + +217  +i +; + +222  +i + = 0; i < +l_max_acks +; ++i ) + +223 if +iv +-> +acks +[ +i +] = +fd_thr + ) + +225 if( + `uiky + +iv +-> +acks +[ +i +] = +NULL + )) + +229 + `_lock +(& +iv +-> +lock +); + +230  +i + = 0; i < +l_max_acks +; ++i ) { + +231 if +iv +-> +acks +[ +i +] = +fd_thr + ) + +233 if +iv +-> +acks +[ +i +] ! +NULL + ) + +235 +iv +-> +acks +[ +i +] = +fd_thr +; + +238 + `eb_t_hr_k_f_cou_c +( +fd_thr +); + +241 + `_uock +(& +iv +-> +lock +); + +242  +i + < +l_max_acks +; + +243 + } +} + +246  + $oo_l2_l +( +oo_l2_ive + * +iv +,  +_kfd +, + +247  +_ +,  +_fd +,  +l_evt + * +_evt +) + +249 +t_hr_sour_t + * +fd_thr +; + +250  +fe + *file; + +251  +rc +; + +252 +ci_ut32 + +fd_sock_id +; + +253 +cp_waab + * +fd_w +; + +256 if +_ + ! +EPOLL_CTL_ADD + ) + +257  + `eb_lux_sys_l_l +( +_kfd +, +_ +, +_fd +, +_evt +); + +261 +fe + = + `fg +( +_fd +); + +262 if( + `uiky + +fe + = +NULL + )) + +263  - +EBADF +; + +268  +oo_l_fe_ive + * +p + = +fe +-> +ive_da +; + +269 if( + `uiky +& +p +->p. +p2 + = +iv + )) { + +270 + `ut +( +fe +); + +271  - +EINVAL +; + +277 if +fe +-> +f_ + !& +lux_t_hr_fs_udp + && + +278 +fe +-> +f_ + !& +lux_t_hr_fs_t + ) { + +279  +rc +; + +280 #ifde +OO_EPOLL_NEED_NEST_PROTECTION + + +281  +oo_l_busy_sk + +t +; + +282 +t +. +sk + = +cut +; + +283 + `_lock +(& +iv +-> +lock +); + +284 + `li_add +(& +t +. +lk +, & +iv +-> +busy_sks +); + +285 + `_uock +(& +iv +-> +lock +); + +288 #i +CI_CFG_USERSPACE_PIPE + + +289 if +fe +-> +f_ + =& +lux_t_hr_fs_pe_ad + || + +290 +fe +-> +f_ + =& +lux_t_hr_fs_pe_wr + ) ) + +291 +iv +-> +do_ + = 1; + +293 + `ut +( +fe +); + +294 +rc + = + `eb_lux_sys_l_l +( +_kfd +, +_ +, +_fd +, +_evt +); + +295 #ifde +OO_EPOLL_NEED_NEST_PROTECTION + + +296 + `_lock +(& +iv +-> +lock +); + +297 + `li_d +(& +t +. +lk +); + +298 + `_uock +(& +iv +-> +lock +); + +300  +rc +; + +304 +fd_thr + = (( +ci_ive_t + *) +fe +-> +ive_da +)-> +thr +; + +305 +fd_sock_id + = (( +ci_ive_t + *) +fe +-> +ive_da +)-> +sock_id +; + +306 +iv +-> +do_ + = 1; + +308 if( + `uiky +! + `oo_l2_add_ack +( +iv +, +fd_thr +) )) { + +309  +d +; + +310 if! +d + ) + +311 + `ci_log +("Can'tdd stack %dopoll set: consider " + +312 "sgpl_max_ackmodu oi", +fd_thr +-> +id +); + +319 +fd_w + = + `SP_TO_WAITABLE +(& +fd_thr +-> +tif +, +fd_sock_id +); + +320 + `ci_b_t +(& +fd_w +-> +sb_aags +, +CI_SB_AFLAG_AVOID_INTERRUPTS_BIT +); + +321 +rc + = + `eb_lux_sys_l_l +( +_kfd +, +_ +, +_fd +, +_evt +); + +322 + `ci_b_r +(& +fd_w +-> +sb_aags +, +CI_SB_AFLAG_AVOID_INTERRUPTS_BIT +); + +323 + `ut +( +fe +); + +325  +rc +; + +326 + } +} + +330  + $oo_l2_y_l +( +oo_l2_ive + * +iv +, + +331  +oo_l2_ai_g + * + +) + +333  +oo_l_em + +poped_k +[ +CI_CFG_EPOLL_MAX_POSTPONED +]; + +334  +oo_l_em + * +poped_u + = + `CI_USER_PTR_GET +( + +-> +l_l +); + +335  +i +; + +336  +rc + = 0; + +338 +rc + = + `oo_l_l_cy_to_kl +( +poped_u +, + +-> +l_l_n +, +poped_k +); + +339 if +rc + != 0 ) + +340  +rc +; + +342  +i + = 0; i < + +-> +l_l_n +; i++ ) { + +343 if +poped_k +[ +i +]. +fd + != -1 ) { + +344 +rc + = + `oo_l2_l +( +iv +, + +-> +kfd +, +poped_k +[ +i +].op, + +345 +poped_k +[ +i +]. +fd +, & +poped_u +[i]. +evt +); + +346 + `oo_l_wn_pope_r +( + +-> +l_l_n +, +poped_k +[ +i +]. +fd +, i, +rc +, + +347 + +-> +maxevts +); + +352  +rc +; + +353 + } +} + +356  + #OO_EPOLL_FOR_EACH_STACK +( +iv +, +i +, +thr +, +ni +) \ + +357  +i + = 0; i < +l_max_acks +; ++i ) \ + +358 if( +thr + = ( +iv +)-> +acks +[ +i +]= +NULL + ) \ + +360 if( + `uiky + +thr +-> +k_f_cou + & +TCP_HELPER_K_RC_NO_USERLAND + )) \ + +362 if( +ni + = & +thr +-> +tif +|| 1 ) + + ) + +365  + $oo_l2_wa +( +oo_l2_ive + * +iv +, + +366  +oo_l2_ai_g + * + +) + +373 +ci_ut64 + +t_c + = 0, +now_c + = 0; + +374 +t_hr_sour_t +* +thr +; + +375 +ci_tif +* +ni +; + +376  +i +; + +377 +ci_t32 + +timeout + = + +->timeout; + +380 if +timeout + > 0 || (imeou< 0 && + +-> +_cyes + ) ) + +381 + `ci_c64 +(& +t_c +); + +384 + `OO_EPOLL_FOR_EACH_STACK +( +iv +, +i +, +thr +, +ni +) + +385 + `ci_omic32_c +(& +ni +-> +e +-> +n_rs +); + +388 + +-> +rc + = - +ENOEXEC +; + +389 + `OO_EPOLL_FOR_EACH_STACK +( +iv +, +i +, +thr +, +ni +) { + +390 if + `ci_tif_may_pl +( +ni +&& + `ci_tif_has_evt +(ni) && + +391 + `ci_tif_ylock +( +ni +) ) { + +392  +did_wake +; + +393 +ni +-> +e +-> +pl_did_wake + = 0; + +394 + `ci_tif_pl +( +ni +); + +395 +did_wake + = +ni +-> +e +-> +pl_did_wake +; + +396 + `ci_tif_uock +( +ni +); + +399 if +did_wake + ) { + +400 + +-> +rc + = + `eb_lux_sys_l_wa +(-> +kfd +, + +401 + `CI_USER_PTR_GET +( + +-> +evts +), + +402 + +-> +maxevts +, 0); + +403 if + +-> +rc + != 0 ) + +404  +do_ex +; + +410 if + +-> +rc + =- +ENOEXEC + ) { + +413 + +-> +rc + = + `eb_lux_sys_l_wa +(-> +kfd +, + `CI_USER_PTR_GET +(-> +evts +), + +414 + +-> +maxevts +, 0); + +416 if + +-> +rc + !0 || +timeout + == 0 ) + +417  +do_ex +; + +424 if + +-> +_cyes + ) { + +425 +ci_ut64 + +schedu_c +; + +426 +ci_ut64 + +max_ + = + +-> +_cyes +; + +427  +_limed_by_timeout + = 0; + +428 + `ci_as +( +t_c +); + +430 if +timeout + > 0) { + +431 +ci_ut64 + +max_timeout_ + = (ci_ut64) +timeout + * +oo_timesync_u_khz +; + +432 if +max_timeout_ + < +max_ + ) { + +433 +max_ + = +max_timeout_ +; + +434 +_limed_by_timeout + = 1; + +439 +now_c + = +schedu_c + = +t_c +; + +441 if( + `uiky + + `sigl_ndg +( +cut +) )) { + +442 + +-> +rc + = - +EINTR +; + +443  +do_ex +; + +446 + `OO_EPOLL_FOR_EACH_STACK +( +iv +, +i +, +thr +, +ni +) + +447 if + `ci_tif_may_pl +( +ni +) && + +448 + `ci_tif_ed_pl_ng +( +ni +, +now_c +) && + +449 + `ci_tif_ylock +( +ni +) ) { + +450 + `ci_tif_pl +( +ni +); + +451 + `ci_tif_uock +( +ni +); + +454 + +-> +rc + = + `eb_lux_sys_l_wa +(-> +kfd +, + `CI_USER_PTR_GET +(-> +evts +), + +455 + +-> +maxevts +, 0); + +456 if + +-> +rc + != 0 ) + +457  +do_ex +; + +459 + `ci_c64 +(& +now_c +); + +460 if( + `uiky + +now_c + - +schedu_c + > +oo_timesync_u_khz + )) { + +461 + `schedu +(); + +462 +schedu_c + = +now_c +; + +465 + `ci_lo_u +(); + +466 }  +now_c + - +t_c + < +max_ + ); + +468 if +_limed_by_timeout + ) + +469  +do_ex +; + +474 if +timeout + > 0 ) { + +475 +ci_ut64 + +d_ms +; + +476 if! + +-> +_cyes + ) + +477 + `ci_c64 +(& +now_c +); + +478 +d_ms + = +now_c + - +t_c +; + +479 + `do_div +( +d_ms +, +oo_timesync_u_khz +); + +480 + `ci_as_ge +(() +d_ms +, 0); + +481 if +timeout + > () +d_ms + ) { + +482 +timeout + - +d_ms +; + +485  +do_ex +; + +489 + `OO_EPOLL_FOR_EACH_STACK +( +iv +, +i +, +thr +, +ni +) { + +490 + `ci_omic32_dec +(& +ni +-> +e +-> +n_rs +); + +491 + `t_hr_que_wakeup +( +thr +); + +496 + +-> +rc + = + `eb_lux_sys_l_wa +(-> +kfd +, + `CI_USER_PTR_GET +(-> +evts +), + +497 + +-> +maxevts +, +timeout +); + +500 +do_ex +: + +501 + `OO_EPOLL_FOR_EACH_STACK +( +iv +, +i +, +thr +, +ni +) + +502 + `ci_omic32_dec +(& +ni +-> +e +-> +n_rs +); + +504 + } +} + +507  + $oo_l2_ai +( +oo_l2_ive + * +iv +, + +508  +oo_l2_ai_g + * + +) + +510 #ifde +__NR_l_pwa + + +511 +sigt_t + +ksigmask +, +sigved +; + +513  +tu_zo + = +l +; + +515 + +-> +rc + = 0; + +518 if( + `uiky + + +-> +kfd + == -1 )) { + +519 + +-> +kfd + = + `oo_l_fe_to_fd +( +iv +-> +ko +, +O_CLOEXEC +); + +520 if + +-> +kfd + < 0 ) + +521  + +-> +kfd +; + +523 +tu_zo + = +ue +; + +527 if + +-> +l_l_n + ) + +528 + +-> +rc + = + `oo_l2_y_l +( +iv +, op); + +530 if + +-> +maxevts + ) { + +531 if + `CI_USER_PTR_GET +( + +-> +sigmask +) ) { + +532 #ifde +__NR_l_pwa + + +533 i( + `cy_om_ur +(& +ksigmask +, + `CI_USER_PTR_GET +( + +-> +sigmask +), + +534 ( +ksigmask +))) { + +535 if +tu_zo + ) { + +536 + +-> +rc + = - +EFAULT +; + +540  - +EFAULT +; + +542 + `sigdtmask +(& +ksigmask +, + `sigmask +( +SIGKILL +| sigmask( +SIGSTOP +)); + +543 + `sigocmask +( +SIG_SETMASK +, & +ksigmask +, & +sigved +); + +547 + `ci_log +("Your kernel doesot supportpoll_pwait(), but youre " + +552 #ifde +OO_EPOLL_NEED_NEST_PROTECTION + + +554  +oo_l_busy_sk + +t +; + +555 +t +. +sk + = +cut +; + +556 + `_lock +(& +iv +-> +lock +); + +557 + `li_add +(& +t +. +lk +, & +iv +-> +busy_sks +); + +558 + `_uock +(& +iv +-> +lock +); + +560 if +iv +-> +do_ + ) + +561 + `oo_l2_wa +( +iv +, + +); + +563 + +-> +rc + = + `eb_lux_sys_l_wa +(-> +kfd +, + +564 + `CI_USER_PTR_GET +( + +-> +evts +), + +565 + +-> +maxevts +, op-> +timeout +); + +567 #ifde +OO_EPOLL_NEED_NEST_PROTECTION + + +568 + `_lock +(& +iv +-> +lock +); + +569 + `li_d +(& +t +. +lk +); + +570 + `_uock +(& +iv +-> +lock +); + +574 if + `CI_USER_PTR_GET +( + +-> +sigmask +) ) { + +575 #ifde +__NR_l_pwa + + +576 i( + +-> +rc + =- +EINTR +) { + +577 + `memy +(& +cut +-> +ved_sigmask +, & +sigved +, (sigsaved)); + +578 #ifde +HAVE_SET_RESTORE_SIGMASK + + +579 + `t_e_sigmask +(); + +581 + `t_thad_ag +( +TIF_RESTORE_SIGMASK +); + +585 + `sigocmask +( +SIG_SETMASK +, & +sigved +, +NULL +); + +591 if +tu_zo + || + +-> +rc + >= 0 ) + +594  + +-> +rc +; + +595 + } +} + +597  + $oo_l2_a +( +oo_l2_ive + * +iv +) + +599  +i +; + +600 + `ci_as +( +iv +); + +603 if +iv +-> +ko + ) + +604 + `ut +( +iv +-> +ko +); + +607  +i + = 0; i < +l_max_acks +; i++ ) { + +608 if +iv +-> +acks +[ +i +] = +NULL + ) + +610 + `eb_t_hr_k_f_cou_dec +( +iv +-> +acks +[ +i +]); + +611 +iv +-> +acks +[ +i +] = +NULL +; + +614 #ifde +OO_EPOLL_NEED_NEST_PROTECTION + + +615 + `ci_as +( + `li_emy +(& +iv +-> +busy_sks +)); + +617 + } +} + +619  + $oo_l2_pl +( +oo_l2_ive +* +iv +, + +620 +pl_b +* +wa +) + +622 #ifde +OO_EPOLL_NEED_NEST_PROTECTION + + +623 if +cut + ) { + +624  +oo_l_busy_sk + * +t +; + +625 + `_lock +(& +iv +-> +lock +); + +626 + `li_f_ch_y +( +t +, & +iv +-> +busy_sks +, +lk +) { + +627 if +t +-> +sk + = +cut +) { + +628 + `_uock +(& +iv +-> +lock +); + +629  +POLLNVAL +; + +632 + `_uock +(& +iv +-> +lock +); + +638  +iv +-> +ko +-> +f_ +-> + `pl +riv->ko, +wa +); + +639 + } +} + +645  + $oo_l1_back +( +wa_queue_t + * +wa +,  +mode +,  +sync +, + +646 * +key +) + +648  +oo_l1_ive +* +iv + = + `cڏ_of +( +wa +, + +649  +oo_l1_ive +, + +650 +wa +); + +651 +ci_ut32 + +tmp +; + +653 +tmp + = +iv +-> +sh +-> +ag +; + +654 }  + `ci_s32u_ +(& +iv +-> +sh +-> +ag +, +tmp +, + +655 ( +tmp + + (1 << +OO_EPOLL1_FLAG_SEQ_SHIFT +)) | + +656 +OO_EPOLL1_FLAG_EVENT +) ); + +658 + } +} + +659  + $oo_l1_queue_oc +( +fe + *file, + +660 +wa_queue_hd_t + * +whd +, + +661 +pl_b + * + +) + +663  +oo_l1_ive +* +iv + = + `cڏ_of +( + +, + +664  +oo_l1_ive +, + +665 + +); + +666 + `_waqueue_func_y +(& +iv +-> +wa +, +oo_l1_back +); + +667 +iv +-> +whd + = whead; + +668 + `add_wa_queue +( +whd +, & +iv +-> +wa +); + +669 + } +} + +670  + $oo_l1_mm +( +oo_l1_ive +* +iv +, + +671  +vm__ru +* +vma +) + +673  +rc +; + +675 i( +vma +-> +vm_d + - vma-> +vm_t + ! +PAGE_SIZE +) + +676  - +EINVAL +; + +677 i( +vma +-> +vm_ags + & +VM_WRITE +) + +678  - +EPERM +; + +681 #ifde +__GFP_ZERO + + +682 +iv +-> +ge + = + `loc_ge +( +GFP_KERNEL +| +__GFP_ZERO +); + +684 +iv +-> +ge + = + `loc_ge +( +GFP_KERNEL +); + +686 if +iv +-> +ge + = +NULL + ) + +687  - +ENOMEM +; + +688 +iv +-> +sh + = + `ge_addss +riv-> +ge +); + +689 #ide +__GFP_ZERO + + +690 + `memt +( +iv +-> +sh +, 0, +PAGE_SIZE +); + +695 +iv +-> +sh +-> +fd + = + `eb_lux_sys_l_1 +( +EPOLL_CLOEXEC +); + +696 if() +iv +-> +sh +-> +fd + < 0 ) { + +697 +rc + = +iv +-> +sh +-> +fd +; + +698  +1 +; + +700 +iv +-> +os_fe + = + `fg +riv-> +sh +-> +fd +); + +701 if +iv +-> +os_fe + = +NULL + ) { + +702 +rc + = - +EINVAL +; + +703  +2 +; + +707 if + `m_p_nge +( +vma +, vma-> +vm_t +, + `ge_to_p +( +iv +-> +ge +), + +708 +PAGE_SIZE +, +vma +-> +vm_ge_ +) < 0) { + +709 +rc + = - +EIO +; + +710  +3 +; + +714 + `_pl_fun +(& +iv +-> + +, +oo_l1_queue_oc +); + +715 +iv +-> +os_fe +-> +f_ +-> + `pl +riv->os_fe, &iv-> + +); + +719 +3 +: + +720 + `ut +( +iv +-> +os_fe +); + +721 +2 +: + +722 + `eb_lux_sys_o +( +iv +-> +sh +-> +fd +); + +723 +1 +: + +724 +iv +-> +sh + = +NULL +; + +725 + `___ge +( +iv +-> +ge +); + +726  +rc +; + +727 + } +} + +729  + $oo_l1_a +( +oo_l1_ive +* +iv +) + +731  +i +; + +733 + `ci_as +( +iv +-> +whd +); + +734 + `move_wa_queue +( +iv +-> +whd +, &iv-> +wa +); + +736 + `ut +( +iv +-> +os_fe +); + +738 + `___ge +( +iv +-> +ge +); + +741  +i + = 0; i < +l_max_acks +; i++ ) { + +742 if +iv +-> +acks +[ +i +] = +NULL + ) + +744 + `eb_t_hr_k_f_cou_dec +( +iv +-> +acks +[ +i +]); + +745 +iv +-> +acks +[ +i +] = +NULL +; + +747 + `k +( +iv +-> +acks +); + +750 + } +} + +752  + $oo_l1_ai +( +oo_l1_ive + * +iv +, + +753  +oo_l1_ai_g + * + +) + +755  +oo_l_em + +em +[ +CI_CFG_EPOLL_MAX_POSTPONED +]; + +756  +oo_l_em + * +em_u + = + `CI_USER_PTR_GET +( + +-> +l_l +); + +757  +i +; + +758  +rc + = 0; + +760 if + +-> +l_l_n + ) { + +761 +rc + = + `oo_l_l_cy_to_kl +( +em_u +, + +-> +l_l_n +, +em +); + +762 if +rc + ) + +763  +rc +; + +765  +i + = 0; i < + +-> +l_l_n +; i++ ) { + +766 +rc + = + `eb_lux_sys_l_l +( + +-> +fd +, +em +[ +i +].op, + +767 +em +[ +i +]. +fd +, & +em_u +[i]. +evt +); + +769 if +rc + =0 ||=- +EEXIST + ) { + +770 +rc + = + `eb_lux_sys_l_l +( +iv +-> +sh +-> +fd +, +em +[ +i +]. + +, + +771 +em +[ +i +]. +fd +, & +em_u +[i]. +evt +); + +774 + `oo_l_wn_pope_r +( + +-> +l_l_n +, +em +[ +i +]. +fd +, i, +rc +, + +775 + +-> +maxevts +); + +779 if + +-> +maxevts + ) { + +780 +ci_ut32 + +tmp +; + +781 + +-> +rc + = + `eb_lux_sys_l_wa +( +iv +-> +sh +-> +fd +, + +782 + `CI_USER_PTR_GET +( + +-> +evts +), + +783 + +-> +maxevts +, 0 ); + +784 if + +-> +rc + < 0 ) + +785 +rc + = + +->rc; + +787 +tmp + = +iv +-> +sh +-> +ag +; + +788 if( +tmp + & 1) == 0 ) + +790 if +iv +-> +os_fe +-> +f_ +-> + `pl +riv->os_fe, +NULL +) ) + +792 }  + `ci_s32u_ +(& +iv +-> +sh +-> +ag +, +tmp +, + +793 +tmp + & ~ +OO_EPOLL1_FLAG_EVENT +) ); + +796 + +-> +rc + =c; + +798  +rc +; + +799 + } +} + +804  + $oo_l_f_uocked_iol +( +fe +* +fp +, + +805  +cmd +,  +g +) + +807  +oo_l_fe_ive + * +iv + = +fp +-> +ive_da +; + +808  +__ur +* +gp + = (__ur* +g +; + +809  +rc +; + +811  +cmd + ) { + +812  +OO_EPOLL2_IOC_ACTION +: { + +813  +oo_l2_ai_g + +lol_g +; + +815 + `ci_as_equ +( + `_IOC_SIZE +( +cmd +), ( +lol_g +)); + +816 if +iv +-> +ty + ! +OO_EPOLL_TYPE_2 + ) + +817  - +EINVAL +; + +818 if + `cy_om_ur +(& +lol_g +, +gp +, + `_IOC_SIZE +( +cmd +)) ) + +819  - +EFAULT +; + +821 +rc + = + `oo_l2_ai +(& +iv +-> +p +. +p2 +, & +lol_g +); + +823 if +rc + =0 && + `cy_to_ur +( +gp +, & +lol_g +, + `_IOC_SIZE +( +cmd +)) ) + +824  - +EFAULT +; + +828  +OO_EPOLL2_IOC_INIT +: { + +829 +ci_fixed_dest_t + +lol_g +; + +830 + `ci_as_equ +( + `_IOC_SIZE +( +cmd +), ( +lol_g +)); + +831 if +iv +-> +ty + ! +OO_EPOLL_TYPE_UNKNOWN + ) + +832  - +EINVAL +; + +833 if + `cy_om_ur +(& +lol_g +, +gp +, + `_IOC_SIZE +( +cmd +)) ) + +834  - +EFAULT +; + +836 +rc + = + `oo_l2_ +( +iv +, +lol_g +); + +840  +OO_EPOLL1_IOC_ACTION +: { + +841  +oo_l1_ai_g + +lol_g +; + +842 + `ci_as_equ +( + `_IOC_SIZE +( +cmd +), ( +lol_g +)); + +843 if +iv +-> +ty + ! +OO_EPOLL_TYPE_1 + ) + +844  - +EINVAL +; + +845 if + `cy_om_ur +(& +lol_g +, +gp +, + `_IOC_SIZE +( +cmd +)) ) + +846  - +EFAULT +; + +848 +rc + = + `oo_l1_ai +(& +iv +-> +p +. +p1 +, & +lol_g +); + +850 if +rc + =0 && + `cy_to_ur +( +gp +, & +lol_g +, + `_IOC_SIZE +( +cmd +)) ) + +851  - +EFAULT +; + +855  +OO_EPOLL1_IOC_ADD_STACK +: { + +856 +ci_fixed_dest_t + +sock_fd +; + +857  +fe + * +sock_fe +; + +858 +ci_ive_t + * +sock_iv +; + +859 + `ci_as_equ +( + `_IOC_SIZE +( +cmd +), ( +sock_fd +)); + +860 if +iv +-> +ty + ! +OO_EPOLL_TYPE_1 + ) + +861  - +EINVAL +; + +862 if + `cy_om_ur +(& +sock_fd +, +gp +, + `_IOC_SIZE +( +cmd +)) ) + +863  - +EFAULT +; + +865 +sock_fe + = + `fg +( +sock_fd +); + +866 if +sock_fe + = +NULL + ) + +867  - +EINVAL +; + +868 if +sock_fe +-> +f_ + !& +lux_t_hr_fs_udp + && + +869 +sock_fe +-> +f_ + !& +lux_t_hr_fs_t + ) { + +870 + `ut +( +sock_fe +); + +871  - +EINVAL +; + +873 +sock_iv + = +sock_fe +-> +ive_da +; + +875 +rc + = + `oo_l1_add_ack +(& +iv +-> +p +. +p1 +, +sock_iv +-> +thr +); + +876 if +sock_fe + = +NULL + ) + +877  - +EINVAL +; + +879 + `ut +( +sock_fe +); + +883  +OO_EPOLL1_IOC_PRIME +: { + +884  +i +; + +885 +t_hr_sour_t +* +thr +; + +886 +ci_tif +* +ni +; + +888 + `OO_EPOLL_FOR_EACH_STACK +(& +iv +-> +p +. +p1 +, +i +, +thr +, +ni +) { + +890 + `ci_log +("%s: PRIME [%d]:̗dy=%d", +__func__ +, + +891 +thr +-> +id +, + `ci_tif_is_imed +( +ni +)); + +893 + `t_hr_que_wakeup +( +thr +); + +895 +rc + = 0; + +900 + `ci_log +("unknowdevi iol: 0x%x", +cmd +); + +901 +rc + = - +EINVAL +; + +903  +rc +; + +904 + } +} + +906 #i! +HAVE_UNLOCKED_IOCTL + + +907  + $oo_l_f_iol +( +ode +* inode,  +fe + * +fp +, + +908  +cmd +,  +g +) + +910  + `oo_l_f_uocked_iol +( +fp +, +cmd +, +g +); + +911 + } +} + +914  + $oo_l_f_ݒ +( +ode +* inode,  +fe +* +fp +) + +916  +oo_l_fe_ive + * +iv + = + `kmloc +((*iv), +GFP_KERNEL +); + +921 + `oo_timesync_wa_f_u_khz_to_abize +(); + +923 if( + `uiky + +iv + = +NULL + )) + +924  - +ENOMEM +; + +925 + `memt +( +iv +, 0, (*priv)); + +927 +fp +-> +ive_da + = (* +iv +; + +928 +fp +-> +f_ + = & +oo_l_fs +; + +931 + } +} + +933  + $oo_l_f_a +( +ode +* inode,  +fe +* +fp +) + +935  +oo_l_fe_ive + * +iv + = +fp +-> +ive_da +; + +937 + `ci_as +( +iv +); + +940  +iv +-> +ty + ) { + +941  +OO_EPOLL_TYPE_1 +: + `oo_l1_a +(& +iv +-> +p +. +p1 +); ; + +942  +OO_EPOLL_TYPE_2 +: + `oo_l2_a +(& +iv +-> +p +. +p2 +); ; + +943 : + `ci_as_equ +( +iv +-> +ty +, +OO_EPOLL_TYPE_UNKNOWN +); + +947 + `k +( +iv +); + +950 + } +} + +952  + $oo_l_f_pl +( +fe +* +fp +, +pl_b +* +wa +) + +954  +oo_l_fe_ive + * +iv + = +fp +-> +ive_da +; + +956 + `ci_as +( +iv +); + +957 if +iv +-> +ty + ! +OO_EPOLL_TYPE_2 + ) + +958  +POLLNVAL +; + +959  + `oo_l2_pl +(& +iv +-> +p +. +p2 +, +wa +); + +960 + } +} + +962  + $oo_l_f_mm +( +fe +* +fp +,  +vm__ru +* +vma +) + +964  +oo_l_fe_ive + * +iv + = +fp +-> +ive_da +; + +965  +size + = ( +iv +-> +p +. +p1 +. +acks +[0]* +l_max_acks +; + +966  +rc +; + +968 + `ci_as +( +iv +); + +969 if +iv +-> +ty + ! +OO_EPOLL_TYPE_UNKNOWN +) + +970  - +EINVAL +; + +972 +iv +-> +p +. +p1 +. +acks + = + `kmloc +( +size +, +GFP_KERNEL +); + +973 if +iv +-> +p +. +p1 +. +acks + = +NULL + ) + +974  - +ENOMEM +; + +975 + `memt +( +iv +-> +p +. +p1 +. +acks +, 0, +size +); + +976 + `_lock_ +(& +iv +-> +p +. +p1 +. +lock +); + +978 +rc + = + `oo_l1_mm +(& +iv +-> +p +. +p1 +, +vma +); + +979 if +rc + != 0 ) { + +980 + `k +( +iv +-> +p +. +p1 +. +acks +); + +981  +rc +; + +984 +iv +-> +ty + = +OO_EPOLL_TYPE_1 +; + +985  +rc +; + +986 + } +} + +988  +fe_ݔis + + goo_l_fs + = + +990 +CI_STRUCT_MBR +( +owr +, +THIS_MODULE +), + +991 +CI_STRUCT_MBR +( +pl +, +oo_l_f_pl +), + +992 #i +HAVE_UNLOCKED_IOCTL + + +993 +CI_STRUCT_MBR +( +uocked_iol +, +oo_l_f_uocked_iol +), + +995 +CI_STRUCT_MBR +( +iol +, +oo_l_f_iol +), + +997 #i +HAVE_COMPAT_IOCTL + + +998 +CI_STRUCT_MBR +( +comt_iol +, +oo_l_f_uocked_iol +), + +1000 +CI_STRUCT_MBR +( +ݒ +, +oo_l_f_ݒ +), + +1001 +CI_STRUCT_MBR +( +a +, +oo_l_f_a +), + +1002 +CI_STRUCT_MBR +( +mm +, +oo_l_f_mm +), + +1005  + goo_l_maj +; + +1008  +__ + + $oo_l_chrdev_ +() + +1010  +rc +, +maj + = 0; + +1012 +rc + = + `gi_chrdev +( +maj +, +OO_EPOLL_DEV_NAME +, & +oo_l_fs +); + +1013 if +rc + < 0 ) { + +1014 + `ci_log +("%s: c'gi ch devi %d", +OO_EPOLL_DEV_NAME +, +rc +); + +1015  +rc +; + +1017 if +maj + == 0 ) + +1018 +maj + = +rc +; + +1019 +oo_l_maj + = +maj +; + +1021 #ifde +NEED_IOCTL32 + + +1026  +ioc +; + +1027  +ioc + = 0; io< +OO_OP_END +; ++ioc ) + +1028 + `gi_iol32_cvsi +( +oo_l_ݔis +[ +ioc +]. +ioc_cmd +, +NULL +); + +1033 + } +} + +1035  + $oo_l_chrdev_dt +() + +1037 if +oo_l_maj + ) + +1038 + `uegi_chrdev +( +oo_l_maj +, +OO_EPOLL_DEV_NAME +); + +1040 #ifde +NEED_IOCTL32 + + +1043  +ioc +; + +1044  +ioc + = 0; io< +OO_OP_END +; ++ioc ) + +1045 + `uegi_iol32_cvsi +( +oo_l_ݔis +[ +ioc +]. +ioc_cmd +); + +1048 + } +} + + @iscsi_support.c + +21  + ~ + +22  + ~ + +23  + ~ + +26  + gok_f_iscsi +; + +27  +modu + * + gci_iscsi_modu +; + +28  +mhe + + gci_iscsi_iol_mux +; + +29 (* +ci_iscsi__ +)(); + +30 (* +ci_iscsi_hd_iol_ +)( +fe + *, +ci_iscsi_cڌ_ms + *); + +31 (* +ci_iscsi_cڌ__ +)() = 0; + +32 (* +ci_iscsi_cڌ_dt_ +)() = 0; + +33 (* +ci_iscsi_dt_ +)() = 0; + +37 + $eb_e_f_iscsi +() + +40 + `ma_ +(& +ci_iscsi_iol_mux +, 1); + +44 + `ci_as_equ +( +ci_iscsi__ +, +NULL +); + +45 +ok_f_iscsi + = 1; + +46 + } +} + +49 + $eb_nup__iscsi +() + +51 + `ci_as_equ +( +ci_iscsi__ +, +NULL +); + +52 + } +} + +56  + $ci_e_modu +( +modu + * +m +) + +58  + `y_modu_g +( +m +); + +59 + } +} + +60  + $ci_ure_modu +( +modu + * +m +) + +63 + `modu_put +( +m +); + +64 + } +} + +67 + $iol_iscsi_cڌ_ + ( +ci_ive_t + * +iv +, * +g +) + +69 +ci_iscsi_cڌ_ms + * +ms + = +g +; + +70  +rc +; + +71  +modu + * +iscsi_modu +; + +73 if! + `ci_is_sydm +( - +EPERM +; + +75 +iscsi_modu + = +ci_iscsi_modu +; + +76 if( +iscsi_modu + ! +NULL + && + `ci_e_modu +(iscsi_module)) + +78 i( + `down_uib +(& +ci_iscsi_iol_mux +!0 - +EINTR +; + +80 +rc + = + `ci_iscsi_hd_iol_ +( +iv +-> +_fp +, +ms +); + +82 + `ci_as +( + `down_ylock +(& +ci_iscsi_iol_mux +)); + +83 + `up +(& +ci_iscsi_iol_mux +); + +85 + `ci_ure_modu +( +iscsi_modu +); + +89  - +EUNATCH +; + +92  +rc +; + +93 + } +} + +96  + $eb_gi_iscsi_driv +( +eb_iscsi_driv_t + * +iscsi +) + +98  +_he +; + +99  +rc + = 0; + +100 + `ci_as +( +iscsi +); + +101 + `ci_as +( +iscsi +-> +iscsi_ +); + +102 + `ci_as +( +iscsi +-> +iscsi__ +); + +103 + `ci_as +( +iscsi +-> +iscsi_dt +); + +104 + `ci_as +( +iscsi +-> +iscsi__dt +); + +105 + `ci_as +( +iscsi +-> +iscsi_iol +); + +106 + `ci_as_equ +( +ci_iscsi_modu +, +NULL +); + +107 +_he + = +ok_f_iscsi +; + +109 +ci_iscsi_cڌ__ + = +iscsi +-> +iscsi__ +; + +110 +ci_iscsi__ + = +iscsi +-> +iscsi_ +; + +112 +ci_iscsi_cڌ_dt_ + = +iscsi +-> +iscsi__dt +; + +113 +ci_iscsi_dt_ + = +iscsi +-> +iscsi_dt +; + +115 +ci_iscsi_hd_iol_ + = +iscsi +-> +iscsi_iol +; + +116 +ci_iscsi_modu + = +iscsi +-> +iscsi_modu +; + +118 i +_he + ) { + +119 +rc + = + `ci_iscsi__ +(); + +120 i( +rc + == 0) + +121 +rc + = + `ci_iscsi_cڌ__ +(); + +123  +rc +; + +124 + } +} + +126  + $eb_uegi_iscsi_driv +( +eb_iscsi_driv_t + * +iscsi +) + +128 () +iscsi +; + +129 + `ci_as_equ +( +ci_iscsi_modu +, +iscsi +-> +iscsi_modu +); + +130 +ci_iscsi_modu + = +NULL +; + +131 +ci_iscsi_hd_iol_ + = +NULL +; + +132 + `ci_iscsi_cڌ_dt_ +(); + +133 + `ci_iscsi_dt_ +(); + +134 +ci_iscsi__ + = 0; + +135 + } +} + +136 +EXPORT_SYMBOL +( +eb_gi_iscsi_driv +); + +137 +EXPORT_SYMBOL +( +eb_uegi_iscsi_driv +); + + @linux_cplane.c + +57  + ~"ld_.h +" + +58  + ~ + +59  + ~ + +60  + ~ + +61  + ~ + +62  + ~ + +64  + ~ + +65  + ~"../lux_sour/kl_comt.h +" + +69 #ide +TRUE + + +70  + #TRUE + 1 + + ) + +71  + #FALSE + 0 + + ) + +76  + #NL_BUFSIZE + 16384 + + ) + +90  + #CICPOS_USE_NETLINK + 1 + + ) + +96  + #CICPOS_PROCFS + 1 + + ) + +98  + #CICPOS_PROCFS_FILE_HWPORT + "mib-hwpt" + + ) + +99  + #CICPOS_PROCFS_FILE_LLAP + "mib-έ" + + ) + +100  + #CICPOS_PROCFS_FILE_MAC + "mib-mac" + + ) + +101  + #CICPOS_PROCFS_FILE_IPIF + "mib-if" + + ) + +102  + #CICPOS_PROCFS_FILE_FWDINFO + "mib-fwd" + + ) + +103  + #CICPOS_PROCFS_FILE_BONDINFO + "mib-bd" + + ) + +104  + #CICPOS_PROCFS_FILE_PMTU + "mib-pmtu" + + ) + +118  + #CICPOS_SCAN_INTERVAL + ( +HZ +/2) + + ) + +130 #ifde +IGNORE + + +131 #unde +IGNORE + + +134 #ifde +DO + + +135 #unde +DO + + +138  + #DO +( +_x + + ) +_x + +139  + #IGNORE +( +_x +) + + ) + +145 #ifde +NDEBUG + + +146 #unde +DEBUGNETLINK + + +147 #unde +DEBUGINJECT + + +151 #ide +DEBUGNETLINK + + +152  + #DEBUGNETLINK + +IGNORE + + + ) + +154 #ide +DEBUGINJECT + + +155  + #DEBUGINJECT + +IGNORE + + + ) + +158  + #DPRINTF + +ci_log + + + ) + +159  + #CICP_LOG + +LOG_ARP + + + ) + +161  + #CODEID + " sync" + + ) + +172 #ide +NDA_RTA + + +173  + #NDA_RTA +( +r +) \ + +174 (( + +*)(((*)( +r +)+ + `NLMSG_ALIGN +(( +ndmsg +)))) + + ) + +177 #ide +IFLA_RTA + + +178  + #IFLA_RTA +( +r +) \ + +179 (( + +*)(((*)( +r +)+ + `NLMSG_ALIGN +(( +iffomsg +)))) + + ) + +182 #ide +IFA_RTA + + +183  + #IFA_RTA +( +r +) \ + +184 (( + +*)(((*)( +r +)+ + `NLMSG_ALIGN +(( +iddrmsg +)))) + + ) + +207  +sock + * + gci_w_sock +; + +208  +sock + * + gci_bdtodev_w_sock +; + +215  + $ci_w_sock_ +( +sock + ** +w_sock +) + +217  +rc + = + `sock_ +( +PF_INET +, +SOCK_RAW +, +IPPROTO_RAW +, +w_sock +); + +218 i( + `CI_UNLIKELY +( +rc + < 0)) { + +219 + `ci_log +("%s: faedhw sock,c=%d", +__FUNCTION__ +, +rc +); + +220  +rc +; + +223 i( + `CI_UNLIKELY +((* +w_sock +)-> +sk + == 0)) { + +224 + `ci_log +("ERROR:%s: ci_w_sock->sk izo!", +__FUNCTION__ +); + +225 + `sock_a +(* +w_sock +); + +226  - +EINVAL +; + +229 (* +w_sock +)-> +sk +-> +sk_loti + = +GFP_ATOMIC +; + +231 + } +} + +238  + $ci_w_sock_dt +( +sock + * +w_sock +) + +240 + `sock_a +( +w_sock +); + +241 + } +} + +247  + $ci_w_sock_nd +( +sock + * +w_sock +, +ci__addr_t + +_be32 +, + +248 cڡ * +buf +,  +size +) + +250  +msghdr + +msg +; + +251  +iovec + +iov +; + +252 +mm_gmt_t + +dfs +; + +253  +sockaddr_ + +addr +; + +254  +rc +; + +256 + `memt +(& +addr +, 0, (addr)); + +257 +addr +. +s_my + = +AF_INET +; + +258 +addr +. +s_pt + = 0; + +259 +addr +. +s_addr +. +s_addr + = +_be32 +; + +261 +msg +. +msg_me + = & +addr +; + +262 +msg +. +msg_m + = ( +addr +); + +263 +msg +. +msg_iov + = & +iov +; + +264 +msg +. +msg_iovn + = 1; + +265 +msg +. +msg_cڌ + = +NULL +; + +266 +msg +. +msg_cڌn + = 0; + +267 +msg +. +msg_ags + = +MSG_DONTWAIT +; + +269 +iov +. +iov_ba + = (* +buf +; + +270 +iov +. +iov_n += +size +; + +272 +dfs + = + `g_fs +(); + +273 + `t_fs +( +KERNEL_DS +); + +274 +rc + = + `sock_ndmsg +( +w_sock +, & +msg +, +size +); + +275 + `t_fs +( +dfs +); + +277  +rc +; + +278 + } +} + +282  + $ci_w_sock_nd_bdtodev +( +ifdex +, * +iame +, + +283 +ci__addr_t + +_be32 +, + +284 cڡ * +buf +,  +size +) + +286  +ϡ_ifdex + = -1; + +287  +t_devi + * +dev + = +NULL +; + +288 +mm_gmt_t + +dfs +; + +289  +rc +; + +291 if +ifdex + ! +ϡ_ifdex + ) { + +292 if +iame + = +NULL + ) { + +293 +dev + = + `dev_g_by_dex +(& +_t +, +ifdex +); + +294 if +dev + ! +NULL + ) + +295 +iame + = +dev +-> +me +; + +297 + `OO_DEBUG_ARP +( + `ci_log +("%s: bad devi index %d", +__FUNCTION__ +, + +298 +ifdex +)); + +299  - +EINVAL +; + +303 +dfs + = + `g_fs +(); + +304 + `t_fs +( +KERNEL_DS +); + +305 +rc + = + `sock_tsockt +( +ci_bdtodev_w_sock +, +SOL_SOCKET +, +SO_BINDTODEVICE +, + +306 +iame +, + ` +(ifname)); + +307 + `t_fs +( +dfs +); + +309 if +dev + ! +NULL + ) + +310 + `dev_put +( +dev +); + +312 if +rc + != 0 ) { + +313 + `OO_DEBUG_ARP +( + `ci_log +("%s: faedBINDTODEVICE %d", +__FUNCTION__ +, +rc +)); + +314  +rc +; + +317 +ϡ_ifdex + = +ifdex +; + +320  + `ci_w_sock_nd +( +ci_bdtodev_w_sock +, +_be32 +, +buf +, +size +); + +321 + } +} + +336  +ci_buo_t + * + gci_pko + = +NULL +; + +351 + $ci__pkt_hdov +( +ci_tif + * +tif +, +oo_pkt_p + +c_pktid +) + +353  +ci_buo_pkt +* +d_pkt +; + +354  +d_pktid +; + +355  +rc +; + +357 + `ci_as +( +tif +); + +358 + `ASSERT_VALID_PKT +( +tif +, + `PKT_CHK +ґif, +c_pktid +)); + +361 + `CICP_BUFPOOL_LOCK +( +ci_pko +, + +362 +d_pktid + = + `ci_pktbuf_loc +( +ci_pko +)); + +363 if( +d_pktid + < 0) { + +364  - +ENOBUFS +; + +366 + `ci_as +( + `ci_pktbuf_is_vid_id +( +ci_pko +, +d_pktid +)); + +369 +d_pkt + = + `ci_pktbuf_pkt +( +ci_pko +, +d_pktid +); + +370 +rc + = + `ci__pkt_橋n_cy +( +tif +, +c_pktid +, +d_pkt +); + +371 i( +rc + < 0) { + +372 + `CICP_BUFPOOL_LOCK +( +ci_pko +, + +373 + `ci_pktbuf_ +( +ci_pko +, +d_pktid +)); + +374  +rc +; + +377  +d_pktid +; + +378 + } +} + +381  + $ci_w__nd +(cڡ +ci_4_hdr +* + +,  +n +, +ci_ifid_t + +ifdex +) + +383 * +_da + = (* + + + + `CI_IP4_IHL +(ip); + +384 +ci_t_hdr +* +t +; + +385 +ci_udp_hdr +* +udp +; + +387  + +-> +_oc + ) { + +388  +IPPROTO_TCP +: + +389 + `ci_as_equ +( + +-> +_ag_off_be16 +, +CI_IP4_FRAG_DONT +); + +390 +t + = +_da +; + +391 +t +-> +t_check_be16 + = + `ci_t_checksum +( + +,, + `CI_TCP_PAYLOAD +(tcp)); + +393  +IPPROTO_UDP +: + +395 +ci_iovec + +iov +; + +397 if + +-> +_ag_off_be16 + & ~ +CI_IP4_FRAG_DONT + ) + +399 +udp + = +_da +; + +400 +iov +. +iov_ba + = + `CI_UDP_PAYLOAD +( +udp +); + +401 +iov +. +iov_n + = + `CI_BSWAP_BE16 +( + +-> +_t_n_be16 +- + `CI_IP4_IHL +(ip) - + +402 ( +ci_udp_hdr +); + +403 +udp +-> +udp_check_be16 + = + `ci_udp_checksum +( + +, udp, & +iov +, 1); + +408 if +ifdex + ! +CI_IFID_BAD + ) + +409  + `ci_w_sock_nd_bdtodev +( +ifdex +, +NULL +, + +-> +_daddr_be32 +, + +410 + +, +n +); + +412  + `ci_w_sock_nd +( +ci_w_sock +, + +-> +_daddr_be32 +, ip, +n +); + +413 + } +} + +416  + sci_w_sock_wk_rl + { + +417 +ci_wkem_t + + mwqi +; + +418  + mpktid +; + +419 cڡ +ci_hd_t + * + mcڌ_e +; + +420 +ci_ifid_t + + mifdex +; + +425 + $ci_p_pkt_tx_queue +(* +cڋxt +) + +427  +ci_w_sock_wk_rl + * +wp + = +cڋxt +; + +428  +ci_buo_pkt +* +pkt +; + +429 +ci_4_hdr +* + +; + +430  +rc +; + +434 i( +wp +-> +pktid + < 0 +out +; + +436 + `ci_as +( + `ci_pktbuf_is_vid_id +( +ci_pko +, +wp +-> +pktid +)); + +438 +pkt + = + `ci_pktbuf_pkt +( +ci_pko +, +wp +-> +pktid +); + +439 i( + `CI_UNLIKELY +( +pkt + == 0)) { + +440 + `ci_log +("%s: BADack %d", +__FUNCTION__ +, +wp +-> +pktid +); + +441  +out +; + +443 + + = (*( +pkt + + 1); + +445 +rc + = + `ci_w__nd +( + +, +pkt +-> +n +, +wp +-> +ifdex +); + +446 + `OO_DEBUG_ARP +( + `ci_log +("%s: sdack" +CI_IP_PRINTF_FORMAT +" viaaw " + +447 "sock,c=%d", +__FUNCTION__ +, + +448 + `CI_IP_PRINTF_ARGS +(& + +-> +_daddr_be32 +), +rc +)); + +449 i( + `CI_UNLIKELY +( +rc + < 0)) { + +454 + `CICP_STAT_INC_DROPPED_IP +(( +ci_hd_t + *) +wp +-> +cڌ_e +); + +455 + `OO_DEBUG_ARP +( + `ci_log +("%s: faedqueuck,c=%d", +__FUNCTION__ +, +rc +)); + +459 + `CICP_BUFPOOL_LOCK +( +ci_pko +, + +460 + `ci_pktbuf_ +( +ci_pko +, +wp +-> +pktid +)); + +461 +out +: + +463 + `ci_ +( +wp +); + +464 + } +} + +475 + $cios_pktbuf_der_nd +(cڡ +ci_hd_t + * +cڌ_e +, + +476 +ci__addr_t + + +,  +ndab_pktid +, + +477 +ci_ifid_t + +ifdex +) + +480  +ci_w_sock_wk_rl + * +wp + = + `ci_omic_loc +((*wp)); + +482 i( + `CI_LIKELY +( +wp + ! +NULL +)) { + +483 +wp +-> +pktid + = +ndab_pktid +; + +484 +wp +-> +cڌ_e + = control_plane; + +485 +wp +-> +ifdex + = ifindex; + +486 + `ci_wkem_ +(& +wp +-> +wqi +, +ci_p_pkt_tx_queue +, wp); + +487 + `ci_vify +( + `ci_wkqueue_add +(& +CI_GLOBAL_WORKQUEUE +, & +wp +-> +wqi +) == 0); + +490  - +ENOMEM +; + +492 + } +} + +502 + $ci_mac_der_nd +( +ci_tif + * +tif +, * +f_os_rc +, + +503 +ci__addr_t + + +, +oo_pkt_p + +_pktid +, +ci_ifid_t + +ifdex +) + +504 {  +ndab_pktid +; + +506 + `OO_DEBUG_ARP +( + `ci_log +( +CODEID +":%(ID:%d " +CI_IP_PRINTF_FORMAT +"kt ID %d", + +507 +tif +, + `NI_ID +ґif), + `CI_IP_PRINTF_ARGS +(& + +), + +508 + `OO_PP_FMT +( +_pktid +))); + +510 + `ci_as +( + `ci_tif_is_locked +( +tif +)); + +511 + `ASSERT_VALID_PKT +( +tif +, + `PKT_CHK +ґif, +_pktid +)); + +514 i( + `OO_PP_IS_NULL +( +_pktid +)) + +515 { * +f_os_rc + = - +EINVAL +; + +516  +FALSE +; + +520 +ndab_pktid + = + `ci__pkt_hdov +( +tif +, +_pktid +); + +521 i( +ndab_pktid + < 0) { + +522 + `LOG_U +( + +523 +ci_4_hdr + * +h + = + `oo_tx__hdr +( + `PKT +( +tif +, +_pktid +)); + +524 + `ci_log +( +CODEID +": IP " +CI_IP_PRINTF_FORMAT +"->"CI_IP_PRINTF_FORMAT + +526 + `CI_IP_PRINTF_ARGS +(& +h +-> +_ddr_be32 +), + +527 + `CI_IP_PRINTF_ARGS +(& + +), + +528 +h +-> +_oc + = +IPPROTO_TCP + ? "TCP" : "UDP", + +529 +ndab_pktid +); + +531 * +f_os_rc + = +ndab_pktid +; + +532  +FALSE +; + +535 +ci_hd_t + * +cڌ_e + = + `CICP_HANDLE +( +tif +); + +538 + `ci_as +( + `ci_pktbuf_is_vid_id +( +ci_pko +, +ndab_pktid +)); + +541 * +f_os_rc + = + `cios_pktbuf_der_nd +( +cڌ_e +, + +, + +542 +ndab_pktid +, +ifdex +); + +544  (* +f_os_rc + == 0); + +547 + } +} + +569 + $cios_ +( +ci_mibs_kn_t + * +cڌ_e +) + +571  +rc +; + +574 +rc + = + `ci_pktbuf_ +(& +ci_pko +); + +575 i( + `CI_UNLIKELY +( +rc + < 0)) { + +576 + `ci_log +( +CODEID +": ERROR - couldn't construct ARPable buffers,c=%d", + +577 - +rc +); + +578  +rc +; + +582 i( + `CI_UNLIKELY +(( +rc + = + `ci_w_sock_ +(& +ci_w_sock +)) < 0)) { + +583 + `ci_log +( +CODEID +": ERROR - couldn't constructaw socket module,c=%d", + +584 - +rc +); + +585 + `ci_pktbuf_dt +(& +ci_pko +); + +586  +rc +; + +590 i( + `CI_UNLIKELY +(( +rc + = + `ci_w_sock_ +(& +ci_bdtodev_w_sock +)) < 0)) { + +591 + `ci_log +( +CODEID +": ERROR - couldn't constructaw socket module,c=%d", + +592 - +rc +); + +593 + `ci_w_sock_dt +( +ci_w_sock +); + +594 + `ci_pktbuf_dt +(& +ci_pko +); + +595  +rc +; + +599 + } +} + +602 #i +LINUX_VERSION_CODE + > +KERNEL_VERSION +(3,6,0) + +605  + #igh_cfm +( +igh +) \ + +607 ( +igh +)-> +cfmed + = +jiffs +; \ + +608 } 0) + + ) + +611  + $cios_p_e_upde +( +ci__addr_t + +d +, +ci_ifid_t + +ifdex +,  +cfm +) + +613  +t_devi + * +dev +; + +614  +ighbour + * +igh +; + +616 +dev + = + `dev_g_by_dex +(& +_t +, +ifdex +); + +618 if +dev + = +NULL + ) + +620 +igh + = + `igh_lookup +(& +p_tbl +, & +d +, +dev +); + +621 if +igh + = +NULL + ) { + +622 + `dev_put +( +dev +); + +632 if +cfm +) { + +633 if +igh +-> +nud_e + = +NUD_STALE +) + +634 + `igh_upde +( +igh +, +NULL +, +NUD_REACHABLE +, +NEIGH_UPDATE_F_ADMIN +); + +636 + `igh_cfm +( +igh +); + +638 i(! +cfm + && +igh +-> +nud_e + = +NUD_STALE + ) { + +639 + `p_nd +( +ARPOP_REQUEST +, +ETH_P_ARP +, +d +, +dev +, + +640 + `__addr +( +dev +, +d +, +RT_SCOPE_LINK +), + +641 +igh +-> +ha +, +dev +-> +dev_addr +, +NULL +); + +642 + `igh_upde +( +igh +, +NULL +, +NUD_DELAY +, +NEIGH_UPDATE_F_ADMIN +); + +644 + `igh_a +( +igh +); + +645 + `dev_put +( +dev +); + +646 + } +} + +652 + $cios_dt +( +ci_mibs_kn_t + * +cڌ_e +) + +654 + `ci_w_sock_dt +( +ci_bdtodev_w_sock +); + +655 + `ci_w_sock_dt +( +ci_w_sock +); + +656 + `ci_pktbuf_dt +(& +ci_pko +); + +657 + } +} + +737 #i +CICPOS_PROCFS + + +743  + #ocfs_cڌ_e +( +Δ_fo +(& +CI_GLOBAL_CPLANE +) + + ) + +754 + $ci_rou_sce_r +( +sce +) { + +755  +sce +) { + +756  +RT_SCOPE_UNIVERSE +:  "univ"; + +757  +RT_SCOPE_SITE +:  "site"; + +758  +RT_SCOPE_LINK +:  "link"; + +759  +RT_SCOPE_HOST +:  "host"; + +760  +RT_SCOPE_NOWHERE +:  "nwhr"; + +763 + } +} + +767 + $ci__ad_oc +( +q_fe + * +q +, * +s +) + +769 +ci__t + * +p + = &( + `ocfs_cڌ_e +( +q +-> +ive +)-> + +); + +770 + `ci_as +( +p +); + +773  + #CICP_READ_PROC_PRINT_CTR +( +cou +) \ + +774 + `q_tf +( +q +, "%14%u\n", #cou, +p +-> +cou +) + + ) + +775  + #CICP_READ_PROC_PRINT_TIME +( +tim +) \ + +776 + `q_tf +( +q +, "%17%u\n", #tim, +p +-> +tim +) + + ) + +780 + `CICP_READ_PROC_PRINT_CTR +( +drݳd_ +); + +781 + `CICP_READ_PROC_PRINT_CTR +( +tbl_fu +); + +782 + `CICP_READ_PROC_PRINT_CTR +( +tbl_ashes +); + +783 + `CICP_READ_PROC_PRINT_CTR +( +unsu܋d +); + +784 + `CICP_READ_PROC_PRINT_CTR +( +pkt_je +); + +785 + `CICP_READ_PROC_PRINT_CTR +( +_msg_je +); + +786 + `CICP_READ_PROC_PRINT_CTR +( +s +); + +787 + `CICP_READ_PROC_PRINT_CTR +( +timeouts +); + +788 + `CICP_READ_PROC_PRINT_CTR +( +q_ +); + +789 + `CICP_READ_PROC_PRINT_CTR +( +q_cv +); + +790 + `CICP_READ_PROC_PRINT_CTR +( +_cv +); + +791 + `CICP_READ_PROC_PRINT_CTR +( +fmts +); + +792 + `CICP_READ_PROC_PRINT_CTR +( +fifo_ovow +); + +793 + `CICP_READ_PROC_PRINT_CTR +( +dl_c2n_tx_r +); + +794 + `CICP_READ_PROC_PRINT_CTR +( +h_rs +); + +796 + `CICP_READ_PROC_PRINT_TIME +( +pgc_ϡ_t +); + +797 + `CICP_READ_PROC_PRINT_TIME +( +pgc_ϡ_d +); + +799 + `CICP_READ_PROC_PRINT_TIME +( +ϡ_pl_bgn +); + +800 + `CICP_READ_PROC_PRINT_TIME +( +ϡ_pl_d +); + +801 + `CICP_READ_PROC_PRINT_TIME +( +pkt_ϡ_cv +); + +802 + `q_tf +( +q +, "%17%lu (%dHz)\n", "TimNow", +jiffs +, +HZ +); + +804 + } +} + +805  + $ci__ݒ_oc +( +ode + *ode,  +fe + *file) + +807  + `sg_ݒ +( +fe +, +ci__ad_oc +, + `PDE_DATA +( +ode +)); + +808 + } +} + +809 cڡ  +fe_ݔis + +ci__fs + = { + +810 . +owr + = +THIS_MODULE +, + +811 . +ݒ + = +ci__ݒ_oc +, + +812 . +ad + = +q_ad +, + +813 . +Σek + = +q_lek +, + +814 . +a + = +sg_a +, + +821 + $cios_hwpt_ad +( +q_fe + * +q +, * +s +) + +822 { +ci_mibs_kn_t + * +cڌ_e + = + `ocfs_cڌ_e +( +q +-> +ive +); + +823 cڡ +ci_hwpt_kmib_t + * +hwp܉ + = +cڌ_e +-> +hwpt_b +; + +825 i( +NULL + = +hwp܉ +) + +826 + `q_tf +( +q +, "hardwareortable unallocated\n"); + +828 {  +n + = 0; + +829  +nicid +; + +831  +nicid + = 0;icid < +CI_HWPORT_ID_MAX +;icid++) + +832 { cڡ +ci_hwpt_row_t + * +row + = & +hwp܉ +-> +nic +[ +nicid +]; + +834 i( + `ci_hwpt_row_lod +( +row +)) + +835 { + `CICP_LOCK_BEGIN +( +cڌ_e +) + +837 + `q_tf +( +q +, "nic %02d: max mtu %d\n", + +838 +nicid +, +row +-> +max_mtu +); + +839 +CICP_LOCK_END + + +840 +n +++; + +844 + `q_tf +( +q +, "%d (of %d)llocated\n", + +845 +n +, +CI_HWPORT_ID_MAX ++1); + +848 + } +} + +849  + $cios_hwpt_ݒ +( +ode + *ode,  +fe + *file) + +851  + `sg_ݒ +( +fe +, +cios_hwpt_ad +, + `PDE_DATA +( +ode +)); + +852 + } +} + +853 cڡ  +fe_ݔis + + gcios_hwpt_fs + = { + +854 . +owr + = +THIS_MODULE +, + +855 . + gݒ + = +cios_hwpt_ݒ +, + +856 . + gad + = +q_ad +, + +857 . + gΣek + = +q_lek +, + +858 . + ga + = +sg_a +, + +864 + $cios_έ_ad +( +q_fe + * +q +, * +s +) + +865 { +ci_mibs_kn_t + * +cڌ_e + = + `ocfs_cڌ_e +( +q +-> +ive +); + +867 cڡ +ci_έ_kmib_t + * +έt + = +cڌ_e +-> +έ_b +; + +869 i( +NULL + = +έt +) + +870 + `q_tf +( +q +, "linkayerccessointable unallocated\n"); + +872 { +ci_έ_rowid_t + +έ_dex +; + +873  +n + = 0; + +875  +έ_dex + = 0; + +876 +έ_dex + < +έt +-> +rows_max +; + +877 +έ_dex +++) + +878 { cڡ +ci_έ_row_t + * +row + = & +έt +-> +έ +[ +έ_dex +]; + +880 i( + `ci_έ_row_lod +( +row +)) + +881 { + `CICP_LOCK_BEGIN +( +cڌ_e +) + +884 + `q_tf +( +q +, "%02d:lap %02d %4s %4sort ", + +885 +έ_dex +, +row +-> +ifdex +,ow-> +me +, + +886 +row +-> +up +? "UP ": "DOWN"); + +887 i( + `ci_έ_row_haic +(& +cڌ_e +-> +ur +, +row +)) + +889 + `q_tf +( +q +, "%1d ", +row +-> +hwpt +); + +890 + `q_tf +( +q +, "ma" +CI_MAC_PRINTF_FORMAT + + +892 + `CI_MAC_PRINTF_ARGS +(& +row +-> +mac +), + +893 +row +-> +mtu +); + +895 { + `q_tf +( +q +, "X "); + +897 i( +row +-> +psuti +. +ty + & +CICP_LLAP_TYPE_VLAN +) { + +898 + `q_tf +( +q +, " VLAN %d", + +899 +row +-> +psuti +. +vn_id +); + +901 i( +row +-> +psuti +. +ty + & +CICP_LLAP_TYPE_BOND +) { + +902 + `q_tf +( +q +, " BOND HW%d ROW%d", + +903 +row +-> +hwpt +,ow-> +bd_rowid +); + +905 i( +row +-> +psuti +. +ty + & + +906 +CICP_LLAP_TYPE_USES_HASH +) { + +907 + `q_tf +( +q +, " HASH"); + +908 i( +row +-> +psuti +. +ty + & + +909 +CICP_LLAP_TYPE_XMIT_HASH_LAYER4 +) { + +910 + `q_tf +( +q +, "-L4"); + +914 + `q_tf +( +q +, "\n"); + +916 +CICP_LOCK_END + + +917 +n +++; + +921 + `q_tf +( +q +, "%d (o%dlod\n", +n +, +έt +-> +rows_max +); + +924 + } +} + +925  + $cios_έ_ݒ +( +ode + *ode,  +fe + *file) + +927  + `sg_ݒ +( +fe +, +cios_έ_ad +, + `PDE_DATA +( +ode +)); + +928 + } +} + +929 cڡ  +fe_ݔis + + gcios_έ_fs + = { + +930 . +owr + = +THIS_MODULE +, + +931 . + gݒ + = +cios_έ_ݒ +, + +932 . + gad + = +q_ad +, + +933 . + gΣek + = +q_lek +, + +934 . + ga + = +sg_a +, + +938 * + $cios_mac_ad_t +( +q_fe + * +q +, +loff_t + * +pos +) + +940 +ci_mibs_kn_t + * +cڌ_e + = + `ocfs_cڌ_e +( +q +-> +ive +); + +941 cڡ +ci_mac_mib_t + * +uma + = +cڌ_e +-> +ur +. +mac_ub +; + +942 i( +uma + = +NULL +) + +943  +NULL +; + +944  (* +pos + < + `ci_mac_mib_rows +( +uma +)?o: +NULL +; + +945 + } +} + +946 * + $cios_mac_ad_xt +( +q_fe + * +q +, * +v +, +loff_t + * +pos +) + +948 (* +pos +)++; + +949  + `cios_mac_ad_t +( +q +, +pos +); + +950 + } +} + +951  + $cios_mac_ad_ +( +q_fe + * +q +, * +s +) + +953 + } +} + +955 + $cios_mac_ad +( +q_fe + * +q +, * +s +) + +957 +ci_mibs_kn_t + * +cڌ_e + = + `ocfs_cڌ_e +( +q +-> +ive +); + +958 cڡ +ci_mac_mib_t + * +uma + = +cڌ_e +-> +ur +. +mac_ub +; + +959 cڡ +ci_mac_kmib_t + * +kma + = +cڌ_e +-> +mac_b +; + +960 +ci_mac_rowid_t + +mac_dex + = *( +loff_t + *) +s +; + +962 i( +NULL + = +uma +) + +964 + `q_tf +( +q +, "userddressesolutionable unallocated\n"); + +966 i( +mac_dex + = + `ci_mac_mib_rows +( +uma +)) + +968  +n + = 0; + +969  +mac_dex + = 0; mac_dex < + `ci_mac_mib_rows +( +uma +); + +970 +mac_dex +++) + +971 i( + `ci_mac_row_lod +(& +uma +-> +mac +[ +mac_dex +])) + +972 +n +++; + +973 + `q_tf +( +q +, "%d (of %d)llocated\n", + +974 +n +, + `ci_mac_mib_rows +( +uma +)); + +976 i( + `ci_mac_row_lod +(& +uma +-> +mac +[ +mac_dex +])) + +978 cڡ +ci_mac_row_t + * +row + = & +uma +-> +mac +[ +mac_dex +]; + +979 cڡ +ci_mac_kow_t + * +krow + = & +kma +-> +y +[ +mac_dex +]; + +980 cڡ +cios_mac_row_t + * +sync + = & +krow +->sync; + +982 + `CICP_LOCK_BEGIN +( +cڌ_e +) + +986 + `q_tf +( +q +, "#%04x:ϰ%02d %4 " +CI_IP_PRINTF_FORMAT + + +987 " ma" +CI_MAC_PRINTF_FORMAT +" on %3d%s%s", + +988 +mac_dex +, +row +-> +ifdex +, + +989 + `_ci_έ_g_me +( +cڌ_e +, +row +-> +ifdex +), + +990 + `CI_IP_PRINTF_ARGS +(& +row +-> +_addr +), + +991 + `CI_MAC_PRINTF_ARGS +(& +row +-> +mac_addr +), + +992 + `ci_mac_row_ucou +( +row +), + +993 + `ci_mac_row_r_queed +( +row +) ? " !service!": "", + +994 +row +-> +ed_upde + = +CICP_MAC_ROW_NEED_UPDATE_STALE + ? + +996 +row +-> +ed_upde + = +CICP_MAC_ROW_NEED_UPDATE_SOON + ? + +999 + `q_tf +( +q +, " [u %08x up %08xef %d %s%s%s%s%s%s%s%s%s%02X " + +1001 +sync +-> +os +. +ud +, sync->os. +upded +, sync->os. +ft +, + +1002 0 = +sync +-> +os +. +e +? "NONE ":"", + +1003 0 !( +sync +-> +os +. +e + & +CICPOS_IPMAC_INCOMPLETE +)? + +1005 0 !( +sync +-> +os +. +e + & +CICPOS_IPMAC_REACHABLE +)? + +1007 0 !( +sync +-> +os +. +e + & +CICPOS_IPMAC_STALE +) ? "STALE ":"", + +1008 0 !( +sync +-> +os +. +e + & +CICPOS_IPMAC_DELAY +) ? "DELAY ":"", + +1009 0 !( +sync +-> +os +. +e + & +CICPOS_IPMAC_PROBE +) ? "PROBE ":"", + +1010 0 !( +sync +-> +os +. +e + & +CICPOS_IPMAC_FAILED +) ? + +1012 0 !( +sync +-> +os +. +e + & +CICPOS_IPMAC_NOARP +)? "NOARP ":"", + +1013 0 !( +sync +-> +os +. +e + & +CICPOS_IPMAC_PERMANENT +)? + +1015 +sync +-> +os +. +ags +, sync->os. +my +, + +1016 0 ! +sync +-> +sour_sync +? "S": "s", + +1017 0 ! +sync +-> +sour_ +? "P": "p", + +1018 0 ! +sync +-> +_sync +? "R": "r"); + +1019 + `q_tf +( +q +, " v%d%d\n", +row +-> +vsi +, ( +ci_t16 +ow-> +rc +); + +1021 +CICP_LOCK_END + + +1025 + } +} + +1026  +q_ݔis + + gcios_mac_q_s + = { + +1027 . +t + = +cios_mac_ad_t +, + +1028 . + gxt + = +cios_mac_ad_xt +, + +1029 . + g + = +cios_mac_ad_ +, + +1030 . + gshow + = +cios_mac_ad +, + +1032  + $cios_mac_ݒ +( +ode + *ode,  +fe + *file) + +1034  +rc +; + +1035 +rc + = + `q_ݒ +( +fe +, & +cios_mac_q_s +); + +1036 i( +rc + != 0) + +1037 (( +q_fe + *) +fe +-> +ive_da +)-> +ive + = + `PDE_DATA +( +ode +); + +1038  +rc +; + +1039 + } +} + +1040 cڡ  +fe_ݔis + + gcios_mac_fs + = { + +1041 . +owr + = +THIS_MODULE +, + +1042 . + gݒ + = +cios_mac_ݒ +, + +1043 . + gad + = +q_ad +, + +1044 . + gΣek + = +q_lek +, + +1045 . + ga + = +q_a +, + +1053 + $cios_if_ad +( +q_fe + * +q +, * +s +) + +1054 { +ci_mibs_kn_t + * +cڌ_e + = + `ocfs_cڌ_e +( +q +-> +ive +); + +1055 cڡ +ci_if_kmib_t + * +i + = +cڌ_e +-> +if_b +; + +1057 i( +NULL + = +i +) + +1058 + `q_tf +( +q +, "IP interfaceable unallocated\n"); + +1060 { +ci_if_rowid_t + +if_dex +; + +1061  +n + = 0; + +1063  +if_dex + = 0; + +1064 +if_dex + < +i +-> +rows_max +; + +1065 +if_dex +++) + +1066 { cڡ +ci_if_row_t + * +row + = & +i +-> +if +[ +if_dex +]; + +1068 i( + `ci_if_row_lod +( +row +)) + +1069 { + `CICP_LOCK_BEGIN +( +cڌ_e +) + +1071 + `q_tf +( +q +, "%02d:lap %02d %4s " + +1072 +CI_IP_PRINTF_FORMAT + + +1073 "/%d\b " +CI_IP_PRINTF_FORMAT + + +1076 +if_dex +, + +1077 +row +-> +ifdex +, + +1078 + `_ci_έ_g_me +( +cڌ_e +, + +1079 +row +-> +ifdex +), + +1080 + `CI_IP_PRINTF_ARGS +(& +row +-> +t_ +), + +1081 +row +-> +t_t +, + +1082 + `CI_IP_PRINTF_ARGS +(& +row +-> +b_ +), + +1083 + `ci_rou_sce_r +( +row +-> +sce +)); + +1084 +CICP_LOCK_END + + +1085 +n +++; + +1089 + `q_tf +( +q +, "%d (o%dlod\n", +n +, +i +-> +rows_max +); + +1092 + } +} + +1093  + $cios_if_ݒ +( +ode + *ode,  +fe + *file) + +1095  + `sg_ݒ +( +fe +, +cios_if_ad +, + `PDE_DATA +( +ode +)); + +1096 + } +} + +1097 cڡ  +fe_ݔis + + gcios_if_fs + = { + +1098 . +owr + = +THIS_MODULE +, + +1099 . + gݒ + = +cios_if_ݒ +, + +1100 . + gad + = +q_ad +, + +1101 . + gΣek + = +q_lek +, + +1102 . + ga + = +sg_a +, + +1107 + $cios_bd_ad +( +q_fe + * +q +, * +s +) + +1109 +ci_mibs_kn_t + * +cڌ_e + = + `ocfs_cڌ_e +( +q +-> +ive +); + +1110 cڡ +ci_bdfo_t + * +bdt +; + +1111  +n + = 0; + +1112  +i +; + +1114 +bdt + = +cڌ_e +-> +ur +. +bdfo_ub +; + +1117 if +bdt + = +NULL + ) + +1118 + `q_tf +( +q +, "bondable unallocated\n"); + +1120  +i + = 0; i < +bdt +-> +rows_max +; i++ ) { + +1121 cڡ +ci_bd_row_t + * +row + = & +bdt +-> +bd +[ +i +]; + +1122 if + `ci_bd_row_lod +( +row +) ) { + +1123 + `CICP_LOCK_BEGIN +( +cڌ_e +); + +1125 if +row +-> +ty + = +CICP_BOND_ROW_TYPE_MASTER + ) + +1126 + `q_tf +( +q +, "Row %d: MST if %d,ext %d, " + +1129 +i +, +row +-> +ifid +,ow-> +xt +, + +1130 +row +-> +ma +. +mode +,ow->ma. +hash_picy +, + +1131 +row +-> +ma +. +n_aves +, + +1132 +row +-> +ma +. +n_aive_aves +, + +1133 +row +-> +ma +. +aive_hwpt +); + +1134 if +row +-> +ty + = +CICP_BOND_ROW_TYPE_SLAVE + ) + +1135 + `q_tf +( +q +, "Row %d: SLV if %d,ext %d, " + +1137 +i +, +row +-> +ifid +,ow-> +xt +,ow-> +ave +. +hwpt +, + +1138 +row +-> +ave +. +ags +, + +1139 +row +-> +ave +. +ags + & +CICP_BOND_ROW_FLAG_ACTIVE + ? + +1142 + `q_tf +( +q +, "Bondow %d: BADype %d\n", + +1143 +i +, +row +-> +ty +); + +1144 +CICP_LOCK_END +; + +1146 ++ +n +; + +1149 + `q_tf +( +q +, "%d (o%dlod\n", +n +, +bdt +-> +rows_max +); + +1153 + } +} + +1154  + $cios_bd_ݒ +( +ode + *ode,  +fe + *file) + +1156  + `sg_ݒ +( +fe +, +cios_bd_ad +, + `PDE_DATA +( +ode +)); + +1157 + } +} + +1158 cڡ  +fe_ݔis + + gcios_bd_fs + = { + +1159 . +owr + = +THIS_MODULE +, + +1160 . + gݒ + = +cios_bd_ݒ +, + +1161 . + gad + = +q_ad +, + +1162 . + gΣek + = +q_lek +, + +1163 . + ga + = +sg_a +, + +1168 * + $cios_fwd_ad_t +( +q_fe + * +q +, +loff_t + * +pos +) + +1170 +ci_mibs_kn_t + * +cڌ_e + = + `ocfs_cڌ_e +( +q +-> +ive +); + +1171 cڡ +ci_fwdfo_t + * +fwdt + = +cڌ_e +-> +ur +. +fwdfo_ub +; + +1172 i( +fwdt + = +NULL +) + +1173  +NULL +; + +1174  (* +pos + < +fwdt +-> +rows_max +?o: +NULL +; + +1175 + } +} + +1176 * + $cios_fwd_ad_xt +( +q_fe + * +q +, * +v +, +loff_t + * +pos +) + +1178 (* +pos +)++; + +1179  + `cios_fwd_ad_t +( +q +, +pos +); + +1180 + } +} + +1181  + $cios_fwd_ad_ +( +q_fe + * +q +, * +s +) + +1183 + } +} + +1188 + $cios_fwd_ad +( +q_fe + * +q +, * +s +) + +1189 { +ci_mibs_kn_t + * +cڌ_e + = + `ocfs_cڌ_e +( +q +-> +ive +); + +1190 cڡ +ci_fwdfo_t + * +fwdt + = +cڌ_e +-> +ur +. +fwdfo_ub +; + +1191 +ci_fwd_rowid_t + +fwd_dex + = *( +loff_t + *) +s +; + +1193 i( +NULL + = +fwdt +) + +1195 + `q_tf +( +q +, "user forwarding information unallocated\n"); + +1197 i( +fwd_dex + = +fwdt +-> +rows_max +) { + +1198  +n + = 0; + +1199  +fwd_dex + = 0; fwd_dex < +fwdt +-> +rows_max +; fwd_index++) + +1200 i( + `ci_fwd_row_lod +(& +fwdt +-> +th +[ +fwd_dex +])) + +1201 +n +++; + +1202 + `q_tf +( +q +, "%d (o%dlod\n", +n +, +fwdt +-> +rows_max +); + +1204 i( + `ci_fwd_row_lod +(& +fwdt +-> +th +[ +fwd_dex +])) + +1206 cڡ +ci_fwd_row_t + * +row + = & +fwdt +-> +th +[ +fwd_dex +]; + +1208 + `CICP_LOCK_BEGIN +( +cڌ_e +) + +1210 + `q_tf +( +q +, +CI_IP_PRINTF_FORMAT +"/%u -> "CI_IP_PRINTF_FORMAT + +1212 + `CI_IP_PRINTF_ARGS +(& +row +-> +det_ +), + +1213 +row +-> +det_t +, + +1214 + `CI_IP_PRINTF_ARGS +(& +row +-> +f_h +), + +1215 +row +-> +de_ifdex +, + +1216 + `_ci_έ_g_me +( +cڌ_e +, +row +-> +de_ifdex +)); + +1217 i( + `ci_fwd_row_haic +(& +cڌ_e +-> +ur +, +row +)) + +1218 + `q_tf +( +q +, "%1dn" +CICP_ENCAP_NAME_FMT +, + +1219 +row +-> +hwpt +, + `ci_p_me +ow-> +p +. +ty +)); + +1221 + `q_tf +( +q +, "X"); + +1222 + `q_tf +( +q +, "\n"); + +1224 + `q_tf +( +q +, "\td " +CI_IP_PRINTF_FORMAT +"/%d " + +1225 "b " +CI_IP_PRINTF_FORMAT +" mtu %dos %d metric %d", + +1226 + `CI_IP_PRINTF_ARGS +(& +row +-> +t_ +),ow-> +t_t +, + +1227 + `CI_IP_PRINTF_ARGS +(& +row +-> +t_b +), + +1228 +row +-> +mtu +,ow-> +tos +,ow-> +mric +); + +1229 + `q_tf +( +q +, "\n"); + +1231 + `q_tf +( +q +, "\t " +CI_IP_PRINTF_FORMAT + + +1232 " ma" +CI_MAC_PRINTF_FORMAT +"\n", + +1233 + `CI_IP_PRINTF_ARGS +(& +row +-> +ef_sour +), + +1234 + `CI_MAC_PRINTF_ARGS +(& +row +-> +ef_c_mac +)); + +1235 +CICP_LOCK_END + + +1239 + } +} + +1240  +q_ݔis + + gcios_fwd_q_s + = { + +1241 . +t + = +cios_fwd_ad_t +, + +1242 . + gxt + = +cios_fwd_ad_xt +, + +1243 . + g + = +cios_fwd_ad_ +, + +1244 . + gshow + = +cios_fwd_ad +, + +1246  + $cios_fwd_ݒ +( +ode + *ode,  +fe + *file) + +1248  +rc +; + +1249 +rc + = + `q_ݒ +( +fe +, & +cios_fwd_q_s +); + +1250 i( +rc + != 0) + +1251 (( +q_fe + *) +fe +-> +ive_da +)-> +ive + = + `PDE_DATA +( +ode +); + +1252  +rc +; + +1253 + } +} + +1254 cڡ  +fe_ݔis + + gcios_fwd_fs + = { + +1255 . +owr + = +THIS_MODULE +, + +1256 . + gݒ + = +cios_fwd_ݒ +, + +1257 . + gad + = +q_ad +, + +1258 . + gΣek + = +q_lek +, + +1259 . + ga + = +q_a +, + +1264 + $cios_pmtu_ad +( +q_fe + * +q +, * +s +) + +1266 +ci_mibs_kn_t + * +cڌ_e + = + `ocfs_cڌ_e +( +q +-> +ive +); + +1267 +ci_pmtu_kmib_t + * +pmtu_b + = +cڌ_e +->pmtu_table; + +1268  +i +, +n + = 0; + +1270  +i + = 0; i < +pmtu_b +-> +ud_rows_max +; i++ ) { + +1271 +ci_pmtu_row_t + * +row + = & +pmtu_b +-> +s +[ +i +]; + +1272 + `CICP_LOCK_BEGIN +( +cڌ_e +) + +1273 if + `ci_pmtu_row_lod +( +row +) ) { + +1274 + `q_tf +( +q +, "%d: " +CI_IP_PRINTF_FORMAT +"imestamp=0x%lx\n", + +1275 +i +, + `CI_IP_PRINTF_ARGS +(& +row +-> +t_ +),ow-> +timeamp +); + +1276 +n +++; + +1278 +CICP_LOCK_END +; + +1281 + `q_tf +( +q +, "%d (of %d)llocated, with maximum %d\n", + +1282 +n +, +pmtu_b +-> +rows_max +,mtu_b-> +ud_rows_max +); + +1284 + } +} + +1285  + $cios_pmtu_ݒ +( +ode + *ode,  +fe + *file) + +1287  + `sg_ݒ +( +fe +, +cios_pmtu_ad +, + `PDE_DATA +( +ode +)); + +1288 + } +} + +1289 cڡ  +fe_ݔis + + gcios_pmtu_fs + = { + +1290 . +owr + = +THIS_MODULE +, + +1291 . + gݒ + = +cios_pmtu_ݒ +, + +1292 . + gad + = +q_ad +, + +1293 . + gΣek + = +q_lek +, + +1294 . + ga + = +sg_a +, + +1299 + $cios_ocfs_ +( +ci_mibs_kn_t + * +cڌ_e +) + +1300 { * +Δ_fo + = +cڌ_e +; + +1304 + `ci_as +( +NULL + ! +cڌ_e +); + +1309 i( +cڌ_e + =& +CI_GLOBAL_CPLANE +) + +1311 + `ci_as +( +NULL + ! +oo_oc_ro +); + +1313 + `oc__da +( +CICPOS_PROCFS_FILE_HWPORT +, 0, +oo_oc_ro +, + +1314 & +cios_hwpt_fs +, +Δ_fo +); + +1315 + `oc__da +( +CICPOS_PROCFS_FILE_LLAP +, 0, +oo_oc_ro +, + +1316 & +cios_έ_fs +, +Δ_fo +); + +1317 + `oc__da +( +CICPOS_PROCFS_FILE_MAC +, 0, +oo_oc_ro +, + +1318 & +cios_mac_fs +, +Δ_fo +); + +1319 + `oc__da +( +CICPOS_PROCFS_FILE_IPIF +, 0, +oo_oc_ro +, + +1320 & +cios_if_fs +, +Δ_fo +); + +1321 + `oc__da +( +CICPOS_PROCFS_FILE_FWDINFO +, 0, +oo_oc_ro +, + +1322 & +cios_fwd_fs +, +Δ_fo +); + +1323 + `oc__da +( +CICPOS_PROCFS_FILE_BONDINFO +, 0, +oo_oc_ro +, + +1324 & +cios_bd_fs +, +Δ_fo +); + +1325 + `oc__da +( +CICPOS_PROCFS_FILE_PMTU +, 0, +oo_oc_ro +, + +1326 & +cios_pmtu_fs +, +Δ_fo +); + +1328 + } +} + +1335 + $cios_ocfs_dt +( +ci_mibs_kn_t + * +cڌ_e +) + +1336 { i( +NULL + ! +oo_oc_ro +) + +1337 { + `move_oc_y +( +CICPOS_PROCFS_FILE_HWPORT +, +oo_oc_ro +); + +1338 + `move_oc_y +( +CICPOS_PROCFS_FILE_LLAP +, +oo_oc_ro +); + +1339 + `move_oc_y +( +CICPOS_PROCFS_FILE_MAC +, +oo_oc_ro +); + +1340 + `move_oc_y +( +CICPOS_PROCFS_FILE_IPIF +, +oo_oc_ro +); + +1341 + `move_oc_y +( +CICPOS_PROCFS_FILE_FWDINFO +, +oo_oc_ro +); + +1342 + `move_oc_y +( +CICPOS_PROCFS_FILE_BONDINFO +, +oo_oc_ro +); + +1343 + `move_oc_y +( +CICPOS_PROCFS_FILE_PMTU +, +oo_oc_ro +); + +1345 + } +} + +1355  + #cios_ocfs_ +( +cڌ_e +) + + ) + +1356  + #cios_ocfs_dt +( +cڌ_e +) + + ) + +1387  + ~ + +1388  + ~ + +1389  + ~ + +1390 #i +LINUX_VERSION_CODE + > +KERNEL_VERSION +(2,6,19) + +1391  + ~ + +1393  + ~ + +1411 #i +CICPOS_USE_NETLINK + + +1414  + tci__msg_hdr_t +( + tcios_r_e_t + *,  + tmsghdr + *); + +1419 +cios_hd__msg +( +cios_r_e_t + * +ssi +,  +msghdr + * +hdr +); + +1422 +cios_dump_bs +( +ci_hd_t + * +cڌ_e +,  +mac_ly +, + +1423 * +buf +); + +1426  +sock + * + msock +; + +1427 +__u32 + + mq +; + +1428 } + tci_sock_t +; + +1439 + $ci_rou_ty_r +( +ty +) { + +1440  +ty +) { + +1441  +RTN_UNSPEC +:  "UNSPEC"; + +1442  +RTN_UNICAST +:  "UNICAST"; + +1443  +RTN_LOCAL +:  "LOCAL"; + +1444  +RTN_BROADCAST +:  "BROADCAST"; + +1445  +RTN_ANYCAST +:  "ANYCAST"; + +1446  +RTN_MULTICAST +:  "MULTICAST"; + +1447  +RTN_BLACKHOLE +:  "BLACKHOLE"; + +1448  +RTN_UNREACHABLE +:  "UNREACHABLE"; + +1449  +RTN_PROHIBIT +:  "PROHIBIT"; + +1450  +RTN_THROW +:  "THROW"; + +1451  +RTN_NAT +:  "NAT"; + +1452  +RTN_XRESOLVE +:  "XRESOLVE"; + +1455 + } +} + +1462 + $ci_rou_oc_r +( +oc +) { + +1463  +oc +) { + +1464  +RTPROT_REDIRECT +:  "REDIRECT"; + +1465  +RTPROT_KERNEL +:  "KERNEL"; + +1466  +RTPROT_BOOT +:  "BOOT"; + +1467  +RTPROT_STATIC +:  "STATIC"; + +1468  +RTPROT_GATED +:  "GATED"; + +1469  +RTPROT_RA +:  "RA"; + +1470  +RTPROT_MRT +:  "MRT"; + +1471  +RTPROT_ZEBRA +:  "ZEBRA"; + +1472  +RTPROT_BIRD +:  "BIRD"; + +1473  +RTPROT_DNROUTED +:  "DNROUTED"; + +1476 + } +} + +1483 cڡ * + $ci_rou_b_r +( +b +) { + +1484  +b +) { + +1485  +RT_TABLE_UNSPEC +:  "unspec"; + +1486  +RT_TABLE_DEFAULT +:  "def"; + +1487  +RT_TABLE_MAIN +:  "main"; + +1488  +RT_TABLE_LOCAL +:  "local"; + +1491 + } +} + +1499 + $cios_rt_msg +( +msg + * +p +) + +1501 + `ci_as +( +NULL + ! +p +); + +1502 + `DPRINTF +("rtbl_entry(%p) fam=%d dlen=%d slen=%dos=%dbl=%s \n" + +1504 +p +,-> +m_my +,-> +m_d_n +,-> +m_c_n +,-> +m_tos +, + +1505 + `ci_rou_b_r +( +p +-> +m_b +), + +1506 + `ci_rou_oc_r +( +p +-> +m_oc +), + +1507 + `ci_rou_sce_r +( +p +-> +m_sce +), + +1508 + `ci_rou_ty_r +( +p +-> +m_ty +), + +1509 +p +-> +m_ags +); + +1510 + } +} + +1519  + $ci_bd_Îk_sock +( +sock + * +sockp +, +__u32 + +_groups +) + +1521  +sockaddr_ + +addr +; + +1522 + `memt +(& +addr +, 0, (addr)); + +1523 +addr +. +_my + = +AF_NETLINK +; + +1524 +addr +. +_groups + =l_groups; + +1525  ( +sockp +)-> +s +-> + `bd +(sockp, ( +sockaddr +*)& +addr +, (addr)); + +1526 + } +} + +1533  + $ci_add_Îk_membshs +( +sock + * +sockp +) + +1541 #i +LINUX_VERSION_CODE + < + `KERNEL_VERSION +(2,6,14) + +1542  +ci_bd_Îk_sock + + +1543 ( +sockp +, +RTMGRP_LINK + | +RTMGRP_IPV4_ROUTE + | +RTMGRP_IPV4_IFADDR +); + +1545 +mm_gmt_t + +fs +; + +1546  +tv +, +rc +; + +1548 +rc + = + `ci_bd_Îk_sock +( +sockp +, 0); + +1549 i( +rc + < 0) c; + +1553 +fs + = + `g_fs +(); + +1554 + `t_fs + ( + `g_ds +()); + +1557 +tv + = +RTNLGRP_LINK +; + +1558 +rc + = ( +sockp +)-> +s +-> + `tsockt +(sockp, +SOL_NETLINK +, +NETLINK_ADD_MEMBERSHIP +, + +1559 (*)& +tv +, ()); + +1560 i( +rc + < 0) { + +1561 + `ci_log +("****** ERROR:lk ssockt֚ked,c=%d ******", +rc +); + +1562  +d +; + +1566 +tv + = +RTNLGRP_IPV4_ROUTE +; + +1567 +rc + = ( +sockp +)-> +s +-> + `tsockt +(sockp, +SOL_NETLINK +, +NETLINK_ADD_MEMBERSHIP +, + +1568 (*)& +tv +, ()); + +1569 i( +rc + < 0) { + +1570 + `ci_log +("****** ERROR:lk ssocktoued,c=%d ******", +rc +); + +1571  +d +; + +1575 +tv + = +RTNLGRP_IPV4_IFADDR +; + +1576 +rc + = ( +sockp +)-> +s +-> + `tsockt +(sockp, +SOL_NETLINK +, +NETLINK_ADD_MEMBERSHIP +, + +1577 (*)& +tv +, ()); + +1578 i( +rc + < 0) { + +1579 + `ci_log +("****** ERROR:lk ssockt(iddred,c=%d ******", +rc +); + +1580  +d +; + +1583 +d +: + +1584 + `t_fs +( +fs +); + +1585  +rc +; + +1587 + } +} + +1595  + $_Îk_sock +( +sock + ** +sockp +) + +1597  + `sock_ +( +PF_NETLINK +, +SOCK_RAW +, +NETLINK_ROUTE +, +sockp +); + +1598 + } +} + +1606  + $_lig_Îk_sock +( +sock + ** +sockp +) + +1608  +rc +, + +=0; + +1610 +rc + = + `sock_ +( +PF_NETLINK +, +SOCK_RAW +, +NETLINK_ROUTE +, +sockp +); + +1611 i( +rc + < 0 +r +; + +1613 + +++; + +1614 +rc + = + `ci_add_Îk_membshs +(* +sockp +); + +1615 i( +rc + < 0 +r +; + +1619 +r +: + +1620 + `ci_log +("%s: couldn't createisteningetlink socket,c=%d, step=%d", + +1621 +__FUNCTION__ +, +rc +, + +); + +1622 + `sock_a +(* +sockp +); + +1623 * +sockp +=0; + +1624  +rc +; + +1625 + } +} + +1636 + $que_b +( +ci_sock_t + * +sock +,  +msg_ty +,  +m_ags +, + +1637 * +buf +) + +1639  +msghdr + +msg +; + +1640  +iovec + +iov +; + +1641  +msghdr + * +hdr + = (msghd* +buf +; + +1642  +msg + * +m + = (*)( +hdr ++1); + +1643  +t +; + +1645 + `memt +( +buf +, 0, +NL_BUFSIZE +); + +1646 if +msg_ty + = +RTM_GETROUTE + ) + +1647 +hdr +-> +msg_n + = + `NLMSG_LENGTH +(( +msg +)); + +1649 +hdr +-> +msg_n + = + `NLMSG_LENGTH +(( +gmsg +)); + +1650 +hdr +-> +msg_ty + =lmsg_type; + +1651 +hdr +-> +msg_ags + = +NLM_F_ROOT + | +NLM_F_REQUEST +; + +1652 +hdr +-> +msg_q + = ++ +sock +-> +q +; + +1653 +m +-> +m_my + = +AF_INET +; + +1654 +m +-> +m_ags + =tm_flags; + +1656 +iov +. +iov_ba + = (*) +buf +; + +1657 +iov +. +iov_n + = +hdr +-> +msg_n +; + +1658 +msg +. +msg_me += +NULL +; + +1659 +msg +. +msg_m +=0; + +1660 +msg +. +msg_cڌn +=0; + +1661 +msg +. +msg_ags +=0; + +1662 +msg +. +msg_iov +=& +iov +; + +1663 +msg +. +msg_iovn +=1; + +1665 +t + = + `sock_ndmsg +( +sock +-> +sock +, & +msg +, +hdr +-> +msg_n +); + +1667 i( +t + < 0) { + +1668 + `ci_log +("%s():sock_ndmsg faed,=%d", +__FUNCTION__ +, +t +); + +1669  +t +; + +1672 if( +t + ! +hdr +-> +msg_n +) { + +1673 + `ci_log +("%s():sock_sendmsg failed. Read %d bytes butxpected %d.", + +1674 +__FUNCTION__ +, +t +, +hdr +-> +msg_n +); + +1675  - +ENODATA +; + +1679 + } +} + +1686  +ssize_t + + +1687 + $Îk_ad +( +sock + * +sock +, * +buf +, +size_t + +cou +, + +1688  +blockg +,  +y +) + +1689 {  +sockaddr_ + +addr +; + +1690  +msghdr + +msg +; + +1691  +iovec + +iov +; + +1692  +rc +; + +1694 + `memt +(& +addr +, 0, (nladdr)); + +1695 +addr +. +_my + = +AF_NETLINK +; + +1696 +addr +. +_pid + = 0; + +1697 +addr +. +_groups + = 0; + +1699 +iov +. +iov_ba + = +buf +; + +1700 +iov +. +iov_n + = +cou +; + +1702 +msg +. +msg_me +=& +addr +; + +1703 +msg +. +msg_m +=( +addr +); + +1704 +msg +. +msg_iov +=& +iov +; + +1705 +msg +. +msg_iovn +=1; + +1706 +msg +. +msg_cڌ +=0; + +1707 +msg +. +msg_cڌn +=0; + +1708 +msg +. +msg_ags + = +blockg + ? 0 : +MSG_DONTWAIT +; + +1710 +rc + = + `sock_cvmsg +( +sock +, & +msg +, +cou +, msg. +msg_ags +); + +1713 i( +y + && +rc + =- +EAGAIN +) { + +1714 + `DEBUGNETLINK +( + `DPRINTF +( +CODEID +":e-readetlink #1")); + +1715 + `t_cut_e +( +TASK_INTERRUPTIBLE +); + +1716 + `schedu_timeout +( +HZ +/100); + +1717 +rc + = + `sock_cvmsg +( +sock +, & +msg +, +cou +, msg. +msg_ags +); + +1719 i( +y + && +rc + =- +EAGAIN +) { + +1720 + `DEBUGNETLINK +( + `DPRINTF +( +CODEID +":e-readetlink #2")); + +1721 + `t_cut_e +( +TASK_INTERRUPTIBLE +); + +1722 + `schedu_timeout +( +HZ +/10); + +1723 +rc + = + `sock_cvmsg +( +sock +, & +msg +, +cou +, msg. +msg_ags +); + +1727  +rc +; + +1728 + } +} + +1735 + $ad__msg +( +sock + * +sock +, * +buf +,  +blockg +, + +1736  +y +) + +1737 {  +bys +; + +1739 + `memt +( +buf +, 0, +NL_BUFSIZE +); + +1740 +bys + = + `Îk_ad +( +sock +, (* +buf +, +NL_BUFSIZE +, +blockg +, +y +); + +1741 i( +bys + < 0) + +1742 { + `DEBUGNETLINK +( + +1743 i( +bys + !- +EAGAIN +) + +1744 + `DPRINTF +( +CODEID +":lkd faed,%d", - +bys +); + +1746  +bys +; + +1748 i( +bys + == 0) { + +1749 + `DEBUGNETLINK +( + `DPRINTF +( +CODEID +": EOF,etlink socket closed")); + +1750  - +EIO +; + +1752  +bys +; + +1753 + } +} + +1764 + $ad__ڣ +( +ci_sock_t + * +sock +, +ci__msg_hdr_t + * +hf +, + +1765 +cios_r_e_t + * +ssi +, + +1766 +ci_po_hdlg__t + * +po_hdlg_ +, + +1767 * +buf +) + +1769  +rc +, +bys +; + +1770  +msghdr + * +hdr +; + +1775 +rc + = +bys + = + `ad__msg +( +sock +-> +sock +, +buf +, 0, 1); + +1776 i( +rc + < 0) + +1777  +rc +; + +1779 { +hdr + = ( +msghdr + *) +buf +; + +1780  + `NLMSG_OK +( +hdr +, +bys +)) { + +1782 i( +hdr +-> +msg_q + ! +sock +-> +q +) { + +1784 + `ci_log +("%s: Unsolicitedetlink msg, msg_seq=%d,xpected_seq=%d", + +1785 +__FUNCTION__ +, +hdr +-> +msg_q +, +sock +-> +q +); + +1787 } i( +hdr +-> +msg_ty + = +NLMSG_DONE +) { + +1789 +rc + = 0; + +1790  +de +; + +1792 } i( +hdr +-> +msg_ty + = +NLMSG_NOOP +) { + +1794 + `DEBUGNETLINK +( + `DPRINTF +( +CODEID +": ignoring NOOPetlinkacket")); + +1796 } i( +hdr +-> +msg_ty + = +NLMSG_ERROR +) { + +1797 + `ci_log +( +CODEID +":etlinkrroracketeceived!"); + +1798  - +EIO +; + +1802 i(( +rc + = (* +hf +)( +ssi +, +hdr +)) < 0) { + +1803 + `ci_log +( +CODEID +":etlink message handling function failed,c=%d", + +1804 +rc +); + +1809 +hdr + = + `NLMSG_NEXT +lhdr, +bys +); + +1815 +de +: + +1817 i( +NULL + ! +po_hdlg_ +) + +1818 (* +po_hdlg_ +)( +ssi +); + +1820  +rc +; + +1821 + } +} + +1829 +ci_le +  + +1830 + $_pl +( +sock + * +sock +, +ci__msg_hdr_t + * +hf +, + +1831 +cios_r_e_t + * +ssi +, * +buf +) + +1833  +rc +, +bys +; + +1834  +msghdr + * +hdr + = (msghd* +buf +; + +1837 +rc + = +bys + = + `ad__msg +( +sock +, +buf +, 0, 0); + +1838 i( +rc + < 0) { + +1839 i( +rc + !- +ERESTART + &&!- +EAGAIN +) + +1840 + `ci_log +( +CODEID +": faedػadlk mesgdurgl,c=%d", - +rc +); + +1841  +rc +; + +1844  + `NLMSG_OK +( +hdr +, +bys +)) { + +1845 i( +hdr +-> +msg_ty + = +NLMSG_DONE +) { + +1847 } i( +hdr +-> +msg_ty + = +NLMSG_NOOP +) { + +1849 + `DEBUGNETLINK +( + `DPRINTF +( +CODEID +": ignoring NOOPetlinkacket inoll")); + +1850 } i( +hdr +-> +msg_ty + = +NLMSG_ERROR +) { + +1851 + `ci_log +( +CODEID +":etlinkrroracketeceived inoll!"); + +1852  - +EIO +; + +1855 i(( +rc + = (* +hf +)( +ssi +, +hdr +)) < 0) + +1856 + `ci_log +( +CODEID +": hdlg funi faedᔅl,c=%d", - +rc +); + +1858 +hdr + = + `NLMSG_NEXT +lhdr, +bys +); + +1862 + } +} + +1886 #i +CICPOS_USE_NETLINK + + +1893 +ci_hd_t + * + mcڌ_e +; + +1895  + m +; + +1896 } + tcios_tim_da_t +; + +1901  +cios_tim_da_t + + gcios_tim_da +; + +1908  +tim_li + + gcios_tim_node +; + +1911  +sock + * + gNL_SOCKET +; + +1917  + gcios_rušg + = 0; + +1932 + $eb_Îk_pl_f_updes +( +ci_hd_t + * +cڌ_e +, * +buf +) + +1934  +rc +; + +1935 +cios_r_e_t + * +ssi + = + `cios_r_e_loc +( +cڌ_e +); + +1937 if +NULL + = +ssi + ) + +1938 +rc + = - +ENOMEM +; + +1940 + `cios_r_ +( +ssi +, +cڌ_e +); + +1943 +rc + = + `_pl +( +NL_SOCKET +, & +cios_hd__msg +, +ssi +, +buf +); + +1944  +rc + == 0 ); + +1946 + `cios_r_e_ +( +ssi +); + +1948  +rc + =- +EAGAIN + ? 0 :c; + +1949 + } +} + +1956 + $cios_wk +(* +cڋxt_ +) + +1958  +cou + = 0; + +1959  +buf +[ +NL_BUFSIZE +]; + +1961 i( +cios_rušg +) + +1962 { +ci_hd_t + * +cڌ_e + = (ci_hd_*) +cڋxt_ +; + +1963 + `eb_Îk_pl_f_updes +( +cڌ_e +, +buf +); + +1964 i( +cou + % 2 == 0) + +1965 + `cios_dump_bs +( +cڌ_e +, +cou +%20, +buf +); + +1966 +cou +++; + +1968 + } +} + +1976 + $cios_tim +( +_da +) + +1978 +cios_tim_da_t + * +d + = (* +_da +; + +1980 i(! +d +-> + +) { + +1981  +ci_wkem_t + +wi + = + +1982 + `CI_WORKITEM_INITIALISER +( +wi +, ( +CI_WITEM_ROUTINE +& +cios_wk +, +NULL +); + +1983 + `CI_WORKITEM_SET_CONTEXT +(& +wi +, +d +-> +cڌ_e +); + +1984 + `ci_wkqueue_add +(& +CI_GLOBAL_WORKQUEUE +, & +wi +); + +1986 + `mod_tim +(& +cios_tim_node +, +jiffs + + +CICPOS_SCAN_INTERVAL +); + +1988 + } +} + +1995  + gcڡrued + = +FALSE +; + +2001 + $cios_sync_ +( +ci_hd_t + * +cڌ_e +) + +2002 {  +rc +; + +2004 i( +cڡrued +) + +2005 { + `ci_log +( +CODEID +": duplicate synchronizer construction detected!"); + +2006 +rc + = 0; + +2008 { +cڡrued + = +TRUE +; + +2010 + `DEBUGNETLINK +( + `DPRINTF +( +CODEID + ": constructing synchronizer")); + +2014 +rc + = + `_lig_Îk_sock +(& +NL_SOCKET +); + +2015 i( + `CI_LIKELY +( +rc + >= 0)) { + +2017 +cios_tim_da +. +cڌ_e + = control_plane; + +2019 +cios_tim_da +. + + = 0; + +2022 + `_tim +(& +cios_tim_node +); + +2023 +cios_tim_node +. +expes + = +jiffs + + +CICPOS_SCAN_INTERVAL +; + +2024 +cios_tim_node +. +da + = (& +cios_tim_da +; + +2025 +cios_tim_node +. +funi + = & +cios_tim +; + +2032 + `add_tim +(& +cios_tim_node +); + +2034 + `DEBUGNETLINK +( + `DPRINTF +( +CODEID +": constructed")); + +2035 +rc + = 0; + +2037 + `ci_log +( +CODEID +": c'lk sock,c=%d.", +rc +); + +2039  +rc +; + +2040 + } +} + +2048 + $cios_sync_dt +( +ci_hd_t + * +cڌ_e +) + +2050 + `DEBUGNETLINK +( + `DPRINTF +( +CODEID +": destroying synchronizer")); + +2052 i(! +cڡrued +) + +2053 + `ci_log +( +CODEID +": duplicate synchronizer destruction detected!"); + +2061 +cios_tim_da +. + + = 1; + +2064 + `DEBUGNETLINK +( + `DPRINTF +("Deleting synchronizerimer")); + +2075 + `ci_vify +( + `ci_wkqueue_ush +(& +CI_GLOBAL_WORKQUEUE +) == 0); + +2076 + `d_tim_sync +(& +cios_tim_node +); + +2077 + `ci_vify +( + `ci_wkqueue_ush +(& +CI_GLOBAL_WORKQUEUE +) == 0); + +2080 + `sock_a +( +NL_SOCKET +); + +2082 + `DEBUGNETLINK +( + `DPRINTF +( +CODEID +": synchronizer destroyed")); + +2084 + } +} + +2091  + #cios_sync_ +( +cڌ_e +(0) + + ) + +2092  + #cios_sync_dt +( +cڌ_e +) + + ) + +2116 + $cios_rou_kmib_row_ +( +cios_rou_row_t + * +sync_row +) + +2117 { + `ci_as +( +NULL + ! +sync_row +); + +2119 + `memt +( +sync_row +, 0, (*sync_row)); + +2120 + } +} + +2127 + $cios_rou_kmib_row_upde +( +cios_rou_row_t + * +sync_row +, + +2128 cڡ +cios_rou_row_t + * +sync_wrow +) + +2129 {  +chged +; + +2131 + `ci_as +( +NULL + ! +sync_row +); + +2133 i( +NULL + = +sync_wrow +) + +2134 { +chged + = +FALSE +; + +2135 + `memt +( +sync_row +, 0, (*sync_row)); + +2137 { +chged + = (0 ! + `memcmp +( +sync_row +, +sync_wrow +, (*sync_row))); + +2138 + `memy +( +sync_row +, +sync_wrow +, (*sync_row)); + +2141  +chged +; + +2142 + } +} + +2150 #i +CICPOS_USE_NETLINK + + +2155 +ci_nole +  + +2156 + $cios_hd_rou_msg +( +cios_r_e_t + * +ssi +,  +msghdr + * +hdr +) + +2157 {  +rc + = 0; + +2158  + + = + `RTM_PAYLOAD +( +hdr +); + +2159  +msg + *msg = (msg *) + `NLMSG_DATA +( +hdr +); + +2161  + + * + +; + +2162 +ci__addr_t + +de_ +; + +2163 +ci__addrt_t + +de_t + = +CI_IP_ADDRSET_BAD +; + +2164 +ci__addr_t + +xt_h_ +; + +2165 +ci__addr_t + +ef_sour +; + +2166 +ci_ifid_t + +ifdex + = +CI_IFID_BAD +; + +2167 +ci_mric_t + +mric + = 1; + +2168 +ci__tos_t + +tos + = 0; + +2169 +ci_mtu_t + +mtu + = 0; + +2170  +igne + = 0; + +2172  +unsu܋d_t_ + = 0; + +2173  +unsu܋d_mrics_t_ + = 0; + +2175 + `ci_as +( +NULL + ! +hdr +); + +2176 + `ci_as +( +NULL + ! +ssi +); + +2177 + `ci_as_gt +( + +, 0); + +2178 + `ci_as +( +NULL + ! +msg +); + +2180 i( +msg +-> +m_my + ! +PF_INET +) + +2181 { + `DEBUGNETLINK +( + `DPRINTF +( +CODEID +": ignoringon IPntry (fam=%x)", + +2182 +msg +-> +m_my +)); + +2188 i( +msg +-> +m_b + ! +RT_TABLE_MAIN + && + +2189 +msg +-> +m_b + ! +RT_TABLE_LOCAL +) + +2192 + + = ( + + *) + `RTM_RTA +( +msg +); + +2193 + `ci_as +( +NULL + ! + +); + +2195 + `memt +(& +de_ +, 0, (dest_ip)); + +2196 + `memt +(& +ef_sour +, 0, (pref_source)); + +2197 + `memt +(& +xt_h_ +, 0, (next_hop_ip)); + +2199  + `RTA_OK +( + +, + +)) + +2201  + +-> +a_ty +) + +2203  +RTA_DST +: + +2204 +de_ + = *(( +ci_ut32 + *) + `RTA_DATA +( + +)); + +2211  +RTA_OIF +: + +2212 +ifdex + = *((*) + `RTA_DATA +( + +)); + +2216  +RTA_GATEWAY +: + +2217 +xt_h_ + = *(( +ci_ut32 + *) + `RTA_DATA +( + +)); + +2223  +RTA_PRIORITY +: + +2226  +RTA_SRC +: + +2227 + `ci_as +( +msg +-> +m_ags + & +RTM_F_CLONED +); + +2230  +RTA_PREFSRC +: + +2231 +ef_sour + = *(( +ci_ut32 + *) + `RTA_DATA +( + +)); + +2237  +RTA_METRICS +: { + +2238  + + * +a + = + `RTA_DATA +( + +); + +2239  +n + = + `RTA_PAYLOAD +( + +); + +2240  + `RTA_OK +( +a +, +n +)) { + +2241  +a +-> +a_ty + ) { + +2242  +RTAX_MTU +: + +2243 +mtu + = *(( +ci_ut32 + *) + `RTA_DATA +( +a +)); + +2245  + #RTAX_UNSUPPORTED_METRICS_PRINT_ONCE +( +ax +) \ + +2246  +ax +: \ + +2247 if~ +unsu܋d_mrics_t_ + & (1 << +ax +) ) { \ + +2248 + `ci_log +( +CODEID +": ignoring "#rtax); \ + +2249 +unsu܋d_mrics_t_ + |(1 << +ax +); \ + +2251  + + ) + +2253 + `RTAX_UNSUPPORTED_METRICS_PRINT_ONCE +( +RTAX_RTT +); + +2254 + `RTAX_UNSUPPORTED_METRICS_PRINT_ONCE +( +RTAX_RTTVAR +); + +2255 + `RTAX_UNSUPPORTED_METRICS_PRINT_ONCE +( +RTAX_SSTHRESH +); + +2256 + `RTAX_UNSUPPORTED_METRICS_PRINT_ONCE +( +RTAX_ADVMSS +); + +2257 + `RTAX_UNSUPPORTED_METRICS_PRINT_ONCE +( +RTAX_CWND +); + +2258 + `RTAX_UNSUPPORTED_METRICS_PRINT_ONCE +( +RTAX_HOPLIMIT +); + +2259 + `RTAX_UNSUPPORTED_METRICS_PRINT_ONCE +( +RTAX_REORDERING +); + +2261 + `RTAX_UNSUPPORTED_METRICS_PRINT_ONCE +( +RTAX_UNSPEC +); + +2262 + `RTAX_UNSUPPORTED_METRICS_PRINT_ONCE +( +RTAX_LOCK +); + +2263 + `RTAX_UNSUPPORTED_METRICS_PRINT_ONCE +( +RTAX_WINDOW +); + +2264 + `RTAX_UNSUPPORTED_METRICS_PRINT_ONCE +( +RTAX_INITCWND +); + +2265 + `RTAX_UNSUPPORTED_METRICS_PRINT_ONCE +( +RTAX_FEATURES +); + +2266 #ifde +RTAX_RTO_MIN + + +2267 + `RTAX_UNSUPPORTED_METRICS_PRINT_ONCE +( +RTAX_RTO_MIN +); + +2269 #unde +RTAX_UNSUPPORTED_METRICS_PRINT_ONCE + + +2271 +a + = + `RTA_NEXT +ԏ, +n +); + +2276  +RTA_CACHEINFO +: { + +2281  +RTA_IIF +: { + +2284 +igne + = 1; + +2288  + #RTA_UNSUPPORTED_PRINT_ONCE +( +a +) \ + +2289  +a +: \ + +2290 if~ +unsu܋d_t_ + & (1 << +a +) ) { \ + +2291 + `ci_log +( +CODEID +": ignoring "#rta); \ + +2292 +unsu܋d_t_ + |(1 << +a +); \ + +2294  + + ) + +2296 + `RTA_UNSUPPORTED_PRINT_ONCE +( +RTA_MULTIPATH +); + +2297 + `RTA_UNSUPPORTED_PRINT_ONCE +( +RTA_PROTOINFO +); + +2298 + `RTA_UNSUPPORTED_PRINT_ONCE +( +RTA_FLOW +); + +2299 #unde +RTA_UNSUPPORTED_PRINT_ONCE + + +2302 + `DEBUGNETLINK +( + `ci_log + +CODEID +": ignoring unknownta_type %d", + +2303 + +-> +a_ty +)); + +2306 + + = + `RTA_NEXT +׉r, + +); + +2309 +de_t + = +msg +-> +m_d_n +; + +2310 +tos + = +msg +-> +m_tos +; + +2316 i( +igne + || + +2317 ( +msg +-> +m_ty + = +RTN_LOCAL + && (msg-> +m_ags + & +RTM_F_CLONED +)) + +2322 i( + `CI_UNLIKELY +( +msg +-> +m_ty + ! +RTN_UNICAST + && + +2323 !( +msg +-> +m_ty + = +RTN_LOCAL + && + +2324 +de_t + == 32))) + +2326 i( +msg +-> +m_b + ! +RT_TABLE_LOCAL + && + +2327 !( +msg +-> +m_ags + & +RTM_F_CLONED +)) + +2329 + `ci_log +("%s: We only support unicastntries. " + +2331 +__FUNCTION__ +, +msg +-> +m_b +,tmsg-> +m_ty +,tmsg-> +m_ags +); + +2332 + `ci_log +("d=" +CI_IP_PRINTF_FORMAT + "/%u" + +2333 " gw=" +CI_IP_PRINTF_FORMAT + + +2334 " src=" +CI_IP_PRINTF_FORMAT + + +2336 + `CI_IP_PRINTF_ARGS +(& +de_ +), +de_t +, + +2337 + `CI_IP_PRINTF_ARGS +(& +xt_h_ +), + +2338 + `CI_IP_PRINTF_ARGS +(& +ef_sour +), + +2339 +tos +, +ifdex +); + +2343 +cios_rou_row_t + +sync +; + +2344 +ci_sce_t + +sce +; + +2346 + `memt +(& +sync +, 0, (sync)); + +2348 i( +msg +-> +m_sce + = +RT_SCOPE_HOST +) + +2349 + `ci_sce_t_ho +(& +sce +); + +2351 + `ci_sce_t_glob +(& +sce +); + +2353 if( +msg +-> +m_ags + & +RTM_F_CLONED +) ) { + +2354  +rowid +; + +2355 + `ci_as_equ +( +de_t +, 32); + +2356 + `ci_as_equ +( +hdr +-> +msg_ty +, +RTM_NEWROUTE +); + +2357 +rowid + = + `cios_pmtu_check +( +ssi +-> +cڌ_e +, + +2358 +de_ +, +ifdex +, +mtu +); + +2359 if +rowid + != -1 ) + +2360 + `ci_bt_add +( + `CI_BITSET_REF +( +ssi +-> +imp܋d_pmtu +), +rowid +); + +2362 +igne + = 1; + +2365 i( +hdr +-> +msg_ty + = +RTM_NEWROUTE + && ! +igne +) + +2366 { +ci_rou_rowid_t + +rowid +; + +2368 +rc + = + `cios_rou_impt +( +ssi +-> +cڌ_e +, & +rowid +, + +2369 +de_ +, +de_t +, +sce +, + +2370 +xt_h_ +, +tos +, +mric +, + +2371 +ef_sour +, +ifdex +, +mtu +, + +2372 +mtu + != 0 && + +2373 !( +msg +-> +m_ags + & +RTM_F_CLONED +) ? + +2374 +CICP_FLAG_ROUTE_MTU + : 0, + +2375 & +sync +, +ssi +-> +nost +); + +2377 i(0 = +rc +) + +2378 { + `ci_as +( +CICP_ROUTE_ROWID_BAD + ! +rowid +); + +2379 + `ci_as +( +rowid + >= 0); + +2380 + `ci_bt_add +( + `CI_BITSET_REF +( +ssi +-> +imp܋d_rou +), + +2381 +rowid +); + +2384 +DEBUGNETLINK + + +2385 ( + `ci_log +( +CODEID +": cios_rou_imp܈ed,c=%d ", +rc +)); + +2389 if +hdr +-> +msg_ty + = +RTM_DELROUTE + ) { + +2390 + `cios_rou_de +( +ssi +-> +cڌ_e +, +de_ +, + +2391 +de_t +, +ifdex +); + +2392 i( +ssi +-> +nost +) { + +2393 +ssi +-> +nost + = +CI_FALSE +; + +2394 + `DEBUGNETLINK +( + `ci_log +("%s: deleteoute when dumping", + +2395 +__FUNCTION__ +)); + +2401  +rc +; + +2402 + } +} + +2412 +ci_le +  + +2413 + $cios_dump_rout +( +ci_sock_t + * +sock +, + +2414 +cios_r_e_t + * +ssi +, * +buf +) + +2415 {  +rc +; + +2418 i(( +rc + = + `que_b +( +sock +, +RTM_GETROUTE +, 0, +buf +)) < 0 ) + +2419 + `ci_log +( +CODEID +":outeableequest " + +2420 "ed,%d", - +rc +); + +2423 i(( +rc + = + `ad__ڣ +( +sock +, + +2424 & +cios_hd_rou_msg +, + +2425 +ssi +, + +2426 +NULL +, + +2427 +buf +)) + +2429 + `ci_log +( +CODEID +": failedoeadouteable from " + +2430 "Îk,%d", - +rc +); + +2432  +rc +; + +2433 + } +} + +2439 +ci_le +  + +2440 + $cios_dump_rou_che +( +ci_sock_t + * +sock +, + +2441 +cios_r_e_t + * +ssi +, * +buf +) + +2442 {  +rc +; + +2445 i(( +rc + = + `que_b +( +sock +, +RTM_GETROUTE +, +RTM_F_CLONED +, +buf +)) < 0 ) + +2446 + `ci_log +( +CODEID +":oute cacheableequest " + +2447 "ed,%d", - +rc +); + +2450 i(( +rc + = + `ad__ڣ +( +sock +, + +2451 & +cios_hd_rou_msg +, + +2452 +ssi +, + +2453 +NULL +, + +2454 +buf +)) + +2456 + `ci_log +( +CODEID +": failedoeadoute cacheable from " + +2457 "Îk,%d", - +rc +); + +2459  +rc +; + +2460 + } +} + +2465 +ci_le +  + +2466 + $cios_dump_pmtu_row +( +ci_sock_t + * +sock +,  +rowid +, + +2467 +cios_r_e_t + * +ssi +, * +buf +) + +2469  +rc +; + +2470  +msghdr + +msg +; + +2471  +iovec + +iov +; + +2472 +ci__addr_t_t + +t_ + = + `CICP_MIBS +( +ssi +-> +cڌ_e +)-> + +2473 +pmtu_b +-> +s +[ +rowid +]. +t_ +; + +2474  +msghdr + * +hdr + = (msghd* +buf +; + +2475  +msg + * +m + = (*)( +hdr ++1); + +2476  + + * +a +; + +2478 if +t_ + = +INADDR_ANY + ) + +2481 + `memt +( +buf +, 0, +NL_BUFSIZE +); + +2482 +hdr +-> +msg_ty + = +RTM_GETROUTE +; + +2483 +hdr +-> +msg_n + = + `NLMSG_LENGTH +(( +msg +)); + +2484 +hdr +-> +msg_ags + = +NLM_F_REQUEST +; + +2485 +hdr +-> +msg_q + = ++ +sock +-> +q +; + +2486 +m +-> +m_my + = +AF_INET +; + +2487 +m +-> +m_ags + = +RTM_F_CLONED +; + +2488 +a + = (*)( +m ++1); + +2489 +a +-> +a_ty + = +RTA_DST +; + +2490 +a +-> +a_n + = + `RTA_LENGTH +(4); + +2491 + `memy +( + `RTA_DATA +( +a +), & +t_ +, 4); + +2492 +m +-> +m_d_n + = 32; + +2493 +hdr +-> +msg_n + = + `NLMSG_ALIGN +lhdr->msg_n+ + `RTA_LENGTH +(4); + +2495 +iov +. +iov_ba + = (*) +buf +; + +2496 +iov +. +iov_n + = +hdr +-> +msg_n +; + +2497 +msg +. +msg_me += +NULL +; + +2498 +msg +. +msg_m +=0; + +2499 +msg +. +msg_cڌn +=0; + +2500 +msg +. +msg_ags +=0; + +2501 +msg +. +msg_iov +=& +iov +; + +2502 +msg +. +msg_iovn +=1; + +2504 +rc + = + `sock_ndmsg +( +sock +-> +sock +, & +msg +, +hdr +-> +msg_n +); + +2505 if +rc + < 0 ) + +2508 +rc + = + `ad__ڣ +( +sock +, & +cios_hd_rou_msg +, + +2509 +ssi +, +NULL +, +buf +); + +2510 + } +} + +2512 +ci_le +  + +2513 + $cios_dump_pmtu_che +( +ci_sock_t + * +sock +, + +2514 +cios_r_e_t + * +ssi +, * +buf +) + +2516 +ci_pmtu_kmib_t + * +pmtu_b + = + +2517 + `CICP_MIBS +( +ssi +-> +cڌ_e +)-> +pmtu_b +; + +2518  +i +; + +2519  +i + = 0; i < +pmtu_b +-> +ud_rows_max +; i++) + +2520 if + `ci_pmtu_row_lod +(& +pmtu_b +-> +s +[ +i +]) ) { + +2521 + `cios_dump_pmtu_row +( +sock +, +i +, +ssi +, +buf +); + +2523 + } +} + +2548 + $cios_mac_kmib_row_ +( +cios_mac_row_t + * +sync_row +, + +2549 cڡ +cios_mac_row_sync_t + * +os +) + +2550 { + `ci_as +( +NULL + ! +sync_row +); + +2552 + `memt +( +sync_row +, 0, (*sync_row)); + +2554 +sync_row +-> +mpg_t + = 0; + +2556 i( +NULL + = +os +) + +2557 +sync_row +-> +sour_ + = 1; + +2559 { + `memy +(& +sync_row +-> +os +, os, (sync_row->os)); + +2560 +sync_row +-> +sour_sync + = 1; + +2562 + } +} + +2572 + $cios_mac_kmib_ +( +cios_mac_mib_t + * +sync +) + +2573 { + `ci_as +( +NULL + ! +sync +); + +2575 + } +} + +2584 + $cios_mac_kmib_dt +( +cios_mac_mib_t + * +sync +) + +2585 { () +sync +; + +2587 + `ci_vify +( + `ci_wkqueue_ush +(& +CI_GLOBAL_WORKQUEUE +) == 0); + +2588 + } +} + +2598 + $cios_mac_kmib_row_upde +( +ci_hd_t + * +cڌ_e +, + +2599 +cios_mac_row_t + * +sync_row +, +ci_mac_row_t + * +row +, + +2600 cڡ +cios_mac_row_sync_t + * +os +, + +2601 cڡ +ci_mac_addr_t + * +mac +, + +2602  +ti +, + +2603 * +out_igne_ash +) + +2605  +wly_vid + = +ti +; + +2607 + `ci_as +( +NULL + ! +sync_row +); + +2608 * +out_igne_ash + = 0; + +2619 i( +os + ! +NULL + && + +2620 ( +os +-> +e + = +CICPOS_IPMAC_INCOMPLETE + || + +2621 +os +-> +e + = +CICPOS_IPMAC_NONE +)) + +2623 i( +sync_row +-> +sour_sync + && sync_row-> +os +. +e + ! +CICPOS_IPMAC_FAILED + && + +2624 +os + = +NULL +) + +2626 i( +os + = +NULL + && ! +sync_row +-> +sour_sync + && +ti + && + +2627 ! + `CI_MAC_ADDR_EQ +(& +row +-> +mac_addr +, +mac +)) + +2631 i( +os + ! +NULL + && +sync_row +-> +sour_sync +) + +2632 * +out_igne_ash + = 1; + +2636 i( +os + ! +NULL +) + +2637 { +ci_ut16 + +ig_e + = +sync_row +-> +os +. +e +; + +2638 + `memy +(& +sync_row +-> +os +, os, (sync_row->os)); + +2639 +sync_row +-> +sour_sync + = 1; + +2640 i( + `CI_UNLIKELY +(0!=( +sync_row +-> +os +. +e + & +CICPOS_IPMAC_NOARP +))) + +2641 +row +-> +rc + = - +EINVAL +; + +2642 i( + `CI_UNLIKELY +(0!=( +sync_row +-> +os +. +e + & +CICPOS_IPMAC_FAILED +))) + +2643 +row +-> +rc + = - +EHOSTUNREACH +; + +2645 +row +-> +rc + = 0; + +2647 i( +os +-> +e + & +CICPOS_IPMAC_STALE +) { + +2648 i( +row +-> +ed_upde + ! +CICP_MAC_ROW_NEED_UPDATE_STALE +) { + +2649 +row +-> +ed_upde + = +CICP_MAC_ROW_NEED_UPDATE_STALE +; + +2650 +ti + = 1; * +out_igne_ash + = 1; + +2653 i( +os +-> +e + = +CICPOS_IPMAC_REACHABLE + && + +2654 +os +-> +cfmed + > +p_tbl +. +rms +. +achab_time + / 3 ) { + +2659 i( +row +-> +ed_upde + ! +CICP_MAC_ROW_NEED_UPDATE_SOON +) { + +2660 +row +-> +ed_upde + = +CICP_MAC_ROW_NEED_UPDATE_SOON +; + +2661 +ti + = 1; * +out_igne_ash + = 1; + +2665 +row +-> +ed_upde + = 0; + +2667 i(0 !( +sync_row +-> +os +. +e + & +CICPOS_IPMAC_REACHABLE +) && + +2668 +sync_row +-> +os +. +e + ! +ig_e +) + +2669 +wly_vid + = 1; + +2671 { +sync_row +-> +sour_ + = 1; + +2672 +sync_row +-> +os +. +e + = +CICPOS_IPMAC_REACHABLE +; + +2673 +row +-> +rc + = 0; + +2676 i( +wly_vid +) + +2677 { +sync_row +-> +mpg_t + = +jiffs +; + +2681  +ti +; + +2682 + } +} + +2691  + $cios_mac_row_synd +( +cios_mac_row_t + * +row +) + +2692 { +row +-> +_sync + = 1; + +2693 + } +} + +2707  + $cios_mac_row_ +( +cios_mac_row_t + * +sync +) + +2716 if! +sync +-> +_sync + ) + +2719 +sync +-> +_sync + = 0; + +2721  +sync +-> +sour_sync +; + +2722 + } +} + +2728 #i +CICPOS_USE_NETLINK + + +2735 +ci_nole +  + +2736 + $cios_hd_mac_msg +( +cios_r_e_t + * +ssi +,  +msghdr + * +hdr +) + +2737 {  +rc + = 0; + +2738  + + = + `NLMSG_PAYLOAD +( +hdr +, ( +ndmsg +)); + +2739  +ndmsg + *ndmsg = (ndmsg *) + `NLMSG_DATA +( +hdr +); + +2742 +ci_ifid_t + +ifdex + = +ndmsg +-> +ndm_ifdex +; + +2744 +cios_mac_row_sync_t + +os +; + +2746 +ci_mac_addr_t + +mac_addr +; + +2747 +ci__addr_t + +_addr +; + +2748  +mac_vid + = +FALSE +; + +2749  + + * + + = ( *) + `NDA_RTA +( +ndmsg +); + +2751 + `ci_as +( +NULL + ! +hdr +); + +2752 + `ci_as +( +NULL + ! +ssi +); + +2753 + `ci_as_gt +( + +, 0); + +2754 + `ci_as +( +NULL + ! +ndmsg +); + +2757 i( +ndmsg +-> +ndm_my + ! +AF_INET +) + +2758 { + `CICPOS_MAC_STAT_INC_NL_MSG_REJECT +( +ssi +-> +cڌ_e +); + +2763 + `ci_as +( +NULL + ! + +); + +2765 + `memt +(& +mac_addr +, 0, (mac_addr)); + +2766 + `memt +(& +_addr +, 0, (ip_addr)); + +2768 + `memt +(& +os +, 0, (os)); + +2769 +os +. +my + = +ndmsg +-> +ndm_my +; + +2770 +os +. +e + = +ndmsg +-> +ndm_e +; + +2771 +os +. +ags + = +ndmsg +-> +ndm_ags +; + +2773  + `RTA_OK +( + +, + +)) + +2775  + +-> +a_ty +) + +2777  +NDA_DST +: + +2778 + `CI_IP_ADDR_SET +(& +_addr +, (cڡ +ci__addr_t + *) + `RTA_DATA +( + +)); + +2781  +NDA_LLADDR +: + +2782 + `CI_MAC_ADDR_SET +(& +mac_addr +, + +2783 (cڡ +ci_mac_addr_t + *) + `RTA_DATA +( + +)); + +2784 +mac_vid + = +TRUE +; + +2787  +NDA_CACHEINFO +: + +2788 {  +nda_chefo + * +chefo + = + +2789 ( +nda_chefo + *) + `RTA_DATA +( + +); + +2792 #i +LINUX_VERSION_CODE + > + `KERNEL_VERSION +(2,6,26) + +2793 +os +. +cfmed + = + `ock_t_to_jiffs +( +chefo +-> +ndm_cfmed +); + +2795 +os +. +cfmed + = +chefo +-> +ndm_cfmed +; + +2797 +os +. +ud + = +chefo +-> +ndm_ud +; + +2798 +os +. +upded + = +chefo +-> +ndm_upded +; + +2799 +os +. +ft + = +chefo +-> +ndm_ft +; + +2802 #i +LINUX_VERSION_CODE + > + `KERNEL_VERSION +(2,6,12) + +2803  +NDA_PROBES +: + +2811 + `DEBUGNETLINK +( + `ci_log +( + +2813 +__FUNCTION__ +, + +-> +a_ty +)); + +2816 + + = + `RTA_NEXT +׉r, + +); + +2819 i( +rc + != 0) + +2820  +rc +; + +2822 i( + `CI_UNLIKELY +(! +mac_vid + && ( +os +. +e + & +CICPOS_IPMAC_VALID +))) + +2824 + `ci_log +( +CODEID +": Linux volunteeredo MACddress for " + +2825 +CI_IP_PRINTF_FORMAT +" in state 0x%02x", + +2826 + `CI_IP_PRINTF_ARGS +(& +_addr +), +os +. +e +); + +2828 { +ci_mib_vfo_t + +rowfo +; + +2830 +rowfo +. +row_vsi + = +CI_VERLOCK_BAD +; + +2831 +rowfo +. +row_dex + = +CICP_MAC_ROWID_BAD +; + +2833 + `cios_mac_t +( +ssi +-> +cڌ_e +, & +rowfo +, +ifdex +, +_addr +, + +2834 (cڡ +ci_mac_addr_t + *)& +mac_addr +, & +os +); + +2836 i( +CICP_MAC_ROWID_BAD + ! +rowfo +. +row_dex +) + +2837 + `cios_mac_row_ +( +ssi +-> +cڌ_e +, & +rowfo +); + +2840  +rc +; + +2841 + } +} + +2853 + $cios_mac_po_pl +( +cios_r_e_t + * +ssi +) + +2854 { + `cios_mac_purge_un +( +ssi +-> +cڌ_e +); + +2855 + } +} + +2862 +ci_le +  + +2863 + $cios_dump_ma +( +ci_sock_t + * +sock +, + +2864 +cios_r_e_t + * +ssi +, * +buf +) + +2865 {  +rc +; + +2867 i( + `cios_ma_ݒ +( +ssi +-> +cڌ_e +)) + +2869 i(( +rc + = + `que_b +( +sock +, +RTM_GETNEIGH +, 0, +buf +)) < 0) + +2870 + `ci_log +( +CODEID +":ab˄eque faed,%d", +rc +); + +2873 i(( +rc + = + `ad__ڣ +( +sock +, + +2874 & +cios_hd_mac_msg +, + +2875 +ssi +, + +2876 & +cios_mac_po_pl +, + +2877 +buf +)) < 0) + +2878 { + `DEBUGNETLINK +( + `DPRINTF +( +CODEID +":eading ofrpable from " + +2879 "Îk faed,%d", - +rc +)); + +2882 + `cios_ma_o +( +ssi +-> +cڌ_e +); + +2884 { + `DEBUGNETLINK +( + `DPRINTF +( +CODEID +": IP-MAC mappingslready " + +2886 +rc + = - +EALREADY +; + +2889  +rc +; + +2890 + } +} + +2922 + $cios_έ_kmib_row_ +( +cios_έ_row_t + * +row +) + +2924 + `ci_as +( +NULL + ! +row +); + +2925 + } +} + +2930 #i +CICPOS_USE_NETLINK + + +2935 +ci_nole +  + +2936 + $cios_hd_έ_msg +( +cios_r_e_t + * +ssi +,  +msghdr + * +hdr +) + +2937 {  +rc + = 0; + +2938  + + = + `RTM_PAYLOAD +( +hdr +); + +2939  +iffomsg + *iffomsg = (iffomsg *) + `NLMSG_DATA +( +hdr +); + +2941  + + * + +; + +2942 +ci_ut8 + +add +; + +2943 +ci_ut8 + +up +; + +2944 +ci_mtu_t + +mtu + = 0; + +2945  +me +[ +CICP_LLAP_NAME_MAX ++1]; + +2946 +ci_mac_addr_t + +mac +; + +2947 +cios_έ_row_t + +sync +; + +2949 + `ci_as +( +NULL + ! +hdr +); + +2950 + `ci_as +( +NULL + ! +ssi +); + +2951 + `ci_as_gt +( + +, 0); + +2952 + `ci_as +( +NULL + ! +iffomsg +); + +2955 i( +iffomsg +-> +ifi_ty + ! +ARPHRD_ETHER +) + +2960 + + = ( + + *) + `IFLA_RTA +( +iffomsg +); + +2961 +add + = ( +hdr +-> +msg_ty + = +RTM_NEWLINK +); + +2962 +up + = (0 !( +iffomsg +-> +ifi_ags + & +IFF_UP +)); + +2964 + `memt +(& +me +, 0, (name)); + +2965 + `memt +(& +mac +, 0, (mac)); + +2966 + `memt +(& +sync +, 0, (sync)); + +2969 + `CI_TRACE +( +iffomsg +-> +ifi_my +, "%d"); + +2971 + `CI_TRACE +( +iffomsg +-> +__ifi_d +, "%d"); + +2972 + `CI_TRACE +( +iffomsg +-> +ifi_ty +, "%d"); + +2973 + `CI_TRACE +( +iffomsg +-> +ifi_dex +, "%d"); + +2974 + `CI_TRACE +( +iffomsg +-> +ifi_ags +, "0x%X"); + +2975 + `CI_TRACE +( +iffomsg +-> +ifi_chge +, "%d"); + +2978 + `ci_as +( +add + || ( +hdr +-> +msg_ty + = +RTM_DELLINK +)); + +2979 + `ci_as +( +NULL + ! + +); + +2981  + `RTA_OK +( + +, + +)) + +2983  + +-> +a_ty +) + +2985  +IFLA_UNSPEC +: + +2988  +IFLA_ADDRESS +: + +2989 + `CI_MAC_ADDR_SET +(& +mac +, + `RTA_DATA +( + +)); + +2992  +IFLA_IFNAME +: + +2993 + `memy +(& +me +, + `RTA_DATA +( + +), (name)); + +2996  +IFLA_MTU +: + +2997 +mtu + = ( +ci_mtu_t +*((*) + `RTA_DATA +( + +)); + +3000  +IFLA_BROADCAST +: + +3001  +IFLA_LINK +: + +3002  +IFLA_QDISC +: + +3003  +IFLA_STATS +: + +3004  +IFLA_PRIORITY +: + +3005  +IFLA_MASTER +: + +3006 #ifde +IFLA_WIRELESS + + +3007  +IFLA_WIRELESS +: + +3012 + `DEBUGNETLINK +( + `ci_log +("%s: Ignoringta_type %d", + +3013 +__FUNCTION__ +, + +-> +a_ty +)); + +3016 + + = + `RTA_NEXT +׉r, + +); + +3020 + `ci_log +("%3d: %" +CI_MAC_PRINTF_FORMAT +" mtu=%uame=%s", + +3021 +iffomsg +-> +ifi_dex +, +up + ? " UP " : "DOWN", + +3022 + `CI_MAC_PRINTF_ARGS +(& +mac +), +mtu +, +me +); + +3025 i( +add +) + +3026 { +ci_έ_rowid_t + +rowid +; + +3028 +rc + = + `cios_έ_impt +( +ssi +-> +cڌ_e +, & +rowid +, + +3029 +iffomsg +-> +ifi_dex +, + +3030 +mtu +, +up +, & +me +[0], & +mac +, & +sync +); + +3033 i(0 = +rc +) + +3034 { + `ci_as +( +CICP_LLAP_ROWID_BAD + ! +rowid +); + +3035 + `ci_as +( +rowid + >= 0); + +3036 + `ci_bt_add +( + `CI_BITSET_REF +( +ssi +-> +imp܋d_έ +), +rowid +); + +3040 + `cios_έ_de +( +ssi +-> +cڌ_e +, +iffomsg +-> +ifi_dex +); + +3041 i( +ssi +-> +nost +) { + +3042 +ssi +-> +nost + = +CI_FALSE +; + +3043 + `DEBUGNETLINK +( + `ci_log +("%s: delete LLAPntry when dumping", + +3044 +__FUNCTION__ +)); + +3050  +rc +; + +3051 + } +} + +3058 +ci_le +  + +3059 + $cios_dump_έt +( +ci_sock_t + * +sock +, + +3060 +cios_r_e_t + * +ssi +, * +buf +) + +3061 {  +rc +; + +3064 i(( +rc + = + `que_b +( +sock +, +RTM_GETLINK +, 0, +buf +)) < 0 ) + +3065 + `ci_log +( +CODEID +":outeableequest " + +3066 "ed,%d", - +rc +); + +3069 i(( +rc + = + `ad__ڣ +( +sock +, + +3070 & +cios_hd_έ_msg +, + +3071 +ssi +, + +3072 & +cios_έ_po_pl +, + +3073 +buf +)) + +3075 + `ci_log +( +CODEID +": failedoeadinksable from " + +3076 "Îk,%d", - +rc +); + +3078  +rc +; + +3079 + } +} + +3107 #i +CICPOS_USE_NETLINK + + +3110 +ci_nole +  + +3111 + $cios_hd_if_msg +( +cios_r_e_t + * +ssi +,  +msghdr + * +hdr +) + +3112 {  +rc + = 0; + +3114  + + = + `NLMSG_PAYLOAD +( +hdr +, ( +iddrmsg +)); + +3115  +iddrmsg + * +ifmsg + = (iddrmsg *) + `NLMSG_DATA +( +hdr +); + +3117  + + * + +; + +3118  +add +; + +3120 +ci_ifid_t + +ifdex +; + +3121 +ci__addr_t_t + +t_ +; + +3122 +ci__addrt_t + +t_t +; + +3123 +ci__addr_t_t + +t_b +; + +3124  +me +[ +IFNAMSIZ +]; + +3126 + `ci_as +( +NULL + ! +hdr +); + +3127 + `ci_as +( +NULL + ! +ssi +); + +3128 + `ci_as_gt +( + +, 0); + +3129 + `ci_as +( +NULL + ! +ifmsg +); + +3131 i( +ifmsg +-> +i_my + ! +AF_INET +) + +3132 { + `DEBUGNETLINK +( + `DPRINTF +("%s: ignܚg IPry", +__FUNCTION__ +)); + +3136 + + = ( + + *) + `IFA_RTA +( +ifmsg +); + +3137 +ifdex + = +ifmsg +-> +i_dex +; + +3138 +t_t + = +ifmsg +-> +i_efixn +; + +3140 + `memt +(& +t_ +, 0, (net_ip)); + +3141 + `memt +(& +t_b +, 0, (net_bcast)); + +3142 + `memt +(& +me +, 0, (name)); + +3144 + `ci_as +( +NULL + ! + +); + +3146  + `RTA_OK +( + +, + +)) + +3147 {  + +-> +a_ty +) + +3148 {  +IFA_ADDRESS +: + +3159  +IFA_LOCAL +: + +3160 + `CI_IP_ADDR_SET +(& +t_ +, ( +ci_ut32 + * + `RTA_DATA +( + +)); + +3163  +IFA_LABEL +: + +3164 + `memt +( +me +, 0, (name)); + +3165 + `memy +( +me +, + `RTA_DATA +( + +), + +3166 + `CI_MIN +( +IFNAMSIZ +, ( +me +))); + +3169  +IFA_BROADCAST +: + +3170 + `CI_IP_ADDR_SET +(& +t_b +,( +ci_ut32 + *) + `RTA_DATA +( + +)); + +3173  +IFA_ANYCAST +: + +3174 + `ci_log +("Ignoring IFA_ANYCAST"); + +3177  +IFA_CACHEINFO +: + +3186 + `DEBUGNETLINK +( + `ci_log +("%s: Ignoringta_type %d", + +3187 +__FUNCTION__ +, + +-> +a_ty +)); + +3190 + + = + `RTA_NEXT +׉r, + +); + +3193 +add + = ( +hdr +-> +msg_ty + = +RTM_NEWADDR +); + +3194 + `ci_as +( +add + || +hdr +-> +msg_ty + = +RTM_DELADDR +); + +3197 i( +add +) + +3198 { +ci_if_rowid_t + +rowid +; + +3199 +rc + = + `cios_if_impt +( +ssi +-> +cڌ_e +, & +rowid +, + +3200 +ifdex +, +t_ +, +t_t +, +t_b +, + +3201 +ifmsg +-> +i_sce +); + +3203 i(0 = +rc +) + +3204 { + `ci_as +( +CICP_IPIF_ROWID_BAD + ! +rowid +); + +3205 + `ci_as +( +rowid + >= 0); + +3206 + `ci_bt_add +( + `CI_BITSET_REF +( +ssi +-> +imp܋d_if +), +rowid +); + +3209 + `ci_log +("%s: cios_if_imp܈ed,c=%d", +__FUNCTION__ +, +rc +); + +3211 + `cios_if_de +( +ssi +-> +cڌ_e +, +ifdex +, +t_ +, +t_t +); + +3212 i( +ssi +-> +nost +) { + +3213 +ssi +-> +nost + = +CI_FALSE +; + +3214 + `DEBUGNETLINK +( + `ci_log +("%s: delete interface when dumping", + +3215 +__FUNCTION__ +)); + +3221  +rc +; + +3222 + } +} + +3228 +ci_le +  + +3229 + $cios_dump_i +( +ci_sock_t + * +sock +, + +3230 +cios_r_e_t + * +ssi +, * +buf +) + +3231 {  +rc +; + +3234 i(( +rc + = + `que_b +( +sock +, +RTM_GETADDR +, 0, +buf +)) < 0 ) + +3235 + `ci_log +( +CODEID +": ip interfaceistequest " + +3236 "ed,%d", - +rc +); + +3239 i(( +rc + = + `ad__ڣ +( +sock +, + +3240 & +cios_hd_if_msg +, + +3241 +ssi +, + +3242 & +cios_if_po_pl +, + +3243 +buf +)) < 0) + +3244 + `ci_log +( +CODEID +":eading of IP i/fist fromtnetlink " + +3245 "ed,%d", - +rc +); + +3247  +rc +; + +3248 + } +} + +3279 #i +CICPOS_USE_NETLINK + + +3287 + $cios_hd__msg +( +cios_r_e_t + * +ssi +,  +msghdr + * +hdr +) + +3289  +hdr +-> +msg_ty +) + +3291  +RTM_NEWNEIGH +: + +3292  +RTM_DELNEIGH +: + +3294 i( + `CI_UNLIKELY +( +hdr +-> +msg_ty + ! +RTM_NEWNEIGH +)) + +3295 { + `CICPOS_MAC_STAT_INC_NL_MSG_REJECT +( +ssi +-> +cڌ_e +); + +3296 + `CICP_LOG +( + `DPRINTF +("%s:lmsg_type isn't RTM_NEWNEIGH, " + +3298 +__FUNCTION__ +, +hdr +-> +msg_ty +)); + +3300  + `cios_hd_mac_msg +( +ssi +, +hdr +); + +3302  +RTM_NEWADDR +: + +3303  +RTM_DELADDR +: + +3304 + `ci_as +( +NULL + ! +ssi +-> +imp܋d_if +); + +3305  + `cios_hd_if_msg +( +ssi +, +hdr +); + +3307  +RTM_NEWROUTE +: + +3308  +RTM_DELROUTE +: + +3309 + `ci_as +( +NULL + ! +ssi +-> +imp܋d_rou +); + +3310  + `cios_hd_rou_msg +( +ssi +, +hdr +); + +3312  +RTM_NEWLINK +: + +3313  +RTM_DELLINK +: + +3314 + `ci_as +( +NULL + ! +ssi +-> +imp܋d_έ +); + +3315  + `cios_hd_έ_msg +( +ssi +, +hdr +); + +3318 + `ci_log +( +CODEID +": unhandledetlink messageype (%d) - " + +3320 +hdr +-> +msg_ty +); + +3321  - +EINVAL +; + +3323 + } +} + +3332 + $cios_dump_bs +( +ci_hd_t + * +cڌ_e +,  +mac_ly +, + +3333 * +buf +) + +3334 {  +rc +; + +3335 +cios_r_e_t + * +ssi +; + +3336 +ci_sock_t + +sock + = { + +3337 . +sock + = +NULL +, + +3338 . +q + = 1 + +3341 +ssi + = + `cios_r_e_loc +( +cڌ_e +); + +3343 i( +NULL + = +ssi +) + +3344 { + `DEBUGNETLINK +( + `DPRINTF +( +CODEID +": (systemableequest " + +3349 + `cios_r_ +( +ssi +, +cڌ_e +); + +3350 + `CICPOS_MAC_STAT_SET_POLLER_LAST_START +( +cڌ_e +); + +3353 i(( +rc + = + `_Îk_sock +(& +sock +. +sock +)) < 0 ) + +3354 { + `ci_log +( +CODEID +": faedlk sock%d", +rc +); + +3355 + `k +( +ssi +); + +3361 i(! +mac_ly +) + +3362 { +ssi +-> +nost + = +CI_TRUE +; + +3365 + `cios_dump_i +(& +sock +, +ssi +, +buf +); + +3366 + `cios_dump_έt +(& +sock +, +ssi +, +buf +); + +3367 + `cios_dump_rout +(& +sock +, +ssi +, +buf +); + +3371 + `cios_dump_pmtu_che +(& +sock +, +ssi +, +buf +); + +3372 + `cios_dump_rou_che +(& +sock +, +ssi +, +buf +); + +3373 + `cios_rou_po_pl +( +ssi +); + +3377 + `cios_dump_ma +(& +sock +, +ssi +, +buf +); + +3379 + `sock_a +( +sock +. +sock +); + +3381 + `CICPOS_MAC_STAT_SET_POLLER_LAST_END +( +cڌ_e +); + +3383 + `cios_r_e_ +( +ssi +); + +3384 + } +} + +3400 + $cios_ +( +ci_mibs_kn_t + * +cڌ_e +) + +3401 { + `cios_ocfs_ +( +cڌ_e +); + +3402  + `cios_sync_ +( +cڌ_e +); + +3403 + } +} + +3410 + $cios_hw_gied +( +ci_hd_t + * +cڌ_e +) + +3413 + } +} + +3420 + $cios_dt +( +ci_mibs_kn_t + * +cڌ_e +) + +3421 { + `cios_ocfs_dt +( +cڌ_e +); + +3422 + `cios_sync_dt +( +cڌ_e +); + +3423 + } +} + +3429 + $cios_sync_bs +( +ci_hd_t + * +cڌ_e +) + +3431 * +buf +; + +3436 +mm_gmt_t + +fs + = + `g_fs +(); + +3437 + `t_fs +( + `g_ds +()); + +3439 +buf + = + `ci_loc +( +NL_BUFSIZE +); + +3441 if +buf + ) { + +3443 + `cios_dump_bs +( +cڌ_e +, 0, +buf +); + +3444 + `ci_ +( +buf +); + +3447 + `t_fs +( +fs +); + +3448 + } +} + + @linux_efabcfg.c + +13  + ~ + +16 cڡ * + $ci_cfg_oc_me_g +(** +por_to_ +) + +18 * +cmd +; + +19  +cmd_n +; + +20 cڡ * +p +; + +22 +cmd_n + = +cut +-> +mm +-> +g_d + - cut->mm-> +g_t +; + +23 +cmd + = + `ci_loc +( +cmd_n ++1); + +24 if +cmd + = +NULL + ) + +25  +NULL +; + +27 if + `cy_om_ur +( +cmd +, (cڡ *)( +cut +-> +mm +-> +g_t +), + +28 +cmd_n +) != 0 ) { + +29 + `ci_ +( +cmd +); + +30  +NULL +; + +33 * +por_to_ + = +cmd +; + +34 +cmd +[ +cmd_n +] = '\0'; + +35 +p + = + `chr +( +cmd +, '/'); + +41 i( +p + = +NULL +) + +42 +p + = +cmd +; + +44 +p +++; + +63 + `ci_log +("cut->comm=%s", (*) +cut +-> +comm +); + +64 + `ci_log +("cut->mm->g_t=%s", (*) +cmd +); + +66  +p +; + +67 + } +} + +70 +ci_cfg_uid_t + + $ci_cfg_uid_g +() + +72 #i +LINUX_VERSION_CODE + < + `KERNEL_VERSION +(2,6,28) + +73  ( +cut +-> +euid +); + +74 #i +LINUX_VERSION_CODE + < + `KERNEL_VERSION +(3,5,0) + +75  + `cut_euid +(); + +77  + `__kuid_v +( + `cut_euid +()); + +79 + } +} + +82  + $ci_cfg_is_sydm +() + +85  + `b +( +CAP_SYS_ADMIN +); + +86 + } +} + + @linux_sock_ops.c + +21  + ~ + +22  + ~ + +32 + $eb_lux_dump_ode +( +fd +) + +34  +fe + * +fp +; + +35 +fp + = + `fg +( +fd +); + +36 i( +fp + && fp-> +f_dy +) { + +37  +ode + *od +fp +-> +f_dy +-> +d_ode +; + +39 + `ci_log +("dumode: fd %d => fp=%-> dy %p", +fd +, +fp +, + +40 +fp +-> +f_dy +); + +41 + `ci_log +(" inod %p", +ode +); + +42 + `ci_log +(" i_ino=%lu i_rdev=%08x", + +43 +ode +-> +i_o +, inode-> +i_rdev +); + +44 + `ci_log +(" i_op=%p i_fop=%p i_sb=%p i_state=%08lx", + +45 +ode +-> +i_ +, inode-> +i_f +, inode-> +i_sb +, inode-> +i_e +); + +48  +i +; + +49  +i + = + `offtof +( +ode +, +u +); i < (inode); i+=4) { + +50 + `ci_log +("%d: %08lx", +i +, *((*)(((*) +ode +)+i))); + +54 + `ut +( +fp +); + +56 + `ci_log +("dump_ode: couldn'g su ff fd %d", +fd +); + +59 + } +} + + @linux_stats.c + +22  + #__ci_driv_shl__ + + + ) + +30  + ~"ld_.h +" + +31  + ~ + +32  + ~ + +33  + ~ + +34  + ~ + +35  + ~ + +37  + ~ + +38  + ~ + +39  + ~ + +40  + ~ + +41  + ~ + +43  + ~ + +44  + ~ + +45  + ~ + +46  + ~ + +47  + ~"../lux_sour/kl_comt.h +" + +50 #unde +LOG_STATS + + +51  + #LOG_STATS +( +x + + ) +x + +63  + #CI_LINUX_STATISTICS_UPDATE_FREQUENCY + 1 + + ) + +67  +oc_d_y + * + goo_oc_ro + = +NULL +; + +76 cڡ  +fe_ݔis + + geb_wkq_fs +; + +77 cڡ  +fe_ݔis + + geb_vsi_fs +; + +78 cڡ  +fe_ݔis + + geb_dlfrs_fs +; + +87  + sci_oc_eb_y_s + { + +88 * + mme +; + +89 cڡ  +fe_ݔis + * + mfs +; + +90 } + tci_oc_eb_y_t +; + +91  +ci_oc_eb_y_t + + gci_oc_eb_b +[] = { + +92 {"", & +ci__fs +}, + +93 {"wkqueue", & +eb_wkq_fs +}, + +94 {"vsi", & +eb_vsi_fs +}, + +95 {"dlfrs", & +eb_dlfrs_fs +}, + +98  + #CI_PROC_EFAB_TABLE_SIZE + \ + +99 (( +ci_oc_eb_b +/ ( +ci_oc_eb_y_t +)) + + ) + +103  +ci__s + + gci__s_glob +; + +112 + $ci__s_upde_glob +( +ci__s + * +s +) { + +113 + `ci_as +( +s +); + +114 + `ci__s_upde +(& +ci__s_glob +, +s +); + +115 + } +} + +116 +EXPORT_SYMBOL +( +ci__s_upde_glob +); + +127 + $eb_wkq_ad_oc +( +q_fe + * +q +, * +s +) + +129 +ci_qlock_e_t + +lock_ags +; + +130 +ci_wkqueue_t + * +wqueue +; + +131 +wqueue + = & +CI_GLOBAL_WORKQUEUE +; + +132 + `ci_qlock_lock +(& +wqueue +-> +lock +, & +lock_ags +); + +133 i( +wqueue +-> +e + = +CI_WQ_ALIVE +) { + +134  + #EFAB_WORKQ_READ_PROC_PRINT +( +v +) \ + +135 + `q_tf +( +q +, "%14%u\n", #v, +wqueue +-> +s +. +v +) + + ) + +136 + `EFAB_WORKQ_READ_PROC_PRINT +( +wkg +); + +137 + `EFAB_WORKQ_READ_PROC_PRINT +( + +); + +138 + `EFAB_WORKQ_READ_PROC_PRINT +( +backlog +); + +139 + `EFAB_WORKQ_READ_PROC_PRINT +( +d +); + +140 #unde +EFAB_WORKQ_READ_PROC_PRINT + + +143 + `q_tf +( +q +, "The workqueue isotunning.\n"); + +145 + `ci_qlock_uock +(& +wqueue +-> +lock +, & +lock_ags +); + +148 + } +} + +149  + $eb_wkq_ݒ_oc +( +ode + *ode,  +fe + *file) + +151  + `sg_ݒ +( +fe +, +eb_wkq_ad_oc +, 0); + +152 + } +} + +153 cڡ  +fe_ݔis + + geb_wkq_fs + = { + +154 . +owr + = +THIS_MODULE +, + +155 . + gݒ + = +eb_wkq_ݒ_oc +, + +156 . + gad + = +q_ad +, + +157 . + gΣek + = +q_lek +, + +158 . + ga + = +sg_a +, + +168 #i +CI_CFG_STATS_NETIF + + +171 + $eb_acks_q_t +( +q_fe + * +q +, +loff_t + * +os +) + +173 +ci_tif + * +ni + = +NULL +; + +174  +i +, +rc +; + +176  +i + = 0; i <* +os +; i++) { + +177 +rc + = + `e_tifs_uocked +(& +ni +); + +178 if +rc + != 0 ) + +179  +NULL +; + +181  +ni +; + +182 + } +} + +185 + $eb_acks_q_xt +( +q_fe + * +q +, * +v +, +loff_t + * +os +) + +187 +ci_tif + * +ni + = +v +; + +188  +rc +; + +189 (* +os +)++; + +190 +rc + = + `e_tifs_uocked +(& +ni +); + +191 if +rc + != 0 ) + +192  +NULL +; + +193  +ni +; + +194 + } +} + +197 + $eb_acks_q_ +( +q_fe + * +q +, * +v +) + +199 if +v + ) + +200 + `e_tifs_uocked_drݻf +( +v +); + +201 + } +} + +204 + $eb_acks_q_show +( +q_fe + * +q +, * +v +) + +206 +ci_tif + * +ni + = +v +; + +207 +ci_tif_s +* +s + = & +ni +-> +e +-> +s +; + +208 + `q_tf +( +q +, + +210 + `NI_ID +( +ni +), (ni-> +e +-> +pid +, (ni->e-> +uid +, + +211 +s +-> +riodic_pls +, s-> +riodic_evs +, + +212 +s +-> +timeout_us +, s-> +us +, s-> +u_pls +, + +213 +s +-> +u_wakes +, s-> +u_evs +, + +214 +s +-> +u_imes +, s-> +_imes +, + +215 +s +-> +sock_wakes_rx + + s-> +sock_wakes_tx + + + +216 +s +-> +sock_wakes_rx_os + + s-> +sock_wakes_tx_os +, + +217 +s +-> +pkt_wakes +, s-> +uock_ow +, + +218 +s +-> +lock_wakes +, s-> +deed_wk +, s-> +sock_lock_ps +, + +219 +s +-> +rx_evs +, s-> +tx_evs +); + +221 + } +} + +223  +q_ݔis + + geb_acks_q_s + = { + +224 . +t + = +eb_acks_q_t +, + +225 . + gxt + = +eb_acks_q_xt +, + +226 . + g + = +eb_acks_q_ +, + +227 . + gshow + = +eb_acks_q_show +, + +231 + $eb_acks_q_ݒ +( +ode + *ode,  +fe + *file) + +233  + `q_ݒ +( +fe +, & +eb_acks_q_s +); + +235 + } +} + +236  +fe_ݔis + + geb_acks_q_fs + = { + +237 . +owr + = +THIS_MODULE +, + +238 . + gݒ + = +eb_acks_q_ݒ +, + +239 . + gad + = +q_ad +, + +240 . + gΣek + = +q_lek +, + +241 . + ga + = +q_a_ive +, + +254 + $eb_vsi_ad_oc +( +q_fe + * +q +, * +s +) + +256 + `q_tf +( +q +, "ld_odu: %s\n", +ONLOAD_PRODUCT +); + +257 + `q_tf +( +q +, "ld_vsi: %s\n", +ONLOAD_VERSION +); + +258 + `q_tf +( +q +, "uk_tf_v: %s\n", +oo_uk_tf_v +); + +260 + } +} + +261  + $eb_vsi_ݒ_oc +( +ode + *ode,  +fe + *file) + +263  + `sg_ݒ +( +fe +, +eb_vsi_ad_oc +, 0); + +264 + } +} + +265 cڡ  +fe_ݔis + + geb_vsi_fs + = { + +266 . +owr + = +THIS_MODULE +, + +267 . + gݒ + = +eb_vsi_ݒ_oc +, + +268 . + gad + = +q_ad +, + +269 . + gΣek + = +q_lek +, + +270 . + ga + = +sg_a +, + +281 + $eb_dlfrs_ad_oc +( +q_fe + * +q +, * +s +) + +283  +no_emy +, +no_tomb +, +no_ud +; + +285 + `efx_dlfr_cou_s +( +eb_t_driv +. +dlfr +, + +286 & +no_emy +, & +no_tomb +, & +no_ud +); + +287 + `q_tf +( +q +, "dlfilters:mpty=%d,omb=%d, used=%d\n", + +288 +no_emy +, +no_tomb +, +no_ud +); + +290 + } +} + +291  + $eb_dlfrs_ݒ_oc +( +ode + *ode,  +fe + *file) + +293  + `sg_ݒ +( +fe +, +eb_dlfrs_ad_oc +, 0); + +294 + } +} + +295 cڡ  +fe_ݔis + + geb_dlfrs_fs + = { + +296 . +owr + = +THIS_MODULE +, + +297 . + gݒ + = +eb_dlfrs_ݒ_oc +, + +298 . + gad + = +q_ad +, + +299 . + gΣek + = +q_lek +, + +300 . + ga + = +sg_a +, + +314 + $ci_oc_fes_l +( +oc_d_y + * +ro +, * +ro_me +, + +315 +ci_oc_eb_y_t + * +s +,  +num_s +) + +317  +y_no +; + +320  +y_no + = 0;ry_n< +num_s +;ntry_no++) { + +321 +ci_oc_eb_y_t + * +eb_y + = & +s +[ +y_no +]; + +323 + `OO_DEBUG_STATS +( + `ci_log +("Create %s/%s:ead_proc=%p", + +324 +ro_me +, +eb_y +-> +me +,b_y-> +fs +)); + +326 i( + `oc_ +( +eb_y +-> +me +, 0, +ro +,b_y-> +fs +) + +327 = +NULL +) { + +329 + `ci_log +("Unableo create %s/%s: fops=%p", + +330 +ro_me +, +eb_y +-> +me +,b_y-> +fs +); + +338 + } +} + +345 + $ci_oc_fes_unl +( +oc_d_y + * +ro +, + +346 +ci_oc_eb_y_t + * +s +,  +num_s +) + +348  +y_no +; + +351  +y_no + = 0;ry_n< +num_s +;ntry_no++) + +352 + `move_oc_y +( +s +[ +y_no +]. +me +, +ro +); + +353 + } +} + +357 + $ci_l_oc_s +() + +359 +oo_oc_ro + = + `oc_mkd +("driv/ld", +NULL +); + +360 if! +oo_oc_ro + ) { + +361 + `ci_log +("%s: faed driv/ld", +__FUNCTION__ +); + +362  - +ENOMEM +; + +365 + `ci_oc_fes_l +( +oo_oc_ro +, "/proc/driver/onload", + +366 +ci_oc_eb_b +, +CI_PROC_EFAB_TABLE_SIZE +); + +369 #i +CI_CFG_STATS_NETIF + + +370 + `oc_ +("acks", 0, +oo_oc_ro +, & +eb_acks_q_fs +); + +373 #i +CI_MEMLEAK_DEBUG_ALLOC_TABLE + + +375 if + `_oc_ad_y +("mem", 0, +oo_oc_ro +, + +376 +ci_loc_memak_adoc +, +NULL +) == NULL ) + +377 + `ci_log +("%s: faed 'mem'", +__FUNCTION__ +); + +381 + } +} + +389  + $ci_unl_oc_s +() + +391 + `ci__s_r +(& +ci__s_glob +); + +393 if +oo_oc_ro + = +NULL + ) + +396 + `ci_oc_fes_unl +( +oo_oc_ro +, +ci_oc_eb_b +, + +397 +CI_PROC_EFAB_TABLE_SIZE +); + +398 #i +CI_CFG_STATS_NETIF + + +399 + `move_oc_y +("acks", +oo_oc_ro +); + +401 #i +CI_MEMLEAK_DEBUG_ALLOC_TABLE + + +402 + `move_oc_y +("mem", +oo_oc_ro +); + +404 + `move_oc_y +("driv/ld", +NULL +); + +405 +oo_oc_ro + = +NULL +; + +406 + } +} + + @linux_trampoline.c + +20  + ~"ld_kl_comt.h +" + +22  + ~ + +23  + ~ + +24  + ~ + +25  + ~ + +26  + ~ + +36  + #TRAMP_DEBUG +( +x +... + `ci_log +(x) + + ) + +38  + #TRAMP_DEBUG +( +x +...()0 + + ) + +49 + $eb_lux_ampޚe_gi + ( +ci_ive_t + * +iv +, * +g +) + +51 cڡ +ci_amp_g_gs_t + * +gs + = +g +; + +52  +rc + = 0; + +53  +mm_hash + * +p +; + +55 + `TRAMP_DEBUG + ("Regiry-po0x%" +CI_PRIx64 +"(0x%"CI_PRIx64") for mm %p (pid %d)", + +56 +gs +-> +ampޚe_y +. +r +,rgs-> +ampޚe_exude +.r, +cut +-> +mm +, + +57 +cut +-> +pid +); + +59 + `wre_lock + (& +oo_mm_tbl_lock +); + +61 +p + = + `oo_mm_tbl_lookup +( +cut +-> +mm +); + +65 i(! +p +) { + +70 + `ci_log +("Unexpectedrampolineegistration witho maps"); + +71 +rc + = - +ENOENT +; + +72  +ex +; + +74 + `ci_as + ( +p +); + +75 + `ci_as + ( +p +-> +mm + = +cut +->mm); + +76 +p +-> +ampޚe_y + = +gs +->trampoline_entry; + +77 +p +-> +ampޚe_exude + = +gs +->trampoline_exclude; + +78 +p +-> +ampޚe_toc + = +gs +->trampoline_toc; + +79 +p +-> +ampޚe_ur_fixup + = +gs +->trampoline_user_fixup; + +80 + `CI_DEBUG +( +p +-> +ampޚe_ul_ + = +gs +->trampoline_ul_fail;) + +82 +rc + = + `eb_sigl_mm_ +( +gs +, +p +); + +84 + `TRAMP_DEBUG +("mm %giedmpޚy %" +CI_PRIx64 +"xclude %"CI_PRIx64, + +85 +p +-> +mm +, +gs +-> +ampޚe_y +. +r +,rgs-> +ampޚe_exude +.ptr); + +87 +ex +: + +88 if +rc + =0 && +_sigls_d_ex + ) + +89 + `eb_g_mm_hash_locked +( +p +); + +90 + `wre_uock + (& +oo_mm_tbl_lock +); + +92 if +rc + =0 && +_sigls_d_ex + ) { + +93 + `eb_sigl_oss_ +(& +p +-> +sigl_da +); + +94 + `eb_sigl_put_amp_da +(& +p +-> +sigl_da +); + +96  +rc +; + +97 + } +} + + @mmap.c + +22  + #__ci_driv_shl__ + + + ) + +30  + ~ + +31  + ~ + +32  + ~ + +33  + ~ + +34  + ~ + +35  + ~ + +39 um { + mMM_ENTRY_MAGIC + = 0xabadf00l}; + +44 um { + mMM_HASH_SIZE +=256}; + +47  +ci_di + + gmm_hash_tbl +[ +MM_HASH_SIZE +]; + +53 +DEFINE_RWLOCK +( +oo_mm_tbl_lock +); + +56  +le +  + +57 + $OO_MMAP_OFFSET_TO_MAP_ID +( +off_t + +offt +) + +58 {  +offt + >> +CI_NETIF_MMAP_ID_SHIFT +; + } +} + +61  +le +  + +62 + $hash_mm + ( +mm_ru + * +mm +) { + +63 +ci_u_t + +t + = (ci_u_t) +mm +; + +64 + `ci_as + ( +t +); + +67  ( +t + / () +L1_CACHE_BYTES +& ( +MM_HASH_SIZE +-1); + +68 + } +} + +76  +mm_hash +* + $oo_mm_tbl_lookup +( +mm_ru + * +mm +) + +78  +mm_hash + * +p +; + +79  +hash + = + `hash_mm + ( +mm +); + +80 + `ci_as + ( +mm_hash_tbl + [ +hash +]. +l +. +xt +); + +81 + `ci_as + ( +mm_hash_tbl + [ +hash +]. +l +. +ev +); + +82  +p + = ( +mm_hash +* + `ci_di_hd + (& +mm_hash_tbl + [ +hash +]); + +83 ! + `ci_di_is_ch + (& +mm_hash_tbl + [ +hash +], & +p +-> +lk +); + +84 +p + = ( +mm_hash +*p-> +lk +. +xt +) { + +85 + `ci_as + ( +p +-> +magic + = +MM_ENTRY_MAGIC +); + +86 i( +p +-> +mm + == mm) + +87  +p +; + +90  +NULL +; + +91 + } +} + +102  +mm_hash +* + +103 + $eb__mm_y + ( +mm_ru + * +mm +) { + +104  +mm_hash + * +p +; + +106 + `ci_as +! + `oo_mm_tbl_lookup +( +mm +)); + +108 +p + = + `kmloc + ( *p, 0); + +109 i( +p +) { + +110 + `OO_DEBUG_TRAMP +( + `ci_log +("Madmm_hash %f mm %p", +p +, +mm +)); + +111 +p +-> +magic + = +MM_ENTRY_MAGIC +; + +112 +p +-> +mm + = mm; + +113 +p +-> +f + = 0; + +114 + `CI_USER_PTR_SET + ( +p +-> +ampޚe_y +, 0); + +115 + `CI_USER_PTR_SET + ( +p +-> +sigl_da +. +ur_da +, 0); + +116 + `ci_di_push + (& +mm_hash_tbl + [ + `hash_mm + ( +mm +)], & +p +-> +lk +); + +119  +p +; + +120 + } +} + +132  + $eb_add_mm_f + ( +mm_ru + * +mm +) { + +134  +rc + = 0; + +135  +mm_hash + * +p +; + +137 + `ci_as + ( +mm +); + +138 + `wre_lock + (& +oo_mm_tbl_lock +); + +141 +p + = + `oo_mm_tbl_lookup +( +mm +); + +142 i(! +p +) { + +144 +p + = + `eb__mm_y + ( +mm +); + +145 i(! +p +) { + +146 +rc + = - +ENOMEM +; + +147  +ex +; + +151 + `ci_as + ( +p +); + +152 +p +-> +f +++; + +154 +ex +: + +155 + `wre_uock + (& +oo_mm_tbl_lock +); + +156  +rc +; + +157 + } +} + +164  + $eb_put_mm_hash_locked +( +mm_hash + * +p +) + +166 i(!-- +p +-> +f +) { + +167 + `OO_DEBUG_TRAMP +( + `ci_log +("Dg mm_hash %p", +p +)); + +168 + `ci_di_move + (& +p +-> +lk +); + +172 + } +} + +178  + $eb__mm_hash +( +mm_hash + * +p +) + +180 + `ci_as_equ +( +p +-> +f +, 0); + +181 if +_sigls_d_ex + ) + +182 + `eb_sigl_oss_fi +(& +p +-> +sigl_da +); + +183 + `k + ( +p +); + +184 + } +} + +193  + $eb_d_mm_f + ( +mm_ru + * +mm +) { + +194  +mm_hash + * +p +; + +195  +do_ + = 0; + +197 + `wre_lock + (& +oo_mm_tbl_lock +); + +199 +p + = + `oo_mm_tbl_lookup +( +mm +); + +200 if +p + = +NULL + ) { + +202 + `ci_log +("%s: ERROR: cنookuthimm", +__func__ +); + +203 + `wre_uock + (& +oo_mm_tbl_lock +); + +207 + `ci_as + ( +p +-> +mm + == mm); + +209 +do_ + = + `eb_put_mm_hash_locked +( +p +); + +211 + `wre_uock + (& +oo_mm_tbl_lock +); + +213 if +do_ + ) + +214 + `eb__mm_hash +( +p +); + +215 + } +} + +218  + $oo_mm_tbl_ +() + +220  +i +; + +221  +i + = 0; i < +MM_HASH_SIZE +; i++ ) + +222 + `ci_di_ +(& +mm_hash_tbl +[ +i +]); + +223 + } +} + +232  + $vm__ݒ +( +vm__ru +* +vma +) + +234 +t_hr_sour_t +* +m +; + +235  +rc +; + +237 +m + = ( +t_hr_sour_t +* +vma +-> +vm_ive_da +; + +238 + `TCP_HELPER_RESOURCE_ASSERT_VALID +( +m +, 0); + +240 + `OO_DEBUG_TRAMP +( + `ci_log +("vm_op_open: %u vma=%ps_refs=%d", + +241 +m +-> +id +, +vma +, ( + `oo_omic_ad +(&m-> +f_cou +))); + +243 +rc + = + `eb_add_mm_f + ( +vma +-> +vm_mm +); + +244 if +rc + != 0 ) + +245 + `ci_log +("%s: ERROR: faedػgi mm:c=%d", +__func__ +, +rc +); + +246 + } +} + +249  + $vm__o +( +vm__ru +* +vma +) + +251 +t_hr_sour_t +* +m +; + +252 +m + = ( +t_hr_sour_t +* +vma +-> +vm_ive_da +; + +254 + `OO_DEBUG_TRAMP +( + `ci_log +("vm_op_close: %u vma=%ps_refs=%d", + +255 +m +-> +id +, +vma +, ( + `oo_omic_ad +(&m-> +f_cou +))); + +257 + `eb_d_mm_f + ( +vma +-> +vm_mm +); + +259 + `TCP_HELPER_RESOURCE_ASSERT_VALID +( +m +, 0); + +260 + } +} + +263  + #VMA_OFFSET +( +vma +((vma)-> +vm_pgoff + << +PAGE_SHIFT +) + + ) + +265 #ide +NOPAGE_SIGBUS + + +266  + #NOPAGE_SIGBUS + ( +NULL +) + + ) + +269  +ge +* + $vm__nage +( +vm__ru +* +vma +, + +270  +addss +, + +271 * +ty +) + +273 +t_hr_sour_t +* +s + = (t_hr_sour_t* +vma +-> +vm_ive_da +; + +274  +p +; + +275  +ge + * +pg +; + +277 + `TCP_HELPER_RESOURCE_ASSERT_VALID +( +s +, 0); + +279 +p + = + `t_hr_rm_nage +( +s +, +vma +, + +280 + `OO_MMAP_OFFSET_TO_MAP_ID +( + `VMA_OFFSET +( +vma +)), + +281 +addss + - +vma +-> +vm_t +); + +282 if +p + != () -1 ) { + +283 +pg + = + `p_to_ge +( +p +); + +295 #ifde +VM_PFNMAP + + +296 + `g_ge +( +pg +); + +298 if(! + `PageRerved +( +pg +)) + +299 + `g_ge +( +pg +); + +302 if +ty + ) *ty = +VM_FAULT_MINOR +; + +304 + `OO_DEBUG_TRAMP +( + `ci_log +("%s: %u vma=%p sz=%lxageoff=%lx id=%dfn=%lx", + +305 +__FUNCTION__ +, +s +-> +id +, +vma +, vma-> +vm_d + - vma-> +vm_t +, + +306 ( +addss + - +vma +-> +vm_t +>> +CI_PAGE_SHIFT +, + +307 + `OO_MMAP_OFFSET_TO_MAP_ID +( + `VMA_OFFSET +( +vma +)), +p +)); + +309  +pg +; + +313 if~ +cut +-> +ags + & +PF_DUMPCORE + ) + +314 + `CI_DEBUG +( + `ci_log +("%s: %u vma=%p sz=%lxageoff=%lx id=%d FAILED", + +315 +__FUNCTION__ +, +s +-> +id +, +vma +, vma-> +vm_d + - vma-> +vm_t +, + +316 ( +addss + - +vma +-> +vm_t +>> +CI_PAGE_SHIFT +, + +317 + `OO_MMAP_OFFSET_TO_MAP_ID +( + `VMA_OFFSET +( +vma +)))); + +319  +NOPAGE_SIGBUS +; + +320 + } +} + +322 #i +LINUX_VERSION_CODE + > +KERNEL_VERSION +(2,6,23) + +323  + $vm__u +( +vm__ru + * +vma +,  +vm_u + * +vmf +) { + +324  +ge +*age; + +326 +ge + = + `vm__nage +( +vma +, () +vmf +-> +vtu_addss +, +NULL +); + +327 +vmf +-> +ge + =age; + +329  ( +ge + = +NULL + ) ? +VM_FAULT_SIGBUS + : 0; + +330 + } +} + +334  +vm_ݔis_ru + + gvm_s + = { + +335 . +ݒ + = +vm__ݒ +, + +336 . + go + = +vm__o +, + +337 #i +LINUX_VERSION_CODE + < +KERNEL_VERSION +(2,6,23) + +338 . + gnage + = +vm__nage + + +340 . +u + = +vm__u + + +352 + $oo_f_mm +( +fe +* fe,  +vm__ru +* +vma +) + +354 +ci_ive_t +* +iv + = (ci_ive_t* +fe +-> +ive_da +; + +355 +off_t + +offt + = + `VMA_OFFSET +( +vma +); + +356  +bys + = +vma +-> +vm_d + - vma-> +vm_t +; + +357  +m_offt +; + +358  +rc +, +m_num +; + +360 if! +iv + )  - +EBADF +; + +361 if! +iv +-> +thr + )  - +ENODEV +; + +363 if +bys + == 0 ) { + +364 + `ci_log +("ci_char_fop_mmap: bytes == 0"); + +365  - +EINVAL +; + +368 + `ci_as +(( +offt + & +PAGE_MASK +) == offset); + +370 if( +rc + = + `eb_add_mm_f + ( +vma +-> +vm_mm +)) < 0 ) + +371  +rc +; + +373 +vma +-> +vm_ags + | +EFRM_VM_IO_FLAGS +; + +378 +vma +-> +vm_s + = &vm_ops; + +379 +vma +-> +vm_ive_da + = (* +iv +-> +thr +; + +382 + `OO_DEBUG_TRAMP +( + `ci_log +("mmap: -> %u %dages offset=0x%lx " + +384 +iv +-> +thr +-> +id +, (( +bys + >> +CI_PAGE_SHIFT +), +offt +, + +385 +vma +, vma-> +vm_t +, vma-> +vm_d +)); + +387 +m_offt + = +m_num + = 0; + +389 +rc + = + `eb_t_hr_rm_mm +( +iv +-> +thr +, & +bys +, +vma +, & +m_num +, & +m_offt +, + +390 + `OO_MMAP_OFFSET_TO_MAP_ID +( +offt +)); + +391 if +rc + < 0 ) + +392 + `eb_d_mm_f + ( +vma +-> +vm_mm +); + +397 #ide +NDEBUG + + +398 if +bys + && +rc + == 0 ) + +399 + `ci_log +("mmap: %u %dages unmapped (offset=%lx " + +401 +iv +-> +thr +-> +id +, (( +bys +>> +CI_PAGE_SHIFT +), + +402 ( +offt +, ( + `OO_MMAP_OFFSET_TO_MAP_ID +(offset)); + +405  +rc +; + +406 + } +} + + @onload_internal.h + +1 #ide +__ONLOAD_INTERNAL_H__ + + +2  + #__ONLOAD_INTERNAL_H__ + + + ) + +4  + ~ + +7  +oo_drivlk_gi +(); + +8  +oo_drivlk_uegi_nf +(); + +9  +oo_drivlk_uegi_dl +(); + +12  +ci_l_oc_s +(); + +13  +ci_unl_oc_s +(); + +15  + goc_d_y +; + +16  +oc_d_y +* +oo_oc_ro +; + +18  +ci_bdg_ +(); + +19  +ci_bdg_fi +(); + +21  +ci_bdg_t_tim_riod +( +riod +,  +occuns +); + +23  +ci_bdg_g_xm_picy_ags +(* +t_dev +, * +ags +); + +25  +__ + +oo_l_chrdev_ +(); + +26  +oo_l_chrdev_dt +(); + +28  + gfe +; + +29  +oo_l_fe_to_fd +( +fe + *fe,  +ags +); + +31  +__ + +ldfs_ +(); + +32  +ldfs_fi +(); + +34  + ~ + +35  +ld_iv_ +( +ci_ive_t + * +iv +); + + @onload_kernel_compat.h + +1 #ide +__ONLOAD_KERNEL_COMPAT_H__ + + +2  + #__ONLOAD_KERNEL_COMPAT_H__ + + + ) + +4  + ~ + +5  + ~ + +7 #ide +cut_fsuid + + +8  + #cut_fsuid +( +cut +-> +fsuid + + + ) + +10 #ide +cut_fsgid + + +11  + #cut_fsgid +( +cut +-> +fsgid + + + ) + +14 #ifde +EFX_HAVE_KMEM_CACHE_S + + +15  + #kmem_che + +kmem_che_s + + + ) + +21 #ide +sig_kl_ly + + +23 #ifde +SIGEMT + + +24  + #M_SIGEMT + + `M +( +SIGEMT +) + + ) + +26  + #M_SIGEMT + 0 + + ) + +29 #i +SIGRTMIN + > +BITS_PER_LONG + + +30  + #M +( +sig +(1ULL << ((sig)-1)) + + ) + +32  + #M +( +sig +(1UL << ((sig)-1)) + + ) + +34  + #T +( +sig +, +mask +( + `M +(sig& (mask)) + + ) + +36  + #SIG_KERNEL_ONLY_MASK + (\ + +37 + `M +( +SIGKILL +| M( +SIGSTOP +) + + ) + +39  + #SIG_KERNEL_STOP_MASK + (\ + +40 + `M +( +SIGSTOP +| M( +SIGTSTP +| M( +SIGTTIN +| M( +SIGTTOU +) + + ) + +42  + #SIG_KERNEL_COREDUMP_MASK + (\ + +43 + `M +( +SIGQUIT +| M( +SIGILL +| M( +SIGTRAP +| M( +SIGABRT +) | \ + +44 + `M +( +SIGFPE +| M( +SIGSEGV +| M( +SIGBUS +| M( +SIGSYS +) | \ + +45 + `M +( +SIGXCPU +| M( +SIGXFSZ +| +M_SIGEMT + ) + + ) + +47  + #SIG_KERNEL_IGNORE_MASK + (\ + +48 + `M +( +SIGCONT +| M( +SIGCHLD +| M( +SIGWINCH +| M( +SIGURG +) + + ) + +50  + #sig_kl_ly +( +sig +) \ + +51 ((( +sig +< +SIGRTMIN +&& + `T +(sig, +SIG_KERNEL_ONLY_MASK +)) + + ) + +52  + #sig_kl_cedump +( +sig +) \ + +53 ((( +sig +< +SIGRTMIN +&& + `T +(sig, +SIG_KERNEL_COREDUMP_MASK +)) + + ) + +54  + #sig_kl_igne +( +sig +) \ + +55 ((( +sig +< +SIGRTMIN +&& + `T +(sig, +SIG_KERNEL_IGNORE_MASK +)) + + ) + +56  + #sig_kl_ +( +sig +) \ + +57 ((( +sig +< +SIGRTMIN +&& + `T +(sig, +SIG_KERNEL_STOP_MASK +)) + + ) + +61 #ide +__NFDBITS + + +62  + #__NFDBITS + +BITS_PER_LONG + + + ) + +66 #i( +LINUX_VERSION_CODE + > +KERNEL_VERSION +(3,9,0)) + +67  + #f_vfsm + +f_th +. +m + + + ) + +71 #ide +EFRM_HAVE_NETDEV_NOTIFIER_INFO + + +72  + #tdev_nifr_fo_to_dev +( +fo +(fo) + + ) + + @onloadfs.c + +10  + ~ + +11  + ~ + +12  + ~ + +13  + ~ + +14  + ~"ld_.h +" + +15  + ~ + +16  + ~"ld_kl_comt.h +" + +19  +fe_ݔis + * + $oo_fs_by_ty +( +fd_ty +) + +21  +fd_ty + ) { + +22  +CI_PRIV_TYPE_NETIF +:  & +oo_fs +; + +23  +CI_PRIV_TYPE_TCP_EP +:  & +lux_t_hr_fs_t +; + +24  +CI_PRIV_TYPE_UDP_EP +:  & +lux_t_hr_fs_udp +; + +25 #i +CI_CFG_USERSPACE_PIPE + + +26  +CI_PRIV_TYPE_PIPE_READER +:  & +lux_t_hr_fs_pe_ad +; + +27  +CI_PRIV_TYPE_PIPE_WRITER +:  & +lux_t_hr_fs_pe_wr +; + +30 + `CI_DEBUG +( + `ci_log +("%s:rror fd_type = %d", + +31 +__FUNCTION__ +, +fd_ty +)); + +32  +NULL +; + +35 + } +} + +40  + sld_ode + { + +41 +ci_ive_t + + miv +; + +42  +ode + + mvfs_ode +; + +45  +kmem_che + * + gld_ode_ch +; + +46  +vfsmou + * + gld_m +; + +48  +ode + * + $ld_loc_ode +( +sur_block + * +sb +) + +50  +ld_ode + * +ei +; + +52 +ei + = + `kmem_che_loc +( +ld_ode_ch +, +GFP_KERNEL +); + +53 i(! +ei +) + +54  +NULL +; + +57  & +ei +-> +vfs_ode +; + +58 + } +} + +60  + $ld_deroy_ode +( +ode + *inode) + +62  +ld_ode + * +ei + = + `cڏ_of +( +ode +, onload_inode, + +63 +vfs_ode +); + +65 + `kmem_che_ +( +ld_ode_ch +, +ei +); + +66 + } +} + +70 #ifde +EFX_HAVE_D_DNAME + + +73  +sur_ݔis + + gldfs_s + = { + +74 . +loc_ode + = +ld_loc_ode +, + +75 . + gderoy_ode + = +ld_deroy_ode +, + +76 . + gfs + = +sime_fs +, + +79 cڡ * + $iv_ty_to_r +( +fd_ty +) + +81  +fd_ty + ) { + +82  +CI_PRIV_TYPE_TCP_EP +:  "tcp"; + +83  +CI_PRIV_TYPE_UDP_EP +:  "udp"; + +84 #i +CI_CFG_USERSPACE_PIPE + + +85  +CI_PRIV_TYPE_PIPE_READER +:  "piper"; + +86  +CI_PRIV_TYPE_PIPE_WRITER +:  "pipew"; + +90  +NULL +; + +91 + } +} + +92  + $ldfs_me +( +ci_ive_t + * +iv +, * +bufr +,  +bu +) + +94  +n +; + +96 if +iv +-> +fd_ty + = +CI_PRIV_TYPE_NETIF +) + +97 +n + = + `tf +( +bufr +, +bu +, "[ack:%d]", +iv +-> +thr +-> +id +); + +98 #ifde +EFX_HAVE_D_DNAME + + +101 if +iv +-> +fd_ty + = +CI_PRIV_TYPE_TCP_EP + && + +102 + `SP_TO_WAITABLE_OBJ +(& +iv +-> +thr +-> +tif +, + +103 +iv +-> +sock_id +)-> +waab +. +e + == + +104 +CI_TCP_LISTEN +) + +105 +n + = + `tf +( +bufr +, +bu +, "[tcpl:%d:%d]", + +106 +iv +-> +thr +-> +id +,riv-> +sock_id +); + +109 +n + = + `tf +( +bufr +, +bu +, "[%s:%d:%d]", + +110 + `iv_ty_to_r +( +iv +-> +fd_ty +),riv-> +thr +-> +id +, + +111 +iv +-> +sock_id +); + +112 +bufr +[ +bu +-1] = '\0'; + +113  +n + + 1; + +114 + } +} + +115 #ifde +EFX_HAVE_D_DNAME + + +116 * + $ldfs_dme +( +dy + *dy, * +bufr +,  +bu +) + +118  +ld_ode + * +ei + = + `cڏ_of +( +dy +-> +d_ode +, + +119  +ld_ode +, +vfs_ode +); + +120 +ci_ive_t + * +iv + = & +ei +->priv; + +121  +n +; + +122  +mp +[64]; + +125 +n + = + `tf +( +mp +, (temp), "onload:"); + +126 +n + + + `ldfs_me +( +iv +, +mp + +en, (temp) -en); + +127 if +n + > ( +mp +|| > +bu + ) + +128  + `ERR_PTR +(- +ENAMETOOLONG +); + +130 +bufr + + +bu + - +n +; + +131  + `memy +( +bufr +, +mp +, +n +); + +132 + } +} + +135 #ide +EFX_HAVE_STRUCT_PATH + + +136  + $ldfs_de_dy +( +dy + *dentry) + +138 #ifde +EFX_HAVE_D_DNAME + + +140 +dy +-> +d_ags + | +DCACHE_UNHASHED +; + +145 + } +} + +150 #ifde +EFX_HAVE_CONST_D_OP + + +153  +dy_ݔis + + gldfs_dy_ݔis + = { + +154 #ifde +EFX_HAVE_D_DNAME + + +155 . +d_dme + = +ldfs_dme +, + +157 #ide +EFX_HAVE_STRUCT_PATH + + +158 . + gd_de + = +ldfs_de_dy +, + +162 #i +LINUX_VERSION_CODE + = +KERNEL_VERSION +(2,6,37) + +163  + #EFX_OLD_MOUNT_PSEUDO + + + ) + +166 #ifde +EFX_FSTYPE_HAS_MOUNT + + +167  +dy + * + +168 + $ldfs_mou +( +fe_syem_ty + * +fs_ty +,  +ags +, + +169 cڡ * +dev_me +, * +da +) + +171  + `mou_pudo +( +fs_ty +, "ld:", & +ldfs_s +, + +172 #ide +EFX_OLD_MOUNT_PSEUDO + + +173 & +ldfs_dy_ݔis +, + +175 +ONLOADFS_MAGIC +); + +176 + } +} + +179 #ifde +EFX_NEED_VFSMOUNT_PARAM_IN_GET_SB + + +182  + gsur_block + * + +184 +ldfs_g_sb +( +fe_syem_ty + * +fs_ty +,  +ags +, + +185 cڡ * +dev_me +, * +da + + +186 #ifde +EFX_NEED_VFSMOUNT_PARAM_IN_GET_SB + + +187 ,  +vfsmou + * +m + + +191  +g_sb_pudo +( +fs_ty +, "ld:", & +ldfs_s +, +ONLOADFS_MAGIC + + +192 #ifde +EFX_NEED_VFSMOUNT_PARAM_IN_GET_SB + + +193 , +m + + +200  +fe_syem_ty + + gld_fs_ty + = { + +201 . +me + = "onloadfs", + +202 #ifde +EFX_FSTYPE_HAS_MOUNT + + +203 . + gmou + = +ldfs_mou +, + +205 . + gg_sb + = +ldfs_g_sb +, + +207 . + gkl_sb + = +kl__sur +, + +210  +_ +( + +211 #i +defed +( +EFX_HAVE_KMEM_CACHE_DTOR +|| defed( +EFX_HAVE_KMEM_CACHE_FLAGS +) + +212 * +foo +,  +kmem_che + * +ch +, + +213  +ags + + +215 #ifde +EFX_HAVE_KMEM_CACHE_CACHEP + + +216  +kmem_che + * +ch +, + +218 * +foo + + +222  +ld_ode + * + gei + = (ld_od*) +foo +; + +223 #i +defed +( +EFX_HAVE_KMEM_CACHE_DTOR +|| defed( +EFX_HAVE_KMEM_CACHE_FLAGS +) + +224 #ifde +SLAB_CTOR_VERIFY + + +225 if(( + gags + & + gSLAB_CTOR_VERIFY +) == 0) + +227 #ifde +SLAB_CTOR_CONSTRUCTOR + + +228 if( +ags + & +SLAB_CTOR_CONSTRUCTOR +) + +231 +ode__ +(& +ei +-> +vfs_ode +); + +235  +__ + + $ldfs_ +() + +237  +r +; + +239 +ld_ode_ch + = + `kmem_che_ +("onloadfs_inode_cache", + +240 ( +ld_ode +), 0, 0, + +241 +_ + + +242 #ifde +EFX_HAVE_KMEM_CACHE_DTOR + + +243 , +NULL + + +246 +r + = + `gi_fesyem +(& +ld_fs_ty +); + +247 if +r + != 0 ) { + +248 + `kmem_che_deroy +( +ld_ode_ch +); + +249  +r +; + +251 +ld_m + = + `kn_mou +(& +ld_fs_ty +); + +252 if + `IS_ERR +( +ld_m +) ) { + +253 + `uegi_fesyem +(& +ld_fs_ty +); + +254 + `kmem_che_deroy +( +ld_ode_ch +); + +255  + `PTR_ERR +( +ld_m +); + +258 + } +} + +259  + $ldfs_fi +() + +261 #ifde +EFX_HAVE_KERN_UMOUNT + + +262 + `kn_unmou +( +ld_m +); + +264 + `mput +( +ld_m +); + +266 +ld_m + = +NULL +; + +267 + `uegi_fesyem +(& +ld_fs_ty +); + +268 + `kmem_che_deroy +( +ld_ode_ch +); + +269 + } +} + +271 #ide +EFX_HAVE_ALLOC_FILE + + +272  +fe + * + $loc_fe +( +vfsmou + * +m +,  +dy + *dentry, + +273 +mode_t + +mode +,  +fe_ݔis + * +f +) + +275  +fe + *f + `g_emy_fp +(); + +277 if +fe + = +NULL + ) + +278  +NULL +; + +280 +fe +-> +f_dy + = +dy +; + +281 +fe +-> +f_vfsm + = + `mg +( +m +); + +282 +fe +-> +f_mpg + = +dy +-> +d_ode +-> +i_mpg +; + +283 +fe +-> +f_mode + = +mode +; + +284 +fe +-> +f_ + = +f +; + +285  +fe +; + +286 + } +} + +289 + $ld_loc_fe +( +t_hr_sour_t + * +thr +, +oo_ + +_id +,  +ags +, + +290  +fd_ty +) + +292  +qr + +me + = { .name = "" }; + +293 #ifde +EFX_HAVE_STRUCT_PATH + + +294  +th +ath; + +295  + #my_dy + +th +. +dy + + + ) + +297  +dy + *dentry; + +298  + #my_dy + +dy + + + ) + +300  +fe + *file; + +301  +fd +; + +302  +ode + *inode; + +303 +ci_ive_t + * +iv +; + +304  +fe_ݔis + * +fs +; + +306 +fs + = + `oo_fs_by_ty +( +fd_ty +); + +307 if +fs + = +NULL + ) + +308  - +EINVAL +; + +309 + `ci_as_equ +( +fs +-> +owr +, +THIS_MODULE +); + +311 +ode + = + `w_ode +( +ld_m +-> +m_sb +); + +312 if +ode + = +NULL + ) + +313  - +ENOMEM +; + +314 #ifde +EFX_FSTYPE_HAS_MOUNT + + +315 +ode +-> +i_o + = + `g_xt_o +(); + +317 if +fd_ty + = +CI_PRIV_TYPE_NETIF + ) + +318 +ode +-> +i_mode + = +S_IRWXUGO +; + +319 if +fd_ty + = +CI_PRIV_TYPE_TCP_EP + || fd_ty = +CI_PRIV_TYPE_UDP_EP + ) + +320 +ode +-> +i_mode + = + +321 #i +LINUX_VERSION_CODE + > + `KERNEL_VERSION +(2,6,21) + +324 +S_IFSOCK + | + +326 +S_IRWXUGO +; + +328 +ode +-> +i_mode + = +S_IFIFO + | +S_IRUSR + | +S_IWUSR +; + +329 +ode +-> +i_uid + = + `cut_fsuid +(); + +330 +ode +-> +i_gid + = + `cut_fsgid +(); + +331 +iv + = & + `cڏ_of +( +ode +,  +ld_ode +, +vfs_ode +)->priv; + +332 +iv +-> +thr + =hr; + +333 +iv +-> +sock_id + = +_id +; + +334 +iv +-> +fd_ty + = fd_type; + +336 +fd + = + `g_unud_fd +(); + +337 if +fd + < 0 ) { + +338 + `ut +( +ode +); + +339  +fd +; + +344 #ifde +EFX_FSTYPE_HAS_MOUNT + + +345 #i +LINUX_VERSION_CODE + < + `KERNEL_VERSION +(2,6,37) + +346 +th +. +dy + = + `d_loc +( +ld_m +-> +m_sb +-> +s_ro +, & +me +); + +347 if +th +. +dy + ! +NULL + ) + +348 +th +. +dy +-> +d_ + = & +ldfs_dy_ݔis +; + +350 +th +. +dy + = + `d_loc_pudo +( +ld_m +-> +m_sb +, & +me +); + +353 #ifde +EFX_HAVE_D_DNAME + + +354 +my_dy + = + `d_loc +( +ld_m +-> +m_sb +-> +s_ro +, & +me +); + +357  +r +[32]; + +358 +me +. +n + = + `ldfs_me +(& + `cڏ_of +( +ode +,  +ld_ode +, + +359 +vfs_ode +)-> +iv +, + +360 +r +, (str)); + +361 +me +.m +r +; + +362 +me +. +hash + = +ode +-> +i_o +; + +363 +my_dy + = + `d_loc +( +ld_m +-> +m_sb +-> +s_ro +, & +me +); + +368 if +my_dy + = +NULL + ) { + +369 + `put_unud_fd +( +fd +); + +370 + `ut +( +ode +); + +371  - +ENOMEM +; + +374 #i! + `defed +( +EFX_FSTYPE_HAS_MOUNT +|| defed( +EFX_OLD_MOUNT_PSEUDO +) + +375 +my_dy +-> +d_ + = & +ldfs_dy_ݔis +; + +376 #i! + `defed +( +EFX_HAVE_STRUCT_PATH +&& defed( +EFX_HAVE_D_DNAME +) + +377 +my_dy +-> +d_ags + &~ +DCACHE_UNHASHED +; + +380 + `d_t +( +my_dy +, +ode +); + +381 #ide +EFX_HAVE_D_DNAME + + +382 + `d_hash +( +my_dy +); + +384 +ode +-> +i_f + = +fs +; + +386 #ifde +EFX_HAVE_STRUCT_PATH + + +387 +th +. +m + = + `mg +( +ld_m +); + +388 +fe + = + `loc_fe +(& +th +, +FMODE_READ + | +FMODE_WRITE +, +fs +); + +390 +fe + = + `loc_fe +( +ld_m +, +dy +, +FMODE_READ + | +FMODE_WRITE +, +fs +); + +392 if +fe + = +NULL +) { + +393 #ifde +EFX_HAVE_STRUCT_PATH + + +394 + `th_put +(& +th +); + +396 + `dput +( +dy +); + +397 + `ut +( +ode +); + +399 + `put_unud_fd +( +fd +); + +400  - +ENFILE +; + +403 +iv +-> +_fp + = +fe +; + +404 +fe +-> +f_ags + = +O_RDWR + | ( +ags + & +O_NONBLOCK +); + +405 +fe +-> +f_pos + = 0; + +406 +fe +-> +ive_da + = +iv +; + +408 if +ags + & +O_CLOEXEC + ) { + +409  +fes_ru + * +fes + = +cut +->files; + +410  +fdb + * +fdt +; + +411 + `_lock +(& +fes +-> +fe_lock +); + +412 +fdt + = + `fes_fdb +( +fes +); + +413 + `rcu_assign_por +( +fdt +-> +fd +[fd], +fe +); + +414 + `efx_t_o__exec +( +fd +, +fdt +); + +415 + `_uock +(& +fes +-> +fe_lock +); + +417 + `fd_l +( +fd +, +fe +); + +418 + `y_modu_g +( +THIS_MODULE +); + +420 + `ci_as_equ +( +fe +-> +f_ +, +fs +); + +421  +fd +; + +422 + } +} + +424  + $ld_iv_ +( +ci_ive_t + * +iv +) + +426 if +iv +-> +_fp +-> +f_vfsm + ! +ld_m +) + +427 + `ci_ +( +iv +); + +429 + } +} + +433 + $oo__fd +( +t_hr_dpot_t +* + +,  +ags +,  +fd_ty +) + +435  +fd +; + +436 +t_hr_sour_t + * +s + = + +-> +thr +; + +437 +cp_waab_obj + * +wo + = + `SP_TO_WAITABLE_OBJ +(& +s +-> +tif +, + +-> +id +); + +439 + `eb_thr_f +( +s +); + +440 +fd + = + `ld_loc_fe +( +s +, + +-> +id +, +ags +, +fd_ty +); + +441 if +fd + < 0 ) { + +442 + `eb_thr_a +( +s +); + +443 + `OO_DEBUG_ERR +( + `ci_log +("%s: od_loc_fed (%d)", +__FUNCTION__ +, +fd +)); + +444  +fd +; + +446 + `ci_omic32_d +(& +wo +-> +waab +. +sb_aags +, + +447 ~( +CI_SB_AFLAG_ORPHAN + | +CI_SB_AFLAG_TCP_IN_ACCEPTQ +)); + +449  +fd +; + +450 + } +} + +453 + $oo__ack_fd +( +t_hr_sour_t + * +thr +) + +455  +fd +; + +457 + `eb_thr_f +( +thr +); + +458 +fd + = + `ld_loc_fe +( +thr +, +OO_SP_NULL +, +O_CLOEXEC +, +CI_PRIV_TYPE_NETIF +); + +459 if +fd + < 0 ) { + +460 + `eb_thr_a +( +thr +); + +461 + `OO_DEBUG_ERR +( + `ci_log +("%s: od_loc_fed (%d)", +__FUNCTION__ +, +fd +)); + +462  +fd +; + +464  +fd +; + +465 + } +} + +468 + $ldfs_g_dev_t +( +ci_ive_t +* +iv +, * +g +) + +470 +ci_ut32 + * +p_dev + = +g +; + +471 * +p_dev + = ( +ci_ut32 +) +ld_m +-> +m_sb +-> +s_dev +; + +474 + } +} + +479 + $oo_move_fe +( +ci_ive_t +* +iv +, +t_hr_sour_t + * +w_thr +, + +480 +oo_ + +w_sockid +) + +482 +iv +-> +thr + = +w_thr +; + +483 +iv +-> +sock_id + = +w_sockid +; + +484 #ide +EFX_HAVE_D_DNAME + + +488  +dy + *dy = +iv +-> +_fp +-> +f_dy +; + +489 if + `dme_ex +( +dy +) ) { + +496 + `d_dr +( +dy +); + +497 +dy +-> +d_me +. +n + = + `ldfs_me +( +iv +, dy-> +d_ame +, + +498 ( +dy +-> +d_ame +)); + +499 + `d_hash +( +dy +); + +502 + } +} + + @ossock_calls.c + +10  + ~ + +11  + ~ + +12  + ~ + +13  + ~ + +14  + ~ + +16  + ~ + +17  + ~ + +19  + ~ + +20  + ~ + +21  + ~ + +23  + ~"ld_kl_comt.h +" + +25 #i +CI_CFG_EPOLL_HANDOVER_WORKAROUND + + +27 +DECLARE_RWSEM +( +hdov_rwlock +); + +29  + $oo_f_a_nhg +( +ode + *ode,  +fe + *file) + +32 + } +} + +33  +fe_ݔis + + goo_f_do_nhg + = + +35 . +owr + = +THIS_MODULE +, + +36 . + ga + = +oo_f_a_nhg +, + +41  + $oo_fd_hdov_ovwre +( +fe +* +oo_fe +, fe* +os_fe +) + +45  +dy + * +d_dy + = +oo_fe +-> +f_dy +; + +46  +vfsmou + * +d_vfsm + = +oo_fe +-> +f_vfsm +; + +49 +oo_fe +-> +ive_da + = +os_fe +->private_data; + +50 +oo_fe +-> +f_ + = +os_fe +->f_op; + +51 +oo_fe +-> +f_dy + = +os_fe +->f_dentry; + +52 +oo_fe +-> +f_vfsm + = +os_fe +->f_vfsmnt; + +53 +oo_fe +-> +f_owr +. +pid + = +os_fe +->f_owner.pid; + +54 #i +LINUX_VERSION_CODE + > + `KERNEL_VERSION +(2,6,19) + +55 +oo_fe +-> +f_owr +. +pid_ty + = +os_fe +->f_owner.pid_type; + +57 +oo_fe +-> +f_owr +. +uid + = +os_fe +->f_owner.uid; + +58 +oo_fe +-> +f_owr +. +euid + = +os_fe +->f_owner.euid; + +59 +oo_fe +-> +f_owr +. +signum + = +os_fe +->f_owner.signum; + +60 +oo_fe +-> +f_ags + = +os_fe +->f_flags; + +61 #i +LINUX_VERSION_CODE + > + `KERNEL_VERSION +(3,9,0) + +62 +oo_fe +-> +f_ode + = +os_fe +->f_inode; + +67 + `ci_as +( + `S_ISSOCK +( +os_fe +-> +f_dy +-> +d_ode +-> +i_mode +)); + +68 + `SOCKET_I +( +os_fe +-> +f_dy +-> +d_ode +)-> +fe + = +oo_fe +; + +71 +os_fe +-> +f_ + = & +oo_f_do_nhg +; + +72 +os_fe +-> +f_dy + = +d_dy +; + +73 +os_fe +-> +f_vfsm + = +d_vfsm +; + +74 + } +} + +81  + $eb_fd_hdov_a +( +fe +* +d_fp +, + +82  +fe +* +w_fp +,  +fd +) + +84  +rc + = - +ENOENT +; + +86 + `_lock +(& +cut +-> +fes +-> +fe_lock +); + +87 if + `fcheck +( +fd += +d_fp + ) { + +88 + `g_fe +( +w_fp +); + +89 + `ci_fdb_t_fd +( + `ci_fes_fdb +( +cut +-> +fes +), +fd +, +w_fp +); + +90 +rc + = 0; + +92 + `_uock +(& +cut +-> +fes +-> +fe_lock +); + +94 if +rc + == 0 ) + +95 + `ut +( +d_fp +); + +97  +rc +; + +98 + } +} + +105  + $eb_t_hr_hdov +( +ci_ive_t +* +iv +, * +p_fd +) + +107 +t_hr_dpot_t +* + +; + +108  +fd + = *( +ci_t32 +* +p_fd +; + +109  +fe + * +oo_fe +, * +os_fe +; + +110 +ci_ive_t + * +fd_iv +; + +111  +rc +, +le +; + +117 if +iv +-> +fd_ty + ! +CI_PRIV_TYPE_NETIF + ) { + +118 +le + = +__LINE__ +; + +119  +uxed_r +; + +122 +oo_fe + = + `fg +( +fd +); + +123 if +oo_fe +-> +f_ + !& +lux_t_hr_fs_t + && + +124 +oo_fe +-> +f_ + !& +lux_t_hr_fs_udp + ) { + +125 +le + = +__LINE__ +; + +126  +uxed_r +; + +128 +fd_iv + = +oo_fe +-> +ive_da +; + +129 + `ci_as + + `CI_PRIV_TYPE_IS_ENDPOINT +( +fd_iv +-> +fd_ty +) ); + +130 if +iv +-> +thr + ! +fd_iv +->thr ) { + +131 +le + = +__LINE__ +; + +132  +uxed_r +; + +134 + + = + `ci_s__g +( +fd_iv +-> +thr +, fd_iv-> +sock_id +); + +135 if + +-> +os_sock + = +NULL + ) { + +136 +le + = +__LINE__ +; + +137  +uxed_r +; + +141 if + +-> +sync_queue + ) + +142 + `sync_hr +(-1, +oo_fe +, 0, & + +-> +sync_queue +); + +144 +os_fe + = + +-> +os_sock +-> +fe +; + +145 +rc + = + `eb_fd_hdov_a +( +oo_fe +, +os_fe +, +fd +); + +146 if +rc + != 0 ) { + +147 + `LOG_E +( + `ci_log +("%s: ERROR: %d:%d fd=%d: handover failed dueoace", + +148 +__FUNCTION__ +, + +-> +thr +-> +id +,p->id, +fd +)); + +149 + `ut +( +oo_fe +); + +150  +rc +; + +154 #i +CI_CFG_EPOLL_HANDOVER_WORKAROUND + + +155 if + `fe_cou +( +oo_fe +) == 1 + +156 #ifde +NDEBUG + + +157 && ! + `li_emy +(& +oo_fe +-> +f__lks +) + +163 +ci_ive_t + * +iv + = (ci_ive_* +oo_fe +-> +ive_da +; + +165 + `down_wre +(& +hdov_rwlock +); + +166 + `_lock +(& +cut +-> +fes +-> +fe_lock +); + +167 if + `fe_cou +( +oo_fe +=1 && + `fcheck +( +fd += +os_fe + ) { + +168 + `oo_fd_hdov_ovwre +( +oo_fe +, +os_fe +); + +169 + `ci_fdb_t_fd +( + `ci_fes_fdb +( +cut +-> +fes +), +fd +, +oo_fe +); + +172 + `_uock +(& +cut +-> +fes +-> +fe_lock +); + +173 + `up_wre +(& +hdov_rwlock +); + +174 + `LOG_E +( + `ci_log +("%s: ERROR: %d:%d fd=%d:poll handover failed; socket " + +176 +__FUNCTION__ +, + +-> +thr +-> +id +,p->id, +fd +)); + +177  +n_l +; + +179 + `_uock +(& +cut +-> +fes +-> +fe_lock +); + +180 + `up_wre +(& +hdov_rwlock +); + +184 + `gic_t_hr_o +( +iv +); + +185 + `eb_thr_a +( +iv +-> +thr +); + +188 + `ci_as_equ +( + `fe_cou +( +os_fe +), 1); + +190 +os_fe +-> +f_ + = & +oo_f_do_nhg +; + +191 + `ut +( +os_fe +); + +195 +n_l +: + +207 if + `fe_cou +( +oo_fe +) != 1 ) { + +208 + `LOG_E +( + `ci_log +("%s: ERROR: handover of %d:%d fd=%d duplicated by dup or fork " + +209 "efs=%d)", +__FUNCTION__ +, + +-> +thr +-> +id +,p->id, +fd +, + +210 ( + `fe_cou +( +oo_fe +))); + +216 + `ut +( +oo_fe +); + +220 +uxed_r +: + +221 + `OO_DEBUG_ERR +( + `ci_log +("%s: ERROR: unexpectedrror in HANDOVERtine %d", + +222 +__FUNCTION__ +, +le +)); + +223  - +EINVAL +; + +224 + } +} + +227 #ifde +CONFIG_COMPAT + + +229  + $cy_comt_iovec_om_ur +( +iovec +* iovec, + +230  +comt_iovec + +__ur +* +uiovec +, + +231  +iovn +) + +233 +comt_ur_t + +iov_ba +; + +234 +comt_size_t + +iov_n +; + +235  +i +; + +237  +i + = 0; i < +iovn +; ++i ) { + +238 if + `g_ur +( +iov_n +, & +uiovec +[ +i +].iov_len) || + +239 + `g_ur +( +iov_ba +, & +uiovec +[ +i +].iov_base) ) + +240  - +EFAULT +; + +241 +iovec +[ +i +]. +iov_ba + = + `comt_r +(iov_base); + +242 +iovec +[ +i +]. +iov_n + = ( +__kl_size_t +) iov_len; + +245 + } +} + +256 #i +LINUX_VERSION_CODE + > +KERNEL_VERSION +(3,7,0) + +258  + $oo_l_fe_to_fd +( +fe + *fe,  +ags +) + +260  +fd + = + `g_unud_fd_ags +( +ags +); + +262 if( + `uiky + +fd + < 0 )) + +263  +fd +; + +265 + `g_fe +( +fe +); + +266 + `fd_l +( +fd +, +fe +); + +268  +fd +; + +269 + } +} + +273  + $oo_l_fe_to_fd +( +fe + *fe,  +ags +) + +275  +fd + = + `g_unud_fd +(); + +276  +fes_ru + * +fes + = +cut +->files; + +277  +fdb + * +fdt +; + +279 if( + `uiky + +fd + < 0 )) + +280  +fd +; + +282 + `g_fe +( +fe +); + +285 + `_lock +(& +fes +-> +fe_lock +); + +286 +fdt + = + `fes_fdb +( +fes +); + +287 + `rcu_assign_por +( +fdt +-> +fd +[fd], +fe +); + +288 if +ags + & +O_CLOEXEC +) + +289 + `efx_t_o__exec +( +fd +, +fdt +); + +290 + `_uock +(& +fes +-> +fe_lock +); + +292  +fd +; + +293 + } +} + +298 #i +LINUX_VERSION_CODE + > +KERNEL_VERSION +(3,7,0) + +300  + $sock_m_fd +( +sock + * +sock +,  +ags +) + +302  +fe + *file; + +303  +fd +; + +305 if( +fd + = + `g_unud_fd_ags +( +ags +)) < 0 ) + +306  +fd +; + +307 if + `IS_ERR +( +fe + = + `sock_loc_fe +( +sock +, +ags +, +NULL +)) ) { + +308 + `put_unud_fd +( +fd +); + +309  + `PTR_ERR +( +fe +); + +311 + `fd_l +( +fd +, +fe +); + +312  +fd +; + +313 + } +} + +318 #i +LINUX_VERSION_CODE + < +KERNEL_VERSION +(3,7,0) + +322  +fe + * + $sock_loc_fe +( +sock + * +sock +,  +ags +, * +unud +) + +324  +fd +; + +325  +fe + *file; + +327 #ifde +SOCK_TYPE_MASK + + +328 +fd + = + `sock_m_fd +( +sock +, +ags + | +SOCK_CLOEXEC +); + +330 +fd + = + `sock_m_fd +( +sock +); + +332 if +fd + < 0 ) + +333  + `ERR_PTR +( +fd +); + +334 +fe + = + `fg +( +fd +); + +335 if +fe + = +NULL + ) { + +336 + `ci_log +("%s: fd=%d clod und ft!", +__func__ +, +fd +); + +337  + `ERR_PTR +(- +EFAULT +); + +339 + `eb_lux_sys_o +( +fd +); + +340  +fe +; + +341 + } +} + +344  + $g_os_fd_om_ +( +t_hr_dpot_t + * + +) + +346  +fe + * +os_fe +; + +348 if + `oo_os_sock_g_om_ +( + +, & +os_fe +) != 0 ) + +349  - +EINVAL +; + +351  + `oo_l_fe_to_fd +( +os_fe +, +O_CLOEXEC +); + +352 + } +} + +359  + $eb_t_hr_g_sock_fd +( +ci_ive_t +* +iv +, * +g +) + +361 +oo_os_sock_fd_g_t + * + + = +g +; + +362 +t_hr_dpot_t + * + +; + +363 +ci_t32 + +sock_id + = + +->sock_id; + +365 if + +-> +sock_id + < 0 ) + +366 +sock_id + = + `OO_SP_TO_INT +( +iv +->sock_id); + +367 + + = + `ci_s_g_vid_ +( +iv +-> +thr +, +sock_id +); + +369 + +-> +fd_out + = + `g_os_fd_om_ +( + +); + +371  + +-> +fd_out + >= 0 ? 0 : op->fd_out; + +372 + } +} + +380  +sock + * + +381 + $g_lux_sock +( +t_hr_dpot_t +* + +) + +383 +ci_os_fe + +sockp +; + +384  +ode + *inode; + +385  +sock + * +sock +; + +386  +rc +; + +388 +rc + = + `oo_os_sock_g_om_ +( + +, & +sockp +); + +389 if +rc + != 0 ) + +390  +NULL +; + +391 +ode + = +sockp +-> +f_dy +-> +d_ode +; + +392 if +ode + = +NULL + ) + +393  +NULL +; + +395 + `ci_as +( + `S_ISSOCK +( +ode +-> +i_mode +)); + +396 +sock + = + `SOCKET_I +( +ode +); + +397 + `ci_as_equ +( +sock +-> +fe +, +sockp +); + +398  +sock +; + +399 + } +} + +401  + $eb_t_hr_os_sock_ndmsg +( +ci_ive_t +* +iv +, * +g +) + +403 +oo_os_sock_ndmsg_t + * + + = +g +; + +411 +t_hr_dpot_t + * + +; + +412  +sock +* +sock +; + +413  +iovec + +lol_iovec +[ +UIO_FASTIOV +]; + +414  +iovec_bys + = 0, +tٮ_bys +; + +415  +sockaddr_age + +addr +; + +416  +msghdr + +msg +; + +417  +i +, +rc +; + +418  +lol_l +[( +cmsghdr +) + 20] + +419 + `__ibu__ + (( + `igd +(( +__kl_size_t +)))); + +420 * +l_buf + = +lol_l +; + +422 + + = + `ci_s_g_vid_ +( +iv +-> +thr +, + +-> +sock_id +); + +423 +sock + = + `g_lux_sock +( + +); + +424 if +sock + = +NULL + ) + +425  - +EINVAL +; + +427 +rc + = - +EMSGSIZE +; + +428 +msg +. +msg_iov + = +lol_iovec +; + +429 +msg +. +msg_iovn + = + +->msg_iovlen; + +431 if + +-> +msg_iovn + > +UIO_MAXIOV + ) + +432  +out +; + +434 +iovec_bys + = + +-> +msg_iovn + * ( +lol_iovec +[0]); + +435 +rc + = - +ENOMEM +; + +436 if + +-> +msg_iovn + > +UIO_FASTIOV + ) + +437 +msg +. +msg_iov + = + `sock_kmloc +( +sock +-> +sk +, +iovec_bys +, +GFP_KERNEL +); + +438 if +msg +. +msg_iov + = +NULL + ) + +439  +out +; + +441 if + +-> +msg_cڌn + ) { + +442 #ifde +CONFIG_COMPAT + + +444 + `ci_as_equ +( + +-> +sizeof_r +, (*)); + +447 if + +-> +msg_cڌn + > +INT_MAX + ) { + +448 +rc + = - +ENOBUFS +; + +449  +out +; + +451 if + +-> +msg_cڌn + > ( +lol_l +) ) { + +452 +l_buf + = + `sock_kmloc +( +sock +-> +sk +, + +-> +msg_cڌn +, +GFP_KERNEL +); + +453 if +l_buf + = +NULL + ) + +454  +out +; + +456 if + `cy_om_ur +( +l_buf +, + `CI_USER_PTR_GET +( + +-> +msg_cڌ +), + +457 + +-> +msg_cڌn +) ) { + +458 +rc + = - +EFAULT +; + +459  +out +; + +461 +msg +. +msg_cڌ + = +l_buf +; + +462 +msg +. +msg_cڌn + = + +->msg_controllen; + +465 +msg +. +msg_cڌ + = +NULL +; + +466 +msg +. +msg_cڌn + = 0; + +469 +msg +. +msg_m + = + +->msg_namelen; + +470 if + +-> +msg_m + == 0 ) + +471 +msg +. +msg_me + = +NULL +; + +472 if + +-> +msg_m + < 0 || + +473 + +-> +msg_m + > ( +sockaddr_age +) ) { + +474 +rc + = - +EINVAL +; + +475  +out +; + +477 if + `cy_om_ur +(& +addr +, + `CI_USER_PTR_GET +( + +-> +msg_me +), + +478 + +-> +msg_m +) ) { + +479 +rc + = - +EFAULT +; + +480  +out +; + +483 +msg +. +msg_me + = & +addr +; + +485 +msg +. +msg_ags + = + +-> +ags +; + +487 +rc + = - +EFAULT +; + +488 #ifde +CONFIG_COMPAT + + +489 if + +-> +sizeof_r + != (*) ) { + +490 if + `cy_comt_iovec_om_ur +( +msg +. +msg_iov +, + `CI_USER_PTR_GET +( + +->msg_iov), + +491 + +-> +msg_iovn +) != 0 ) + +492  +out +; + +496 if + `cy_om_ur +( +msg +. +msg_iov +, + `CI_USER_PTR_GET +( + +->msg_iov), + +497 + +-> +msg_iovn + * ( +msg +. +msg_iov +[0])) != 0 ) + +498  +out +; + +500 +tٮ_bys + = 0; + +501  +i + = 0; i < + +-> +msg_iovn +; ++i ) + +502 +tٮ_bys + + +msg +. +msg_iov +[ +i +]. +iov_n +; + +503 +rc + = - +EMSGSIZE +; + +504 if +tٮ_bys + < 0 ) + +505  +out +; + +507 +rc + = + `sock_ndmsg +( +sock +, & +msg +, +tٮ_bys +); + +509 + `oo_os_sock_us_b_r +( + `SP_TO_SOCK +(& + +-> +thr +-> +tif +,p-> +id +), + +510 +OO_OS_STATUS_TX +, + +511 + +-> +os_sock +-> +fe +-> +f_ +-> + `pl +( + +512 + +-> +os_sock +-> +fe +, +NULL +& +POLLOUT +); + +514 +out +: + +515 if +msg +. +msg_iov + ! +lol_iovec + && msg.msg_iov ! +NULL +) + +516 + `sock_k_s +( +sock +-> +sk +, +msg +. +msg_iov +, +iovec_bys +); + +517 if +l_buf + ! +lol_l + && c_bu! +NULL +) + +518 + `sock_k_s +( +sock +-> +sk +, +l_buf +, + +-> +msg_cڌn +); + +519  +rc +; + +520 + } +} + +522  + $eb_t_hr_os_sock_ndmsg_w +( +ci_ive_t +* +iv +, * +g +) + +524 +oo_os_sock_ndmsg_w_t + * + + = +g +; + +525 +t_hr_dpot_t + * + + = + `ci_s_g_vid_ +( +iv +-> +thr +, + +-> +sock_id +); + +526  +fd +, +rc +; + +527  +ags + = + +->flags; + +529 + + = + `ci_s_g_vid_ +( +iv +-> +thr +, + +-> +sock_id +); + +530 +fd + = + `g_os_fd_om_ +( + +); + +532 #ifde +CONFIG_COMPAT + + +533 if + +-> +sizeof_r + != (*) ) + +534 +rc + = + `eb_lux_sys_ndmsg32 +( +fd +, + `CI_USER_PTR_GET +( + +-> +msg +), + +535 + `CI_USER_PTR_GET +( + +-> +sock_gs +), + +536 +ags +); + +539 +rc + = + `eb_lux_sys_ndmsg +( +fd +, + `CI_USER_PTR_GET +( + +-> +msg +), + +540 + `CI_USER_PTR_GET +( + +-> +sock_gs +), +ags +); + +543 + `oo_os_sock_us_b_r +( + `SP_TO_SOCK +(& + +-> +thr +-> +tif +,p-> +id +), + +544 +OO_OS_STATUS_TX +, + +545 + +-> +os_sock +-> +fe +-> +f_ +-> + `pl +( + +546 + +-> +os_sock +-> +fe +, +NULL +& +POLLOUT +); + +547 + `eb_lux_sys_o +( +fd +); + +548  +rc +; + +549 + } +} + +552  + $eb_t_hr_os_sock_cvmsg +( +ci_ive_t +* +iv +, * +g +) + +554 +oo_os_sock_cvmsg_t + * + + = +g +; + +559 +t_hr_dpot_t + * + +; + +560  +sock + * +sock +; + +561  +sockaddr +[( +sockaddr_6 +)]; + +562  +iovec + +lol_iovec +[ +UIO_FASTIOV +]; + +563  +iovec_bys + = 0, +tٮ_bys +; + +564  +msghdr + +msg +; + +565  +i +, +rc +; + +567 + + = + `ci_s_g_vid_ +( +iv +-> +thr +, + +-> +sock_id +); + +568 +sock + = + `g_lux_sock +( + +); + +569 if +sock + = +NULL + ) + +572 +rc + = - +EMSGSIZE +; + +573 +msg +. +msg_iov + = +lol_iovec +; + +574 +msg +. +msg_iovn + = + +->msg_iovlen; + +576 if + +-> +msg_iovn + > +UIO_MAXIOV + ) + +577  +out +; + +579 +iovec_bys + = + +-> +msg_iovn + * ( +lol_iovec +[0]); + +580 +rc + = - +ENOMEM +; + +581 if + +-> +msg_iovn + > +UIO_FASTIOV + ) + +582 +msg +. +msg_iov + = + `sock_kmloc +( +sock +-> +sk +, +iovec_bys +, +GFP_KERNEL +); + +583 if +msg +. +msg_iov + = +NULL + ) + +584  +out +; + +586 if + +-> +msg_m + ) { + +587 +msg +. +msg_me + = +sockaddr +; + +588 +msg +. +msg_m + = ( +sockaddr +); + +591 +msg +. +msg_me + = +NULL +; + +592 +msg +. +msg_m + = 0; + +595 if + +-> +msg_cڌn + ) { + +596 +msg +. +msg_cڌ + = + `CI_USER_PTR_GET +( + +->msg_control); + +597 +msg +. +msg_cڌn + = + +->msg_controllen; + +600 +msg +. +msg_cڌ + = +NULL +; + +601 +msg +. +msg_cڌn + = 0; + +604 +msg +. +msg_ags + = 0; + +605 if + +-> +sizeof_r + != (*) ) + +606 +msg +. +msg_ags + = +MSG_CMSG_COMPAT +; + +607 #ifde +MSG_CMSG_CLOEXEC + + +608 +msg +. +msg_ags + | + +-> +ags + & +MSG_CMSG_CLOEXEC +; + +611 +rc + = - +EFAULT +; + +612 #ifde +CONFIG_COMPAT + + +613 if + +-> +sizeof_r + != (*) ) { + +614 if + `cy_comt_iovec_om_ur +( +msg +. +msg_iov +, + `CI_USER_PTR_GET +( + +->msg_iov), + +615 + +-> +msg_iovn +) != 0 ) + +616  +out +; + +620 if + `cy_om_ur +( +msg +. +msg_iov +, + `CI_USER_PTR_GET +( + +->msg_iov), + +621 + +-> +msg_iovn + * ( +msg +. +msg_iov +[0])) != 0 ) + +622  +out +; + +624 +tٮ_bys + = 0; + +625  +i + = 0; i < + +-> +msg_iovn +; ++i ) + +626 +tٮ_bys + + +msg +. +msg_iov +[ +i +]. +iov_n +; + +627 +rc + = - +EMSGSIZE +; + +628 if +tٮ_bys + < 0 ) + +629  +out +; + +631 if +sock +-> +fe +-> +f_ags + & +O_NONBLOCK + ) + +632 + +-> +ags + | +MSG_DONTWAIT +; + +633 +rc + = + `sock_cvmsg +( +sock +, & +msg +, +tٮ_bys +, + +-> +ags +); + +635 + `oo_os_sock_us_b_r +( + `SP_TO_SOCK +(& + +-> +thr +-> +tif +,p-> +id +), + +636 +OO_OS_STATUS_RX +, + +637 +sock +-> +fe +-> +f_ +-> + `pl +(sock->fe, +NULL +) & + +638 +POLLIN +); + +639 if +rc + < 0 ) + +640  +out +; + +642 if + `CI_USER_PTR_GET +( + +-> +msg_me +) ) { + +643 if + +-> +msg_m + > +msg +.msg_namelen ) + +644 + +-> +msg_m + = +msg +.msg_namelen; + +645 if + `cy_to_ur +( + `CI_USER_PTR_GET +( + +-> +msg_me +), + +646 +sockaddr +, + +-> +msg_m +) != 0 ) + +647 +rc + = - +EFAULT +; + +649 + +-> +msg_m + = +msg +.msg_namelen; + +651 if + `CI_USER_PTR_GET +( + +-> +msg_cڌ +) ) { + +652 + +-> +msg_cڌn + = () +msg +. +msg_cڌ + - + +653 () + `CI_USER_PTR_GET +( + +-> +msg_cڌ +); + +654 if +msg +. +msg_ags + & +MSG_ERRQUEUE + ) { + +657 + `_lock_bh +(& +sock +-> +sk +-> +sk_r_queue +. +lock +); + +658 if + `skb_queue_emy +(& +sock +-> +sk +-> +sk_r_queue +) ) + +659 + `SP_TO_SOCK_CMN +(& + +-> +thr +-> +tif +,p-> +id +)-> +so_r + = 0; + +660 + `_uock_bh +(& +sock +-> +sk +-> +sk_r_queue +. +lock +); + +663 + +-> +ags + = +msg +. +msg_ags + &~ +MSG_CMSG_COMPAT +; + +665 +out +: + +666 if +msg +. +msg_iov + ! +lol_iovec + && msg.msg_iov ! +NULL +) + +667 + `sock_k_s +( +sock +-> +sk +, +msg +. +msg_iov +, +iovec_bys +); + +668 + +-> +rc + =c; + +669  +rc + > 0 ? 0 :c; + +670 + } +} + +673 #ifde +CI_LINUX_NO_MOVE_ADDR + + +676 + $eb_move_addr_to_kl +( +__ur + * +uaddr +,  +un +,  +sockaddr + * +kaddr +) + +678 i( +un + < 0 || u> ( +sockaddr_age +)) + +679  - +EINVAL +; + +680 i( +un + == 0) + +682 i( + `cy_om_ur +( +kaddr +, +uaddr +, +un +)) + +683  - +EFAULT +; + +685 + } +} + +696  + $eb_t_hr_bd_os_sock + ( +t_hr_sour_t + * +s +, + +697 +oo_ + +sock_id +, + +698  +sockaddr + * +addr +, + +699  +add +, +ci_ut16 + * +out_pt +) + +701  +rc +; + +702 +t_hr_dpot_t + * + +; + +703  +sock + * +sock +; + +705 + `ci_as +( +s +); + +707 + + = + `ci_s_g_vid_ +( +s +, +sock_id +); + +708 if + + = +NULL + ) + +709  - +EINVAL +; + +710 +sock + = + `g_lux_sock +( + +); + +711 if +sock + = +NULL + ) + +712  - +EINVAL +; + +714 +rc + = +sock +-> +s +-> + `bd +(sock, +addr +, +add +); + +715 + `LOG_TV +( + `ci_log +("%s:c=%d", +__FUNCTION__ +, +rc +)); + +717 i( +rc + >= 0) { + +722 +rc + = +sock +-> +s +-> + `gme +(sock, +addr +, & +add +, 0); + +724 * +out_pt + = (( +sockaddr_ +*) +addr +)-> +s_pt +; + +727  +rc +; + +728 + } +} + +731  + $eb_t_hr_li_os_sock +( +t_hr_sour_t +* +s +, + +732 +oo_ + +sock_id +,  +backlog +) + +734  +rc + = - +EINVAL +; + +735 +t_hr_dpot_t + * + +; + +736  +sock + * +sock +; + +738 + `ci_as + ( +s +); + +740 + + = + `ci_s_g_vid_ +( +s +, +sock_id +); + +741 +sock + = + `g_lux_sock +( + +); + +742 if +sock + = +NULL + ) + +743  - +EINVAL +; + +748 if + +-> +os_sock_ +. +whd + = +NULL + ) + +749 + `eb_t_hr_os_plwa_gi +( + +); + +751 +rc + = +sock +-> +s +-> + `li + (sock, +backlog +); + +752 + `LOG_TV +( + `ci_log +("%s:c=%d", +__FUNCTION__ +, +rc +)); + +754  +rc +; + +755 + } +} + +757  + $eb_t_hr_shutdown_os_sock + ( +t_hr_dpot_t + * + +, + +758 +ci_t32 + +how +) + +760  +rc + = - +EINVAL +; + +761  +sock + * +sock +; + +763 + `ci_as + ( + +); + +765 +sock + = + `g_lux_sock +( + +); + +766 if +sock + = +NULL + ) + +767  - +EINVAL +; + +769 +rc + = +sock +-> +s +-> + `shutdown + (sock, +how +); + +770 + `LOG_TV +( + `ci_log +("%s: shutdown(%drc=%d", +__FUNCTION__ +, +how +, +rc +)); + +772  +rc +; + +773 + } +} + +775 #i +LINUX_VERSION_CODE + < +KERNEL_VERSION +(2,6,19&& ! +defed +( +RHEL_MAJOR +) + +776  + $kl_ac +( +sock + * +sock +, sock ** +wsock +,  +ags +) + +778  +sock + * +sk + = sock->sk; + +779  +r +; + +781 +r + = + `sock__le +( +sk +-> +sk_my +, sk-> +sk_ty +, sk-> +sk_oc +, + +782 +wsock +); + +783 i( +r + < 0) + +784  +r +; + +786 +r + = +sock +-> +s +-> + `ac +(sock, * +wsock +, +ags +); + +787 i( +r + < 0) { + +788 + `sock_a +(* +wsock +); + +789 * +wsock + = +NULL +; + +790  +r +; + +793 (* +wsock +)-> +s + = +sock +->ops; + +794 + `__modu_g +((* +wsock +)-> +s +-> +owr +); + +796 + } +} + +800 + $eb_t_hr_os_sock_ac +( +ci_ive_t +* +iv +, * +g +) + +802 +oo_os_sock_ac_t + * + + = +g +; + +803 +t_hr_dpot_t + * + + = + `ci_s_g_vid_ +( +iv +-> +thr +, + +-> +sock_id +); + +804 +ci_sock_cmn + * +s + = + `SP_TO_SOCK +(& + +-> +thr +-> +tif +,p-> +id +); + +805  +sock + * +sock + = + `g_lux_sock +( + +); + +806  +sock + * +wsock +; + +807  +rc +; + +809 +rc + = + `kl_ac +( +sock +, & +wsock +, + +-> +ags +); + +812 + `oo_os_sock_us_b_r +( +s +, +OO_OS_STATUS_RX +, + +813 + +-> +os_sock +-> +fe +-> +f_ +-> + `pl +(ep->os_socket->file, + +814 +NULL +& +POLLIN +); + +816 if +rc + != 0 ) + +817  +rc +; + +818 +wsock +-> +ty + = +sock +->type; + +820 if + `CI_USER_PTR_GET +( + +-> +addr +! +NULL + ) { + +821  +addss +[( +sockaddr_6 +)]; + +822  +n +, +un +; + +824 +rc + = +wsock +-> +s +-> + `gme +ewsock, ( +sockaddr + *) +addss +, & +n +, 2); + +825 if +rc + != 0 ) + +826  - +ECONNABORTED +; + +827 +rc + = + `g_ur +( +un +, (*) + `CI_USER_PTR_GET +( + +-> +add +)); + +828 if +rc + != 0 ) + +829  +rc +; + +830 if +un + < 0 ) + +831  - +EINVAL +; + +832 if +un + ) { + +833 if + `cy_to_ur +( + `CI_USER_PTR_GET +( + +-> +addr +), +addss +, + +834 + `m +( +un +, +n +)) ) + +835  - +EFAULT +; + +838 + `__put_ur +( +n +, (*) + `CI_USER_PTR_GET +( + +-> +add +)); + +843 if! + `NI_OPTS +(& + +-> +thr +-> +tif +). +ac_h_noday + && + +844 ( +s +-> +s_aags + & +CI_SOCK_AFLAG_NODELAY +) ) { + +845  +noday + = 0; + +846 +rc + = +wsock +-> +s +-> + `tsockt +ewsock, +IPPROTO_TCP +, +TCP_NODELAY +, + +847 (*)& +noday +, (nodelay)); + +852 #ifde +SOCK_TYPE_MASK + + +854 if + `NI_OPTS +(& + +-> +thr +-> +tif +). +ac_h_nblock + && + +-> +ags + == 0 && + +855 +s +-> +b +. +sb_aags + & +CI_SB_AFLAG_O_NONBLOCK +) + +856 + +-> +ags + | +SOCK_NONBLOCK +; + +857 + +-> +rc + = + `sock_m_fd +( +wsock +, op-> +ags +); + +859 + +-> +rc + = + `sock_m_fd +( +wsock +); + +861 if + +-> +rc + < 0 ) { + +862 + `sock_a +( +wsock +); + +863  + +-> +rc +; + +866 #ide +SOCK_TYPE_MASK + + +868 if + `NI_OPTS +(& + +-> +thr +-> +tif +). +ac_h_nblock +) { + +871  +fe + *f + `fg +( + +-> +rc +); + +872 if +fe + = +NULL + ) + +874 + `lock_kl +(); + +875 if +s +-> +b +. +sb_aags + & +CI_SB_AFLAG_O_NONBLOCK + ) + +876 +fe +-> +f_ags + | +O_NONBLOCK +; + +877 if +s +-> +b +. +sb_aags + & +CI_SB_AFLAG_O_NDELAY + ) + +878 +fe +-> +f_ags + | +O_NDELAY +; + +879 + `uock_kl +(); + +884 + } +} + +888  + $eb_t_hr_c_os_sock +( +ci_ive_t + * +iv +, * +g +) + +890 +oo_t_sockaddr_wh_n_t + * + + = +g +; + +891 +ci_sock_cmn +* +s +; + +892 +size_t + +add +; + +893  +rc +; + +894 +t_hr_dpot_t + * + +; + +895  +sock +* +sock +; + +896  +sockaddr_age + +k_addss_buf +; + +897  +sockaddr + * +k_addss + = (sockadd*)& +k_addss_buf +; + +899 + `ci_as + ( +iv + && + +); + +900 i(! + `CI_PRIV_TYPE_IS_ENDPOINT +( +iv +-> +fd_ty +)) + +901  - +EINVAL +; + +902 + `ci_as +( +iv +-> +thr +); + +904 +add + = + +->addrlen; + +907 + + = + `ci_s_g_vid_ +( +iv +-> +thr +,riv-> +sock_id +); + +908 +sock + = + `g_lux_sock +( + +); + +909 if +sock + = +NULL + ) + +910  - +EINVAL +; + +911 +s + = + `SP_TO_SOCK +(& +iv +-> +thr +-> +tif +, + +-> +id +); + +913 +rc + = + `move_addr_to_kl +( + `CI_USER_PTR_GET +( + +-> +addss +), +add +, +k_addss +); + +914 i( +rc + >=0) { + +917 i(( +s +-> +b +. +sb_aags + & +CI_SB_AFLAG_O_NONBLOCK +)) + +918 +sock +-> +fe +-> +f_ags + | +O_NONBLOCK +; + +919 +rc + = +sock +-> +s +-> + `c +(sock, +k_addss +, +add +, sock-> +fe +-> +f_ags +); + +922  +rc +; + +923 + } +} + +926  + $eb_t_hr_t_t_o_os_sock +( +t_hr_sour_t + * +thr +, + +927 +oo_ + +sock_id +) + +929 +t_hr_dpot_t +* + +; + +930  +sock +* +sock +; + +932 + + = + `ci_s_g_vid_ +( +thr +, +sock_id +); + +933 if + + = +NULL + ) + +934  - +EINVAL +; + +935 +sock + = + `g_lux_sock +( + +); + +936 if +sock + = +NULL + ) + +937  - +EINVAL +; + +938 + `t_t_e +( +sock +-> +sk +, +TCP_CLOSE +); + +940 + } +} + +943  + $eb_t_hr_gsockt +( +t_hr_sour_t +* +s +, + +944 +oo_ + +sock_id +,  +v +,  +݊ame +, + +945 * +tv +, * +ݎ + ) + +947 +t_hr_dpot_t +* + +; + +948  +sock +* +sock +; + +949  +rc + = - +EINVAL +; + +951 + + = + `ci_s_g_vid_ +( +s +, +sock_id +); + +952 +sock + = + `g_lux_sock +( + +); + +953 if +sock + = +NULL + ) + +954  - +EINVAL +; + +955 +rc + = +sock +-> +s +-> + `gsockt +(sock, +v +, +݊ame +, +tv +, +ݎ +); + +956 + `LOG_SV +( + `ci_log +("%s:c=%d", +__FUNCTION__ +, +rc +)); + +957  +rc +; + +958 + } +} + +961  + $eb_t_hr_tsockt +( +t_hr_sour_t +* +s +, + +962 +oo_ + +sock_id +,  +v +, + +963  +݊ame +, * +tv +,  +ݎ + ) + +965 +t_hr_dpot_t +* + +; + +966  +sock +* +sock +; + +967  +rc + = - +EINVAL +; + +974 + + = + `ci_s_g_vid_ +( +s +, +sock_id +); + +975 +sock + = + `g_lux_sock +( + +); + +976 if +sock + = +NULL + ) + +977  - +EINVAL +; + +978 +rc + = +sock +-> +s +-> + `tsockt +(sock, +v +, +݊ame +, +tv +, +ݎ +); + +979 + `LOG_SV +( + `ci_log +("%s:c=%d", +__FUNCTION__ +, +rc +)); + +981  +rc +; + +982 + } +} + + @pinbuf.c + +13  + ~ + +14  + ~ + +17  + #FPL +( +x + + `CI_DEBUG +(x) + + ) + +23  +ge +* + $ci_flow_ge +( +ci_addr_c_t + +addr_c +, +ddr_t + +uaddr +) + +25 +pgd_t +* +pgd +; + +26 +pmd_t +* +pmd +; + +27 +e_t +* + +; + +28 +e_t + +e +; + +29 #i +LINUX_VERSION_CODE + > + `KERNEL_VERSION +(2,6,11) + +30 +pud_t +* +pud +; + +32  +ge +* +pg + = 0; + +33 +ci_u_t + +addss + = (ci_u_t) +uaddr +; + +36 + `_lock +(& +addr_c +-> +ge_b_lock +); + +38 +pgd + = + `pgd_offt +( +addr_c +, +addss +); + +39 if + `CI_UNLIKELY +( + `pgd_ne +(* +pgd +| + `pgd_bad +(*pgd)) ) { + +40 + `FPL +( + `ci_log +("follow_page: %lxgd_none=%dgd_bad=%d", + +41 () +addss +, ( + `pgd_ne +(* +pgd +), ( + `pgd_bad +(*pgd))); + +42  +de +; + +45 #i +LINUX_VERSION_CODE + > + `KERNEL_VERSION +(2,6,11) + +46 +pud + = + `pud_offt +( +pgd +, +addss +); + +47 if + `CI_UNLIKELY +( + `pud_ne +(* +pud +| + `pud_bad +(*pud)) ) { + +48 + `FPL +( + `ci_log +("follow_page: %lxud_none=%dud_bad=%d", + +49 () +addss +, ( + `pud_ne +(* +pud +), ( + `pud_bad +(*pud))); + +50  +de +; + +52 +pmd + = + `pmd_offt +( +pud +, +addss +); + +54 +pmd + = + `pmd_offt +( +pgd +, +addss +); + +57 if + `CI_UNLIKELY +( + `pmd_ne +(* +pmd +| + `pmd_bad +(*pmd)) ) { + +58 + `FPL +( + `ci_log +("follow_page: %lxmd_none=%dmd_bad=%d", + +59 () +addss +, ( + `pmd_ne +(* +pmd +), ( + `pmd_bad +(*pmd))); + +60  +de +; + +63 + + = + `e_offt_m +( +pmd +, +addss +); + +64 if + `CI_UNLIKELY +(! + +) ) { + +65 + `FPL +( + `ci_log +("flow_ge: %lxرe", () +addss +)); + +66  +de +; + +69 +e + = * + +; + +70 + `e_unm +( + +); + +71 if + `CI_LIKELY +( + `e_e +( +e +)) ) { + +72 if + `ci_e_vid +( +e +) ) + +73 +pg + = + `e_ge +( +e +); + +75 #ifde +e_p + + +76 + `FPL +( + `ci_log +("flow_ge: %lx=%lx vid", () +addss +, + `e_p +( +e +))); + +78 + `FPL +( + `ci_log +("flow_ge: %lx vid", () +addss +)); + +81 + `g_ge +( +pg +); + +84 + `OO_DEBUG_VERB +( + `ci_log +("flow_ge: %lxم", () +addss +)); + +86 +de +: + +87 + `_uock +(& +addr_c +-> +ge_b_lock +); + +89  +pg +; + +90 + } +} + + @ppc64_linux_trampoline.c + +34  + ~ + +35  + ~ + +36  + ~ + +37  + ~ + +38  + ~ + +39  + ~"c64_lux_ampޚe_.h +" + +42  + #TRAMP_DEBUG +( +x +...()0 + + ) + +46  + #TRAMPOLINE_BITS_64 + 0 + + ) + +47  + #TRAMPOLINE_BITS_32 + 1 + + ) + +49  + se_ru + + +51 +sys_y_t + * + ma_o +; + +52 +sys_y_t + * + ma_ex_group +; + +53 +sys_y_t + * + ma__sigai +; + +58 #i +CI_CFG_USERSPACE_EPOLL + + +59 +sys_y_t + * + mno_a_l_1 +; + +60 +sys_y_t + * + mno_a_l_ +; + +62 +sys_y_t + * + mno_a_l_l +; + +63 +sys_y_t + * + mno_a_l_wa +; + +66 +sys_y_t + * + mno_a_sock +; + +67 } + te_t +; + +69 +e_t + + ge +; + +70 +omic_t + + geb_sys_ud +; + +72  +tup_ampޚe +( +_gs + * +gs +, + +73  +code +,  +g +, + +74  +bs +); + +80 +asmlkage +  + $eb_lux_sys_o +( +fd +) + +82  +rc +; + +84 i( +e +. +a_o +) + +86 + `TRAMP_DEBUG + ("o %d v saved_sys_o=%p...", +fd +, +e +. +a_o +-> +ig_y64 +); + +87 +rc + = (((*)())( +e +. +a_o +-> +ig_y64 +))( +fd +); + +88 + `TRAMP_DEBUG + (".. = %d", +rc +); + +92 + `ci_log +("Unexpected close()equest before full init"); + +93  - +EFAULT +; + +95  +rc +; + +96 + } +} + +98 +asmlkage +  + $eb_lux_sys_ex_group +( +us +) + +100 i( +e +. +a_ex_group +) + +102  (((*)())( +e +. +a_ex_group +-> +ig_y64 +))( +us +); + +106 + `ci_log +("Unexpectedxit_group()equest before full init"); + +107  - +EFAULT +; + +109 + } +} + +111 #i +CI_CFG_USERSPACE_EPOLL + + +112 +asmlkage +  + $eb_lux_sys_l_1 +( +ags +) + +114 +asmlkage + (* +sys_l__ +)(); + +115  +rc +; + +117 #ifde +__NR_l_1 + + +118 i( +e +. +no_a_l_1 +) + +120 +sys_l__ + = ((*)())( +e +. +no_a_l_1 +-> +ig_y64 +); + +121 + `TRAMP_DEBUG +("l_1 v %.. ", +sys_l__ +); + +122 +rc + = + `sys_l__ +( +ags +); + +123 i( +rc + !- +ENOSYS +) + +124  +out +; + +127 i(! +e +. +no_a_l_ +) + +129 + `ci_log +("Unexpectedpoll_ctl()equest before full init"); + +130  - +EFAULT +; + +132 +sys_l__ + = ((*)())( +e +. +no_a_l_ +-> +ig_y64 +); + +133 + `TRAMP_DEBUG +("l_ v %.. ", +sys_l__ +); + +134 +rc + = + `sys_l__ +(1); + +135 + `ci_as_equ +( +ags + & ~ +EPOLL_CLOEXEC +, 0); + +136 i( +rc + >0 && ( +ags + & +EPOLL_CLOEXEC +)) + +138  +fes_ru + * +fes + = +cut +->files; + +139  +fdb + * +fdt +; + +140 + `_lock +(& +fes +-> +fe_lock +); + +141 +fdt + = + `fes_fdb +( +fes +); + +142 + `efx_t_o__exec +( +rc +, +fdt +); + +143 + `_uock +(& +fes +-> +fe_lock +); + +146  +out +; + +147 +out +: + +148 + `TRAMP_DEBUG +(" ... = %d ", +rc +); + +149  +rc +; + +150 + } +} + +152 +asmlkage +  + $eb_lux_sys_l_l +( +fd +,  + +,  +fd +, + +153  +l_evt + * +evt +) + +155 +asmlkage + (* +sys_l_l_ +)(, , ,  +l_evt + *); + +156  +rc +; + +158 i(! +e +. +no_a_l_l +) + +160 + `ci_log +("Unexpectedpoll_ctl()equest before full init"); + +161  - +EFAULT +; + +164 +sys_l_l_ + = ((*)(, , ,  +l_evt + *)) + +165 ( +e +. +no_a_l_l +-> +ig_y64 +); + +166 + `TRAMP_DEBUG + ("l_l(%d,%d,%d,%pv %p...", +fd +, + +, +fd +, +evt +, + +167 +sys_l_l_ +); + +168 +rc + = + `sys_l_l_ +( +fd +, + +, +fd +, +evt +); + +169 + `TRAMP_DEBUG + ("... = %d", +rc +); + +170  +rc +; + +171 + } +} + +173 +asmlkage +  + $eb_lux_sys_l_wa +( +fd +,  +l_evt + * +evts +, + +174  +maxevts +,  +timeout +) + +176 +asmlkage + (* +sys_l_wa_ +)(,  +l_evt + *, , ); + +177  +rc +; + +179 if! +e +. +no_a_l_wa + ) { + +180 + `ci_log +("Unexpectedpoll_wait()equest before full init"); + +181  - +EFAULT +; + +184 +sys_l_wa_ + = ((*)(,  +l_evt + *, , )) + +185 ( +e +. +no_a_l_wa +-> +ig_y64 +); + +186 + `TRAMP_DEBUG + ("l_wa(%d,%p,%d,%dv %p...", +fd +, +evts +, +maxevts +, + +187 +timeout +, +sys_l_wa_ +); + +188 +rc + = + `sys_l_wa_ +( +fd +, +evts +, +maxevts +, +timeout +); + +189 + `TRAMP_DEBUG + ("... = %d", +rc +); + +190  +rc +; + +191 + } +} + +195 +asmlkage +  + $eb_lux_sys_ndmsg +( +fd +,  +msghdr + +__ur +* +msg +, + +196  +__ur +* +sock_gs +, + +197  +ags +) + +199  +rc +; + +200 +asmlkage + (* +sys_sock_ +)(, *); + +201  +gs +[3]; + +203 if +e +. +no_a_sock + = +NULL + ) { + +204 + `ci_log +("Unexpected sendmsg->socketcall()equest before full init"); + +205  - +EFAULT +; + +208 +sys_sock_ + = (*) + +209 +e +. +no_a_sock +-> +ig_y64 +; + +210 + `TRAMP_DEBUG + ("ndmsg(%d,%p,%dv %p...", +fd +, +msg +, + +211 +ags +, +sys_sock_ +); + +212 + `memt +( +gs +, 0, (args)); + +213 +gs +[0] = () +fd +; + +214 +gs +[1] = () +msg +; + +215 +gs +[2] = () +ags +; + +216 +rc + = - +EFAULT +; + +217 i( + `cy_to_ur +( +sock_gs +, +gs +, (args)) == 0) + +218 +rc + = ( +sys_sock_ +( +SYS_SENDMSG +, +sock_gs +); + +220 + `TRAMP_DEBUG + ("... = %d", +rc +); + +221  +rc +; + +222 + } +} + +224 #ifde +CONFIG_COMPAT + + +225 +asmlkage +  + +226 + $eb_lux_sys_ndmsg32 +( +fd +,  +comt_msghdr + +__ur +* +msg +, + +227  +__ur +* +sock_gs +, + +228  +ags +) + +230  +rc +; + +231 +asmlkage + (* +sys_sock_ +)(, *); + +232 +comt_ulg_t + +gs +[3]; + +234 if +e +. +no_a_sock + = +NULL + ) { + +235 + `ci_log +("Unexpected sendmsg->socketcall()equest before full init"); + +236  - +EFAULT +; + +239 +sys_sock_ + = (*) + +240 +e +. +no_a_sock +-> +ig_y32 +; + +241 + `TRAMP_DEBUG + ("ndmsg(%d,%p,%dv %p...", +fd +, +msg +, + +242 +ags +, +sys_sock_ +); + +243 + `memt +( +gs +, 0, (args)); + +244 +gs +[0] = () +fd +; + +245 +gs +[1] = () +msg +; + +246 +gs +[2] = () +ags +; + +247 +rc + = - +EFAULT +; + +248 i( + `cy_to_ur +( +sock_gs +, +gs +, (args)) == 0) + +249 +rc + = ( +sys_sock_ +( +SYS_SENDMSG +, +sock_gs +); + +251 + `TRAMP_DEBUG + ("... = %d", +rc +); + +252  +rc +; + +253 + } +} + +256 +asmlkage +  + $eb_lux_sys_sigai +( +signum +, + +257 cڡ  +sigai + * +a +, + +258  +sigai + * + +) + +260  +rc +; + +262 i( +e +. +a__sigai + = +NULL +) { + +263 + `ci_log +("Unexpectedt_sigaction()equest before full init"); + +264  - +EFAULT +; + +267 + `TRAMP_DEBUG + ("sigai(%d,%p,%p,%dv %p...", +signum +, +a +, + +, + +268 ()( +sigt_t +), +e +. +a__sigai +-> +ig_y64 +); + +269 +rc + = (((*)(, cڡ  +sigai + *, sigai *, +size_t +)) + +270 ( +e +. +a__sigai +-> +ig_y64 +))( +signum +, +a +, + +, ( +sigt_t +)); + +271 + `TRAMP_DEBUG + ("... = %d", +rc +); + +272  +rc +; + +273 + } +} + +275 #ifde +CONFIG_COMPAT + + +276 +asmlkage +  + $eb_lux_sys_sigai32 +( +signum +, + +277 cڡ  +sigai32 + * +a +, + +278  +sigai32 + * + +) + +280  +rc +; + +282 i( +e +. +a__sigai + = +NULL +) { + +283 + `ci_log +("Unexpectedt_sigaction()equest before full init"); + +284  - +EFAULT +; + +287 + `TRAMP_DEBUG + ("sigai(%d,%p,%p,%dv %p...", +signum +, +a +, + +, + +288 ()( +sigt_t +), +e +. +a__sigai +-> +ig_y32 +); + +289 +rc + = (((*)(, cڡ  +sigai32 + *, sigai32 *, +size_t +)) + +290 ( +e +. +a__sigai +-> +ig_y32 +))( +signum +, +a +, + +, ( +sigt_t +)); + +291 + `TRAMP_DEBUG + ("... = %d", +rc +); + +292  +rc +; + +293 + } +} + +297  + $eb_lux_ampޚe_o64 +( +fd +) + +300  +fe + * +f +; + +301  +rc +; + +303 + `eb_sys_r +(); + +305 +f + = + `fg + ( +fd +); + +306 i( +f +) { + +307 i( + `FILE_IS_ENDPOINT +( +f +)) { + +314 i( + `tup_ampޚe + ( + `PT_REGS_FROM_SYSCALL +(), + +315 +CI_TRAMP_OPCODE_CLOSE +, +fd +, +TRAMPOLINE_BITS_64 +) == 0) + +318 + `ut +( +f +); + +319 + `eb_sys_ex +(); + +324 + `ut +( +f +); + +328 +rc + = (((*)())( +e +. +a_o +-> +ig_y64 +))( +fd +); + +329 + `TRAMP_DEBUG +("Clo64: Chau%d \n", +rc +); + +330 + `eb_sys_ex +(); + +331  +rc +; + +332 + } +} + +334 #ifde +CONFIG_COMPAT + + +335  + $eb_lux_ampޚe_o32 +( +fd +) + +338  +fe + * +f +; + +339  +rc +; + +341 + `eb_sys_r +(); + +343 +f + = + `fg + ( +fd +); + +344 i( +f +) { + +345 i( + `FILE_IS_ENDPOINT +( +f +)) { + +352 i( + `tup_ampޚe + ( + `PT_REGS_FROM_SYSCALL +(), + +353 +CI_TRAMP_OPCODE_CLOSE +, +fd +, +TRAMPOLINE_BITS_32 +) == 0) + +356 + `ut +( +f +); + +357 + `eb_sys_ex +(); + +362 + `ut +( +f +); + +366 +rc + = (((*)())( +e +. +a_o +-> +ig_y32 +))( +fd +); + +367 + `TRAMP_DEBUG +("Clo32: Chau%d \n", +rc +); + +368 + `eb_sys_ex +(); + +369  +rc +; + +370 + } +} + +373  + $tup_ampޚe +( +_gs + * +gs +, + +374  +code +,  +g +, + +375  +bs +) + +377  +mm_hash + * +p +; + +378 +ci_u_t + +ampޚe_y + = 0, +ampޚe_exude + = 0, + +379 +ampޚe_toc + = 0, +ampޚe_fixup + = 0; + +380  +rc + = - +EBADF +; + +382 + `ad_lock +(& +oo_mm_tbl_lock +); + +383 +p + = + `oo_mm_tbl_lookup +( +cut +-> +mm +); + +384 i( +p +) + +386 +ampޚe_y + = ( +ci_u_t + + `CI_USER_PTR_GET +( +p +->trampoline_entry); + +387 +ampޚe_exude + = ( +ci_u_t + + `CI_USER_PTR_GET +( +p +->trampoline_exclude); + +388 +ampޚe_toc + = ( +ci_u_t + + `CI_USER_PTR_GET +( +p +->trampoline_toc); + +389 +ampޚe_fixup + = ( +ci_u_t + + `CI_USER_PTR_GET +( +p +-> +ampޚe_ur_fixup +); + +391 + `ad_uock +(& +oo_mm_tbl_lock +); + +393 + `TRAMP_DEBUG +("%s:mpޚe_y = %\n", +__func__ +, (*) +ampޚe_y +); + +396 i( +ampޚe_y +) + +398 i(! + `acss_ok +( +VERIFY_READ +, +ampޚe_y +, 1)) + +401 + `ci_log +("Pid %d (mm=%p) has badrampolinentry: %p", + +402 +cut +-> +tgid +, cut-> +mm +, (*) +ampޚe_y +); + +403  - +EBADF +; + +407 i( +gs +-> +n + = +ampޚe_exude +) + +409 + `TRAMP_DEBUG +("Ignoring call fromxcludedddress 0x%08lx", + +410 () +ampޚe_exude +); + +411  - +EBUSY +; + +414 + `TRAMP_DEBUG +("%s: b%d; s uampޚe. \n", +__func__ +, +bs +); + +415 i( +bs + = +TRAMPOLINE_BITS_64 +) + +417 + `tup_ampޚe64 +( +gs +, +code +, +g +, + +418 (*) +ampޚe_y +, (*) +ampޚe_toc +, + +419 (*) +ampޚe_fixup +); + +421 #ifde +CONFIG_COMPAT + + +424 + `tup_ampޚe32 +( +gs +, +code +, +g +, + +425 (*) +ampޚe_y +, (*) +ampޚe_toc +, + +426 (*) +ampޚe_fixup +); + +429 +rc + = 0; + +433 + `OO_DEBUG_VERB +( + `ci_log +("Error --ttemptorampoline for unknownrocess")); + +434 +rc + = - +ENOENT +; + +436  +rc +; + +437 + } +} + +441  + $eb_lux_ampޚe_ +( +no_s +) + +443  +rc +; + +445 + `omic_t +(& +eb_sys_ud +, 0); + +447 + `memt +(& +e +, '\0', ( +e_ru +)); + +449 +rc + = + `lux_ampޚe_c64__ +(); + +450 i(! +rc +) + +452 i( +no_s +) + +454 + `TRAMP_DEBUG +("syscalls NOT hooked -o_sctequested"); + +458 +e +. +a_o + = + +459 + `lux_ampޚe_c64_r_sys +( +__NR_o +, + +460 +eb_lux_ampޚe_o64 +, + +461 +eb_lux_ampޚe_o32 +); + +462 #ifde +OO_CAN_HANDLE_TERMINATION + + +463 +e +. +a_ex_group + = + +464 + `lux_ampޚe_c64_r_sys +( +__NR_ex_group +, + +465 +eb_lux_ampޚe_ex_group +, + +466 +eb_lux_ampޚe_ex_group +); + +468 +e +. +a__sigai + = + +469 + `lux_ampޚe_c64_r_sys +( +__NR__sigai +, + +470 +eb_lux_ampޚe_sigai +, + +471 +eb_lux_ampޚe_sigai32 +); + +474 #i +CI_CFG_USERSPACE_EPOLL + + +475 #ifde +__NR_l_1 + + +476 +e +. +no_a_l_1 + = + +477 + `lux_ampޚe_c64_r_sys +( +__NR_l_1 +, + +478 +NULL +, NULL); + +480 +e +. +no_a_l_ + = + +481 + `lux_ampޚe_c64_r_sys +( +__NR_l_ +, +NULL +, NULL); + +482 +e +. +no_a_l_l + = + +483 + `lux_ampޚe_c64_r_sys +( +__NR_l_l +, +NULL +, NULL); + +484 +e +. +no_a_l_wa + = + +485 + `lux_ampޚe_c64_r_sys +( +__NR_l_wa +, +NULL +, NULL); + +488 +e +. +no_a_sock + = + +489 + `lux_ampޚe_c64_r_sys +( +__NR_sock +, +NULL +, NULL); + +493 + `TRAMP_DEBUG +("Warning: syscallableot found - can'tead sys_close"); + +497 + } +} + +499 #i +LINUX_VERSION_CODE + < +KERNEL_VERSION +(2,6,12) + +500  + #synchrize_sched + +synchrize_kl + + + ) + +503  + $eb_lux_ampޚe_dt +( +no_s +) + +505  +wag + = 0; + +508 + `lux_ampޚe_c64_e_syss +(); + +513 + `synchrize_sched +(); + +514 #ifde +CONFIG_PREEMPT + + +515 + `schedu_timeout +( + `mcs_to_jiffs +(50)); + +517  + `omic_ad +(& +eb_sys_ud +)) + +519 i(! +wag +) + +521 + `ci_log +("Waiting for intercepted syscallso finish .. "); + +522 +wag + = 1; + +524 + `schedu_timeout +( + `mcs_to_jiffs +(50)); + +526 i( +wag +) + +528 + `ci_log +("\t .. OK"); + +529 + `synchrize_sched +(); + +530 #ifde +CONFIG_PREEMPT + + +532 + `schedu_timeout +( + `mcs_to_jiffs +(50)); + +533 + `ci_log +("Unload is dangerous on RT kernels:repareo crash."); + +537 + `lux_ampޚe_c64_dio +(); + +540 + } +} + +542  + $eb_lux_ampޚe_debug + ( +ci_u_t + * +m +) + +544  + + = * +m +; + +545 * +p +; + +547 + `TRAMP_DEBUG +("Tmpޚdebug op=%lx", + +); + +548 () + +; + +550 * +m + = () + `fd_sys_b +(& +p +); + +553 + } +} + +556 #ide +NDEBUG + + +563  + $eb_lux_ampޚe_ul_ +() + +565  +_gs + * +gs + = 0; + +566  +mm_hash + * +p +; + +567 +ci_u_t + +ampޚe_ul_ + = 0; + +569 + `ci_as +( +gs +); + +571 i( +cut +-> +mm +) { + +572 + `ad_lock + (& +oo_mm_tbl_lock +); + +573 +p + = + `oo_mm_tbl_lookup +( +cut +-> +mm +); + +574 + `ad_uock + (& +oo_mm_tbl_lock +); + +575 i( +p +) { + +576 +ampޚe_ul_ + = ( +ci_u_t + + `CI_USER_PTR_GET + ( +p +->trampoline_ul_fail); + +579 + `ci_log +("%s:ؒy f܅id %u", +__FUNCTION__ +, +cut +-> +tgid +); + +584 + `ci_log +("%s:id %u idyg -mm", +__FUNCTION__ +, +cut +-> +tgid +); + +588 + `ci_log +("%s: sys backa (pid %d)", +__FUNCTION__ +, +cut +-> +tgid +); + +589 + `ci_backa +(); + +590 + `ci_log +("%s:rovoking user-level fail on syscallxit forid %d", + +591 +__FUNCTION__ +, +cut +-> +tgid +); + +594 + `ci_log +("(noteally, don't know how onhislatform)"); + +597 + } +} + + @ppc64_linux_trampoline_internal.c + +26  + ~ + +27  + ~ + +28  + ~ + +29  + ~ + +30  + ~ + +31  + ~ + +32  + ~ + +33  + ~ + +34  + ~ + +35  + ~ + +36  + ~ + +37  + ~ + +38  + ~ + +39  + ~"c64_lux_ampޚe_.h +" + +40  + ~ + +41  + ~ + +46  + #POWER_OPCODE +( +x +(((x>> 26)&0x3F) + + ) + +47  + #POWER_B_ADDR +( +c +, +b +) \ + +48 ((( +u64 +)( +c +)+ (( +b +& 0x03FFFFFC)) + + ) + +49 #i +LINUX_VERSION_CODE + > +KERNEL_VERSION +(2,6,28) + +50  + #KERNEL_BASE +( + +(a)-> +klba +) + + ) + +52  + #KERNEL_BASE +( + + +KERNELBASE + + + ) + +56  + #TRAMP_DEBUG +( +x +...()0 + + ) + +61 +ut32_t + +__ld_ampޚe_c64 +, +__ld_d_ampޚe_c64 +; + +63  + sc64_da_ru + + +66 * + msys_b +; + +69 * + msys_tu_pot +; + +74 +ut8_t + * + mthunks_p +, * + mthunks_q +; + +79  + mthunks_ud +; + +82 +sys_y_t + + mr +[ +NR_MAX_SYSCALL_INTERCEPT +]; + +84  + m_r +; + +87  +c64_da_ru + + gc64_da +; + +90  + #TOTAL_THUNK_BYTES + +PAGE_SIZE + + + ) + +92 * + $g_sys_tu_addss +({  +c64_da +. +sys_tu_pot +; + } +} + +96  + $pow_ld_ds +( +ut32_t + +r +, +t32_t + * +offt +) + +98  +code + = ( +r + >> 26); + +99 i( +code + == 58) + +110 (* +offt +(( +t32_t +)(( +t16_t +)( +r + & 0xFFFE))); + +117 + } +} + +120  +le + * + $fd_toc +() + +122 * +p +; + +123 + `asm + ("m%0, 2" : ""( +p +)); + +124  +p +; + +125 + } +} + +127  + $e_sys_y +( +sys_y_t + * +t +, * +sys_b +) + +129 +ut64_t + ** +sys_p + = &((((ut64_**) +sys_b +))[ +t +-> +sys_ + << 1]); + +130 + `TRAMP_DEBUG +("Reܐsys΃ry @ 0x%t%p, %p\n", +sys_p +, + +131 +t +-> +ig_y64 +[0],-> +ig_y32 +[0]); + +133 +sys_p +[0] = ( +ut64_t + *) +t +-> +ig_y64 +[0]; + +134 #ifde +CONFIG_COMPAT + + +135 +sys_p +[1] = ( +ut64_t + *) +t +-> +ig_y32 +[0]; + +137 + `ush_dche_nge +(() +sys_p +, ()syscall_p + 16); + +138 + } +} + +140  + $tch_sys_y +( +sys_y_t + * +to_tch +, * +sys_b +) + +142 +ut64_t + ** +sys_p + = &((((ut64_**) +sys_b +))[ +to_tch +-> +sys_ + << 1]); + +144 + `TRAMP_DEBUG +("tchg sys΃ry @ 0x%p\n", +sys_p +); + +146  +_ru + * + + = + `g_ +(); + +148 +to_tch +-> +ig_y64 +[0] = ( +ut64_t + *) +sys_p +[0]; + +149 +to_tch +-> +ig_y64 +[1] = ( +ut64_t + *) + +-> +kl_toc +; + +150 + `TRAMP_DEBUG +("64-b 0x%\n", +to_tch +-> +ig_y64 +[0], + +151 +to_tch +-> +ig_y64 +[1]); + +152 #ifde +CONFIG_COMPAT + + +153 +to_tch +-> +ig_y32 +[0] = ( +ut64_t + *) +sys_p +[1]; + +154 +to_tch +-> +ig_y32 +[1] = ( +ut64_t + *) + +-> +kl_toc +; + +155 + `TRAMP_DEBUG +("64-b 0x%0x%\n", +to_tch +-> +ig_y32 +[0], + +156 +to_tch +-> +ig_y32 +[1]); + +160 + `TRAMP_DEBUG +("sys_p[0] = 0x%\n", +sys_p +[0]); + +167 i( +to_tch +-> +y64 +) + +168 +sys_p +[0] = ( +ut64_t + *) +to_tch +-> +y64 +; + +169 #ifde +CONFIG_COMPAT + + +170 i( +to_tch +-> +y32 +) + +171 +sys_p +[1] = ( +ut64_t + *) +to_tch +-> +y32 +; + +174 + `ush_dche_nge +(() +sys_p +, ()syscall_p + 16); + +175 + } +} + +178 +ut64_t + * + $fd_sys_b +(** +tu_addr +) + +185 +ut32_t + * +pv +; + +186  +_ru + * +a_ + = + +187 + `g_ +(); + +188  +i +; + +189 +ut32_t + +sys__y_offt + = -1; + +190 +ut32_t + * +syem__comm + = +NULL +; + +191  +sys_toc_offt + = +INT_MIN +; + +192 +ut32_t + * +dis_ds_ + = +NULL +; + +193 +ut64_t + * +rv + = + `ERR_PTR +(- +ENOEXEC +); + +195 + `TRAMP_DEBUG +("%s: PACA = %\n", +__func__ +, +a_ +); + +196 +pv + = + `phys_to_vt +(0xc00); + +197 + `TRAMP_DEBUG +("0xC00 = %p", + +198 +pv +); + +199 (* +tu_addr + +NULL +; + +202 #i +LINUX_VERSION_CODE + < + `KERNEL_VERSION +(2,6,28) + +219 () +sys__y_offt +; + +221  + #POWER_CLRRDI_INSN + 0x79ac07c4 + + ) + +222  + #ORIS_SIGNATURE + 0x658c0000 + + ) + +223  + #ORI_SIGNATURE + 0x618c0000 + + ) + +225  +i += 0; i < (0x80 >> 2); ++i) + +227 i( +pv +[ +i +] = +POWER_CLRRDI_INSN +) + +229 +ut32_t + +is +, +i +; + +230 + `TRAMP_DEBUG +("Found our clrrdi .. \n"); + +231 +is + = +pv +[ +i ++1]; + +232 +i + = +pv +[ +i ++2]; + +234 i(( +is + & 0xFFFF0000= +ORIS_SIGNATURE + && + +235 ( +i + & 0xFFFF0000= +ORI_SIGNATURE +) + +237 +sys__y_offt + = + +238 (( +is + & 0xFFFF) << 16) | + +239 ( +i + & 0xFFFF); + +245 i( +sys__y_offt + & 0x80000000) + +247 + `TRAMP_DEBUG +("Failedo find CLRRDI/ORIS/ORI sequence. \n"); + +248 +rv + = + `ERR_PTR +(- +EIO +); + +249  +d +; + +252 + `TRAMP_DEBUG +("Found ORIS: 0x%08x \n", + +253 +sys__y_offt +); + +255 * +p + = (*)(((( +ut64_t +) +a_ +) & (((uint64_t)0xFFFFFFFF) << 32)) | + +256 (( +ut64_t +) +sys__y_offt +)); + +258 + `TRAMP_DEBUG +("Found syem__comm @ %\n", +p +); + +259 +syem__comm + = +p +; + +265 #i +LINUX_VERSION_CODE + < + `KERNEL_VERSION +(3,0,0) + +270  + #ADDI_SIGNATURE + 0x398C0000 + + ) + +276  + #ADDI_SIGNATURE + 0x394A0000 + + ) + +279  +i + =0 ;i < (0x80>>2); ++i) + +281 i(( +pv +[ +i +] & 0xFFFF0000= +ADDI_SIGNATURE + ) + +283 +sys__y_offt + = ( +pv +[ +i +] & 0xFFFF); + +287 i( +sys__y_offt + & 0x80000000) + +289 + `TRAMP_DEBUG +("Failedo find ADDI - sorry, chaps.\n"); + +290 +rv + = + `ERR_PTR +(- +EIO +); + +291  +d +; + +294 + `TRAMP_DEBUG +("sys_call_entry_offset = 0x%08x \n", + +295 +sys__y_offt +); + +298 + `TRAMP_DEBUG +("Branch @ %p (kb = 0x%016llx)\n", + +299 ( +ut32_t + *)( + `KERNEL_BASE +( +a_ +) + + +300 +sys__y_offt +), + +301 ( + `KERNEL_BASE +( +a_ +)); + +303 +ut32_t + * +bnch_addr + = + +304 ( +ut32_t + *)( + `KERNEL_BASE +( +a_ ++ +sys__y_offt +); + +305 +u64 + +bnch_loc + = (u64) +bnch_addr +; + +306 +ut32_t + +bnch + = * +bnch_addr +; + +312 i( + `POWER_OPCODE +( +bnch +) == 0x12) + +314 +syem__comm + = ( +ut32_t + *) + `POWER_B_ADDR +( +bnch_loc +, +bnch +); + +315 + `TRAMP_DEBUG +("system_call_common = %p \n", + +316 ( +ut32_t + *) + `POWER_B_ADDR +( +bnch_loc +, +bnch +)); + +318 + `TRAMP_DEBUG +("bnch = 0x%08x opcod0x%02x\n", +bnch +, + +319 + `POWER_OPCODE +( +bnch +)); + +324 i(! +syem__comm +) + +326 + `TRAMP_DEBUG +("Sorry: can'tocate system_call_common.\n"); + +327 +rv + = + `ERR_PTR +(- +EIO +); + +328  +d +; + +337 cڡ +ut32_t + +dis_sig +[] = + +346  +mch + = 0; + +347 +ut32_t + * +pv + = (ut32_* +syem__comm +; + +349  +i + =0 ;i < 0x200>>2; ++i) + +351 i( +pv +[ +i +] = +dis_sig +[ +mch +]) + +353 ++ +mch +; + +354 i( +mch + =(( +dis_sig +/ ( +ut32_t +))) + +357 +t32_t + +ds +; + +358  +ok +; + +359 +ok + = + `pow_ld_ds +( +pv +[ +i +- +mch +-3], & +ds +); + +361 i( +ok + < 0) + +363 + `TRAMP_DEBUG +("LD @ 0x%08x - cannot disassemble. \n", + +364 +pv +[ +i +- +mch +-3]); + +365 +rv + = + `ERR_PTR +(- +EIO +); + +366  +d +; + +368 +sys_toc_offt + = +ds +; + +369 +dis_ds_ + = & +pv +[ +i +]; + +371 + `TRAMP_DEBUG +("Found our LD @ 0x%08x - DS = %d \n", + +372 +pv +[ +i +- +mch +-3], + +373 +ds +); + +378 +mch + = 0; + +382 i( +sys_toc_offt + = +INT_MIN +) + +384 + `TRAMP_DEBUG +("Cannot find syscall TOC offset. \n"); + +385 +rv + = + `ERR_PTR +(- +EIO +); + +386  +d +; + +394  +i +; + +395  +i + =0; i < 0x20; ++i) + +397 i( +dis_ds_ +[ +i +] == 0x4e800421) + +400 (* +tu_addr +& +dis_ds_ +[ +i ++1]; + +405 i(!(* +tu_addr +)) + +407 + `TRAMP_DEBUG +("Cannot find brancho synthesiseeturnddress from.\n"); + +408 +rv + = + `ERR_PTR +(- +EIO +); + +409  +d +; + +413 +ut64_t + ** +sys_toc + = + +414 ( +ut64_t + **)( +a_ +-> +kl_toc + + +sys_toc_offt +); + +415 +ut64_t + * +sys_b + = * +sys_toc +; + +416 + `TRAMP_DEBUG +("sys TOC @ %(TOC @ 0x%16x\n", +sys_toc +, + +417 () +a_ +-> +kl_toc +); + +418 + `TRAMP_DEBUG +("sys΁ab @ %p\n", +sys_b +); + +420 +rv + = +sys_b +; + +425 +d +: + +426  +rv +; + +427 + } +} + +429  + $thunks_ +( +c64_da_ru + * +c64 +) + +431 +c64 +-> +thunks_p + =pc64-> +thunks_q + = 0; + +432 +c64 +-> +thunks_ud + = 0; + +434 +c64 +-> +thunks_p + = ( +ut8_t + *) + `__vmloc +( +TOTAL_THUNK_BYTES +, +GFP_KERNEL +, +PAGE_KERNEL_EXEC +); + +435 + `TRAMP_DEBUG +("Aodhunk@ 0x%\n", +c64 +-> +thunks_p +); + +436 +c64 +-> +thunks_q + = &c64-> +thunks_p +[ +TOTAL_THUNK_BYTES +]; + +437 +c64 +-> +thunks_ud + = 0; + +438 i(! +c64 +-> +thunks_p +) + +440  - +ENOSPC +; + +443 + } +} + +445  + $thunks_ex +( +c64_da_ru + * +c64 +) + +447 i( +c64 +-> +thunks_p +) + +449 + `TRAMP_DEBUG +("Fmemy @ 0x%\n", +c64 +-> +thunks_p +); + +450 + `v +( +c64 +-> +thunks_p +); + +452 + } +} + +454  + $thunks_add +( +c64_da_ru + * +c64 +, + +455 * +mod_func +, * +tu_addr +, * +tu_toc +, ** + +) + +458  +thunk_bys + = (& +__ld_d_ampޚe_c64 + - & +__ld_ampޚe_c64 +) << 2; + +459  +w_ud + = +c64 +-> +thunks_ud + + +thunk_bys + + 32; + +461 + `TRAMP_DEBUG +("T: = 0x%by%d,ew_ud = %d \n", +c64 +-> +thunks_p +, +thunk_bys +, +w_ud +); + +462 (* + +) = 0; + +464 i( +w_ud + > +TOTAL_THUNK_BYTES +) + +466  - +ENOSPC +; + +470 + `memy +(& +c64 +-> +thunks_p +[c64-> +thunks_ud +], & +__ld_ampޚe_c64 +, +thunk_bys +); + +472 + `memy +(& +c64 +-> +thunks_p +[c64-> +thunks_ud + + +thunk_bys +], ( +ut8_t + *) +mod_func +, 16); + +475 +ut64_t + ** +tup + = (ut64_**)(& +c64 +-> +thunks_p +[c64-> +thunks_ud + + +thunk_bys + + 16]); + +476 +tup +[0] = +tu_addr +; + +477 +tup +[1] = +tu_toc +; + +481 (* + +( +ut32_t + *)& +c64 +-> +thunks_p +[c64-> +thunks_ud +]; + +482 +c64 +-> +thunks_ud + = +w_ud +; + +485 + `ush_dche_nge +(() +c64 +-> +thunks_p +, (pc64-> +thunks_q +); + +486 + `ush_iche_nge +(() +c64 +-> +thunks_p +, (pc64-> +thunks_q +); + +489 + } +} + +491  + $lux_ampޚe_c64__ +() + +493  +rv + = 0; + +495 + `memt +(& +c64_da +, '\0', ( +c64_da_ru +)); + +497 + `TRAMP_DEBUG +("%s:ušg.\n", +__func__ +); + +499 +c64_da +. +sys_b + = + +500 + `fd_sys_b +(& +c64_da +. +sys_tu_pot +); + +501 i( + `IS_ERR +( +c64_da +. +sys_b +)) + +503 + `_r +("Cn fd sys΁ab - %ld\n", + `PTR_ERR +( +c64_da +. +sys_b +)); + +504 +rv + = - +EIO +; + +505  +d +; + +508 #ifde +OO_CAN_HANDLE_TERMINATION + + +509 if +c64_da +. +sys_b + ) + +510 + `eb_lux_rmi_ +(); + +513 + `thunks_ +(& +c64_da +); + +515 +d +: + +516  +rv +; + +517 + } +} + +519  + $lux_ampޚe_c64_e_syss +() + +521  +i +; + +522 + `TRAMP_DEBUG +("%s:ušgr_r = %d = 0x%p.\n", +__func__ +, + +523 +c64_da +. +_r +,pc64_da. +thunks_p +); + +524  +i + =0 ;< +c64_da +. +_r +; ++i) + +526 + `e_sys_y +(& +c64_da +. +r +[ +i +], + +527 +c64_da +. +sys_b +); + +529 + } +} + +531  + $lux_ampޚe_c64_dio +() + +533 + `thunks_ex +(& +c64_da +); + +534 + } +} + +536 +sys_y_t + * + $lux_ampޚe_c64_r_sys +( +sys_ +, + +537 * +y64 +, + +538 * +y32 +) + +540 +sys_y_t + * +t +; + +541  +rc +; + +543 i( +c64_da +. +_r + > +NR_MAX_SYSCALL_INTERCEPT +) + +545 +t + = + `ERR_PTR +(- +ENOSPC +); + +546  +d +; + +549 +t + = & +c64_da +. +r +[c64_da. +_r +]; + +550 +t +-> +sys_ + = syscall_nr; + +558 i( +y64 +) + +560 +rc + = + `thunks_add +(& +c64_da +, +y64 +,pc64_da. +sys_tu_pot +, + +561 (*) + `g_ +()-> +kl_toc +, & +t +-> +y64 +); + +562 i( +rc +) + +564 + `TRAMP_DEBUG +("Cn c64-bhunk: %d \n", +rc +); + +565 +t + = + `ERR_PTR +( +rc +); + +566  +d +; + +571 +t +-> +y64 + = +NULL +; + +574 #ifde +CONFIG_COMPAT + + +575 i( +y32 +) + +577 +rc + = + `thunks_add +(& +c64_da +, +y32 +,pc64_da. +sys_tu_pot +, + +578 (*) + `g_ +()-> +kl_toc +, & +t +-> +y32 +); + +579 i( +rc +) + +581 + `TRAMP_DEBUG +("Cn c32-bhunk: %d \n", +rc +); + +582 +t + = + `ERR_PTR +( +rc +); + +583  +d +; + +588 +t +-> +y32 + = +NULL +; + +592 + `TRAMP_DEBUG +("64-bithunk @ %p , 32-bithunk @ %p, \n", + +593 +t +-> +y64 +,-> +y32 +); + +595 + `TRAMP_DEBUG +("Patch syscallntry .. \n"); + +596 + `tch_sys_y +( +t +, +c64_da +. +sys_b +); + +598 +d +: + +599 i(! + `IS_ERR +( +t +)) + +601 ++ +c64_da +. +_r +; + +603  +t +; + +604 + } +} + +607  + $tup_ampޚe32 +( +_gs + * +gs +,  +code +,  +da +, + +608 +u32 + +__ur + * + +, u32 __u* +toc +, + +609 +u32 + +__ur + * +fixup_ +) + +614  + #PPC32_STACK_FRAME_BYTES + ((64+48>> 1) + + ) + +615 +ut32_t + +w_ack_buf +[( +PPC32_STACK_FRAME_BYTES + >> 2)]; + +616 +ut64_t + +w_ur_ +; + +618 + `TRAMP_DEBUG +("%s:t_g0x%\n", +__func__ +, +gs +); + +619 + `TRAMP_DEBUG +("userspace stack = 0x%pt->nip 0x%poc = 0x%pt->link 0x%p \n", + +620 (*) +gs +-> +g +[1], (*egs-> +n +, (*egs->g[2], (*egs-> +lk +); + +622 +w_ur_ + = +gs +-> +g +[1] - +PPC32_STACK_FRAME_BYTES +; + +623 + `memt +( +w_ack_buf +, '\0', +PPC32_STACK_FRAME_BYTES +); + +632 +w_ack_buf +[0] = +gs +-> +g +[1]; + +633 +w_ack_buf +[9] = +gs +-> +lk +; + +634 +w_ack_buf +[10] = +gs +-> +g +[2]; + +635 +w_ack_buf +[11] = +gs +-> +n +; + +643 +w_ack_buf +[12] = +code +; + +644 +w_ack_buf +[13] = +da +; + +645 i( + `cy_to_ur +((*)( +w_ur_ +), +w_ack_buf +, +PPC32_STACK_FRAME_BYTES +)) + +647 + `TRAMP_DEBUG +("Can't copyew userspace stackntry! \n"); + +648  - +EIO +; + +654 + `TRAMP_DEBUG +("Ura f0x%,o%fixu0x%\n", + +, +toc +, + +655 +fixup_ +); + +656 + `TRAMP_DEBUG +("New_ur_ = 0x%\n", (*) +w_ur_ +); + +657 +gs +-> +g +[1] = +w_ur_ +; + +658 +gs +-> +lk + = ( +u64 +) +fixup_ +; + +659 +gs +-> +g +[2] = ( +u64 +) +toc +; + +660 +gs +-> +n + = ( +u64 +) + +; + +663 + `TRAMP_DEBUG +("Dumw ura sck @ 0x%\n", (*) +w_ur_ +); + +665 +ut8_t + +ack_buf +[0x200]; + +666 i( + `cy_om_ur +( +ack_buf +, (* ) +w_ur_ +, 0x200)) + +668 + `TRAMP_DEBUG +("Can't copy stack back! \n"); + +678 + } +} + +680  + $tup_ampޚe64 +( +_gs + * +gs +,  +code +,  +da +, + +681 +u32 + +__ur + * + +, +u64 + __u* +toc +, + +682 +u32 + +__ur + * +fixup_ +) + +711  + #PPC64_STACK_FRAME_BYTES + (64+48) + + ) + +713 +ut64_t + +w_ack_buf +[( +PPC64_STACK_FRAME_BYTES + >> 3)]; + +714 +ut64_t + +w_ur_ +; + +716 + `TRAMP_DEBUG +("%s:t_g0x%\n", +__func__ +, +gs +); + +717 + `TRAMP_DEBUG +("userspace stack = 0x%pt->nip 0x%poc = 0x%pt->link 0x%p \n", + +718 (*) +gs +-> +g +[1], (*egs-> +n +, (*egs->g[2], (*egs-> +lk +); + +719 +w_ur_ + = +gs +-> +g +[1] - +PPC64_STACK_FRAME_BYTES +; + +720 + `memt +( +w_ack_buf +, '\0', +PPC64_STACK_FRAME_BYTES +); + +729 +w_ack_buf +[0] = +gs +-> +g +[1]; + +730 +w_ack_buf +[9] = +gs +-> +lk +; + +731 +w_ack_buf +[10] = +gs +-> +g +[2]; + +732 +w_ack_buf +[11] = +gs +-> +n +; + +740 +w_ack_buf +[12] = +code +; + +741 +w_ack_buf +[13] = +da +; + +742 i( + `cy_to_ur +((* +w_ur_ +, +w_ack_buf +, +PPC64_STACK_FRAME_BYTES +)) + +744 + `TRAMP_DEBUG +("Can't copyew userspace stackntry! \n"); + +745  - +EIO +; + +752 + `TRAMP_DEBUG +("Ura f0x%,o%fixu0x%\n", + +, +toc +, + +753 +fixup_ +); + +754 + `TRAMP_DEBUG +("New_ur_ = 0x%\n", (*) +w_ur_ +); + +755 +gs +-> +g +[1] = +w_ur_ +; + +756 +gs +-> +lk + = ( +u64 +) +fixup_ +; + +757 +gs +-> +g +[2] = ( +u64 +) +toc +; + +758 +gs +-> +n + = ( +u64 +) + +; + +760 + `TRAMP_DEBUG +("Dumw ura sck @ 0x%\n", (*) +w_ur_ +); + +762 +ut8_t + +ack_buf +[0x200]; + +763 i( + `cy_om_ur +( +ack_buf +, (* ) +w_ur_ +, 0x200)) + +765 + `TRAMP_DEBUG +("Can't copy stack back! \n"); + +774 + } +} + + @ppc64_linux_trampoline_internal.h + +27 #ide +__ONLOAD_LINUX_TRAMPOLINE_PPC64_INTERNAL_H__ + + +28  + #__ONLOAD_LINUX_TRAMPOLINE_PPC64_INTERNAL_H__ + + + ) + +30  + ssys_y_ru + + +32  + msys_ +; + +34 * + my64 +; + +35 #ifde +CONFIG_COMPAT + + +36 * + my32 +; + +48 * + mig_y64 +[2]; + +49 #ifde +CONFIG_COMPAT + + +50 * + mig_y32 +[2]; + +52 } + tsys_y_t +; + +55  +lux_ampޚe_c64__ +(); + +58  +lux_ampޚe_c64_e_syss +(); + +61  +lux_ampޚe_c64_dio +(); + +64  + #NR_MAX_SYSCALL_INTERCEPT + 24 + + ) + +74 +sys_y_t + * +lux_ampޚe_c64_r_sys +( +sys_ +, + +75 * +y64 +, + +76 * +y32 +); + +79 (* + tur_mode_ampޚe__t +)( + tsys_rv +,  + tcode +,  + tda +); + +90  + `tup_ampޚe64 +( +_gs + * +gs +,  +code +,  +da +, + +91 +u32 + +__ur + * + +, +u64 + __u* +toc +, + +92 +u32 + +__ur + * +fixup_ +); + +96  + `tup_ampޚe32 +( +_gs + * +gs +,  +code +,  +da +, + +97 +u32 + +__ur + * + +, u32 __u* +toc +, + +98 +u32 + +__ur + * +fixup_ +); + +105  + #PT_REGS_FROM_SYSCALL +((( +_gs + *)(&(( +u8 + *) + `__but_ame_addss +(1))[ +STACK_FRAME_OVERHEAD +])) + + ) + +108 +ut64_t + * + `fd_sys_b +(** +tu_addr +); + + @shmbuf.c + +15  + ~ + +16  + ~ + +18  + $ci_shmbuf_loc +( +ci_shmbuf_t +* +b +,  +bys +) + +20  +i +; + +22 + `ci_as +( +b +); + +24 +b +-> +n_ges + = + `CI_ROUND_UP +( +bys +, +CI_PAGE_SIZE +>> +CI_PAGE_SHIFT +; + +25 +b +-> +ges + = + `ci_loc +(b-> +n_ges + * (b->pages[0])); + +26 if +b +-> +ges + =0 )  - +ENOMEM +; + +28  +i + = 0; i < +b +-> +n_ges +; ++ + `efhw_ge_mk_vid +(&b-> +ges +[i]); + +31 + } +} + +34  + $ci_shmbuf_ +( +ci_shmbuf_t +* +b +) + +36  +i +; + +38 + `ci_as +( +b +); + +39 + `ci_as +( +b +-> +ges +); + +41  +i + = 0; i < +b +-> +n_ges +; ++i ) + +42 if + `efhw_ge_is_vid +(& +b +-> +ges +[ +i +]) ) + +43 + `efhw_ge_ +(& +b +-> +ges +[ +i +]); + +45 + `ci_ +( +b +-> +ges +); + +46 + } +} + +49  + $ci_shmbuf_demd_ge +( +ci_shmbuf_t +* +b +,  +ge_i +, + +50 +ci_qlock_t +* +lock +) + +52 + `ci_as +( +b +); + +53 + `ci_as +( +ge_i + < +b +-> +n_ges +); + +55 if! + `efhw_ge_is_vid +(& +b +-> +ges +[ +ge_i +]) ) { + +56  +efhw_ge + +p +; + +57 if + `efhw_ge_loc_zd +(& +p +) == 0 ) { + +58 +ci_qlock_e_t + +lock_ags +; + +59 + `ci_qlock_lock +( +lock +, & +lock_ags +); + +60 if! + `efhw_ge_is_vid +(& +b +-> +ges +[ +ge_i +]) ) { + +61 +b +-> +ges +[ +ge_i +] = +p +; + +62 + `efhw_ge_mk_vid +(& +p +); + +64 + `ci_qlock_uock +( +lock +, & +lock_ags +); + +65 if + `efhw_ge_is_vid +(& +p + + `efhw_ge_ +(&p); + +68 + `OO_DEBUG_VM +( + `ci_log +("%s: ouomemy", +__FUNCTION__ +)); + +69  - +ENOMEM +; + +73 + } +} + + @sigaction_calls.c + +12  + ~"ld_kl_comt.h +" + +14  + ~ + +15  + ~ + +16  + ~ + +17  + ~ + +20 + $eb_sigl_hdr_ty +( +sig +, +__sighdr_t + +ur_hdr +) + +22 if +ur_hdr + = +SIG_IGN + ) + +23  +OO_SIGHANGLER_IGN_BIT +; + +24 if +ur_hdr + ! +SIG_DFL + ) + +25  +OO_SIGHANGLER_USER +; + +26 if + `sig_kl_ +( +sig +) ) + +27  +OO_SIGHANGLER_STOP +; + +28 if + `sig_kl_cedump +( +sig +) ) + +29  +OO_SIGHANGLER_CORE +; + +30 if + `sig_kl_igne +( +sig +) ) + +31  +OO_SIGHANGLER_IGN_BIT +; + +33  +OO_SIGHANGLER_TERM +; + +34 + } +} + +38 + $eb_sigl_subu +( +sig +,  +sigai + * +w_a +, + +39  +mm_sigl_da + * +amp_da +) + +41  +rc +; + +42 +__sighdr_t + +hdr +; + +43  +k_sigai + * +k +; + +44  +ty +; + +45 +__ur +  +oo_sigai + * +ur_da +; + +46  +oo_sigai + * +sigl_da + = &( +amp_da +->sigl_da[ +sig + - 1]); + +47 +ci_t32 + +d_ty +; + +48 +ci_t32 + +q +; + +50 +ur_da + = &((( +oo_sigai + *) + +51 ( + `CI_USER_PTR_GET +( +amp_da +-> +ur_da +)))[ +sig + - 1]); + +52 if! + `acss_ok +( +VERIFY_WRITE +, +ur_da +, ( +oo_sigai +) ) ) + +53  - +EFAULT +; + +56 +d_ty + = +sigl_da +-> +ty +; + +57 +q + = ( +d_ty + & +OO_SIGHANGLER_SEQ_MASK ++ (1 << +OO_SIGHANGLER_SEQ_SHIFT +); + +58 }  + `ci_s32_ +(& +sigl_da +-> +ty +, +d_ty +, + +59 +OO_SIGHANGLER_BUSY + | +q +) ); + +63 +rc + = + `__put_ur +( +sigl_da +-> +ty +, & +ur_da +->type); + +64 if +rc + != 0 ) { + +65 +sigl_da +-> +ty + = +d_ty +; + +66  - +EFAULT +; + +69 + `_lock_q +(& +cut +-> +sighd +-> +siglock +); + +70 +k + = & +cut +-> +sighd +-> +ai +[ +sig + - 1]; + +71 if +w_a + ) + +72 +k +-> + + = * +w_a +; + +73 +ty + = + `eb_sigl_hdr_ty +( +sig +, +k +-> + +. +_hdr +); + +74 +hdr + = +ty + < +OO_SIGHANGLER_DFL_MAX + ? +amp_da +-> +hdrs +[ty] : +NULL +; + +75 + `BUILD_BUG_ON +( +SIG_DFL + ! +NULL +); + +78 if +ty + ! +OO_SIGHANGLER_USER + && +hdr + = +NULL + ) { + +79 + `_uock_q +(& +cut +-> +sighd +-> +siglock +); + +80 +sigl_da +-> +ty + = +d_ty + | +OO_SIGHANGLER_IGN_BIT + | +q +; + +81 + `ci_vify +( + `__put_ur +( +sigl_da +-> +ty +, + +82 & +ur_da +-> +ty +) == 0); + +87 + `OO_DEBUG_SIGNAL +( + `ci_log +("%s: %d change sig=%d handler %p flags %lx " + +88 "ܔ %ty %d", +__func__ +, + +89 +cut +-> +pid +, +sig +, +k +-> + +. +_hdr +, + +90 +k +-> + +. +_ags +, k->. +_ܔ +, +ty +)); + +91 +sigl_da +-> +ags + = +k +-> + +. +_ags +; + +92 +k +-> + +. +_ags + | +SA_SIGINFO +; + +93 if +ty + = +OO_SIGHANGLER_USER + ) + +94 + `CI_USER_PTR_SET +( +sigl_da +-> +hdr +, +k +-> + +. +_hdr +); + +96 + `CI_USER_PTR_SET +( +sigl_da +-> +hdr +, handler); + +97 if +amp_da +-> +ܔ + ) { + +98 +k +-> + +. +_ags + | +SA_RESTORER +; + +99 +k +-> + +. +_ܔ + = +amp_da +-> +ܔ +; + +102 +k +-> + +. +_hdr + = +amp_da +-> +hdr_pope +; + +103 + `_uock_q +(& +cut +-> +sighd +-> +siglock +); + +105 + `OO_DEBUG_SIGNAL +( + `ci_log +("%s: %d set sig=%d handler %p flags %lxestorer %p", + +106 +__func__ +, +cut +-> +pid +, +sig +, +k +-> + +. +_hdr +, + +107 +k +-> + +. +_ags +, k->. +_ܔ +)); + +110 +rc + = + `__cy_to_ur +( +ur_da +, +sigl_da +, (*signal_data)); + +111 +sigl_da +-> +ty + =y | +q +; + +112 if +rc + != 0 ) + +113  - +EFAULT +; + +115 + `ci_vify +( + `__put_ur +( +sigl_da +-> +ty +, & +ur_da +->type) == 0); + +118 + } +} + +121 + $eb_sigl_check +( +sig +, cڡ  +mm_sigl_da + * +amp_da +) + +123 cڡ  +oo_sigai + * +sigl_da + = &( +amp_da +->sigl_da[ +sig + - 1]); + +124  +k_sigai + * +k +; + +126 if( +sigl_da +-> +ty + & ( +OO_SIGHANGLER_TYPE_MASK + | +OO_SIGHANGLER_IGN_BIT +)) != + +127 +OO_SIGHANGLER_USER + ) + +130 + `_lock_q +(& +cut +-> +sighd +-> +siglock +); + +131 +k + = & +cut +-> +sighd +-> +ai +[ +sig + - 1]; + +132 if +k +-> + +. +_hdr + = +NULL + ) { + +133 +k +-> + +. +_ags + = +SA_SIGINFO +; + +134 +k +-> + +. +_hdr + = +amp_da +-> +hdr_pope +; + +135 + `OO_DEBUG_SIGNAL +( + `ci_log +("%s: fix sig=%d;robable SA_ONESHOT", + +136 +__func__ +, +sig +)); + +138 + `_uock_q +(& +cut +-> +sighd +-> +siglock +); + +139 + } +} + +141  + $eb_sigl_mm_ +(cڡ +ci_amp_g_gs_t + * +gs +,  +mm_hash + * +p +) + +143  +i +; + +145 if +gs +-> +max_signum + < +_NSIG + ) + +146  - +E2BIG +; + +148 +p +-> +sigl_da +. +hdr_pope + = + +149 + `CI_USER_PTR_GET +( +gs +-> +sigl_hdr_pope +); + +150 +p +-> +sigl_da +. +ܔ + = + `CI_USER_PTR_GET +( +gs +-> +sigl_ܔ +); + +152  +i + = 0; i < +OO_SIGHANGLER_DFL_MAX +; i++ ) + +153 +p +-> +sigl_da +. +hdrs +[ +i +] = + `CI_USER_PTR_GET +( +gs +-> +sigl_hdrs +[i]); + +155 +p +-> +sigl_da +. +ur_da + = +gs +->signal_data; + +156 +p +-> +sigl_da +. +_ڡack_r + = +gs +->sa_onstack_intercept; + +159 + } +} + +161  + $eb_sigl_oss_ +( +mm_sigl_da + * +amp_da +) + +163  +sig +; + +164  +rc +; + +166 + `OO_DEBUG_SIGNAL +( + `ci_log +("%s(%p)id %d", + +167 +__func__ +, +amp_da +, +cut +-> +pid +)); + +171  +sig + = 1; sig < +_NSIG +; sig++ ) { + +172  +k_sigai + * +k +; + +174 +amp_da +-> +sigl_da +[ +sig + - 1]. +ty + = +OO_SIGHANGLER_USER + | + +175 +OO_SIGHANGLER_IGN_BIT +; + +176 + `CI_USER_PTR_SET +( +amp_da +-> +sigl_da +[ +sig + - 1]. +hdr +, +NULL +); + +180 if + `sig_kl_ly +( +sig +) ) + +186 + `_lock_q +(& +cut +-> +sighd +-> +siglock +); + +187 +k + = & +cut +-> +sighd +-> +ai +[ +sig + - 1]; + +188 if +k +-> + +. +_hdr + = +amp_da +-> +hdr_pope + ) { + +189 + `_uock_q +(& +cut +-> +sighd +-> +siglock +); + +190 + `OO_DEBUG_SIGNAL +( + `ci_log +("%s: double initid=%d", + +191 +__func__ +, +cut +-> +pid +)); + +192 +rc + = + `cy_om_ur +( +amp_da +-> +sigl_da +, + +193 + `CI_USER_PTR_GET +( +amp_da +-> +ur_da +), + +194 ( +amp_da +-> +sigl_da +)); + +195 if +rc + != 0 ) + +196 + `ci_log +("%s: ERROR: faedcy sigd(%d)", +__func__ +, +rc +); + +200 + `_uock_q +(& +cut +-> +sighd +-> +siglock +); + +203 ( + `eb_sigl_subu +( +sig +, +NULL +, +amp_da +); + +206 +amp_da +-> +kl_sighd + = +cut +-> +sighd +; + +207 + } +} + +213 + $eb_sigl_pt_sigai +( +sig +,  +sigai + * + +, + +214  +mm_sigl_da + * +amp_da +) + +216  +oo_sigai + * +sigl_da + = &( +amp_da +->sigl_da[ +sig + - 1]); + +217 +ci_t32 + +ty +; + +218  + #MAX_TRIES_BUSY + 1000 + + ) + +219  +d_busy + = 0; + +220  +d_chged + = 0; + +221  +_ovided + = ( + + ! +NULL +); + +223 +_ad_da +: + +225 +d_busy +++; + +226 +ty + = +sigl_da +->type; + +227 }  ( +ty + & +OO_SIGHANGLER_TYPE_MASK += +OO_SIGHANGLER_BUSY + && + +228 +d_busy + < +MAX_TRIES_BUSY + ); + +229 if +d_busy + > +MAX_TRIES_BUSY + ) { + +230 + `ci_log +("%s(%d):id %d signal() or sigaction()uns forooong", + +231 +__func__ +, +sig +, +cut +-> +pid +); + +232  - +EBUSY +; + +235 +pt +: + +236 + `_lock_q +(& +cut +-> +sighd +-> +siglock +); + +237 if +_ovided + ) + +238 * + + = +cut +-> +sighd +-> +ai +[ +sig + - 1].sa; + +240 + + = & +cut +-> +sighd +-> +ai +[ +sig + - 1].sa; + +242 if + +-> +_hdr + ! +amp_da +-> +hdr_pope + ) { + +243 + `_uock_q +(& +cut +-> +sighd +-> +siglock +); + +247 + `OO_DEBUG_SIGNAL +( + `ci_log +("%s: %drocess sig=%dype %d handler %p " + +248 "ag%lxeܔ %p", +__func__ +, +cut +-> +pid +, + +249 +sig +, +ty + & +OO_SIGHANGLER_TYPE_MASK +, + +-> +_hdr +, + +250 + +-> +_ags +, sa-> +_ܔ +)); + +251 if( +sigl_da +-> +ty + & +OO_SIGHANGLER_TYPE_MASK += +OO_SIGHANGLER_USER +) + +252 + +-> +_hdr + = + `CI_USER_PTR_GET +( +sigl_da +-> +hdr +); + +253 if! ( +sigl_da +-> +ty + & +OO_SIGHANGLER_IGN_BIT +) ) { + +254 + +-> +_hdr + = +SIG_DFL +; + +255 + +-> +_ags + &~ +SA_RESTORER +; + +256 if! ( +sigl_da +-> +ags + & +SA_SIGINFO +) ) + +257 + +-> +_ags + &~ +SA_SIGINFO +; + +258 + +-> +_ܔ + = +NULL +; + +260 + `OO_DEBUG_SIGNAL +( + `ci_log +("%s: %do user sig=%d handler %p flags %lx " + +261 "ܔ %p", +__func__ +, + +262 +cut +-> +pid +, +sig +, + +-> +_hdr +, + +263 + +-> +_ags +, sa-> +_ܔ +)); + +265 + `_uock_q +(& +cut +-> +sighd +-> +siglock +); + +268 if +ty + ! +sigl_da +->type ) { + +269 +d_chged +++; + +270 if +d_chged + > +MAX_TRIES_BUSY + ) { + +271 + `ci_log +("%s: sigl( sigai(edo", +__func__ +); + +272  - +EBUSY +; + +274 if( +sigl_da +-> +ty + & +OO_SIGHANGLER_TYPE_MASK += +OO_SIGHANGLER_BUSY + ) { + +275 +d_busy + = 0; + +276  +_ad_da +; + +279  +pt +; + +283 + } +} + +285  + $eb_sigl_oss_fi +( +mm_sigl_da + * +amp_da +) + +287  +sig +; + +289 + `OO_DEBUG_SIGNAL +( + `ci_log +("%s(%p)id %d: current->flags=%x, " + +290 "amp_da->ur_da=%p", +__func__ +, + +291 +amp_da +, +cut +-> +pid +, ()cut-> +ags +, + +292 + `CI_USER_PTR_GET +( +amp_da +-> +ur_da +))); + +294 if +cut +-> +ags + & +PF_EXITING + ) + +296 #i +LINUX_VERSION_CODE + > + `KERNEL_VERSION +(2,6,30) + +297 if +cut +-> +_execve + ) + +300 if + `CI_USER_PTR_GET +( +amp_da +-> +ur_da += +NULL + ) + +303 + `OO_DEBUG_SIGNAL +( + `ci_log +("%s(%p)id %d: uninstall interception", + +304 +__func__ +, +amp_da +, +cut +-> +pid +)); + +305  +sig + = 1; sig < +_NSIG +; sig++ ) { + +306 if + `sig_kl_ly +( +sig +) ) + +308 if + `eb_sigl_pt_sigai +( +sig +, +NULL +, +amp_da +) != 0 ) { + +309 + `ci_log +("%s: ERROR:id %d failedo back off signal %d handler", + +310 +__func__ +, +cut +-> +pid +, +sig +); + +314 + } +} + +317 #i +LINUX_VERSION_CODE + < +KERNEL_VERSION +(2,6,12) + +318  + #vid_sigl +( +s +((s< +_NSIG +) + + ) + +321 + $eb_sigl_do_sigai +( +sig +,  +sigai + * +a +, + +322  +sigai + * + +, + +323  +mm_sigl_da + * +amp_da +, + +324 * +out_ss_to_kl +) + +326  +rc + = 0; + +328 if! + `vid_sigl +( +sig +|| sig < 1 || ( +a + ! +NULL + && + `sig_kl_ly +(sig)) ) + +329  - +EINVAL +; + +332 if + + ! +NULL + ) { + +333 +rc + = + `eb_sigl_pt_sigai +( +sig +, + +, +amp_da +); + +334 if +rc + != 0 ) + +335  +rc +; + +338 if +a + ! +NULL + ) { + +339 + `sigdtmask +(& +a +-> +_mask +, + `sigmask +( +SIGKILL +| sigmask( +SIGSTOP +)); + +343 if +a +-> +_hdr + = +SIG_IGN + || + +344 ( +a +-> +_hdr + = +SIG_DFL + && + `sig_kl_igne +( +sig +)) ) + +345 * +out_ss_to_kl + = 1; + +346 if +a +-> +_ags + & +SA_ONSTACK + && ! +amp_da +-> +_ڡack_r + ) + +347 * +out_ss_to_kl + = 1; + +349 +rc + = + `eb_sigl_subu +( +sig +, +a +, +amp_da +); + +352 + `eb_sigl_check +( +sig +, +amp_da +); + +354  +rc +; + +355 + } +} + +358 + $eb_sigl_g_amp_da +( +mm_sigl_da + ** +amp_da +) + +360  +mm_hash + * +p +; + +362 + `wre_lock + (& +oo_mm_tbl_lock +); + +363 +p + = + `oo_mm_tbl_lookup +( +cut +-> +mm +); + +364 if +p + = +NULL + || + `CI_USER_PTR_GET +-> +sigl_da +. +ur_da +) == NULL) { + +365 + `wre_uock + (& +oo_mm_tbl_lock +); + +366  - +ENOSYS +; + +368 + `eb_g_mm_hash_locked +( +p +); + +369 * +amp_da + = & +p +-> +sigl_da +; + +371 + `wre_uock + (& +oo_mm_tbl_lock +); + +374 + } +} + +378 + $eb_sigl_put_amp_da +( +mm_sigl_da + * +amp_da +) + +380  +mm_hash + * +p + = + `cڏ_of +( +amp_da +, mm_hash, +sigl_da +); + +381  +do_ + = 0; + +383 + `wre_lock + (& +oo_mm_tbl_lock +); + +384 + `eb_put_mm_hash_locked +( +p +); + +385 + `wre_uock + (& +oo_mm_tbl_lock +); + +387 if +do_ + ) + +388 + `eb__mm_hash +( +p +); + +389 + } +} + +391 +asmlkage +  + +392 + $eb_lux_ampޚe_sigai +( +sig +, cڡ  +sigai + * +a +, + +393  +sigai + * + +, +size_t + +sigtsize +) + +395  +rc + = 0; + +396  +sigai + +d +, +w +; + +397  +mm_sigl_da + * +amp_da +; + +398  +ss_to_kl + = 0; + +400 + `eb_sys_r +(); + +402 if +sigtsize + !( +sigt_t +) ) { + +403 + `eb_sys_ex +(); + +404  - +EINVAL +; + +408 if + `eb_sigl_g_amp_da +(& +amp_da +) ) { + +409 +rc + = + `eb_lux_sys_sigai +( +sig +, +a +, + +); + +410 + `eb_sys_ex +(); + +411  +rc +; + +414 if +a + ! +NULL + ) { + +418 if +amp_da +-> +kl_sighd + ! +cut +-> +sighd + ) + +419 +ss_to_kl + = 1; + +421 +rc + = + `cy_om_ur +(& +w +, +a +, (new)); + +422 if +rc + != 0 ) { + +423 + `eb_sigl_put_amp_da +( +amp_da +); + +424 + `eb_sys_ex +(); + +425  - +EFAULT +; + +430 +rc + = + `eb_sigl_do_sigai +( +sig +, + +431 ( +a + && ! +ss_to_kl +? & +w + : +NULL +, + +432 + + ? & +d + : +NULL +, +amp_da +, + +433 & +ss_to_kl +); + +434 + `eb_sigl_put_amp_da +( +amp_da +); + +436 if +ss_to_kl + ) + +437 + `eb_lux_sys_sigai +( +sig +, +a +, +NULL +); + +439 if +rc + =0 && + + ! +NULL + ) { + +440 +rc + = + `cy_to_ur +( + +, & +d +, (old)); + +441 if +rc + != 0 ) { + +442 + `eb_sys_ex +(); + +443  - +EFAULT +; + +446 + `eb_sys_ex +(); + +447  +rc +; + +448 + } +} + +450 #ifde +CONFIG_COMPAT + + +451 #i +LINUX_VERSION_CODE + < +KERNEL_VERSION +(2,6,12) + +452  +le + +comt_ur_t + + $r_to_comt +( +__ur + * +ur +) + +453 {  ( +u32 +)() +ur +; + } +} + +458 +asmlkage +  + +459 + $eb_lux_ampޚe_sigai32 +( +sig +, cڡ  +sigai32 + * +a32 +, + +460  +sigai32 + * +32 +, + +461  +sigtsize +) + +463  +sigai + +a +, + +; + +464 +comt_sigt_t + +t32 +; + +465  +rc +; + +466  +mm_sigl_da + * +amp_da +; + +467  +ss_to_kl + = 0; + +469 + `eb_sys_r +(); + +471 if +sigtsize + !( +comt_sigt_t +) ) { + +472 + `eb_sys_ex +(); + +473  - +EINVAL +; + +477 if + `eb_sigl_g_amp_da +(& +amp_da +) ) { + +478 +rc + = + `eb_lux_sys_sigai32 +( +sig +, +a32 +, +32 +); + +479 + `eb_sys_ex +(); + +480  +rc +; + +484 if +a32 + ! +NULL + && +amp_da +-> +kl_sighd + ! +cut +-> +sighd + ) + +485 +ss_to_kl + = 1; + +487 if +a32 + ! +NULL + && ! +ss_to_kl + ) { + +488 +comt_ur_t + +hdr +, +ܔ +; + +490 if! + `acss_ok +( +VERIFY_READ +, +a32 +, (*act32)) || + +491 + `__g_ur +( +hdr +, & +a32 +-> +_hdr +) || + +492 + `__g_ur +( +a +. +_ags +, & +a32 +->sa_flags) || + +493 + `__g_ur +( +ܔ +, & +a32 +-> +_ܔ +) || + +494 + `__cy_om_ur +(& +t32 +, & +a32 +-> +_mask +, ( +comt_sigt_t +)) ) { + +495 + `eb_sigl_put_amp_da +( +amp_da +); + +496 + `eb_sys_ex +(); + +497  - +EFAULT +; + +499 +a +. +_hdr + = + `comt_r +( +hdr +); + +500 +a +. +_ܔ + = + `comt_r +( +ܔ +); + +502 + `ci_as_ge +( +_COMPAT_NSIG_WORDS +, +_NSIG_WORDS + << 1); + +503  +_NSIG_WORDS +) { + +504 4: +a +. +_mask +. +sig +[3] = +t32 +.sig[6] | ((()set32.sig[7]) << 32); + +505 3: +a +. +_mask +. +sig +[2] = +t32 +.sig[4] | ((()set32.sig[5]) << 32); + +506 2: +a +. +_mask +. +sig +[1] = +t32 +.sig[2] | ((()set32.sig[3]) << 32); + +507 1: +a +. +_mask +. +sig +[0] = +t32 +.sig[0] | ((()set32.sig[1]) << 32); + +511 +rc + = + `eb_sigl_do_sigai +( +sig +, + +512 ( +a32 + && ! +ss_to_kl +? & +a + : +NULL +, + +513 +32 + ? & + + : +NULL +, +amp_da +, + +514 & +ss_to_kl +); + +515 + `eb_sigl_put_amp_da +( +amp_da +); + +516 if +ss_to_kl + ) + +517 + `eb_lux_sys_sigai32 +( +sig +, +a32 +, +NULL +); + +519 if +rc + =0 && +32 + ! +NULL + ) { + +520  +_NSIG_WORDS +) { + +522 +t32 +. +sig +[7] = ( + +. +_mask +.sig[3] >> 32); + +523 +t32 +. +sig +[6] = + +. +_mask +.sig[3]; + +525 +t32 +. +sig +[5] = ( + +. +_mask +.sig[2] >> 32); + +526 +t32 +. +sig +[4] = + +. +_mask +.sig[2]; + +528 +t32 +. +sig +[3] = ( + +. +_mask +.sig[1] >> 32); + +529 +t32 +. +sig +[2] = + +. +_mask +.sig[1]; + +531 +t32 +. +sig +[1] = ( + +. +_mask +.sig[0] >> 32); + +532 +t32 +. +sig +[0] = + +. +_mask +.sig[0]; + +535 if! + `acss_ok +( +VERIFY_WRITE +, +32 +, (*oact32)) || + +536 + `__put_ur +( + `r_to_comt +( + +. +_hdr +), & +32 +->sa_handler) || + +537 + `__put_ur +( + `r_to_comt +( + +. +_ܔ +), & +32 +->sa_restorer) || + +538 + `__put_ur +( + +. +_ags +, & +32 +->sa_flags) || + +539 + `__cy_to_ur +(& +32 +-> +_mask +, & +t32 +, ( +comt_sigt_t +))) { + +540 + `eb_sys_ex +(); + +541  - +EFAULT +; + +545 + `eb_sys_ex +(); + +546  +rc +; + +547 + } +} + + @tcp_sendpage.c + +12  + ~ + +13  + ~ + +16 +CI_BUILD_ASSERT +( +CI_SB_AFLAG_O_NONBLOCK + = +MSG_DONTWAIT +); + +19 +ci_le +  + $ndge_cy +( +ci_tif +* +ni +, +ci_t_e +* +ts +,  +ge +*age, + +20  +offt +, +size_t + +size +,  +ags +) + +22  +iovec + +io +; + +23  +msghdr + +m +; + +24  +rc +; + +26 + `CITP_STATS_NETIF +(++ +ni +-> +e +-> +s +. +t_ndges +); + +28 +io +. +iov_ba + = (* + `km +( +ge ++ +offt +; + +29 +io +. +iov_n + = +size +; + +30 +m +. +msg_iov + = & +io +; + +31 +m +. +msg_iovn + = 1; + +32 +m +. +msg_cڌn + = 0; + +33 +m +. +msg_m + = 0; + +35 +rc + = + `ci_t_ndmsg +( +ni +, +ts +, & +m +, + +36 ( +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_O_NONBLOCK +| +ags +, + +37 +CI_ADDR_SPC_KERNEL +); + +39 + `kunm +( +ge +); + +40  +rc +; + +41 + } +} + +44 +ssize_t + + $lux_t_hr_f_ndge +( +fe +* +fp +,  +ge +*age, + +45  +offt +, +size_t + +size +, + +46 +loff_t +* +os +,  +ags +) + +48 +ci_ive_t +* +iv + = +fp +-> +ive_da +; + +49 +t_hr_sour_t +* +s + = + `eb_iv_to_thr +( +iv +); + +50 +ci_sock_cmn +* +s +; + +52 + `OO_DEBUG_VERB +( + `ci_log +("%s: %d:%d offt=%d size=%d fgs=%x", +__FUNCTION__ +, + +53 + `NI_ID +(& +s +-> +tif +), + `OO_SP_FMT +( +iv +-> +sock_id +), +offt +, + +54 ( +size +, +ags +)); + +56 + `ci_as +( +ge +); + +57 + `ci_as_ge +( +offt +, 0); + +58 + `ci_as_gt +( +size +, 0); + +59 + `ci_as_ +( +offt + + +size +, +CI_PAGE_SIZE +); + +61 #ide +MSG_SENDPAGE_NOTLAST + + +63 if +ags + ) + +64 +ags + = +MSG_MORE +; + +70 if +offt + + +size + < +CI_PAGE_SIZE + && +ags + ) + +71 +ags + = 0; + +74 +s + = + `SP_TO_SOCK +(& +s +-> +tif +, +iv +-> +sock_id +); + +75 if( + `CI_LIKELY + +s +-> +b +. +e + & +CI_TCP_STATE_TCP_CONN + )) + +76  + `ndge_cy +(& +s +-> +tif +, + `SOCK_TO_TCP +( +s +), +ge +, +offt +, +size +, +ags +); + +80  - +s +-> +tx_o +; + +81 + } +} + +83 +ssize_t + + $lux_t_hr_f_ndge_udp +( +fe +* +fp +, + +84  +ge +*age, + +85  +offt +, +size_t + +size +, + +86 +loff_t +* +os +,  +ags +) + +88 +ci_ive_t +* +iv + = +fp +-> +ive_da +; + +89 +t_hr_sour_t +* +s + = + `eb_iv_to_thr +( +iv +); + +90 +t_hr_dpot_t +* + + = + `ci_s_g_vid_ +( +s +, +iv +-> +sock_id +); + +92  + +-> +os_sock +-> +fe +-> +f_ +-> + `ndge +(ep->os_socket->file, + +93 +ge +, +offt +, +size +, +os +, +ags +); + +94 + } +} + + @terminate.c + +14  + ~ + +16  + ~"ld_kl_comt.h +" + +18  + ~ + +19  + ~ + +20  + ~ + +21  + ~ + +23 #ifde +OO_CAN_HANDLE_TERMINATION + + +27  + #TERMINATE_STACKS_NUM + 64 + + ) + +30  + #TERM_DEBUG +( +x +... + `ci_log +(x) + + ) + +32  + #TERM_DEBUG +( +x +...()0 + + ) + +38  +le +  + $eb_sigl_wake_up +( +sk_ru +* +t +) + +40 + `DECLARE_WAITQUEUE +( +wq +, +NULL +); + +42 + `t_tsk_thad_ag +( +t +, +TIF_SIGPENDING +); + +48 +wq +. +ive + = +t +; + +49 #i +LINUX_VERSION_CODE + > + `KERNEL_VERSION +(2,6,30) + +50 if! + `deu_wake_funi +(& +wq +, +TASK_WAKEKILL + | +TASK_INTERRUPTIBLE +, 0, +NULL +) ) + +51 + `kick_oss +( +t +); + +53 #ide +TASK_WAKEKILL + + +54  + #TASK_WAKEKILL + ( +TASK_STOPPED + | +TASK_TRACED +) + + ) + +56 + `deu_wake_funi +(& +wq +, +TASK_WAKEKILL + | +TASK_INTERRUPTIBLE +, 0, +NULL +); + +58 + } +} + +65  + $eb_z_h_thads +( +sk_ru + * +p +) + +67  +sk_ru + * +t +; + +69 +p +-> +sigl +-> +group__cou + = 0; + +70 #i +LINUX_VERSION_CODE + < + `KERNEL_VERSION +(2,6,24) + +71 #i +LINUX_VERSION_CODE + > + `KERNEL_VERSION +(2,6,10) + +72 +p +-> +sigl +-> +ags + = +SIGNAL_GROUP_EXIT +; + +76 #i +LINUX_VERSION_CODE + < + `KERNEL_VERSION +(2,6,22) + +77 if + `thad_group_emy +( +p +) ) + +81  +t + = + `xt_thad +( +p +); !=; =ext_thread(t)) { + +85 i( +t +-> +ex_e +) + +88 #i +LINUX_VERSION_CODE + < + `KERNEL_VERSION +(2,6,20) + +89 i( +t + ! +p +-> +group_ad +) + +90 +t +-> +ex_sigl + = -1; + +93 + `sigaddt +(& +t +-> +ndg +. +sigl +, +SIGKILL +); + +94 #i +LINUX_VERSION_CODE + < + `KERNEL_VERSION +(2,6,14) + +95 + `rm_om_queue +( +SIG_KERNEL_STOP_MASK +, & +t +-> +ndg +); + +97 + `eb_sigl_wake_up +( +t +); + +99 + } +} + +101 (* +eb_my_z_h_thads +)( +sk_ru + * +p +); + +107 + $eb_rme_fd_l_acks +( +t_hr_sour_t + * +acks +[], + +108  +max_acks_num +) + +110  +fes_ru +* +fes +; + +111  +fdb +* +fdt +; + +112 +ci_ut32 + +acks_num + = 0; + +113  +i +, +j + = 0; + +116 i( + `thad_group_emy +( +cut +)) + +119 + `ci_as +( +max_acks_num +); + +120 + `TERM_DEBUG + ("%s:id %d", +__func__ +, +cut +-> +pid +); + +122 +fes + = +cut +->files; + +123 + `_lock +(& +fes +-> +fe_lock +); + +124 +fdt + = + `fes_fdb +( +fes +); + +127  +t +; + +129 +i + = +j + * +__NFDBITS +; + +130 if +i + > +fdt +-> +max_fds + ) + +131  +uock +; + +133 +t + = + `efx_g_ݒ_fds +( +j +++, +fdt +); + +135  +t + ) { + +136 if +t + & 1 ) { + +137  +fe + * f +fdt +-> +fd +[ +i +]; + +139 if +fe + && fe-> +f_ + =& +oo_fs + ) { + +141 +t_hr_sour_t + * +thr +; + +143 + `ci_as +( +fe +-> +ive_da +); + +144 +thr + = (( +ci_ive_t +* ) +fe +-> +ive_da +)->thr; + +146 if +thr + ! +NULL + ) { + +147 if +acks_num + = +max_acks_num + ) { + +148 + `OO_DEBUG_ERR +( + `ci_log +("%s: sck cou ovow", +__FUNCTION__ +)); + +149  +uock +; + +155 + `eb_thr_f +( +thr +); + +156 +acks +[ +acks_num +++] = +thr +; + +160 +i +++; + +161 +t + >>= 1; + +165 +uock +: + +166 + `_uock +(& +fes +-> +fe_lock +); + +168 + `TERM_DEBUG + ("%s:id %d od sck%d", +__func__ +, +cut +-> +pid +, + +169 +acks_num +); + +170  +acks_num +; + +171 + } +} + +175 + $eb_rme_lock_l_acks +( +t_hr_sour_t + * +acks +[], + +176  +acks_num +) + +178  +i +, +s + = 0, +found_locked +; + +179 +ci_ut64 + +g_lock + = 0; + +180  + `DEFINE_MUTEX +( +ex_tifs_lock +); + +182 + `TERM_DEBUG +("%s:id=%d, scks_num=%d, scks[0]=%d", +__func__ +, + +183 +cut +-> +pid +, +acks_num +, +acks +[0]-> +id +); + +186 if +acks_num + == 1 ) { + +187 +t_hr_sour_t +* +thr + = +acks +[0]; + +188 if + `eb_lock_lock_timeout +(& +thr +-> +tif +, + `mcs_to_jiffs +(500)) + +190 + `OO_DEBUG_ERR +( + `ci_log +("Pid %d failedoerminate stack %droperly", + +191 +cut +-> +pid +, +thr +-> +id +)); + +192 + `eb_thr_a +( +thr +); + +193 +acks +[0] = +NULL +; + +195 + `ci_as +( + `ci_tif_is_locked +(& +thr +-> +tif +)); + +203  + #MAX_ADD_TRIES + 10 + + ) + +205 + `ci_as_ge +(( +g_lock +* 8, +acks_num +); + +210 + `TERM_DEBUG +("%s: %d gx_tifs_lock", +__FUNCTION__ +, +cut +-> +pid +); + +211 + `mux_lock +(& +ex_tifs_lock +); + +212 + `TERM_DEBUG +("%s: %d gكx_tifs_lock", +__FUNCTION__ +, +cut +-> +pid +); + +214 +found_locked + = 0; + +216 + `TERM_DEBUG +("%s: %d g_lock=%x", +__FUNCTION__ +, +cut +-> +pid +, +g_lock +); + +217  +i + = 0; i < +acks_num +; i++ ) { + +219 +t_hr_sour_t +* +thr + = +acks +[ +i +]; + +220  +rc +; + +222 if +g_lock + & (( +ci_ut64 +)1 << +i +) ) + +225 ++ +s +; + +226 + `TERM_DEBUG +("%s: %drylock sck %d,rs=%d", +__FUNCTION__ +, + +227 +cut +-> +pid +, +thr +-> +id +, +s +); + +228 +rc + = + `eb_lock_lock_timeout +(& +thr +-> +tif +, + `mcs_to_jiffs +(50)); + +229 if +rc + != 0 ) { + +230 + `OO_DEBUG_ERR +( + `ci_log +("%s:id %d failedo getetifock " + +231 "f sck %d (y %d/%d)", +__FUNCTION__ +, + +232 +cut +-> +pid +, +thr +-> +id +, +s +, + +233 +MAX_ADD_TRIES + + +acks_num +)); + +234 +found_locked + = 1; + +235 if +s + > +MAX_ADD_TRIES + + +acks_num + ) { + +236 + `OO_DEBUG_ERR +( + `ci_log +("Pid %d failedoerminate stack %droperly", + +237 +cut +-> +pid +, +thr +-> +id +)); + +238 + `eb_thr_a +( +thr +); + +239 +acks +[ +i +] = +NULL +; + +243 + `ci_as +( + `ci_tif_is_locked +(& +thr +-> +tif +)); + +244 +g_lock + |( +ci_ut64 +)1 << +i +; + +245 + `TERM_DEBUG +("%s: %dock sck %d", +__FUNCTION__ +, +cut +-> +pid +, +thr +-> +id +); + +248 }  +found_locked + && +s + < +MAX_ADD_TRIES + + +acks_num + ); + +249 + `TERM_DEBUG +("%s: %d scklocked", +__FUNCTION__ +, +cut +-> +pid +); + +250 + `mux_uock +(& +ex_tifs_lock +); + +251 + `TERM_DEBUG +("%s: %dx_tifs_lockd", +__FUNCTION__ +, +cut +-> +pid +); + +252 + } +} + +256 + $eb_rme_uock_l_acks +( +t_hr_sour_t + * +acks +[], + +257  +acks_num +) + +259  +i +; + +261  +i + = 0; i < +acks_num +; i++ ) { + +262 if +acks +[ +i +] = +NULL + ) + +264 + `ci_tif_uock +(& +acks +[ +i +]-> +tif +); + +265 + `TERM_DEBUG +("%s: %d uock sck %d", +__func__ +, +cut +-> +pid +, +acks +[ +i +]-> +id +); + +266 + `eb_thr_a +( +acks +[ +i +]); + +268 + } +} + +272  + $eb_ex_group +(* +us_p +) + +274  +sighd_ru + *cڡ +sighd + = +cut +->sighand; + +275  +sigl_ru + * +sig + = +cut +-> +sigl +; + +276  +sk_ru + * +tsk +; + +277  +s +, +found +; + +279 if( +sig +-> +ags + & +SIGNAL_GROUP_EXIT +|| (sig-> +group_ex_sk + ! +NULL +) ) + +280 * +us_p + = +sig +-> +group_ex_code +; + +282 #i +LINUX_VERSION_CODE + < + `KERNEL_VERSION +(2,6,17) + +283  + #TASKLIST_IS_NON_RCU + + + ) + +285 #ifde +TASKLIST_IS_NON_RCU + + +286 + `ad_lock +(& +skli_lock +); + +288 + `_lock_q +(& +sighd +-> +siglock +); + +290 if( +sig +-> +ags + & +SIGNAL_GROUP_EXIT +|| (sig-> +group_ex_sk + ! +NULL +) ) { + +292 * +us_p + = +sig +-> +group_ex_code +; + +295 +sig +-> +group_ex_code + = * +us_p +; + +296 +sig +-> +ags + = +SIGNAL_GROUP_EXIT +; + +297 + `eb_my_z_h_thads +( +cut +); + +300 + `_uock_q +(& +sighd +-> +siglock +); + +301 #ifde +TASKLIST_IS_NON_RCU + + +302 + `ad_uock +(& +skli_lock +); + +307 +s + = 0; + +309 +found + = 0; + +311 +tsk + = +cut +; + +312 #ifde +TASKLIST_IS_NON_RCU + + +313 + `ad_lock +(& +skli_lock +); + +315 + `whe_ch_thad +( +cut +, +tsk +) { + +316 if +tsk +-> +ex_code + == 0 ) { + +317 +found + = 1; + +321 #ifde +TASKLIST_IS_NON_RCU + + +322 + `ad_uock +(& +skli_lock +); + +328 if +found + ) + +329 + `schedu_timeout_unuib +(1); + +331 +s +++; + +332 }  +found + && +s + < +HZ +/2); + +333 + `TERM_DEBUG +("found=%drs=%d", +found +, +s +); + +335 + } +} + +338 +asmlkage +  + +339 + $eb_lux_ampޚe_ex_group +( +us +) + +341 +t_hr_sour_t + * +acks +[ +TERMINATE_STACKS_NUM +]; + +342 +ci_ut32 + +acks_num + = 0; + +344 + `eb_sys_r +(); + +346 + `BUILD_BUG_ON +(( +ci_ut64 +* 8 < +TERMINATE_STACKS_NUM +); + +347 +acks_num + = + `eb_rme_fd_l_acks +( +acks +, +TERMINATE_STACKS_NUM +); + +350 if +acks_num + ) { + +352 + `eb_rme_lock_l_acks +( +acks +, +acks_num +); + +355 +us + = (status & 0xff) << 8; + +356 + `eb_ex_group +(& +us +); + +358 + `eb_rme_uock_l_acks +( +acks +, +acks_num +); + +361 + `eb_sys_ex +(); + +362 + `do_ex +( +us +); + +368 + `eb_sys_ex +(); + +370  + `eb_lux_sys_ex_group +( +us +); + +372 + } +} + +376 + $eb_sigl_d +( +ci_ive_t + * +iv_unud +, * +g +) + +378 +ci_t32 + +sig + = *(ci_t32 *) +g +; + +379 +t_hr_sour_t + * +acks +[ +TERMINATE_STACKS_NUM +]; + +380 +ci_ut32 + +acks_num + = 0; + +382 if + `sig_kl_ly +( +sig +|| + `sig_kl_igne +(sig) || + +383 + `sig_kl_ +( +sig +|| + `sig_kl_cedump +(sig) ) + +384  - +EINVAL +; + +386 + `BUILD_BUG_ON +(( +ci_ut64 +* 8 < +TERMINATE_STACKS_NUM +); + +387 +acks_num + = + `eb_rme_fd_l_acks +( +acks +, +TERMINATE_STACKS_NUM +); + +389 if +acks_num + ) { + +390  +us + = +sig +; + +393 + `eb_rme_lock_l_acks +( +acks +, +acks_num +); + +395 + `eb_ex_group +(& +us +); + +397 + `eb_rme_uock_l_acks +( +acks +, +acks_num +); + +402 + `_lock_q +(& +cut +-> +sighd +-> +siglock +); + +403 +cut +-> +sighd +-> +ai +[ +sig +-1]. + +. +_hdr + = +SIG_DFL +; + +404 + `_uock_q +(& +cut +-> +sighd +-> +siglock +); + +406 + `nd_sig +( +sig +, +cut +, 0); + +409 + } +} + +412  + $eb_lux_rmi_ +() + +414 #ifde +EFRM_HAS_FIND_KSYM + + +415 +eb_my_z_h_thads + = + `em_fd_ksym +("zap_other_threads"); + +416 + `TERM_DEBUG +("Fd z_h_thadv klsym %p", +t +. +addr +); + +418 if +eb_my_z_h_thads + = +NULL + ) + +421 +eb_my_z_h_thads + = +eb_z_h_thads +; + +422 + `TERM_DEBUG +("Using our zap_other_threads implementation"); + +425 + } +} + +430 + $eb_sigl_d +( +ci_ive_t + * +iv_unud +, * +g +) + +433 + } +} + + @x86_linux_trampoline.c + +35  + ~ + +36  + ~ + +37  + ~ + +38  + ~ + +39  + ~ + +47 #ifde +__x86_64__ + + +48  + ~ + +51 #i +LINUX_VERSION_CODE + < +KERNEL_VERSION +(2,6,30) + +52  + #OLD_RSP_PROVIDED + 1 + + ) + +53  + ~ + +55  + #OLD_RSP_PROVIDED + 0 + + ) + +56  + ~ + +57 +DECLARE_PER_CPU +(, +kl_ack +); + +65 #i +LINUX_VERSION_CODE + < +KERNEL_VERSION +(2,6,32) + +66  + #ru_ad_om_p +( +por + + `ru_om_ +("mov", *por) + + ) + +67  + #ru_wre_to_p +( +por +, +v +) \ + +68 + `ru_to_ +("mov", * +por +, +v +) + + ) + +70  + #ru_ad_om_p +( +por +) ({ \ + +71 + `tyof +(* +por + +__tmp_v__ +; \ + +72 + `m_dib +(); \ + +73 +__tmp_v__ + = (* + `SHIFT_PERCPU_PTR +( +por +, +my_u_offt +)); \ + +74 + `m_ab +(); \ + +75 +__tmp_v__ +; \ + +76 }) + + ) + +77  + #ru_wre_to_p +( +por +, +v +) ({ \ + +78 + `m_dib +(); \ + +79 (* + `SHIFT_PERCPU_PTR +( +por +, +my_u_offt +) +v +; \ + +80 + `m_ab +(); \ + +81 }) + + ) + +83 #i +LINUX_VERSION_CODE + < +KERNEL_VERSION +(2,6,34) + +84  + #ru_p +( +me +(&( +r_u__ + ##ame)) + + ) + +86  + #ru_p +( +me +(&me) + + ) + +91 #ifde +CONFIG_COMPAT + + +92  + ~ + +99  + #__NR_32_o + 6 + + ) + +100  + #__NR_32_ex_group + 252 + + ) + +101  + #__NR_32__sigai + 174 + + ) + +105  + #cs +( +r +)-> +cs + + + ) + +106  + #ds +( +r +)-> +ds + + + ) + +107  + #es +( +r +)-> +es + + + ) + +108  + #ss +( +r +)-> +ss + + + ) + +109 #i +LINUX_VERSION_CODE + < +KERNEL_VERSION +(2,6,25) + +110  + # +( +r +)-> +r + + + ) + +111  + #di +( +r +)-> +rdi + + + ) + +112  + #si +( +r +)-> +rsi + + + ) + +113  + # +( +r +)-> +r + + + ) + +114  + #bp +( +r +)-> +rbp + + + ) + +115  + #ax +( +r +)-> +x + + + ) + +116  + #bx +( +r +)-> +rbx + + + ) + +117  + #cx +( +r +)-> +rcx + + + ) + +118  + #dx +( +r +)-> +rdx + + + ) + +119  + #ig_ax +( +r +)-> +ig_x + + + ) + +120  + #ags +( +r +)-> +eags + + + ) + +121  + #0 +( +t +)-> +r0 + + + ) + +123  + # +( +r +)-> + + + + ) + +124  + #di +( +r +)-> +di + + + ) + +125  + #si +( +r +)-> +si + + + ) + +126  + # +( +r +)-> + + + + ) + +127  + #bp +( +r +)-> +bp + + + ) + +128  + #ax +( +r +)-> +ax + + + ) + +129  + #bx +( +r +)-> +bx + + + ) + +130  + #cx +( +r +)-> +cx + + + ) + +131  + #dx +( +r +)-> +dx + + + ) + +132  + #ig_ax +( +r +)-> +ig_ax + + + ) + +133  + #ags +( +r +)-> +ags + + + ) + +134  + #0 +( +t +)-> +0 + + + ) + +138 #i +defed +( +__i386__ +) + +139 #i +LINUX_VERSION_CODE + < +KERNEL_VERSION +(2,6,25) + +140  + #bx +( +r +)-> +ebx + + + ) + +141  + #cx +( +r +)-> +ecx + + + ) + +142  + #dx +( +r +)-> +edx + + + ) + +143  + #si +( +r +)-> +esi + + + ) + +144  + #di +( +r +)-> +edi + + + ) + +145  + #bp +( +r +)-> +ebp + + + ) + +146  + #ax +( +r +)-> +x + + + ) + +147  + #ds +( +r +)-> +xds + + + ) + +148  + #es +( +r +)-> +xes + + + ) + +149  + #ig_ax +( +r +)-> +ig_x + + + ) + +150  + # +( +r +)-> +e + + + ) + +151  + #cs +( +r +)-> +xcs + + + ) + +152  + #ags +( +r +)-> +eags + + + ) + +153  + # +( +r +)-> +e + + + ) + +154  + #ss +( +r +)-> +xss + + + ) + +155  + #0 +( +t +)-> +e0 + + + ) + +157  + #bx +( +r +)-> +bx + + + ) + +158  + #cx +( +r +)-> +cx + + + ) + +159  + #dx +( +r +)-> +dx + + + ) + +160  + #si +( +r +)-> +si + + + ) + +161  + #di +( +r +)-> +di + + + ) + +162  + #bp +( +r +)-> +bp + + + ) + +163  + #ax +( +r +)-> +ax + + + ) + +164  + #ds +( +r +)-> +ds + + + ) + +165  + #es +( +r +)-> +es + + + ) + +166  + #ig_ax +( +r +)-> +ig_ax + + + ) + +167  + # +( +r +)-> + + + + ) + +168  + #cs +( +r +)-> +cs + + + ) + +169  + #ags +( +r +)-> +ags + + + ) + +170  + # +( +r +)-> + + + + ) + +171  + #ss +( +r +)-> +ss + + + ) + +172  + #0 +( +t +)-> +0 + + + ) + +186 #ifde +__x86_64__ + + +187 #i +LINUX_VERSION_CODE + = +KERNEL_VERSION +(2, 6, 18) + +188  + #NEED_SYSCALL_MAPPING_HACK +((( + `__ +( +loc +>> +PAGE_SHIFT +> +d_p +) + + ) + +190  + #NEED_SYSCALL_MAPPING_HACK +(0 + + ) + +202  + #TRAMP_DEBUG +( +x +...()0 + + ) + +224 ** + gsys_b + = 0; + +226 #ifde +CONFIG_COMPAT + + +230 ** + g32_sys_b + = 0; + +237  +asmlkage + (* +ved_sys_o +)(); + +238  +asmlkage + (* +ved_sys_ex_group +)(); + +239  +asmlkage + (* +ved_sys__sigai +)(, cڡ  +sigai + *, + +240  +sigai + *, +size_t +); + +241 #ifde +CONFIG_COMPAT + + +242  +asmlkage + (* +ved_sys__sigai32 +)(, + +243 cڡ  +sigai32 + *, + +244  +sigai32 + *, + +249 +omic_t + +eb_sys_ud +; + +254 #i + `defed +( +CONFIG_X86_XEN +) + +256 ** + $fd_sys_b +() + +259  +NULL +; + +260 + } +} + +261 #i +defed +( +__i386__ +) + +267 ** + $fd_sys_b +() + +269 * +idtba +; + +270 * +p +, * +d +, +idt +[6]; + +271 ** +su + = +NULL +; + +273 + `__asm__ +("sid%0" : "=m"( +idt +)); + +274 +idtba + = (*)( +idt +[2] | (idt[3] << 8) | (idt[4] << 16) + +275 | ( +idt +[5] << 24)); + +276 + `TRAMP_DEBUG +("idba=%p,ry 0x80=%08lx,%08lx", +idtba +, + +277 +idtba +[0x80*2], idtbase[0x80*2+1]); + +278 +p + = (*)(( +idtba +[0x80*2] & 0xffff) + +279 | ( +idtba +[0x80*2+1] & 0xffff0000)); + +280 + `TRAMP_DEBUG +("0x80ryo %p", +p +); + +281 +d + = +p + + 1024 - 7; + +282  +p + < +d +) { + +283 i(( +p +[0] == 0xff) && (p[1] == 0x14) && (p[2] == 0x85)) { + +284 +su + = *(***)( +p + + 3); + +285 + `TRAMP_DEBUG +("sys΁abˇ%p", +su +); + +286  +su +; + +288 +p +++; + +291 + `TRAMP_DEBUG +("didn't find syscallableddress"); + +292  +su +; + +293 + } +} + +295 #i +defed +( +__x86_64__ +) + +301 ** + $fd_sys_b +() + +303  +su + = 0; + +304 * +p +, * +nd +; + +306 + `rdml +( +MSR_LSTAR +, +su +); + +307 + `TRAMP_DEBUG +("m_l=%lx", +su +); + +308 +p + = (*) +su +; + +309 +nd + = +p + + 1024 - 7; + +310  +p + < +nd +) { + +311 i(( +p +[0] == 0xff) && (p[1] == 0x14) && (p[2] == 0xc5)) { + +312 +su + &= ~ 0xffffffffUL; + +313 +su + |( +p +[3] | (p[4] << 8) | (p[5] << 16) | (p[6] << 24)); + +314 + `TRAMP_DEBUG +("sys΁abˇ%lx", +su +); + +315  (**) +su +; + +317 +p +++; + +319 + `TRAMP_DEBUG +("didn't find syscallableddress"); + +320  +NULL +; + +321 + } +} + +323 #ifde +CONFIG_COMPAT + + +329 ** + $fd_32_sys_b +() + +331  +su + = 0; + +332 * +p +, * +nd +; + +333 * +idtba +; + +334  +idt +[10]; + +336 + `__asm__ +("sid%0" : "=m"( +idt +)); + +337 +idtba + = *(**)(& +idt +[2]); + +338 + `TRAMP_DEBUG +("idba=%p,ry 0x80=%08x,%08x,%08x", +idtba +, + +339 +idtba +[0x80*4], idtbase[0x80*4+1], idtbase[0x80*4+2]); + +340 +su + = ( +idtba +[0x80*4] & 0xffff) | (idtbase[0x80*4+1] & 0xffff0000) + +341 | (() +idtba +[0x80*4+2] << 32); + +342 +p + = (*) +su +; + +343 + `TRAMP_DEBUG +("0x80ryo %p", +p +); + +344 +nd + = +p + + 1024 - 7; + +345  +p + < +nd +) { + +346 i(( +p +[0] == 0xff) && (p[1] == 0x14) && (p[2] == 0xc5)) { + +347 +su + &= ~ 0xffffffffUL; + +348 +su + |( +p +[3] | (p[4] << 8) | (p[5] << 16) | (p[6] << 24)); + +349 + `TRAMP_DEBUG +("32_sys΁abˇ%lx", +su +); + +350  (**) +su +; + +352 +p +++; + +354 + `TRAMP_DEBUG +("didn't find ia32_syscallableddress"); + +355  +NULL +; + +356 + } +} + +359 #i +defed +( +__64__ +) + +363 +asmlkage +  +eb_lux_ampޚe_o +( +__ibu__ +(( +unud +)) unused) + +365 +TRAMP_DEBUG + ("ia64fab_linux_trampoline_close() called"); + +369 ** + $fd_sys_b +() + +371  +NULL +; + +372 + } +} + +381 +asmlkage +  + $eb_lux_sys_o +( +fd +) + +383  +rc +; + +385 if +ved_sys_o + = +NULL + ) { + +386 + `ci_log +("Unexpected close()equest before full init"); + +387  - +EFAULT +; + +390 + `TRAMP_DEBUG + ("o %d v saved_sys_o=%p...", +fd +, +ved_sys_o +); + +391 +rc + = ( +ved_sys_o +( +fd +); + +392 + `TRAMP_DEBUG + ("... = %d", +rc +); + +393  +rc +; + +394 + } +} + +397 +asmlkage +  + $eb_lux_sys_ex_group +( +us +) + +399 if +ved_sys_ex_group + = +NULL + ) { + +400 + `ci_log +("Unexpectedxit_group()equest before full init"); + +401  - +EFAULT +; + +403  + `ved_sys_ex_group +( +us +); + +404 + } +} + +406 #i +CI_CFG_USERSPACE_EPOLL + + +407 +asmlkage +  + $eb_lux_sys_l_1 +( +ags +) + +409 +asmlkage + (* +sys_l__ +)(); + +410  +rc +; + +412 if +sys_b + = +NULL + ) { + +413 + `ci_log +("Unexpectedpoll_ctl()equest before full init"); + +414  - +EFAULT +; + +417 #ifde +__NR_l_1 + + +418 +sys_l__ + = +sys_b +[ +__NR_l_1 +]; + +419 + `TRAMP_DEBUG + ("l_1(%dv %p...", +ags +, +sys_l_ +); + +420 +rc + = + `sys_l__ +( +ags +); + +421 if +rc + !- +ENOSYS + ) + +422  +out +; + +425 +sys_l__ + = +sys_b +[ +__NR_l_ +]; + +426 + `TRAMP_DEBUG + ("l_ v %p...", +sys_l_ +); + +427 +rc + = + `sys_l__ +(1); + +428 + `ci_as_equ +( +ags + & ~ +EPOLL_CLOEXEC +, 0); + +429 if +rc + >0 && +ags + & +EPOLL_CLOEXEC + ) { + +430  +fes_ru + * +fes + = +cut +->files; + +431  +fdb + * +fdt +; + +432 + `_lock +(& +fes +-> +fe_lock +); + +433 +fdt + = + `fes_fdb +( +fes +); + +434 + `efx_t_o__exec +( +rc +, +fdt +); + +435 + `_uock +(& +fes +-> +fe_lock +); + +438 #ifde +__NR_l_1 + + +439 +out +: + +441 + `TRAMP_DEBUG + ("... = %d", +rc +); + +442  +rc +; + +443 + } +} + +444 +asmlkage +  + $eb_lux_sys_l_l +( +fd +,  + +,  +fd +, + +445  +l_evt + * +evt +) + +447 +asmlkage + (* +sys_l_l_ +)(, , ,  +l_evt + *); + +448  +rc +; + +450 if +sys_b + = +NULL + ) { + +451 + `ci_log +("Unexpectedpoll_ctl()equest before full init"); + +452  - +EFAULT +; + +455 +sys_l_l_ + = +sys_b +[ +__NR_l_l +]; + +456 + `TRAMP_DEBUG + ("l_l(%d,%d,%d,%pv %p...", +fd +, + +, +fd +, +evt +, + +457 +sys_l_l_ +); + +458 +rc + = + `sys_l_l_ +( +fd +, + +, +fd +, +evt +); + +459 + `TRAMP_DEBUG + ("... = %d", +rc +); + +460  +rc +; + +461 + } +} + +462 +asmlkage +  + $eb_lux_sys_l_wa +( +fd +,  +l_evt + * +evts +, + +463  +maxevts +,  +timeout +) + +465 +asmlkage + (* +sys_l_wa_ +)(,  +l_evt + *, , ); + +466  +rc +; + +468 if +sys_b + = +NULL + ) { + +469 + `ci_log +("Unexpectedpoll_wait()equest before full init"); + +470  - +EFAULT +; + +473 +sys_l_wa_ + = +sys_b +[ +__NR_l_wa +]; + +474 + `TRAMP_DEBUG + ("l_wa(%d,%p,%d,%dv %p...", +fd +, +evts +, +maxevts +, + +475 +timeout +, +sys_l_wa_ +); + +476 +rc + = + `sys_l_wa_ +( +fd +, +evts +, +maxevts +, +timeout +); + +477 + `TRAMP_DEBUG + ("... = %d", +rc +); + +478  +rc +; + +479 + } +} + +483 +asmlkage +  + $eb_lux_sys_ndmsg +( +fd +,  +msghdr + +__ur +* +msg +, + +484  +__ur +* +sock_gs +, + +485  +ags +) + +487  +rc +; + +489 if +sys_b + = +NULL + ) { + +490 + `ci_log +("Unexpected sendmsg()equest before full init"); + +491  - +EFAULT +; + +495 #ifde +__NR_ndmsg + + +496 +asmlkage + (* +sys_ndmsg_ +)(,  +msghdr + *, ); + +498 +sys_ndmsg_ + = +sys_b +[ +__NR_ndmsg +]; + +499 + `TRAMP_DEBUG + ("ndmsg(%d,%p,%dv %p...", +fd +, +msg +, +ags +, +sys_ndmsg_ +); + +500 +rc + = + `sys_ndmsg_ +( +fd +, +msg +, +ags +); + +501 #i + `defed +( +__NR_sock +) + +502 +asmlkage + (* +sys_sock_ +)(, *); + +503  +gs +[3]; + +505 +sys_sock_ + = +sys_b +[ +__NR_sock +]; + +506 + `TRAMP_DEBUG + ("ndmsg(%d,%p,%dv %p...", +fd +, +msg +, + +507 +ags +, +sys_sock_ +); + +508 + `memt +( +gs +, 0, (args)); + +509 +gs +[0] = () +fd +; + +510 +gs +[1] = () +msg +; + +511 +gs +[2] = () +ags +; + +512 +rc + = - +EFAULT +; + +513 i( + `cy_to_ur +( +sock_gs +, +gs +, (args)) == 0) + +514 +rc + = ( +sys_sock_ +( +SYS_SENDMSG +, +sock_gs +); + +520 + `TRAMP_DEBUG + ("... = %d", +rc +); + +521  +rc +; + +522 + } +} + +524 #ifde +CONFIG_COMPAT + + +525 +asmlkage +  + +526 + $eb_lux_sys_ndmsg32 +( +fd +,  +comt_msghdr + +__ur +* +msg +, + +527  +__ur +* +sock_gs +, + +528  +ags +) + +530  +rc +; + +532 if +sys_b + = +NULL + ) { + +533 + `ci_log +("Unexpected sendmsg()equest before full init"); + +534  - +EFAULT +; + +538 +asmlkage + (* +sys_sock_ +)(, *); + +539 +comt_ulg_t + +gs +[3]; + +541 +sys_sock_ + = +32_sys_b +[102 ]; + +542 + `TRAMP_DEBUG + ("ndmsg(%d,%p,%dv %p...", +fd +, +msg +, + +543 +ags +, +sys_sock_ +); + +544 + `memt +( +gs +, 0, (args)); + +545 +gs +[0] = () +fd +; + +546 +gs +[1] = () +msg +; + +547 +gs +[2] = () +ags +; + +548 +rc + = - +EFAULT +; + +549 i( + `cy_to_ur +( +sock_gs +, +gs +, (args)) == 0) + +550 +rc + = ( +sys_sock_ +( +SYS_SENDMSG +, +sock_gs +); + +553 + `TRAMP_DEBUG + ("... = %d", +rc +); + +554  +rc +; + +555 + } +} + +558 +asmlkage +  + $eb_lux_sys_sigai +( +signum +, + +559 cڡ  +sigai + * +a +, + +560  +sigai + * + +) + +562  +rc +; + +564 if +ved_sys__sigai + = +NULL + ) { + +565 + `ci_log +("Unexpectedt_sigaction()equest before full init"); + +566  - +EFAULT +; + +569 + `TRAMP_DEBUG + ("sigai(%d,%p,%p,%dv %p...", +signum +, +a +, + +, + +570 ( +sigt_t +), +ved_sys__sigai +); + +571 +rc + = + `ved_sys__sigai +( +signum +, +a +, + +, ( +sigt_t +)); + +572 + `TRAMP_DEBUG + ("... = %d", +rc +); + +573  +rc +; + +574 + } +} + +575 #ifde +CONFIG_COMPAT + + +576 +asmlkage +  + $eb_lux_sys_sigai32 +( +signum +, + +577 cڡ  +sigai32 + * +a +, + +578  +sigai32 + * + +) + +580  +rc +; + +582 if +ved_sys__sigai32 + = +NULL + ) { + +583 + `ci_log +("Unexpectedt_sigaction32()equest before full init"); + +584  - +EFAULT +; + +587 + `TRAMP_DEBUG + ("sigai32(%d,%p,%p,%dv %p...", +signum +, +a +, + +, + +588 ( +sigt_t +), +ved_sys__sigai +); + +589 +rc + = + `ved_sys__sigai32 +( +signum +, +a +, + +, ( +sigt_t +)); + +590 + `TRAMP_DEBUG + ("... = %d", +rc +); + +591  +rc +; + +592 + } +} + +596 #i +defed +( +__x86_64__ +&& ! +OLD_RSP_PROVIDED + + +599 +ci_le + * + $g_dr_addr +() + +601 * +dr_addr + = +NULL +; + +602 i( +dr_addr +) + +603  +dr_addr +; + +621  +su +; + +622 #ide +NDEBUG + + +623 * +r +; + +625 * +p +; + +626  +kl_ack_p + = () + `ru_p +( +kl_ack +); + +627 * +p_d +; + +629 + `rdml +( +MSR_LSTAR +, +su +); + +630 +p + = (*) +su +; + +631 #ide +NDEBUG + + +632 +r + = +p +; + +633  + #OOPS +( +msg +) { \ + +634  +i +; \ + +635 + `ci_log +( +msg +); \ + +636  +i + = 0; i < 10; i++) { \ + +637 + `ci_log +("syem_ + %d*4: %02x %02x %02x %02x", +i +, \ + +638 +r +[ +i + * 4],tr[i * 4 + 1],tr[i * 4 + 2],tr[i * 4 + 3]); \ + +640 + `ci_as +(0); \ + +641 } + + ) + +643  + #OOPS +( +msg +{ + `ci_log +(msg);  +NULL +;} + + ) + +645 i( +p +[0] != 0x0f ||[1] != 0x01 ||[2] != 0xf8) { + +646 + `OOPS +("Unexpected codethe beginning of system_call(), " + +649 +p + += 3; + +650 +p_d + = +p + + 32; + +651  +p +[0] != 0x65 ||[1] != 0x48 ||[2] != 0x89 || + +652 +p +[3] != 0x24 ||[4] != 0x25) { + +653 +p +++; + +654 i( +p + > +p_d +) { + +655 + `OOPS +("Unexpected code in system_call(), can'trampoline.\n" + +659 +p + += 5; + +660 +su + = +p +[0] + (p[1] << 8); + +661 +p + +=2; + +662 * +p + == 0) + +663 +p +++; + +664 i( +p +[0] != 0x65 ||[1] != 0x48 ||[2] != 0x8b || + +665 +p +[3] != 0x24 ||[4] != 0x25 || + +666 +p +[5] !( +kl_ack_p + & 0xff) ||[6] != (kernel_stack_p >> 8)) { + +667 + `OOPS +("Unexpected code in system_call(), can'trampoline.\n" + +670 + `TRAMP_DEBUG +("&r_u__d_r=%08lx", +su +); + +672 #unde +OOPS + + +674 +dr_addr + = (*) +su +; + +676  +dr_addr +; + +677 + } +} + +688 +ci_le +  + +689 + $avoid_sy +() + +691 + `t_thad_ag + ( +TIF_NEED_RESCHED +); + +692 + } +} + +705 + $tup_ampޚe + ( +_gs + * +gs +,  +code +,  +da +) { + +706  +mm_hash + * +p +; + +707 +ci_u_t + +ampޚe_y + = 0; + +708 +ci_u_t + +ampޚe_exude + = 0; + +709  +rc +; + +711 + `ad_lock + (& +oo_mm_tbl_lock +); + +712 +p + = + `oo_mm_tbl_lookup +( +cut +-> +mm +); + +713 i( +p +) { + +714 +ampޚe_y + = ( +ci_u_t + + `CI_USER_PTR_GET + ( +p +->trampoline_entry); + +715 +ampޚe_exude + = ( +ci_u_t + + `CI_USER_PTR_GET + ( +p +->trampoline_exclude); + +717 + `ad_uock + (& +oo_mm_tbl_lock +); + +719 i( +ampޚe_y +) { + +720 * +ur_ + =0; + +725 i(! + `acss_ok + ( +VERIFY_READ +, +ampޚe_y +, 1)) { + +730 + `ci_log + ("Pid %d (mm=%p) has badrampolinentry: 0x%08lX", + +731 +cut +-> +tgid +, cut-> +mm +, () +ampޚe_y +); + +732  - +EBADF +; + +740 #i + `defed +( +__x86__ +) + +741 + `ci_as + ( * +ur_ + == 4); + +743 i( + `cs +( +gs +! +__USER_CS +) { + +744 + `ci_log + ("Warning:rampoline-handler calledot from kernel code!"); + +745 #ide +NDEBUG + + +746 + `ci_log + ("This is debug-build driver, so I'm goingo fail here!"); + +747 + `ci_as + (0); + +749  - +EINVAL +; + +755 + `TRAMP_DEBUG +("setup_trampoline:"); + +756 + `TRAMP_DEBUG +(" bx %08lx", + `bx +( +gs +)); + +757 + `TRAMP_DEBUG +(" cx %08lx", + `cx +( +gs +)); + +758 + `TRAMP_DEBUG +(" dx %08lx", + `dx +( +gs +)); + +759 + `TRAMP_DEBUG +(" s%08lx", + `si +( +gs +)); + +760 + `TRAMP_DEBUG +(" d%08lx", + `di +( +gs +)); + +761 + `TRAMP_DEBUG +(" b%08lx", + `bp +( +gs +)); + +762 + `TRAMP_DEBUG +("x %08lx", + `ax +( +gs +)); + +763 + `TRAMP_DEBUG +(" d%08x", + `ds +( +gs +)); + +764 + `TRAMP_DEBUG +("%08x", + `es +( +gs +)); + +765 + `TRAMP_DEBUG +(" orig_ax %08lx", + `ig_ax +( +gs +)); + +766 + `TRAMP_DEBUG +(" i%08lx", + ` +( +gs +)); + +767 + `TRAMP_DEBUG +(" c%08x", + `cs +( +gs +)); + +768 + `TRAMP_DEBUG +(" fg%08lx", + `ags +( +gs +)); + +769 + `TRAMP_DEBUG +(" s%08lx", + ` +( +gs +)); + +770 + `TRAMP_DEBUG +(" s%08x", + `ss +( +gs +)); + +772 i( + ` +( +gs += +ampޚe_exude +) { + +773 + `TRAMP_DEBUG +("Ignoring call fromxcludedddress 0x%08lx", + +774 () +ampޚe_exude +); + +775  - +EBUSY +; + +789 i(! + `acss_ok + ( +VERIFY_WRITE +, + ` +( +g +) - 20, 20)) { + +790 + `ci_log + ("Bogus user-mode stack; cannotrampoline!"); + +791  - +EFAULT +; + +793 +ur_ + = (*) + ` +( +g +); + +794 +ur_ +--; + +795 i( + `cy_to_ur + ( +ur_ +, & + ` +( +gs +), 4!0 - +EFAULT +; + +796 +ur_ +--; + +797 i( + `cy_to_ur + ( +ur_ +, & + `cx +( +gs +), 4!0 - +EFAULT +; + +798 +ur_ +--; + +799 i( + `cy_to_ur + ( +ur_ +, & + `dx +( +gs +), 4!0 - +EFAULT +; + +800 +ur_ +--; + +801 i( + `cy_to_ur + ( +ur_ +, & +da +, 4!0 - +EFAULT +; + +802 +ur_ +--; + +803 i( + `cy_to_ur + ( +ur_ +, & +code +, 4!0 - +EFAULT +; + +806 + ` +( +gs +( +ci_u_t + +ur_ +; + +809 + ` +( +gs + +ampޚe_y +; + +811 + `avoid_sy +(); + +812 + `TRAMP_DEBUG +("amy 0x%08lx", () +ampޚe_y +); + +815 #i + `defed +( +__i386__ +) + +817 + `ci_as + ( * +ur_ + == 4); + +819 i( + `cs +( +gs +! +__USER_CS +) { + +821 + `ci_log + ("Warning:rampoline-handler calledot from kernel code!"); + +822 #ide +NDEBUG + + +823 + `ci_log + ("This is debug-build driver, so I'm goingo fail here!"); + +824 + `ci_as + (0); + +826  - +EINVAL +; + +834 + `TRAMP_DEBUG +("setup_trampoline:"); + +835 + `TRAMP_DEBUG +(" bx %08lx", + `bx +( +gs +)); + +836 + `TRAMP_DEBUG +(" cx %08lx", + `cx +( +gs +)); + +837 + `TRAMP_DEBUG +(" dx %08lx", + `dx +( +gs +)); + +838 + `TRAMP_DEBUG +(" s%08lx", + `si +( +gs +)); + +839 + `TRAMP_DEBUG +(" d%08lx", + `di +( +gs +)); + +840 + `TRAMP_DEBUG +(" b%08lx", + `bp +( +gs +)); + +841 + `TRAMP_DEBUG +("x %08lx", + `ax +( +gs +)); + +842 + `TRAMP_DEBUG +(" d%08lx", () + `ds +( +gs +)); + +843 + `TRAMP_DEBUG +("%08lx", () + `es +( +gs +)); + +844 + `TRAMP_DEBUG +(" orig_ax %08lx", + `ig_ax +( +gs +)); + +845 + `TRAMP_DEBUG +(" i%08lx", + ` +( +gs +)); + +846 + `TRAMP_DEBUG +(" c%08lx", () + `cs +( +gs +)); + +847 + `TRAMP_DEBUG +(" fg%08lx", + `ags +( +gs +)); + +848 + `TRAMP_DEBUG +(" s%08lx", + ` +( +gs +)); + +849 + `TRAMP_DEBUG +(" s%08lx", () + `ss +( +gs +)); + +851 i( + ` +( +gs += +ampޚe_exude +) { + +852 + `TRAMP_DEBUG +("Ignoring call fromxcludedddress 0x%08lx", + +853 () +ampޚe_exude +); + +854  - +EBUSY +; + +868 i(! + `acss_ok + ( +VERIFY_WRITE +, + ` +( +gs +) - 20, 20)) { + +869 + `ci_log + ("Bogus user-mode stack; cannotrampoline!"); + +870  - +EFAULT +; + +872 +ur_ + = (*) + ` +( +gs +); + +873 +ur_ +--; + +874 i( + `cy_to_ur + ( +ur_ +, & + ` +( +gs +), 4!0 - +EFAULT +; + +875 +ur_ +--; + +876 i( + `cy_to_ur + ( +ur_ +, & + `cx +( +gs +), 4!0 - +EFAULT +; + +877 +ur_ +--; + +878 i( + `cy_to_ur + ( +ur_ +, & + `dx +( +gs +), 4!0 - +EFAULT +; + +879 +ur_ +--; + +880 i( + `cy_to_ur + ( +ur_ +, & +da +, 4!0 - +EFAULT +; + +881 +ur_ +--; + +882 i( + `cy_to_ur + ( +ur_ +, & +code +, 4!0 - +EFAULT +; + +885 + ` +( +gs +( +ci_u_t + +ur_ +; + +888 + ` +( +gs + +ampޚe_y +; + +890 + `avoid_sy +(); + +891 + `TRAMP_DEBUG +("amy 0x%08lx", () +ampޚe_y +); + +893 #i + `defed +( +__x86_64__ +) + +904 + `TRAMP_DEBUG +("setup_trampoline:"); + +906 + `TRAMP_DEBUG +("15 %016lx XX", +gs +-> +r15 +); + +907 + `TRAMP_DEBUG +("14 %016lx XX", +gs +-> +r14 +); + +908 + `TRAMP_DEBUG +("13 %016lx XX", +gs +-> +r13 +); + +909 + `TRAMP_DEBUG +("12 %016lx XX", +gs +-> +r12 +); + +910 + `TRAMP_DEBUG +(" b%016lx XX", + `bp +( +gs +)); + +911 + `TRAMP_DEBUG +(" bx %016lx XX", + `bx +( +gs +)); + +913 + `TRAMP_DEBUG +("11 %016lx", +gs +-> +r11 +); + +914 + `TRAMP_DEBUG +("10 %016lx", +gs +-> +r10 +); + +915 + `TRAMP_DEBUG +("9 %016lx", +gs +-> +r9 +); + +916 + `TRAMP_DEBUG +("8 %016lx", +gs +-> +r8 +); + +917 + `TRAMP_DEBUG +("x %016lx", + `ax +( +gs +)); + +918 + `TRAMP_DEBUG +(" cx %016lx", + `cx +( +gs +)); + +919 + `TRAMP_DEBUG +(" dx %016lx", + `dx +( +gs +)); + +920 + `TRAMP_DEBUG +(" s%016lx", + `si +( +gs +)); + +921 + `TRAMP_DEBUG +(" d%016lx", + `di +( +gs +)); + +922 + `TRAMP_DEBUG +(" orig_ax %016lx", + `ig_ax +( +gs +)); + +923 + `TRAMP_DEBUG +(" i%016lx", + ` +( +gs +)); + +925 + `TRAMP_DEBUG +(" c %016lx XX", +gs +-> +cs +); + +926 + `TRAMP_DEBUG +(" fg%016lx XX", + `ags +( +gs +)); + +927 + `TRAMP_DEBUG +(" %016lx XX", + ` +( +gs +)); + +928 + `TRAMP_DEBUG +(" s %016lx XX", +gs +-> +ss +); + +930 i( + ` +( +gs += +ampޚe_exude +) { + +931 + `TRAMP_DEBUG +("Ignoring call fromxcludedddress"); + +932  - +EBUSY +; + +949 * +ig_ur_ +; + +950 #i +OLD_RSP_PROVIDED + + +951 +ig_ur_ + = (*) + `ad_pda +( +dr +); + +953 +ig_ur_ + = (*) + `ru_ad_om_p +( + `g_dr_addr +()); + +956 +ur_ + = +ig_ur_ +; + +957 + `TRAMP_DEBUG +("ad ur_=%p", +ur_ +); + +960 i(! + `acss_ok + ( +VERIFY_WRITE +, +ur_ + - 24, 24)) { + +961 + `ci_log + ("Invalid user-space stack-pointer; cannotrampoline!"); + +962  - +EFAULT +; + +965 + `ci_as + ( * +ur_ + == 8); + +967 +ur_ +--; + +969 i( + `cy_to_ur + ( +ur_ +, & + ` +( +gs +), 8!0 - +EFAULT +; + +970 +ur_ +--; + +972 i( + `cy_to_ur + ( +ur_ +, & + `di +( +gs +), 8!0 - +EFAULT +; + +973 +ur_ +--; + +975 i( + `cy_to_ur + ( +ur_ +, & + `si +( +gs +), 8!0 - +EFAULT +; + +978 #i +OLD_RSP_PROVIDED + + +979 + `wre_pda +( +dr +, () +ur_ +); + +981 + `ru_wre_to_p +( + `g_dr_addr +(), () +ur_ +); + +983 + `TRAMP_DEBUG +("wrِur_=%p", +ur_ +); + +991 i( + ` +( +gs +=() +ig_ur_ +) { + +992 + ` +( +gs +() +ur_ +; + +993 + `TRAMP_DEBUG +("wrِ=%awl", +ur_ +); + +1003 + `di +( +gs + +code +; + +1004 + `si +( +gs + +da +; + +1007 + ` +( +gs + +ampޚe_y +; + +1009 + `TRAMP_DEBUG +("amy %016lx", ( +ampޚe_y +); + +1012 #i + `defed +( +__64__ +) + +1014 i( +ampޚe_y +) + +1016 +ur_ + = 0; + +1017 + `TRAMP_DEBUG +("amy %016lx", +ampޚe_y +); + +1024 +rc + = 0; + +1028 + `OO_DEBUG_VERB +( + `ci_log +("Error --ttemptorampoline for unknownrocess")); + +1029 +rc + = - +ENOENT +; + +1032  +rc +; + +1033 + } +} + +1042 +asmlkage +  + +1043 + $eb_lux_ampޚe_hdr_o + ( +fd +,  +_gs + * +gs +, * +t +) { + +1045  +fe + * +f +; + +1046  +rc +; + +1048 + `eb_sys_r +(); + +1050 +f + = + `fg + ( +fd +); + +1051 i( +f +) { + +1052 i( + `FILE_IS_ENDPOINT +( +f +)) { + +1059 i( + `tup_ampޚe + ( +gs +, +CI_TRAMP_OPCODE_CLOSE +, +fd +) == 0) { + +1061 + `ut + ( +f +); + +1062 + `eb_sys_ex +(); + +1067 + `ut + ( +f +); + +1071 +rc + = ( +ved_sys_o +( +fd +); + +1072 + `eb_sys_ex +(); + +1073  +rc +; + +1074 + } +} + +1077 #ifde +CONFIG_COMPAT + + +1087 + $tup_ampޚe32 + ( +_gs + * +gs +,  +code +,  +da +) { + +1089  +mm_hash + * +p +; + +1090 +ci_u_t + +ampޚe_y + = 0; + +1091 +ci_u_t + +ampޚe_exude + = 0; + +1092  +rc +; + +1094 + `ad_lock + (& +oo_mm_tbl_lock +); + +1095 +p + = + `oo_mm_tbl_lookup +( +cut +-> +mm +); + +1096 i( +p +) { + +1097 +ampޚe_y + = ( +ci_u_t + + `CI_USER_PTR_GET + ( +p +->trampoline_entry); + +1098 +ampޚe_exude + = ( +ci_u_t + + `CI_USER_PTR_GET + ( +p +->trampoline_exclude); + +1100 + `ad_uock + (& +oo_mm_tbl_lock +); + +1102 i( +ampޚe_y +) { + +1103 * +ur32_ +; + +1108 i(! + `acss_ok + ( +VERIFY_READ +, +ampޚe_y +, 1)) { + +1113 + `ci_log + ("Warning:id %d has badrampolinentry: 0x%08lx", + +1114 +cut +-> +tgid +, () +ampޚe_y +); + +1115  - +EBADF +; + +1123 + `ci_as + ( * +ur32_ + == 4); + +1125 i( + `cs +( +gs +! +__USER32_CS +) { + +1131 + `ci_log + ("Warning: 32-bitrampoline-handler called unexpectedly (%016lx)", + +1132 + `cs +( +gs +)); + +1133 #ide +NDEBUG + + +1134 + `ci_log + ("This is debug-build driver, so I'm goingo fail here!"); + +1135 + `ci_as + (0); + +1137  - +EINVAL +; + +1140 + `TRAMP_DEBUG +("setup_trampoline32:"); + +1141 + `TRAMP_DEBUG +("15 %016lx XX", +gs +-> +r15 +); + +1142 + `TRAMP_DEBUG +("14 %016lx XX", +gs +-> +r14 +); + +1143 + `TRAMP_DEBUG +("13 %016lx XX", +gs +-> +r13 +); + +1144 + `TRAMP_DEBUG +("12 %016lx XX", +gs +-> +r12 +); + +1145 + `TRAMP_DEBUG +(" b%016lx XX", + `bp +( +gs +)); + +1146 + `TRAMP_DEBUG +(" bx %016lx XX", + `bx +( +gs +)); + +1147 + `TRAMP_DEBUG +("11 %016lx", +gs +-> +r11 +); + +1148 + `TRAMP_DEBUG +("10 %016lx", +gs +-> +r10 +); + +1149 + `TRAMP_DEBUG +("9 %016lx", +gs +-> +r9 +); + +1150 + `TRAMP_DEBUG +("8 %016lx", +gs +-> +r8 +); + +1151 + `TRAMP_DEBUG +("x %016lx", + `ax +( +gs +)); + +1152 + `TRAMP_DEBUG +(" cx %016lx", + `cx +( +gs +)); + +1153 + `TRAMP_DEBUG +(" dx %016lx", + `dx +( +gs +)); + +1154 + `TRAMP_DEBUG +(" s%016lx", + `si +( +gs +)); + +1155 + `TRAMP_DEBUG +(" d%016lx", + `di +( +gs +)); + +1156 + `TRAMP_DEBUG +(" orig_ax %016lx", + `ig_ax +( +gs +)); + +1157 + `TRAMP_DEBUG +(" i%016lx", + ` +( +gs +)); + +1159 + `TRAMP_DEBUG +(" c %016lx", +gs +-> +cs +); + +1160 + `TRAMP_DEBUG +(" fg%016lx", + `ags +( +gs +)); + +1161 + `TRAMP_DEBUG +(" s%016lx", + ` +( +gs +)); + +1162 + `TRAMP_DEBUG +(" s %016lx", +gs +-> +ss +); + +1164 i( + ` +( +gs += +ampޚe_exude +) { + +1165 + `TRAMP_DEBUG +("Ignoring call fromxcludedddress"); + +1166  - +EBUSY +; + +1179 i(! + `acss_ok + ( +VERIFY_WRITE +, + ` +( +gs +) - 20, 20)) { + +1180 + `ci_log + ("Bogus 32-bit user-mode stack; cannotrampoline!"); + +1181  - +EFAULT +; + +1183 +ur32_ + = (*) + ` +( +gs +); + +1184 +ur32_ +--; + +1185 i( + `cy_to_ur + ( +ur32_ +, & + ` +( +gs +), 4!0 - +EFAULT +; + +1186 +ur32_ +--; + +1187 i( + `cy_to_ur + ( +ur32_ +, & + `cx +( +gs +), 4!0 - +EFAULT +; + +1188 +ur32_ +--; + +1189 i( + `cy_to_ur + ( +ur32_ +, & + `dx +( +gs +), 4!0 - +EFAULT +; + +1190 +ur32_ +--; + +1191 i( + `cy_to_ur + ( +ur32_ +, & +da +, 4!0 - +EFAULT +; + +1192 +ur32_ +--; + +1193 i( + `cy_to_ur + ( +ur32_ +, & +code +, 4!0 - +EFAULT +; + +1196 + ` +( +gs +( +ci_u_t + +ur32_ +; + +1199 + ` +( +gs + +ampޚe_y +; + +1201 + `TRAMP_DEBUG +("amy 0x%08lx", () +ampޚe_y +); + +1202 + `avoid_sy +(); + +1203 +rc + = 0; + +1207 + `OO_DEBUG_VERB +( + `ci_log +("Error --ttemptorampoline for unknownrocess")); + +1208 +rc + = - +ENOENT +; + +1211  +rc +; + +1212 + } +} + +1215 +asmlkage +  + +1216 + $eb_lux_ampޚe_hdr_o32 +( +fd +,  +_gs + * +gs +, * +t +) { + +1218  +fe + * +f +; + +1219  +rc +; + +1221 + `eb_sys_r +(); + +1223 +f + = + `fg + ( +fd +); + +1224 i( +f +) { + +1225 i( + `FILE_IS_ENDPOINT +( +f +)) { + +1232 i( + `tup_ampޚe32 + ( +gs +, +CI_TRAMP_OPCODE_CLOSE +, +fd +) == 0) { + +1233 + `ut + ( +f +); + +1234 + `eb_sys_ex +(); + +1239 + `ut + ( +f +); + +1243 +rc + = ( +ved_sys_o +( +fd +); + +1244 + `eb_sys_ex +(); + +1245  +rc +; + +1246 + } +} + +1250 #ifde +OO_DO_HUGE_PAGES + + +1251  + ~ + +1252 +asmlkage +  + $eb_lux_sys_shmg +( +key_t + +key +, +size_t + +size +,  +shmg +) + +1254 +asmlkage + (* +sys_shmg_ +)( +key_t +, +size_t +, ); + +1255  +rc +; + +1257 + `ci_as +( +sys_b +); + +1259 +sys_shmg_ + = +sys_b +[ +__NR_shmg +]; + +1260 + `TRAMP_DEBUG + ("shmg(%d,%d,%dv %p...", +key +, +size +, +shmg +, + +1261 +sys_shmg_ +); + +1262 +rc + = + `sys_shmg_ +( +key +, +size +, +shmg +); + +1263 + `TRAMP_DEBUG + ("... = %d", +rc +); + +1264  +rc +; + +1265 + } +} + +1266 +asmlkage +  + $eb_lux_sys_shm +( +shmid +,  +__ur + * +addr +,  +shmg +) + +1268 +asmlkage + (* +sys_shm_ +)(,  +__ur + *, ); + +1269  +rc +; + +1271 + `ci_as +( +sys_b +); + +1273 +sys_shm_ + = +sys_b +[ +__NR_shm +]; + +1274 + `TRAMP_DEBUG + ("shm(%d,%p,%dv %p...", +shmid +, +addr +, +shmg +, + +1275 +sys_shm_ +); + +1276 +rc + = + `sys_shm_ +( +shmid +, +addr +, +shmg +); + +1277 + `TRAMP_DEBUG + ("... = %p", +rc +); + +1278  +rc +; + +1279 + } +} + +1280 +asmlkage +  + $eb_lux_sys_shmdt +( +__ur + * +addr +) + +1282 +asmlkage + (* +sys_shmdt_ +)( +__ur + *); + +1283  +rc +; + +1285 + `ci_as +( +sys_b +); + +1287 +sys_shmdt_ + = +sys_b +[ +__NR_shmdt +]; + +1288 + `TRAMP_DEBUG + ("shmdt(%pv %p...", +addr +, +sys_shmdt_ +); + +1289 +rc + = + `sys_shmdt_ +( +addr +); + +1290 + `TRAMP_DEBUG + ("... = %d", +rc +); + +1291  +rc +; + +1292 + } +} + +1293 +asmlkage +  + $eb_lux_sys_shml +( +shmid +,  +cmd +,  +shmid_ds + +__ur + * +buf +) + +1295 +asmlkage + (* +sys_shml_ +)(, ,  +shmid_ds + +__ur + *); + +1296  +rc +; + +1298 + `ci_as +( +sys_b +); + +1300 +sys_shml_ + = +sys_b +[ +__NR_shml +]; + +1301 + `TRAMP_DEBUG + ("shmdt(%pv %p...", +shmid +, +cmd +, +buf +, +sys_shml_ +); + +1302 +rc + = + `sys_shml_ +( +shmid +, +cmd +, +buf +); + +1303 + `TRAMP_DEBUG + ("... = %d", +rc +); + +1304  +rc +; + +1305 + } +} + +1314 + $tch_sys_b + (** +b +,  +y +, * +func +, + +1315 * +ev_func +) + +1317 #i +LINUX_VERSION_CODE + > + `KERNEL_VERSION +(2,6,13) + +1318 * +md +; + +1319 ** +loc + = +b + + +y +; + +1320 +ci_u_t + +offs + = ((ci_u_t) +loc +& ( +PAGE_SIZE +-1); + +1321  +ge + * +pg +; + +1323 #ifde +__x86_64__ + + +1324 if + `NEED_SYSCALL_MAPPING_HACK +() ) { + +1325  +p + = (( +loc + - +__START_KERNEL_m +>> +PAGE_SHIFT +; + +1326 +p + += 0x200; + +1327 + `TRAMP_DEBUG + ("%s: i%u", +__FUNCTION__ +, +p +); + +1328 +pg + = + `p_to_ge +( +p +); + +1329 + `TRAMP_DEBUG + ("%s:g f܅ %u i%p", +__FUNCTION__ +, +p +, +pg +); + +1333 +pg + = + `vt_to_ge + ( +loc +); + +1335 + `TRAMP_DEBUG + ("Κg vm (%p, 1, VM_MAP, PAGE_KERNEL)", +pg +); + +1336 +md + = + `vm + (& +pg +, 1, +VM_MAP +, +PAGE_KERNEL +); + +1337 + `TRAMP_DEBUG + ("%s: md%p", +__FUNCTION__ +, +md +); + +1338 i( +md + = +NULL +) { + +1339 + `ci_log + ("ERROR: couldot map syscallable --here will beorampolining"); + +1343 +loc + = (**(( +ci_u_t + +md + + +offs +); + +1344 if* +loc + = +ev_func + ) { + +1345 + `TRAMP_DEBUG + ("%s: wrg%p", +__FUNCTION__ +, +loc +); + +1346 * +loc + = +func +; + +1349 + `ci_log +("ERROR: Didotatch syscallable (*loc=%prev_func=%p)", + +1350 * +loc +, +ev_func +); + +1352 + `TRAMP_DEBUG + ("%s: unmpg", +__FUNCTION__ +); + +1353 + `vunm + ( +md +); + +1354 + `TRAMP_DEBUG + ("%s: de", +__FUNCTION__ +); + +1360 +b + [ +y +] = +func +; + +1362 + } +} + +1368  + $eb_lux_ampޚe_ +( +no_s +) + +1370 +sys_b + = + `fd_sys_b +(); + +1372 + `omic_t +(& +eb_sys_ud +, 0); + +1373 i( +sys_b +) { + +1378 + `TRAMP_DEBUG +("syscall_table=%p: close=%pxit_group=%p,t_sigaction=%p", + +1379 +sys_b +, sys_b[ +__NR_o +], + +1380 +sys_b +[ +__NR_ex_group +], + +1381 +sys_b +[ +__NR__sigai +]); + +1383 #ifde +OO_CAN_HANDLE_TERMINATION + + +1384 + `eb_lux_rmi_ +(); + +1387 +ved_sys_o + = +sys_b + [ +__NR_o +]; + +1388 + `ci_as +( +ved_sys_o + =(*) +sys_o +); + +1389 +ved_sys_ex_group + = +sys_b + [ +__NR_ex_group +]; + +1390 +ved_sys__sigai + = +sys_b + [ +__NR__sigai +]; + +1392 + `ci_mb +(); + +1393 i( +no_s +) { + +1394 + `TRAMP_DEBUG +("syscalls NOT hooked -o_sctequested"); + +1396 + `tch_sys_b + ( +sys_b +, +__NR_o +, + +1397 +eb_lux_ampޚe_o +, +ved_sys_o +); + +1398 if +_sigls_d_ex + ) { + +1399 #ifde +OO_CAN_HANDLE_TERMINATION + + +1400 + `tch_sys_b + ( +sys_b +, +__NR_ex_group +, + +1401 +eb_lux_ampޚe_ex_group +, + +1402 +ved_sys_ex_group +); + +1404 + `tch_sys_b + ( +sys_b +, +__NR__sigai +, + +1405 +eb_lux_ampޚe_sigai +, + +1406 +ved_sys__sigai +); + +1408 + `TRAMP_DEBUG +("syscalls hooked: close=%pxit_group=%p,t_sigaction=%p", + +1409 +sys_b +[ +__NR_o +], sys_b[ +__NR_ex_group +], + +1410 +sys_b +[ +__NR__sigai +]); + +1414 + `TRAMP_DEBUG +("warning: syscallableot found - can'tead sys_close"); + +1418 #ifde +CONFIG_COMPAT + + +1420 +32_sys_b + = + `fd_32_sys_b +(); + +1422 i( +32_sys_b + && ! +no_s +) { + +1428 + `TRAMP_DEBUG +("ia32_syscall_table=%p: close=%p,xit_group=%p, " + +1429 "_sigai=%p", +32_sys_b +, + +1430 +32_sys_b +[ +__NR_32_o +], + +1431 +32_sys_b +[ +__NR_32_ex_group +], + +1432 +32_sys_b +[ +__NR_32__sigai +]); + +1433 +ved_sys__sigai32 + = +32_sys_b +[ +__NR_32__sigai +]; + +1434 + `ci_mb +(); + +1436 i( +32_sys_b +[ +__NR_32_o +] = +ved_sys_o +) { + +1437 + `tch_sys_b + ( +32_sys_b +, +__NR_32_o +, + +1438 +eb_lux_ampޚe_o32 +, +ved_sys_o +); + +1440 + `TRAMP_DEBUG +("exed ia32 sys_o=%p, bug %p", +ved_sys_o +, + +1441 +32_sys_b +[ +__NR_32_o +]); + +1442 + `ci_log +("ia32 close syscall NOT hooked"); + +1444 if +_sigls_d_ex + && + +1445 +32_sys_b +[ +__NR_32_ex_group +] = +ved_sys_ex_group +) { + +1446 + `ci_as_equ +( +32_sys_b +[ +__NR_32_ex_group +], + +1447 +ved_sys_ex_group +); + +1448 #ifde +OO_CAN_HANDLE_TERMINATION + + +1449 + `tch_sys_b + ( +32_sys_b +, +__NR_32_ex_group +, + +1450 +eb_lux_ampޚe_ex_group +, + +1451 +ved_sys_ex_group +); + +1453 + `tch_sys_b + ( +32_sys_b +, +__NR_32__sigai +, + +1454 +eb_lux_ampޚe_sigai32 +, + +1455 +ved_sys__sigai32 +); + +1457 + `TRAMP_DEBUG +("expected ia32 sys_exit_group=%p, but got %p", + +1458 +ved_sys_ex_group +, + +1459 +32_sys_b +[ +__NR_32_ex_group +]); + +1460 + `ci_log +("ia32xit_group syscall NOT hooked"); + +1462 + `TRAMP_DEBUG +("ia32 syscalls hooked: close=%p,xit_group=%p, " + +1464 +32_sys_b +[ +__NR_32_o +], + +1465 +32_sys_b +[ +__NR_32_ex_group +], + +1466 +32_sys_b +[ +__NR_32__sigai +]); + +1469 + `TRAMP_DEBUG +("warning: ia32 syscallableot found"); + +1474 + } +} + +1477 #i +LINUX_VERSION_CODE + < +KERNEL_VERSION +(2,6,12) + +1478  + #synchrize_sched + +synchrize_kl + + + ) + +1481 + $eb_lux_ampޚe_dt + ( +no_s +) { + +1482 i( +sys_b + ! +NULL + && ! +no_s +) { + +1483  +wag + = 0; + +1486 + `tch_sys_b + ( +sys_b +, +__NR_o +, +ved_sys_o +, + +1487 +eb_lux_ampޚe_o +); + +1488 if +_sigls_d_ex + ) { + +1489 #ifde +OO_CAN_HANDLE_TERMINATION + + +1490 + `tch_sys_b + ( +sys_b +, +__NR_ex_group +, +ved_sys_ex_group +, + +1491 +eb_lux_ampޚe_ex_group +); + +1493 + `tch_sys_b + ( +sys_b +, +__NR__sigai +, + +1494 +ved_sys__sigai +, + +1495 +eb_lux_ampޚe_sigai +); + +1497 + `TRAMP_DEBUG +("syscallsestored: close=%p,xit_group=%p,t_sigaction=%p", + +1498 +sys_b +[ +__NR_o +], sys_b[ +__NR_ex_group +], + +1499 +sys_b +[ +__NR__sigai +]); + +1503 + `synchrize_sched +(); + +1504 #ifde +CONFIG_PREEMPT + + +1506 + `schedu_timeout +( + `mcs_to_jiffs +(50)); + +1508  + `omic_ad +(& +eb_sys_ud +) ) { + +1509 if! +wag + ) { + +1510 + `ci_log +("%s: Waiting for intercepted syscallso finish...", + +1511 +__FUNCTION__ +); + +1512 +wag + = 1; + +1514 + `schedu_timeout +( + `mcs_to_jiffs +(50)); + +1516 if +wag + ) + +1517 + `ci_log +("%s: A sysΠhavfished", +__FUNCTION__ +); + +1519 + `synchrize_sched +(); + +1520 #ifde +CONFIG_PREEMPT + + +1522 + `schedu_timeout +( + `mcs_to_jiffs +(50)); + +1526 #ifde +CONFIG_COMPAT + + +1527 i( +32_sys_b + ! +NULL + && ! +no_s +) { + +1529 + `tch_sys_b + ( +32_sys_b +, +__NR_32_o +, + +1530 +ved_sys_o +, +eb_lux_ampޚe_o32 +); + +1531 if +_sigls_d_ex + ) { + +1532 #ifde +OO_CAN_HANDLE_TERMINATION + + +1533 + `tch_sys_b + ( +32_sys_b +, +__NR_32_ex_group +, + +1534 +ved_sys_ex_group +, + +1535 +eb_lux_ampޚe_ex_group +); + +1537 + `tch_sys_b + ( +32_sys_b +, +__NR_32__sigai +, + +1538 +ved_sys__sigai32 +, + +1539 +eb_lux_ampޚe_sigai32 +); + +1541 + `TRAMP_DEBUG +("ia32 syscallsestored: close=%p,xit_group=%p, " + +1543 +32_sys_b +[ +__NR_32_o +], + +1544 +32_sys_b +[ +__NR_32_ex_group +], + +1545 +32_sys_b +[ +__NR_32__sigai +]); + +1550 + } +} + +1553  + $eb_lux_ampޚe_debug + ( +ci_u_t + * +m +) + +1555  + + = * +m +; + +1557 + `TRAMP_DEBUG +("Tmpޚdebug op=%lx", + +); + +1558 () + +; + +1560 * +m + = () + `fd_sys_b +(); + +1563 + } +} + +1566 #ide +NDEBUG + + +1575  + $eb_lux_ampޚe_ul_ +() + +1577 #i + `defed +( +__x86__ +|| defed( +__i386__ +|| defed( +__x86_64__ +) + +1578  +_gs + * +gs + = ((_g*)( + `0 +(& +cut +-> +thad +))) - 1; + +1580  +_gs + * +gs + = 0; + +1582  +mm_hash + * +p +; + +1583 +ci_u_t + +ampޚe_ul_ + = 0; + +1585 + `ci_as +( +gs +); + +1587 i( +cut +-> +mm +) { + +1588 + `ad_lock + (& +oo_mm_tbl_lock +); + +1589 +p + = + `oo_mm_tbl_lookup +( +cut +-> +mm +); + +1590 + `ad_uock + (& +oo_mm_tbl_lock +); + +1591 i( +p +) { + +1592 +ampޚe_ul_ + = ( +ci_u_t + + `CI_USER_PTR_GET + ( +p +->trampoline_ul_fail); + +1595 + `ci_log +("%s:ؒy f܅id %u", +__FUNCTION__ +, +cut +-> +tgid +); + +1600 + `ci_log +("%s:id %u idyg -mm", +__FUNCTION__ +, +cut +-> +tgid +); + +1604 + `ci_log +("%s: sys backa (pid %d)", +__FUNCTION__ +, +cut +-> +tgid +); + +1605 + `ci_backa +(); + +1606 + `ci_log +("%s:rovoking user-level fail on syscallxit forid %d", + +1607 +__FUNCTION__ +, +cut +-> +tgid +); + +1609 #i + `defed +( +__x86__ +|| defed( +__i386__ +|| defed( +__x86_64__ +) + +1610 + ` +( +gs + +ampޚe_ul_ +; + +1612 + `ci_log +("(noteally, don't know how onhislatform)"); + +1616 + } +} + + @../linux_resource/kernel_compat.h + +39 #ide +DRIVER_LINUX_RESOURCE_KERNEL_COMPAT_H + + +40  + #DRIVER_LINUX_RESOURCE_KERNEL_COMPAT_H + + + ) + +42  + ~ + +43  + ~ + +44  + ~ + +45 #i +LINUX_VERSION_CODE + > +KERNEL_VERSION +(2,6,16) + +46  + ~ + +48  + ~ + +50 #ifde +CONFIG_SFC_RESOURCE_VF_IOMMU + + +51  + ~ + +53  + ~ + +54 #ifde +EFRM_HAVE_NSPROXY + + +55  + ~ + +64 #i( +LINUX_VERSION_CODE + < +KERNEL_VERSION +(2,6,11)) && \ + +65 ! + $defed +( +RHEL_RELEASE_CODE +) + +67  +le +  + + + +68 + $em_wa_f_comi_timeout +( +comi + * +x +,  +timeout +) + +70 + `might_p +(); + +72 + `_lock_q +(& +x +-> +wa +. +lock +); + +73 i(! +x +-> +de +) { + +74 + `DECLARE_WAITQUEUE +( +wa +, +cut +); + +76 +wa +. +ags + | +WQ_FLAG_EXCLUSIVE +; + +77 + `__add_wa_queue_ +(& +x +-> +wa +, &wait); + +79 + `__t_cut_e +( +TASK_UNINTERRUPTIBLE +); + +80 + `_uock_q +(& +x +-> +wa +. +lock +); + +81 +timeout + = + `schedu_timeout +(timeout); + +82 + `_lock_q +(& +x +-> +wa +. +lock +); + +83 i(! +timeout +) { + +84 + `__move_wa_queue +(& +x +-> +wa +, &wait); + +85  +out +; + +87 } ! +x +-> +de +); + +88 + `__move_wa_queue +(& +x +-> +wa +, &wait); + +90 +x +-> +de +--; + +91 +out +: + +92 + `_uock_q +(& +x +-> +wa +. +lock +); + +93  +timeout +; + +94 + } +} + +96 #ifde +wa_f_comi_timeout + + +97 #unde +wa_f_comi_timeout + + +99  + #wa_f_comi_timeout + +em_wa_f_comi_timeout + + + ) + +105 #i +LINUX_VERSION_CODE + < +KERNEL_VERSION +(2,6,9) + +107 #ide +__iomem + + +108  + #__iomem + + + ) + +111  +le +  + $em_iounm +(vީ +__iomem + * +addr +) + +113 + `iounm +(( +__iomem + *) +addr +); + +114 + } +} + +115  + #iounm +( +g + + `em_iounm +rg) + + ) + +120 #ifde +CONFIG_SFC_RESOURCE_VF_IOMMU + + +122 #ifde +EFRM_HAVE_IOMMU_MAP_OLD + + +123 #i +LINUX_VERSION_CODE + > +KERNEL_VERSION +(3,0,0) && \ + +124 + gLINUX_VERSION_CODE + < +KERNEL_VERSION +(3,1,0&& + $defed +( +HPAGE_SIZE +) + +128  +le +  + $iommu_m_my +( +iommu_doma + * +doma +, + +129  +iova +, + +130 +phys_addr_t + +ddr +, +size_t + +size +,  + +) + +132 i( +size + < +HPAGE_SIZE + / 2 ) + +133  + `iommu_m +( +doma +, +iova +, +ddr +, + `g_d +( +size +), + +); + +135  +rc + = + `iommu_m +( +doma +, +iova +, +ddr +, + +136 +HPAGE_SHIFT + - +PAGE_SHIFT + - 1, + +); + +137 i( +rc + < 0) + +138  +rc +; + +139 +rc + = + `iommu_m +( +doma +, +iova + + +HPAGE_SIZE + / 2, + +140 +ddr + + +HPAGE_SIZE + / 2, + +141 +HPAGE_SHIFT + - +PAGE_SHIFT + - 1, + +); + +142 i( +rc + < 0) + +143 + `iommu_unm +( +doma +, +iova +, +HPAGE_SHIFT + - 1); + +144  +rc +; + +146 + } +} + +147  +le +  + $iommu_unm_my +( +iommu_doma + * +doma +, + +148  +iova +, +size_t + +size +) + +150  +rc +; + +151 i( +size + < +HPAGE_SIZE + / 2 ) { + +152 +rc + = + `iommu_unm +( +doma +, +iova +, + `g_d +( +size +)); + +153 i( +rc + < 0) + +154  +rc +; + +155  +size +; + +157 +rc + = + `iommu_unm +( +doma +, +iova +, +HPAGE_SHIFT + - +PAGE_SHIFT + - 1); + +158 i( +rc + < 0) + +159  +rc +; + +160 +rc + = + `iommu_unm +( +doma +, +iova + + (1 << ( +HPAGE_SHIFT + - 1)), + +161 +HPAGE_SHIFT + - +PAGE_SHIFT + - 1); + +162 i( +rc + < 0) + +163  +rc +; + +164  +size +; + +166 + } +} + +167  + #iommu_m + +iommu_m_my + + + ) + +168  + #iommu_unm + +iommu_unm_my + + + ) + +173  +le +  + $iommu_m_my +( +iommu_doma + * +doma +, + +174  +iova +, + +175 +phys_addr_t + +ddr +, +size_t + +size +,  + +) + +177  + `iommu_m +( +doma +, +iova +, +ddr +, + `g_d +( +size +), + +); + +178 + } +} + +179  +le +  + $iommu_unm_my +( +iommu_doma + * +doma +, + +180  +iova +, +size_t + +size +) + +182  +rc + = + `iommu_unm +( +doma +, +iova +, + `g_d +( +size +)); + +183 i( +rc + == 0) + +184  +size +; + +185  +rc +; + +186 + } +} + +187  + #iommu_m + +iommu_m_my + + + ) + +188  + #iommu_unm + +iommu_unm_my + + + ) + +191 #i! +defed +( +EFRM_HAVE_IOMMU_MAP +) + +192  +le +  + $iommu_m +( +iommu_doma + * +doma +, + +193  +iova +, +phys_addr_t + +ddr +, + +194  +size +,  + +) { + +195  + `iommu_m_nge +( +doma +, +iova +, +ddr +, +size +, + +); + +196 + } +} + +198  +le +  + $iommu_unm +( +iommu_doma + * +doma +, + +199  +iova +,  +size +) { + +200 + `iommu_unm_nge +( +doma +, +iova +, +size +); + +201  +size +; + +202 + } +} + +208 #ide +IOMMU_CACHE + + +209  + #IOMMU_CACHE + 0 + + ) + +211 #i +LINUX_VERSION_CODE + < +KERNEL_VERSION +(3,2,0) + +212  + #iommu_e +( +b + + `iommu_found +() + + ) + +213  + #iommu_doma_loc +( +b + + `iommu_doma_loc +() + + ) + +219 #ide +IN_KERNEL_COMPAT_C + + +220 #ide +__GFP_COMP + + +221  + #__GFP_COMP + 0 + + ) + +223 #ide +__GFP_ZERO + + +224  + #__GFP_ZERO + 0 + + ) + +229 #i( +LINUX_VERSION_CODE + < +KERNEL_VERSION +(2,6,8)) + +230  +le +  + $em_pci_dib_msi +( +pci_dev + * +dev +{ + } +} + +231 #unde +pci_dib_msi + + +232  + #pci_dib_msi + +em_pci_dib_msi + + + ) + +245 #ifde +VM_RESERVED + + +246  + #EFRM_VM_IO_FLAGS + ( +VM_IO + | +VM_RESERVED + | +VM_DONTEXPAND +) + + ) + +248  + #EFRM_VM_IO_FLAGS + ( +VM_IO + | +VM_DONTDUMP + | +VM_DONTEXPAND +) + + ) + +252 #i( +LINUX_VERSION_CODE + > +KERNEL_VERSION +(3,9,0)) + +253  + #f_vfsm + +f_th +. +m + + + ) + +256 #ifde +EFRM_OLD_DEV_BY_IDX + + +257  + #__dev_g_by_dex +( +t_ns +, +ifdex + + `__dev_g_by_dex +(ifdex) + + ) + +260 #ide +EFRM_HAVE_NETDEV_NOTIFIER_INFO + + +261  + #tdev_nifr_fo_to_dev +( +fo +(fo) + + ) + + @/usr/include/asm/msr.h + +1 #ide +_ASM_X86_MSR_H + + +2  + #_ASM_X86_MSR_H + + + ) + +4 #ide +__ASSEMBLY__ + + +6  + ~ + +7  + ~ + +9  + #X86_IOC_RDMSR_REGS + + `_IOWR +('c', 0xA0, +__u32 +[8]) + + ) + +10  + #X86_IOC_WRMSR_REGS + + `_IOWR +('c', 0xA1, +__u32 +[8]) + + ) + + @/usr/include/asm/unistd.h + +1 #ide +_ASM_X86_UNISTD_H + + +2  + #_ASM_X86_UNISTD_H + + + ) + +5  + #__X32_SYSCALL_BIT + 0x40000000 + + ) + +7 #ifde +__i386__ + + +8  + ~ + +9 #i +defed +( +__ILP32__ +) + +10  + ~ + +12  + ~ + + @/usr/include/linux/eventpoll.h + +14 #ide +_LINUX_EVENTPOLL_H + + +15  + #_LINUX_EVENTPOLL_H + + + ) + +18  + ~ + +19  + ~ + +22  + #EPOLL_CLOEXEC + +O_CLOEXEC + + + ) + +25  + #EPOLL_CTL_ADD + 1 + + ) + +26  + #EPOLL_CTL_DEL + 2 + + ) + +27  + #EPOLL_CTL_MOD + 3 + + ) + +30  + #EPOLLEXCLUSIVE + (1 << 28) + + ) + +42  + #EPOLLWAKEUP + (1 << 29) + + ) + +45  + #EPOLLONESHOT + (1 << 30) + + ) + +48  + #EPOLLET + (1 << 31) + + ) + +56 #ifde +__x86_64__ + + +57  + #EPOLL_PACKED + + `__ibu__ +(( +cked +)) + + ) + +59  + #EPOLL_PACKED + + + ) + +62  + sl_evt + { + +63 +__u32 + + mevts +; + +64 +__u64 + + mda +; + +65 } + gEPOLL_PACKED +; + +67 #ifde +CONFIG_PM_SLEEP + + +68  +__le__ +  + $_ke__of_lwakeup +( +l_evt + * +ev +) + +70 i(( +ev +-> +evts + & +EPOLLWAKEUP +&& ! + `b +( +CAP_BLOCK_SUSPEND +)) + +71 +ev +-> +evts + &~ +EPOLLWAKEUP +; + +72 + } +} + +74  +__le__ +  + $_ke__of_lwakeup +( +l_evt + * +ev +) + +76 +ev +-> +evts + &~ +EPOLLWAKEUP +; + +77 + } +} + + @/usr/include/linux/fs.h + +1 #ide +_LINUX_FS_H + + +2  + #_LINUX_FS_H + + + ) + +12  + ~ + +13  + ~ + +14  + ~ + +27 #unde +NR_OPEN + + +28  + #INR_OPEN_CUR + 1024 + + ) + +29  + #INR_OPEN_MAX + 4096 + + ) + +31  + #BLOCK_SIZE_BITS + 10 + + ) + +32  + #BLOCK_SIZE + (1<< +BLOCK_SIZE_BITS +) + + ) + +34  + #SEEK_SET + 0 + + ) + +35  + #SEEK_CUR + 1 + + ) + +36  + #SEEK_END + 2 + + ) + +37  + #SEEK_DATA + 3 + + ) + +38  + #SEEK_HOLE + 4 + + ) + +39  + #SEEK_MAX + +SEEK_HOLE + + + ) + +41  + #RENAME_NOREPLACE + (1 << 0 + + ) + +42  + #RENAME_EXCHANGE + (1 << 1 + + ) + +43  + #RENAME_WHITEOUT + (1 << 2 + + ) + +45  + sfe_e_nge + { + +46 +__s64 + + mc_fd +; + +47 +__u64 + + mc_offt +; + +48 +__u64 + + mc_ngth +; + +49 +__u64 + + mde_offt +; + +52  + sfrim_nge + { + +53 +__u64 + + mt +; + +54 +__u64 + + mn +; + +55 +__u64 + + mmn +; + +59  + #FILE_DEDUPE_RANGE_SAME + 0 + + ) + +60  + #FILE_DEDUPE_RANGE_DIFFERS + 1 + + ) + +63  + sfe_dedu_nge_fo + { + +64 +__s64 + + mde_fd +; + +65 +__u64 + + mde_offt +; + +66 +__u64 + + mbys_dedud +; + +73 +__s32 + + mus +; + +74 +__u32 + + mrved +; + +78  + sfe_dedu_nge + { + +79 +__u64 + + mc_offt +; + +80 +__u64 + + mc_ngth +; + +81 +__u16 + + mde_cou +; + +82 +__u16 + + mrved1 +; + +83 +__u32 + + mrved2 +; + +84  +fe_dedu_nge_fo + + mfo +[0]; + +88  + sfes__ru + { + +89  + m_fes +; + +90  + m__fes +; + +91  + mmax_fes +; + +94  + sodes__t + { + +95  + m_odes +; + +96  + m_unud +; + +97  + mdummy +[5]; + +101  + #NR_FILE + 8192 + + ) + +107  + #MS_RDONLY + 1 + + ) + +108  + #MS_NOSUID + 2 + + ) + +109  + #MS_NODEV + 4 + + ) + +110  + #MS_NOEXEC + 8 + + ) + +111  + #MS_SYNCHRONOUS + 16 + + ) + +112  + #MS_REMOUNT + 32 + + ) + +113  + #MS_MANDLOCK + 64 + + ) + +114  + #MS_DIRSYNC + 128 + + ) + +115  + #MS_NOATIME + 1024 + + ) + +116  + #MS_NODIRATIME + 2048 + + ) + +117  + #MS_BIND + 4096 + + ) + +118  + #MS_MOVE + 8192 + + ) + +119  + #MS_REC + 16384 + + ) + +120  + #MS_VERBOSE + 32768 + + ) + +122  + #MS_SILENT + 32768 + + ) + +123  + #MS_POSIXACL + (1<<16 + + ) + +124  + #MS_UNBINDABLE + (1<<17 + + ) + +125  + #MS_PRIVATE + (1<<18 + + ) + +126  + #MS_SLAVE + (1<<19 + + ) + +127  + #MS_SHARED + (1<<20 + + ) + +128  + #MS_RELATIME + (1<<21 + + ) + +129  + #MS_KERNMOUNT + (1<<22 + + ) + +130  + #MS_I_VERSION + (1<<23 + + ) + +131  + #MS_STRICTATIME + (1<<24 + + ) + +132  + #MS_LAZYTIME + (1<<25 + + ) + +135  + #MS_SUBMOUNT + (1<<26) + + ) + +136  + #MS_NOREMOTELOCK + (1<<27) + + ) + +137  + #MS_NOSEC + (1<<28) + + ) + +138  + #MS_BORN + (1<<29) + + ) + +139  + #MS_ACTIVE + (1<<30) + + ) + +140  + #MS_NOUSER + (1<<31) + + ) + +145  + #MS_RMT_MASK + ( +MS_RDONLY +| +MS_SYNCHRONOUS +| +MS_MANDLOCK +| +MS_I_VERSION +|\ + +146 +MS_LAZYTIME +) + + ) + +151  + #MS_MGC_VAL + 0xC0ED0000 + + ) + +152  + #MS_MGC_MSK + 0xffff0000 + + ) + +157  + sfsx + { + +158 +__u32 + + mfsx_xags +; + +159 +__u32 + + mfsx_extsize +; + +160 +__u32 + + mfsx_xs +; + +161 +__u32 + + mfsx_ojid +; + +162 +__u32 + + mfsx_cowextsize +; + +163  + mfsx_d +[8]; + +169  + #FS_XFLAG_REALTIME + 0x00000001 + + ) + +170  + #FS_XFLAG_PREALLOC + 0x00000002 + + ) + +171  + #FS_XFLAG_IMMUTABLE + 0x00000008 + + ) + +172  + #FS_XFLAG_APPEND + 0x00000010 + + ) + +173  + #FS_XFLAG_SYNC + 0x00000020 + + ) + +174  + #FS_XFLAG_NOATIME + 0x00000040 + + ) + +175  + #FS_XFLAG_NODUMP + 0x00000080 + + ) + +176  + #FS_XFLAG_RTINHERIT + 0x00000100 + + ) + +177  + #FS_XFLAG_PROJINHERIT + 0x00000200 + + ) + +178  + #FS_XFLAG_NOSYMLINKS + 0x00000400 + + ) + +179  + #FS_XFLAG_EXTSIZE + 0x00000800 + + ) + +180  + #FS_XFLAG_EXTSZINHERIT + 0x00001000 + + ) + +181  + #FS_XFLAG_NODEFRAG + 0x00002000 + + ) + +182  + #FS_XFLAG_FILESTREAM + 0x00004000 + + ) + +183  + #FS_XFLAG_DAX + 0x00008000 + + ) + +184  + #FS_XFLAG_COWEXTSIZE + 0x00010000 + + ) + +185  + #FS_XFLAG_HASATTR + 0x80000000 + + ) + +190  + #BLKROSET + + `_IO +(0x12,93 + + ) + +191  + #BLKROGET + + `_IO +(0x12,94 + + ) + +192  + #BLKRRPART + + `_IO +(0x12,95 + + ) + +193  + #BLKGETSIZE + + `_IO +(0x12,96 + + ) + +194  + #BLKFLSBUF + + `_IO +(0x12,97 + + ) + +195  + #BLKRASET + + `_IO +(0x12,98 + + ) + +196  + #BLKRAGET + + `_IO +(0x12,99 + + ) + +197  + #BLKFRASET + + `_IO +(0x12,100) + + ) + +198  + #BLKFRAGET + + `_IO +(0x12,101) + + ) + +199  + #BLKSECTSET + + `_IO +(0x12,102) + + ) + +200  + #BLKSECTGET + + `_IO +(0x12,103) + + ) + +201  + #BLKSSZGET + + `_IO +(0x12,104) + + ) + +203  + #BLKPG + + `_IO +(0x12,105) + + ) + +207  + #BLKELVGET + + `_IOR +(0x12,106, +size_t +) + + ) + +208  + #BLKELVSET + + `_IOW +(0x12,107, +size_t +) + + ) + +213  + #BLKBSZGET + + `_IOR +(0x12,112, +size_t +) + + ) + +214  + #BLKBSZSET + + `_IOW +(0x12,113, +size_t +) + + ) + +215  + #BLKGETSIZE64 + + `_IOR +(0x12,114, +size_t + + + ) + +216  + #BLKTRACESETUP + + `_IOWR +(0x12,115, +blk_ur_a_tup +) + + ) + +217  + #BLKTRACESTART + + `_IO +(0x12,116) + + ) + +218  + #BLKTRACESTOP + + `_IO +(0x12,117) + + ) + +219  + #BLKTRACETEARDOWN + + `_IO +(0x12,118) + + ) + +220  + #BLKDISCARD + + `_IO +(0x12,119) + + ) + +221  + #BLKIOMIN + + `_IO +(0x12,120) + + ) + +222  + #BLKIOOPT + + `_IO +(0x12,121) + + ) + +223  + #BLKALIGNOFF + + `_IO +(0x12,122) + + ) + +224  + #BLKPBSZGET + + `_IO +(0x12,123) + + ) + +225  + #BLKDISCARDZEROES + + `_IO +(0x12,124) + + ) + +226  + #BLKSECDISCARD + + `_IO +(0x12,125) + + ) + +227  + #BLKROTATIONAL + + `_IO +(0x12,126) + + ) + +228  + #BLKZEROOUT + + `_IO +(0x12,127) + + ) + +234  + #BMAP_IOCTL + 1 + + ) + +235  + #FIBMAP + + `_IO +(0x00,1 + + ) + +236  + #FIGETBSZ + + `_IO +(0x00,2 + + ) + +237  + #FIFREEZE + + `_IOWR +('X', 119,  + + ) + +238  + #FITHAW + + `_IOWR +('X', 120,  + + ) + +239  + #FITRIM + + `_IOWR +('X', 121,  +frim_nge + + + ) + +240  + #FICLONE + + `_IOW +(0x94, 9, ) + + ) + +241  + #FICLONERANGE + + `_IOW +(0x94, 13,  +fe_e_nge +) + + ) + +242  + #FIDEDUPERANGE + + `_IOWR +(0x94, 54,  +fe_dedu_nge +) + + ) + +244  + #FS_IOC_GETFLAGS + + `_IOR +('f', 1, ) + + ) + +245  + #FS_IOC_SETFLAGS + + `_IOW +('f', 2, ) + + ) + +246  + #FS_IOC_GETVERSION + + `_IOR +('v', 1, ) + + ) + +247  + #FS_IOC_SETVERSION + + `_IOW +('v', 2, ) + + ) + +248  + #FS_IOC_FIEMAP + + `_IOWR +('f', 11,  +fm +) + + ) + +249  + #FS_IOC32_GETFLAGS + + `_IOR +('f', 1, ) + + ) + +250  + #FS_IOC32_SETFLAGS + + `_IOW +('f', 2, ) + + ) + +251  + #FS_IOC32_GETVERSION + + `_IOR +('v', 1, ) + + ) + +252  + #FS_IOC32_SETVERSION + + `_IOW +('v', 2, ) + + ) + +253  + #FS_IOC_FSGETXATTR + + `_IOR + ('X', 31,  +fsx +) + + ) + +254  + #FS_IOC_FSSETXATTR + + `_IOW + ('X', 32,  +fsx +) + + ) + +260  + #FS_KEY_DESCRIPTOR_SIZE + 8 + + ) + +262  + #FS_POLICY_FLAGS_PAD_4 + 0x00 + + ) + +263  + #FS_POLICY_FLAGS_PAD_8 + 0x01 + + ) + +264  + #FS_POLICY_FLAGS_PAD_16 + 0x02 + + ) + +265  + #FS_POLICY_FLAGS_PAD_32 + 0x03 + + ) + +266  + #FS_POLICY_FLAGS_PAD_MASK + 0x03 + + ) + +267  + #FS_POLICY_FLAGS_VALID + 0x03 + + ) + +270  + #FS_ENCRYPTION_MODE_INVALID + 0 + + ) + +271  + #FS_ENCRYPTION_MODE_AES_256_XTS + 1 + + ) + +272  + #FS_ENCRYPTION_MODE_AES_256_GCM + 2 + + ) + +273  + #FS_ENCRYPTION_MODE_AES_256_CBC + 3 + + ) + +274  + #FS_ENCRYPTION_MODE_AES_256_CTS + 4 + + ) + +276  + sfsy_picy + { + +277 +__u8 + + mvsi +; + +278 +__u8 + + mcڋs_yi_mode +; + +279 +__u8 + + mfames_yi_mode +; + +280 +__u8 + + mags +; + +281 +__u8 + + mma_key_dest +[ +FS_KEY_DESCRIPTOR_SIZE +]; + +282 } +__ibu__ +(( +cked +)); + +284  + #FS_IOC_SET_ENCRYPTION_POLICY + + `_IOR +('f', 19,  +fsy_picy +) + + ) + +285  + #FS_IOC_GET_ENCRYPTION_PWSALT + + `_IOW +('f', 20, +__u8 +[16]) + + ) + +286  + #FS_IOC_GET_ENCRYPTION_POLICY + + `_IOW +('f', 21,  +fsy_picy +) + + ) + +308  + #FS_SECRM_FL + 0x00000001 + + ) + +309  + #FS_UNRM_FL + 0x00000002 + + ) + +310  + #FS_COMPR_FL + 0x00000004 + + ) + +311  + #FS_SYNC_FL + 0x00000008 + + ) + +312  + #FS_IMMUTABLE_FL + 0x00000010 + + ) + +313  + #FS_APPEND_FL + 0x00000020 + + ) + +314  + #FS_NODUMP_FL + 0x00000040 + + ) + +315  + #FS_NOATIME_FL + 0x00000080 + + ) + +317  + #FS_DIRTY_FL + 0x00000100 + + ) + +318  + #FS_COMPRBLK_FL + 0x00000200 + + ) + +319  + #FS_NOCOMP_FL + 0x00000400 + + ) + +321  + #FS_ENCRYPT_FL + 0x00000800 + + ) + +322  + #FS_BTREE_FL + 0x00001000 + + ) + +323  + #FS_INDEX_FL + 0x00001000 + + ) + +324  + #FS_IMAGIC_FL + 0x00002000 + + ) + +325  + #FS_JOURNAL_DATA_FL + 0x00004000 + + ) + +326  + #FS_NOTAIL_FL + 0x00008000 + + ) + +327  + #FS_DIRSYNC_FL + 0x00010000 + + ) + +328  + #FS_TOPDIR_FL + 0x00020000 + + ) + +329  + #FS_HUGE_FILE_FL + 0x00040000 + + ) + +330  + #FS_EXTENT_FL + 0x00080000 + + ) + +331  + #FS_EA_INODE_FL + 0x00200000 + + ) + +332  + #FS_EOFBLOCKS_FL + 0x00400000 + + ) + +333  + #FS_NOCOW_FL + 0x00800000 + + ) + +334  + #FS_INLINE_DATA_FL + 0x10000000 + + ) + +335  + #FS_PROJINHERIT_FL + 0x20000000 + + ) + +336  + #FS_RESERVED_FL + 0x80000000 + + ) + +338  + #FS_FL_USER_VISIBLE + 0x0003DFFF + + ) + +339  + #FS_FL_USER_MODIFIABLE + 0x000380FF + + ) + +342  + #SYNC_FILE_RANGE_WAIT_BEFORE + 1 + + ) + +343  + #SYNC_FILE_RANGE_WRITE + 2 + + ) + +344  + #SYNC_FILE_RANGE_WAIT_AFTER + 4 + + ) + +347  + #RWF_HIPRI + 0x00000001 + + ) + +348  + #RWF_DSYNC + 0x00000002 + + ) + +349  + #RWF_SYNC + 0x00000004 + + ) + + @/usr/include/linux/if_addr.h + +1 #ide +__LINUX_IF_ADDR_H + + +2  + #__LINUX_IF_ADDR_H + + + ) + +4  + ~ + +5  + ~ + +7  + siddrmsg + { + +8 +__u8 + + mi_my +; + +9 +__u8 + + mi_efixn +; + +10 +__u8 + + mi_ags +; + +11 +__u8 + + mi_sce +; + +12 +__u32 + + mi_dex +; + +26 + mIFA_UNSPEC +, + +27 + mIFA_ADDRESS +, + +28 + mIFA_LOCAL +, + +29 + mIFA_LABEL +, + +30 + mIFA_BROADCAST +, + +31 + mIFA_ANYCAST +, + +32 + mIFA_CACHEINFO +, + +33 + mIFA_MULTICAST +, + +34 + mIFA_FLAGS +, + +35 + m__IFA_MAX +, + +38  + #IFA_MAX + ( +__IFA_MAX + - 1) + + ) + +41  + #IFA_F_SECONDARY + 0x01 + + ) + +42  + #IFA_F_TEMPORARY + +IFA_F_SECONDARY + + + ) + +44  + #IFA_F_NODAD + 0x02 + + ) + +45  + #IFA_F_OPTIMISTIC + 0x04 + + ) + +46  + #IFA_F_DADFAILED + 0x08 + + ) + +47  + #IFA_F_HOMEADDRESS + 0x10 + + ) + +48  + #IFA_F_DEPRECATED + 0x20 + + ) + +49  + #IFA_F_TENTATIVE + 0x40 + + ) + +50  + #IFA_F_PERMANENT + 0x80 + + ) + +51  + #IFA_F_MANAGETEMPADDR + 0x100 + + ) + +52  + #IFA_F_NOPREFIXROUTE + 0x200 + + ) + +53  + #IFA_F_MCAUTOJOIN + 0x400 + + ) + +54  + #IFA_F_STABLE_PRIVACY + 0x800 + + ) + +56  + si_chefo + { + +57 +__u32 + + mi_ed +; + +58 +__u32 + + mi_vid +; + +59 +__u32 + + mcamp +; + +60 +__u32 + + mtamp +; + +64  + #IFA_RTA +( +r +(( + +*)(((*))+ + `NLMSG_ALIGN +(( +iddrmsg +)))) + + ) + +65  + #IFA_PAYLOAD +( +n + + `NLMSG_PAYLOAD +,( +iddrmsg +)) + + ) + + @/usr/include/linux/if_arp.h + +23 #ide +_LINUX_IF_ARP_H + + +24  + #_LINUX_IF_ARP_H + + + ) + +26  + ~ + +29  + #ARPHRD_NETROM + 0 + + ) + +30  + #ARPHRD_ETHER + 1 + + ) + +31  + #ARPHRD_EETHER + 2 + + ) + +32  + #ARPHRD_AX25 + 3 + + ) + +33  + #ARPHRD_PRONET + 4 + + ) + +34  + #ARPHRD_CHAOS + 5 + + ) + +35  + #ARPHRD_IEEE802 + 6 + + ) + +36  + #ARPHRD_ARCNET + 7 + + ) + +37  + #ARPHRD_APPLETLK + 8 + + ) + +38  + #ARPHRD_DLCI + 15 + + ) + +39  + #ARPHRD_ATM + 19 + + ) + +40  + #ARPHRD_METRICOM + 23 + + ) + +41  + #ARPHRD_IEEE1394 + 24 + + ) + +42  + #ARPHRD_EUI64 + 27 + + ) + +43  + #ARPHRD_INFINIBAND + 32 + + ) + +46  + #ARPHRD_SLIP + 256 + + ) + +47  + #ARPHRD_CSLIP + 257 + + ) + +48  + #ARPHRD_SLIP6 + 258 + + ) + +49  + #ARPHRD_CSLIP6 + 259 + + ) + +50  + #ARPHRD_RSRVD + 260 + + ) + +51  + #ARPHRD_ADAPT + 264 + + ) + +52  + #ARPHRD_ROSE + 270 + + ) + +53  + #ARPHRD_X25 + 271 + + ) + +54  + #ARPHRD_HWX25 + 272 + + ) + +55  + #ARPHRD_CAN + 280 + + ) + +56  + #ARPHRD_PPP + 512 + + ) + +57  + #ARPHRD_CISCO + 513 + + ) + +58  + #ARPHRD_HDLC + +ARPHRD_CISCO + + + ) + +59  + #ARPHRD_LAPB + 516 + + ) + +60  + #ARPHRD_DDCMP + 517 + + ) + +61  + #ARPHRD_RAWHDLC + 518 + + ) + +63  + #ARPHRD_TUNNEL + 768 + + ) + +64  + #ARPHRD_TUNNEL6 + 769 + + ) + +65  + #ARPHRD_FRAD + 770 + + ) + +66  + #ARPHRD_SKIP + 771 + + ) + +67  + #ARPHRD_LOOPBACK + 772 + + ) + +68  + #ARPHRD_LOCALTLK + 773 + + ) + +69  + #ARPHRD_FDDI + 774 + + ) + +70  + #ARPHRD_BIF + 775 + + ) + +71  + #ARPHRD_SIT + 776 + + ) + +72  + #ARPHRD_IPDDP + 777 + + ) + +73  + #ARPHRD_IPGRE + 778 + + ) + +74  + #ARPHRD_PIMREG + 779 + + ) + +75  + #ARPHRD_HIPPI + 780 + + ) + +76  + #ARPHRD_ASH + 781 + + ) + +77  + #ARPHRD_ECONET + 782 + + ) + +78  + #ARPHRD_IRDA + 783 + + ) + +80  + #ARPHRD_FCPP + 784 + + ) + +81  + #ARPHRD_FCAL + 785 + + ) + +82  + #ARPHRD_FCPL + 786 + + ) + +83  + #ARPHRD_FCFABRIC + 787 + + ) + +85  + #ARPHRD_IEEE802_TR + 800 + + ) + +86  + #ARPHRD_IEEE80211 + 801 + + ) + +87  + #ARPHRD_IEEE80211_PRISM + 802 + + ) + +88  + #ARPHRD_IEEE80211_RADIOTAP + 803 + + ) + +89  + #ARPHRD_IEEE802154 + 804 + + ) + +90  + #ARPHRD_IEEE802154_MONITOR + 805 + + ) + +92  + #ARPHRD_PHONET + 820 + + ) + +93  + #ARPHRD_PHONET_PIPE + 821 + + ) + +94  + #ARPHRD_CAIF + 822 + + ) + +95  + #ARPHRD_IP6GRE + 823 + + ) + +96  + #ARPHRD_NETLINK + 824 + + ) + +97  + #ARPHRD_6LOWPAN + 825 + + ) + +99  + #ARPHRD_VOID + 0xFFFF + + ) + +100  + #ARPHRD_NONE + 0xFFFE + + ) + +103  + #ARPOP_REQUEST + 1 + + ) + +104  + #ARPOP_REPLY + 2 + + ) + +105  + #ARPOP_RREQUEST + 3 + + ) + +106  + #ARPOP_RREPLY + 4 + + ) + +107  + #ARPOP_InREQUEST + 8 + + ) + +108  + #ARPOP_InREPLY + 9 + + ) + +109  + #ARPOP_NAK + 10 + + ) + +113  + seq + { + +114  +sockaddr + + mp_ +; + +115  +sockaddr + + mp_ha +; + +116  + mp_ags +; + +117  +sockaddr + + mp_tmask +; + +118  + mp_dev +[16]; + +121  + seq_d + { + +122  +sockaddr + + mp_ +; + +123  +sockaddr + + mp_ha +; + +124  + mp_ags +; + +125  +sockaddr + + mp_tmask +; + +129  + #ATF_COM + 0x02 + + ) + +130  + #ATF_PERM + 0x04 + + ) + +131  + #ATF_PUBL + 0x08 + + ) + +132  + #ATF_USETRAILERS + 0x10 + + ) + +133  + #ATF_NETMASK + 0x20 + + ) + +135  + #ATF_DONTPUB + 0x40 + + ) + +141  + sphdr + { + +142 +__be16 + + m_hrd +; + +143 +__be16 + + m_o +; + +144  + m_h +; + +145  + m_n +; + +146 +__be16 + + m_ +; + +152  + m_sha +[ +ETH_ALEN +]; + +153  + m_s +[4]; + +154  + m_tha +[ +ETH_ALEN +]; + +155  + m_t +[4]; + + @/usr/include/linux/kernel.h + +1 #ide +_LINUX_KERNEL_H + + +2  + #_LINUX_KERNEL_H + + + ) + +4  + ~ + +9  + #__ALIGN_KERNEL +( +x +, +a + + `__ALIGN_KERNEL_MASK +(x, ( + `tyof +(x))- 1) + + ) + +10  + #__ALIGN_KERNEL_MASK +( +x +, +mask +(((x+ (mask)& ~(mask)) + + ) + +12  + #__KERNEL_DIV_ROUND_UP +( +n +, +d +((+ (d- 1/ (d)) + + ) + + @/usr/include/linux/netdevice.h + +25 #ide +_LINUX_NETDEVICE_H + + +26  + #_LINUX_NETDEVICE_H + + + ) + +28  + ~ + +29  + ~ + +30  + ~ + +31  + ~ + +34  + #MAX_ADDR_LEN + 32 + + ) + +37  + #INIT_NETDEV_GROUP + 0 + + ) + +41  + #NET_NAME_UNKNOWN + 0 + + ) + +42  + #NET_NAME_ENUM + 1 + + ) + +43  + #NET_NAME_PREDICTABLE + 2 + + ) + +44  + #NET_NAME_USER + 3 + + ) + +45  + #NET_NAME_RENAMED + 4 + + ) + +49 + mIF_PORT_UNKNOWN + = 0, + +50 + mIF_PORT_10BASE2 +, + +51 + mIF_PORT_10BASET +, + +52 + mIF_PORT_AUI +, + +53 + mIF_PORT_100BASET +, + +54 + mIF_PORT_100BASETX +, + +55 + mIF_PORT_100BASEFX + + +59  + #NET_ADDR_PERM + 0 + + ) + +60  + #NET_ADDR_RANDOM + 1 + + ) + +61  + #NET_ADDR_STOLEN + 2 + + ) + +62  + #NET_ADDR_SET + 3 + + ) + + @/usr/include/linux/netfilter.h + +1 #ide +__LINUX_NETFILTER_H + + +2  + #__LINUX_NETFILTER_H + + + ) + +4  + ~ + +6  + ~ + +7  + ~ + +8  + ~ + +11  + #NF_DROP + 0 + + ) + +12  + #NF_ACCEPT + 1 + + ) + +13  + #NF_STOLEN + 2 + + ) + +14  + #NF_QUEUE + 3 + + ) + +15  + #NF_REPEAT + 4 + + ) + +16  + #NF_STOP + 5 + + ) + +17  + #NF_MAX_VERDICT + +NF_STOP + + + ) + +22  + #NF_VERDICT_MASK + 0x000000ff + + ) + +25  + #NF_VERDICT_FLAG_QUEUE_BYPASS + 0x00008000 + + ) + +28  + #NF_VERDICT_QMASK + 0xffff0000 + + ) + +29  + #NF_VERDICT_QBITS + 16 + + ) + +31  + #NF_QUEUE_NR +( +x +((((x<< 16& +NF_VERDICT_QMASK +| +NF_QUEUE +) + + ) + +33  + #NF_DROP_ERR +( +x +(((-x<< 16| +NF_DROP +) + + ) + +38  + #NFC_UNKNOWN + 0x4000 + + ) + +39  + #NFC_ALTERED + 0x8000 + + ) + +42  + #NF_VERDICT_BITS + 16 + + ) + +44 + enf__hooks + { + +45 + mNF_INET_PRE_ROUTING +, + +46 + mNF_INET_LOCAL_IN +, + +47 + mNF_INET_FORWARD +, + +48 + mNF_INET_LOCAL_OUT +, + +49 + mNF_INET_POST_ROUTING +, + +50 + mNF_INET_NUMHOOKS + + +53 + enf_dev_hooks + { + +54 + mNF_NETDEV_INGRESS +, + +55 + mNF_NETDEV_NUMHOOKS + + +59 + mNFPROTO_UNSPEC + = 0, + +60 + mNFPROTO_INET + = 1, + +61 + mNFPROTO_IPV4 + = 2, + +62 + mNFPROTO_ARP + = 3, + +63 + mNFPROTO_NETDEV + = 5, + +64 + mNFPROTO_BRIDGE + = 7, + +65 + mNFPROTO_IPV6 + = 10, + +66 + mNFPROTO_DECNET + = 12, + +67 + mNFPROTO_NUMPROTO +, + +70  + unf__addr + { + +71 +__u32 + + ml +[4]; + +72 +__be32 + + m +; + +73 +__be32 + + m6 +[4]; + +74  +_addr + + m +; + +75  +6_addr + + m6 +; + + @/usr/include/linux/netfilter_arp.h + +1 #ide +__LINUX_ARP_NETFILTER_H + + +2  + #__LINUX_ARP_NETFILTER_H + + + ) + +8  + ~ + +11  + #NF_ARP + 0 + + ) + +14  + #NF_ARP_IN + 0 + + ) + +15  + #NF_ARP_OUT + 1 + + ) + +16  + #NF_ARP_FORWARD + 2 + + ) + +17  + #NF_ARP_NUMHOOKS + 3 + + ) + + @/usr/include/linux/netfilter_ipv4.h + +4 #ide +__LINUX_IP_NETFILTER_H + + +5  + #__LINUX_IP_NETFILTER_H + + + ) + +8  + ~ + +12  + ~ + +16  + #NFC_IP_SRC + 0x0001 + + ) + +18  + #NFC_IP_DST + 0x0002 + + ) + +20  + #NFC_IP_IF_IN + 0x0004 + + ) + +22  + #NFC_IP_IF_OUT + 0x0008 + + ) + +24  + #NFC_IP_TOS + 0x0010 + + ) + +26  + #NFC_IP_PROTO + 0x0020 + + ) + +28  + #NFC_IP_OPTIONS + 0x0040 + + ) + +30  + #NFC_IP_FRAG + 0x0080 + + ) + +34  + #NFC_IP_TCPFLAGS + 0x0100 + + ) + +36  + #NFC_IP_SRC_PT + 0x0200 + + ) + +38  + #NFC_IP_DST_PT + 0x0400 + + ) + +40  + #NFC_IP_PROTO_UNKNOWN + 0x2000 + + ) + +44  + #NF_IP_PRE_ROUTING + 0 + + ) + +46  + #NF_IP_LOCAL_IN + 1 + + ) + +48  + #NF_IP_FORWARD + 2 + + ) + +50  + #NF_IP_LOCAL_OUT + 3 + + ) + +52  + #NF_IP_POST_ROUTING + 4 + + ) + +53  + #NF_IP_NUMHOOKS + 5 + + ) + +55 + enf__hook_iܙs + { + +56 + mNF_IP_PRI_FIRST + = +INT_MIN +, + +57 + mNF_IP_PRI_CONNTRACK_DEFRAG + = -400, + +58 + mNF_IP_PRI_RAW + = -300, + +59 + mNF_IP_PRI_SELINUX_FIRST + = -225, + +60 + mNF_IP_PRI_CONNTRACK + = -200, + +61 + mNF_IP_PRI_MANGLE + = -150, + +62 + mNF_IP_PRI_NAT_DST + = -100, + +63 + mNF_IP_PRI_FILTER + = 0, + +64 + mNF_IP_PRI_SECURITY + = 50, + +65 + mNF_IP_PRI_NAT_SRC + = 100, + +66 + mNF_IP_PRI_SELINUX_LAST + = 225, + +67 + mNF_IP_PRI_CONNTRACK_HELPER + = 300, + +68 + mNF_IP_PRI_CONNTRACK_CONFIRM + = +INT_MAX +, + +69 + mNF_IP_PRI_LAST + = +INT_MAX +, + +76  + #SO_ORIGINAL_DST + 80 + + ) + + @/usr/include/linux/netlink.h + +1 #ide +__LINUX_NETLINK_H + + +2  + #__LINUX_NETLINK_H + + + ) + +4  + ~ + +5  + ~ + +6  + ~ + +8  + #NETLINK_ROUTE + 0 + + ) + +9  + #NETLINK_UNUSED + 1 + + ) + +10  + #NETLINK_USERSOCK + 2 + + ) + +11  + #NETLINK_FIREWALL + 3 + + ) + +12  + #NETLINK_SOCK_DIAG + 4 + + ) + +13  + #NETLINK_NFLOG + 5 + + ) + +14  + #NETLINK_XFRM + 6 + + ) + +15  + #NETLINK_SELINUX + 7 + + ) + +16  + #NETLINK_ISCSI + 8 + + ) + +17  + #NETLINK_AUDIT + 9 + + ) + +18  + #NETLINK_FIB_LOOKUP + 10 + + ) + +19  + #NETLINK_CONNECTOR + 11 + + ) + +20  + #NETLINK_NETFILTER + 12 + + ) + +21  + #NETLINK_IP6_FW + 13 + + ) + +22  + #NETLINK_DNRTMSG + 14 + + ) + +23  + #NETLINK_KOBJECT_UEVENT + 15 + + ) + +24  + #NETLINK_GENERIC + 16 + + ) + +26  + #NETLINK_SCSITRANSPORT + 18 + + ) + +27  + #NETLINK_ECRYPTFS + 19 + + ) + +28  + #NETLINK_RDMA + 20 + + ) + +29  + #NETLINK_CRYPTO + 21 + + ) + +31  + #NETLINK_INET_DIAG + +NETLINK_SOCK_DIAG + + + ) + +33  + #MAX_LINKS + 32 + + ) + +35  + ssockaddr_ + { + +36 +__kl__my_t + + m_my +; + +37  + m_d +; + +38 +__u32 + + m_pid +; + +39 +__u32 + + m_groups +; + +42  + smsghdr + { + +43 +__u32 + + mmsg_n +; + +44 +__u16 + + mmsg_ty +; + +45 +__u16 + + mmsg_ags +; + +46 +__u32 + + mmsg_q +; + +47 +__u32 + + mmsg_pid +; + +52  + #NLM_F_REQUEST + 1 + + ) + +53  + #NLM_F_MULTI + 2 + + ) + +54  + #NLM_F_ACK + 4 + + ) + +55  + #NLM_F_ECHO + 8 + + ) + +56  + #NLM_F_DUMP_INTR + 16 + + ) + +57  + #NLM_F_DUMP_FILTERED + 32 + + ) + +60  + #NLM_F_ROOT + 0x100 + + ) + +61  + #NLM_F_MATCH + 0x200 + + ) + +62  + #NLM_F_ATOMIC + 0x400 + + ) + +63  + #NLM_F_DUMP + ( +NLM_F_ROOT +| +NLM_F_MATCH +) + + ) + +66  + #NLM_F_REPLACE + 0x100 + + ) + +67  + #NLM_F_EXCL + 0x200 + + ) + +68  + #NLM_F_CREATE + 0x400 + + ) + +69  + #NLM_F_APPEND + 0x800 + + ) + +80  + #NLMSG_ALIGNTO + 4U + + ) + +81  + #NLMSG_ALIGN +( +n +(֒)+ +NLMSG_ALIGNTO +-1& ~(NLMSG_ALIGNTO-1) + + ) + +82  + #NLMSG_HDRLEN + (( + `NLMSG_ALIGN +(( +msghdr +))) + + ) + +83  + #NLMSG_LENGTH +( +n +(֒+ +NLMSG_HDRLEN +) + + ) + +84  + #NLMSG_SPACE +( +n + + `NLMSG_ALIGN +( + `NLMSG_LENGTH +֒)) + + ) + +85  + #NLMSG_DATA +( +h +((*)(((*lh+ + `NLMSG_LENGTH +(0))) + + ) + +86  + #NLMSG_NEXT +( +h +, +n +(֒- + `NLMSG_ALIGN +(lh)-> +msg_n +), \ + +87 ( +msghdr +*)(((*)( +h +)+ + `NLMSG_ALIGN +(lh)-> +msg_n +))) + + ) + +88  + #NLMSG_OK +( +h +, +n +(֒>()( +msghdr +) && \ + +89 ( +h +)-> +msg_n + >( +msghdr +) && \ + +90 ( +h +)-> +msg_n + <( +n +)) + + ) + +91  + #NLMSG_PAYLOAD +( +h +, +n +(lh)-> +msg_n + - + `NLMSG_SPACE +(֒))) + + ) + +93  + #NLMSG_NOOP + 0x1 + + ) + +94  + #NLMSG_ERROR + 0x2 + + ) + +95  + #NLMSG_DONE + 0x3 + + ) + +96  + #NLMSG_OVERRUN + 0x4 + + ) + +98  + #NLMSG_MIN_TYPE + 0x10 + + ) + +100  + smsgr + { + +101  + mr +; + +102  +msghdr + + mmsg +; + +105  + #NETLINK_ADD_MEMBERSHIP + 1 + + ) + +106  + #NETLINK_DROP_MEMBERSHIP + 2 + + ) + +107  + #NETLINK_PKTINFO + 3 + + ) + +108  + #NETLINK_BROADCAST_ERROR + 4 + + ) + +109  + #NETLINK_NO_ENOBUFS + 5 + + ) + +110  + #NETLINK_RX_RING + 6 + + ) + +111  + #NETLINK_TX_RING + 7 + + ) + +112  + #NETLINK_LISTEN_ALL_NSID + 8 + + ) + +113  + #NETLINK_LIST_MEMBERSHIPS + 9 + + ) + +114  + #NETLINK_CAP_ACK + 10 + + ) + +116  + s_pktfo + { + +117 +__u32 + + mgroup +; + +120  + s_mm_q + { + +121  + mnm_block_size +; + +122  + mnm_block_ +; + +123  + mnm_ame_size +; + +124  + mnm_ame_ +; + +127  + s_mm_hdr + { + +128  + mnm_us +; + +129  + mnm_n +; + +130 +__u32 + + mnm_group +; + +132 +__u32 + + mnm_pid +; + +133 +__u32 + + mnm_uid +; + +134 +__u32 + + mnm_gid +; + +137 + e_mm_us + { + +138 + mNL_MMAP_STATUS_UNUSED +, + +139 + mNL_MMAP_STATUS_RESERVED +, + +140 + mNL_MMAP_STATUS_VALID +, + +141 + mNL_MMAP_STATUS_COPY +, + +142 + mNL_MMAP_STATUS_SKIP +, + +145  + #NL_MMAP_MSG_ALIGNMENT + +NLMSG_ALIGNTO + + + ) + +146  + #NL_MMAP_MSG_ALIGN +( +sz + + `__ALIGN_KERNEL +(sz, +NL_MMAP_MSG_ALIGNMENT +) + + ) + +147  + #NL_MMAP_HDRLEN + + `NL_MMAP_MSG_ALIGN +(( +_mm_hdr +)) + + ) + +149  + #NET_MAJOR + 36 + + ) + +152 + mNETLINK_UNCONNECTED + = 0, + +153 + mNETLINK_CONNECTED +, + +165  + sƩ + { + +166 +__u16 + + ma_n +; + +167 +__u16 + + ma_ty +; + +180  + #NLA_F_NESTED + (1 << 15) + + ) + +181  + #NLA_F_NET_BYTEORDER + (1 << 14) + + ) + +182  + #NLA_TYPE_MASK + ~( +NLA_F_NESTED + | +NLA_F_NET_BYTEORDER +) + + ) + +184  + #NLA_ALIGNTO + 4 + + ) + +185  + #NLA_ALIGN +( +n +((֒+ +NLA_ALIGNTO + - 1& ~(NLA_ALIGNTO - 1)) + + ) + +186  + #NLA_HDRLEN + (( + `NLA_ALIGN +(( +Ʃ +))) + + ) + + @/usr/include/linux/rtnetlink.h + +1 #ide +__LINUX_RTNETLINK_H + + +2  + #__LINUX_RTNETLINK_H + + + ) + +4  + ~ + +5  + ~ + +6  + ~ + +7  + ~ + +8  + ~ + +13  + #RTNL_FAMILY_IPMR + 128 + + ) + +14  + #RTNL_FAMILY_IP6MR + 129 + + ) + +15  + #RTNL_FAMILY_MAX + 129 + + ) + +24 + mRTM_BASE + = 16, + +25  + #RTM_BASE + +RTM_BASE + + + ) + +27 + mRTM_NEWLINK + = 16, + +28  + #RTM_NEWLINK + +RTM_NEWLINK + + + ) + +29 + mRTM_DELLINK +, + +30  + #RTM_DELLINK + +RTM_DELLINK + + + ) + +31 + mRTM_GETLINK +, + +32  + #RTM_GETLINK + +RTM_GETLINK + + + ) + +33 + mRTM_SETLINK +, + +34  + #RTM_SETLINK + +RTM_SETLINK + + + ) + +36 + mRTM_NEWADDR + = 20, + +37  + #RTM_NEWADDR + +RTM_NEWADDR + + + ) + +38 + mRTM_DELADDR +, + +39  + #RTM_DELADDR + +RTM_DELADDR + + + ) + +40 + mRTM_GETADDR +, + +41  + #RTM_GETADDR + +RTM_GETADDR + + + ) + +43 + mRTM_NEWROUTE + = 24, + +44  + #RTM_NEWROUTE + +RTM_NEWROUTE + + + ) + +45 + mRTM_DELROUTE +, + +46  + #RTM_DELROUTE + +RTM_DELROUTE + + + ) + +47 + mRTM_GETROUTE +, + +48  + #RTM_GETROUTE + +RTM_GETROUTE + + + ) + +50 + mRTM_NEWNEIGH + = 28, + +51  + #RTM_NEWNEIGH + +RTM_NEWNEIGH + + + ) + +52 + mRTM_DELNEIGH +, + +53  + #RTM_DELNEIGH + +RTM_DELNEIGH + + + ) + +54 + mRTM_GETNEIGH +, + +55  + #RTM_GETNEIGH + +RTM_GETNEIGH + + + ) + +57 + mRTM_NEWRULE + = 32, + +58  + #RTM_NEWRULE + +RTM_NEWRULE + + + ) + +59 + mRTM_DELRULE +, + +60  + #RTM_DELRULE + +RTM_DELRULE + + + ) + +61 + mRTM_GETRULE +, + +62  + #RTM_GETRULE + +RTM_GETRULE + + + ) + +64 + mRTM_NEWQDISC + = 36, + +65  + #RTM_NEWQDISC + +RTM_NEWQDISC + + + ) + +66 + mRTM_DELQDISC +, + +67  + #RTM_DELQDISC + +RTM_DELQDISC + + + ) + +68 + mRTM_GETQDISC +, + +69  + #RTM_GETQDISC + +RTM_GETQDISC + + + ) + +71 + mRTM_NEWTCLASS + = 40, + +72  + #RTM_NEWTCLASS + +RTM_NEWTCLASS + + + ) + +73 + mRTM_DELTCLASS +, + +74  + #RTM_DELTCLASS + +RTM_DELTCLASS + + + ) + +75 + mRTM_GETTCLASS +, + +76  + #RTM_GETTCLASS + +RTM_GETTCLASS + + + ) + +78 + mRTM_NEWTFILTER + = 44, + +79  + #RTM_NEWTFILTER + +RTM_NEWTFILTER + + + ) + +80 + mRTM_DELTFILTER +, + +81  + #RTM_DELTFILTER + +RTM_DELTFILTER + + + ) + +82 + mRTM_GETTFILTER +, + +83  + #RTM_GETTFILTER + +RTM_GETTFILTER + + + ) + +85 + mRTM_NEWACTION + = 48, + +86  + #RTM_NEWACTION + +RTM_NEWACTION + + + ) + +87 + mRTM_DELACTION +, + +88  + #RTM_DELACTION + +RTM_DELACTION + + + ) + +89 + mRTM_GETACTION +, + +90  + #RTM_GETACTION + +RTM_GETACTION + + + ) + +92 + mRTM_NEWPREFIX + = 52, + +93  + #RTM_NEWPREFIX + +RTM_NEWPREFIX + + + ) + +95 + mRTM_GETMULTICAST + = 58, + +96  + #RTM_GETMULTICAST + +RTM_GETMULTICAST + + + ) + +98 + mRTM_GETANYCAST + = 62, + +99  + #RTM_GETANYCAST + +RTM_GETANYCAST + + + ) + +101 + mRTM_NEWNEIGHTBL + = 64, + +102  + #RTM_NEWNEIGHTBL + +RTM_NEWNEIGHTBL + + + ) + +103 + mRTM_GETNEIGHTBL + = 66, + +104  + #RTM_GETNEIGHTBL + +RTM_GETNEIGHTBL + + + ) + +105 + mRTM_SETNEIGHTBL +, + +106  + #RTM_SETNEIGHTBL + +RTM_SETNEIGHTBL + + + ) + +108 + mRTM_NEWNDUSEROPT + = 68, + +109  + #RTM_NEWNDUSEROPT + +RTM_NEWNDUSEROPT + + + ) + +111 + mRTM_NEWADDRLABEL + = 72, + +112  + #RTM_NEWADDRLABEL + +RTM_NEWADDRLABEL + + + ) + +113 + mRTM_DELADDRLABEL +, + +114  + #RTM_DELADDRLABEL + +RTM_DELADDRLABEL + + + ) + +115 + mRTM_GETADDRLABEL +, + +116  + #RTM_GETADDRLABEL + +RTM_GETADDRLABEL + + + ) + +118 + mRTM_GETDCB + = 78, + +119  + #RTM_GETDCB + +RTM_GETDCB + + + ) + +120 + mRTM_SETDCB +, + +121  + #RTM_SETDCB + +RTM_SETDCB + + + ) + +123 + mRTM_NEWNETCONF + = 80, + +124  + #RTM_NEWNETCONF + +RTM_NEWNETCONF + + + ) + +125 + mRTM_GETNETCONF + = 82, + +126  + #RTM_GETNETCONF + +RTM_GETNETCONF + + + ) + +128 + mRTM_NEWMDB + = 84, + +129  + #RTM_NEWMDB + +RTM_NEWMDB + + + ) + +130 + mRTM_DELMDB + = 85, + +131  + #RTM_DELMDB + +RTM_DELMDB + + + ) + +132 + mRTM_GETMDB + = 86, + +133  + #RTM_GETMDB + +RTM_GETMDB + + + ) + +135 + mRTM_NEWNSID + = 88, + +136  + #RTM_NEWNSID + +RTM_NEWNSID + + + ) + +137 + mRTM_DELNSID + = 89, + +138  + #RTM_DELNSID + +RTM_DELNSID + + + ) + +139 + mRTM_GETNSID + = 90, + +140  + #RTM_GETNSID + +RTM_GETNSID + + + ) + +142 + mRTM_NEWSTATS + = 92, + +143  + #RTM_NEWSTATS + +RTM_NEWSTATS + + + ) + +144 + mRTM_GETSTATS + = 94, + +145  + #RTM_GETSTATS + +RTM_GETSTATS + + + ) + +147 + m__RTM_MAX +, + +148  + #RTM_MAX + ((( +__RTM_MAX + + 3& ~3- 1) + + ) + +151  + #RTM_NR_MSGTYPES + ( +RTM_MAX + + 1 - +RTM_BASE +) + + ) + +152  + #RTM_NR_FAMILIES + ( +RTM_NR_MSGTYPES + >> 2) + + ) + +153  + #RTM_FAM +( +cmd +(((cmd- +RTM_BASE +>> 2) + + ) + +161  + s + { + +162  + ma_n +; + +163  + ma_ty +; + +168  + #RTA_ALIGNTO + 4U + + ) + +169  + #RTA_ALIGN +( +n +(֒)+ +RTA_ALIGNTO +-1& ~(RTA_ALIGNTO-1) + + ) + +170  + #RTA_OK +( +a +, +n +(֒>()( + +) && \ + +171 ( +a +)-> +a_n + >( + +) && \ + +172 ( +a +)-> +a_n + <( +n +)) + + ) + +173  + #RTA_NEXT +( +a +, +n +(׉- + `RTA_ALIGN +(ԏ)-> +a_n +), \ + +174 ( + +*)(((*)( +a +)+ + `RTA_ALIGN +(ԏ)-> +a_n +))) + + ) + +175  + #RTA_LENGTH +( +n +( + `RTA_ALIGN +(( + +)+ (n)) + + ) + +176  + #RTA_SPACE +( +n + + `RTA_ALIGN +( + `RTA_LENGTH +֒)) + + ) + +177  + #RTA_DATA +( +a +((*)(((*)ԏ)+ + `RTA_LENGTH +(0))) + + ) + +178  + #RTA_PAYLOAD +( +a +(()(ԏ)-> +a_n +- + `RTA_LENGTH +(0)) + + ) + +187  + smsg + { + +188  + mm_my +; + +189  + mm_d_n +; + +190  + mm_c_n +; + +191  + mm_tos +; + +193  + mm_b +; + +194  + mm_oc +; + +195  + mm_sce +; + +196  + mm_ty +; + +198  + mm_ags +; + +204 + mRTN_UNSPEC +, + +205 + mRTN_UNICAST +, + +206 + mRTN_LOCAL +, + +207 + mRTN_BROADCAST +, + +209 + mRTN_ANYCAST +, + +211 + mRTN_MULTICAST +, + +212 + mRTN_BLACKHOLE +, + +213 + mRTN_UNREACHABLE +, + +214 + mRTN_PROHIBIT +, + +215 + mRTN_THROW +, + +216 + mRTN_NAT +, + +217 + mRTN_XRESOLVE +, + +218 + m__RTN_MAX + + +221  + #RTN_MAX + ( +__RTN_MAX + - 1) + + ) + +226  + #RTPROT_UNSPEC + 0 + + ) + +227  + #RTPROT_REDIRECT + 1 + + ) + +229  + #RTPROT_KERNEL + 2 + + ) + +230  + #RTPROT_BOOT + 3 + + ) + +231  + #RTPROT_STATIC + 4 + + ) + +240  + #RTPROT_GATED + 8 + + ) + +241  + #RTPROT_RA + 9 + + ) + +242  + #RTPROT_MRT + 10 + + ) + +243  + #RTPROT_ZEBRA + 11 + + ) + +244  + #RTPROT_BIRD + 12 + + ) + +245  + #RTPROT_DNROUTED + 13 + + ) + +246  + #RTPROT_XORP + 14 + + ) + +247  + #RTPROT_NTK + 15 + + ) + +248  + #RTPROT_DHCP + 16 + + ) + +249  + #RTPROT_MROUTED + 17 + + ) + +250  + #RTPROT_BABEL + 42 + + ) + +263 + e_sce_t + { + +264 + mRT_SCOPE_UNIVERSE +=0, + +266 + mRT_SCOPE_SITE +=200, + +267 + mRT_SCOPE_LINK +=253, + +268 + mRT_SCOPE_HOST +=254, + +269 + mRT_SCOPE_NOWHERE +=255 + +274  + #RTM_F_NOTIFY + 0x100 + + ) + +275  + #RTM_F_CLONED + 0x200 + + ) + +276  + #RTM_F_EQUALIZE + 0x400 + + ) + +277  + #RTM_F_PREFIX + 0x800 + + ) + +278  + #RTM_F_LOOKUP_TABLE + 0x1000 + + ) + +282 + e_ass_t + { + +283 + mRT_TABLE_UNSPEC +=0, + +285 + mRT_TABLE_COMPAT +=252, + +286 + mRT_TABLE_DEFAULT +=253, + +287 + mRT_TABLE_MAIN +=254, + +288 + mRT_TABLE_LOCAL +=255, + +289 + mRT_TABLE_MAX +=0xFFFFFFFF + +295 + e_ty_t + { + +296 + mRTA_UNSPEC +, + +297 + mRTA_DST +, + +298 + mRTA_SRC +, + +299 + mRTA_IIF +, + +300 + mRTA_OIF +, + +301 + mRTA_GATEWAY +, + +302 + mRTA_PRIORITY +, + +303 + mRTA_PREFSRC +, + +304 + mRTA_METRICS +, + +305 + mRTA_MULTIPATH +, + +306 + mRTA_PROTOINFO +, + +307 + mRTA_FLOW +, + +308 + mRTA_CACHEINFO +, + +309 + mRTA_SESSION +, + +310 + mRTA_MP_ALGO +, + +311 + mRTA_TABLE +, + +312 + mRTA_MARK +, + +313 + mRTA_MFC_STATS +, + +314 + mRTA_VIA +, + +315 + mRTA_NEWDST +, + +316 + mRTA_PREF +, + +317 + mRTA_ENCAP_TYPE +, + +318 + mRTA_ENCAP +, + +319 + mRTA_EXPIRES +, + +320 + mRTA_PAD +, + +321 + mRTA_UID +, + +322 + m__RTA_MAX + + +325  + #RTA_MAX + ( +__RTA_MAX + - 1) + + ) + +327  + #RTM_RTA +( +r +(( + +*)(((*))+ + `NLMSG_ALIGN +(( +msg +)))) + + ) + +328  + #RTM_PAYLOAD +( +n + + `NLMSG_PAYLOAD +,( +msg +)) + + ) + +339  + sxth + { + +340  + mnh_n +; + +341  + mnh_ags +; + +342  + mnh_hs +; + +343  + mnh_ifdex +; + +348  + #RTNH_F_DEAD + 1 + + ) + +349  + #RTNH_F_PERVASIVE + 2 + + ) + +350  + #RTNH_F_ONLINK + 4 + + ) + +351  + #RTNH_F_OFFLOAD + 8 + + ) + +352  + #RTNH_F_LINKDOWN + 16 + + ) + +354  + #RTNH_COMPARE_MASK + ( +RTNH_F_DEAD + | +RTNH_F_LINKDOWN + | +RTNH_F_OFFLOAD +) + + ) + +358  + #RTNH_ALIGNTO + 4 + + ) + +359  + #RTNH_ALIGN +( +n +(֒)+ +RTNH_ALIGNTO +-1& ~(RTNH_ALIGNTO-1) + + ) + +360  + #RTNH_OK +( +nh +, +n +(Ԋh)-> +nh_n + >( +xth +) && \ + +361 (()( +nh +)-> +nh_n +<( +n +)) + + ) + +362  + #RTNH_NEXT +( +nh +(( +xth +*)(((*)Ԋh)+ + `RTNH_ALIGN +(Ԋh)-> +nh_n +))) + + ) + +363  + #RTNH_LENGTH +( +n +( + `RTNH_ALIGN +(( +xth +)+ (n)) + + ) + +364  + #RTNH_SPACE +( +n + + `RTNH_ALIGN +( + `RTNH_LENGTH +֒)) + + ) + +365  + #RTNH_DATA +( +nh +(( + +*)(((*)Ԋh)+ + `RTNH_LENGTH +(0))) + + ) + +368  + sv + { + +369 +__kl__my_t + + mv_my +; + +370 +__u8 + + mv_addr +[0]; + +375  + sa_chefo + { + +376 +__u32 + + ma_f +; + +377 +__u32 + + ma_ϡu +; + +378 +__s32 + + ma_expes +; + +379 +__u32 + + ma_r +; + +380 +__u32 + + ma_ud +; + +382  + #RTNETLINK_HAVE_PEERINFO + 1 + + ) + +383 +__u32 + + ma_id +; + +384 +__u32 + + ma_ts +; + +385 +__u32 + + ma_tge +; + +391 + mRTAX_UNSPEC +, + +392  + #RTAX_UNSPEC + +RTAX_UNSPEC + + + ) + +393 + mRTAX_LOCK +, + +394  + #RTAX_LOCK + +RTAX_LOCK + + + ) + +395 + mRTAX_MTU +, + +396  + #RTAX_MTU + +RTAX_MTU + + + ) + +397 + mRTAX_WINDOW +, + +398  + #RTAX_WINDOW + +RTAX_WINDOW + + + ) + +399 + mRTAX_RTT +, + +400  + #RTAX_RTT + +RTAX_RTT + + + ) + +401 + mRTAX_RTTVAR +, + +402  + #RTAX_RTTVAR + +RTAX_RTTVAR + + + ) + +403 + mRTAX_SSTHRESH +, + +404  + #RTAX_SSTHRESH + +RTAX_SSTHRESH + + + ) + +405 + mRTAX_CWND +, + +406  + #RTAX_CWND + +RTAX_CWND + + + ) + +407 + mRTAX_ADVMSS +, + +408  + #RTAX_ADVMSS + +RTAX_ADVMSS + + + ) + +409 + mRTAX_REORDERING +, + +410  + #RTAX_REORDERING + +RTAX_REORDERING + + + ) + +411 + mRTAX_HOPLIMIT +, + +412  + #RTAX_HOPLIMIT + +RTAX_HOPLIMIT + + + ) + +413 + mRTAX_INITCWND +, + +414  + #RTAX_INITCWND + +RTAX_INITCWND + + + ) + +415 + mRTAX_FEATURES +, + +416  + #RTAX_FEATURES + +RTAX_FEATURES + + + ) + +417 + mRTAX_RTO_MIN +, + +418  + #RTAX_RTO_MIN + +RTAX_RTO_MIN + + + ) + +419 + mRTAX_INITRWND +, + +420  + #RTAX_INITRWND + +RTAX_INITRWND + + + ) + +421 + mRTAX_QUICKACK +, + +422  + #RTAX_QUICKACK + +RTAX_QUICKACK + + + ) + +423 + mRTAX_CC_ALGO +, + +424  + #RTAX_CC_ALGO + +RTAX_CC_ALGO + + + ) + +425 + m__RTAX_MAX + + +428  + #RTAX_MAX + ( +__RTAX_MAX + - 1) + + ) + +430  + #RTAX_FEATURE_ECN + (1 << 0) + + ) + +431  + #RTAX_FEATURE_SACK + (1 << 1) + + ) + +432  + #RTAX_FEATURE_TIMESTAMP + (1 << 2) + + ) + +433  + #RTAX_FEATURE_ALLFRAG + (1 << 3) + + ) + +435  + #RTAX_FEATURE_MASK + ( +RTAX_FEATURE_ECN + | +RTAX_FEATURE_SACK + | \ + +436 +RTAX_FEATURE_TIMESTAMP + | +RTAX_FEATURE_ALLFRAG +) + + ) + +438  + sa_ssi + { + +439 +__u8 + + mo +; + +440 +__u8 + + md1 +; + +441 +__u16 + + md2 +; + +445 +__u16 + + mt +; + +446 +__u16 + + mdpt +; + +447 } + mpts +; + +450 +__u8 + + mty +; + +451 +__u8 + + mcode +; + +452 +__u16 + + midt +; + +453 } + micm +; + +455 +__u32 + + mi +; + +456 } + mu +; + +459  + sa_mfc_s + { + +460 +__u64 + + mmfcs_cks +; + +461 +__u64 + + mmfcs_bys +; + +462 +__u64 + + mmfcs_wrg_if +; + +469  + sgmsg + { + +470  + mg_my +; + +482  + siffomsg + { + +483  + mifi_my +; + +484  + m__ifi_d +; + +485  + mifi_ty +; + +486  + mifi_dex +; + +487  + mifi_ags +; + +488  + mifi_chge +; + +495  + sefixmsg + { + +496  + mefix_my +; + +497  + mefix_d1 +; + +498  + mefix_d2 +; + +499  + mefix_ifdex +; + +500  + mefix_ty +; + +501  + mefix_n +; + +502  + mefix_ags +; + +503  + mefix_d3 +; + +508 + mPREFIX_UNSPEC +, + +509 + mPREFIX_ADDRESS +, + +510 + mPREFIX_CACHEINFO +, + +511 + m__PREFIX_MAX + + +514  + #PREFIX_MAX + ( +__PREFIX_MAX + - 1) + + ) + +516  + sefix_chefo + { + +517 +__u32 + + meed_time +; + +518 +__u32 + + mvid_time +; + +526  + stcmsg + { + +527  + mtcm_my +; + +528  + mtcm__d1 +; + +529  + mtcm__d2 +; + +530  + mtcm_ifdex +; + +531 +__u32 + + mtcm_hd +; + +532 +__u32 + + mtcm_ +; + +533 +__u32 + + mtcm_fo +; + +537 + mTCA_UNSPEC +, + +538 + mTCA_KIND +, + +539 + mTCA_OPTIONS +, + +540 + mTCA_STATS +, + +541 + mTCA_XSTATS +, + +542 + mTCA_RATE +, + +543 + mTCA_FCNT +, + +544 + mTCA_STATS2 +, + +545 + mTCA_STAB +, + +546 + mTCA_PAD +, + +547 + m__TCA_MAX + + +550  + #TCA_MAX + ( +__TCA_MAX + - 1) + + ) + +552  + #TCA_RTA +( +r +(( + +*)(((*))+ + `NLMSG_ALIGN +(( +tcmsg +)))) + + ) + +553  + #TCA_PAYLOAD +( +n + + `NLMSG_PAYLOAD +,( +tcmsg +)) + + ) + +559  + sndurtmsg + { + +560  + mndurt_my +; + +561  + mndurt_d1 +; + +562  + mndurt_ts_n +; + +563  + mndurt_ifdex +; + +564 +__u8 + + mndurt_icmp_ty +; + +565 +__u8 + + mndurt_icmp_code +; + +566  + mndurt_d2 +; + +567  + mndurt_d3 +; + +572 + mNDUSEROPT_UNSPEC +, + +573 + mNDUSEROPT_SRCADDR +, + +574 + m__NDUSEROPT_MAX + + +577  + #NDUSEROPT_MAX + ( +__NDUSEROPT_MAX + - 1) + + ) + +580  + #RTMGRP_LINK + 1 + + ) + +581  + #RTMGRP_NOTIFY + 2 + + ) + +582  + #RTMGRP_NEIGH + 4 + + ) + +583  + #RTMGRP_TC + 8 + + ) + +585  + #RTMGRP_IPV4_IFADDR + 0x10 + + ) + +586  + #RTMGRP_IPV4_MROUTE + 0x20 + + ) + +587  + #RTMGRP_IPV4_ROUTE + 0x40 + + ) + +588  + #RTMGRP_IPV4_RULE + 0x80 + + ) + +590  + #RTMGRP_IPV6_IFADDR + 0x100 + + ) + +591  + #RTMGRP_IPV6_MROUTE + 0x200 + + ) + +592  + #RTMGRP_IPV6_ROUTE + 0x400 + + ) + +593  + #RTMGRP_IPV6_IFINFO + 0x800 + + ) + +595  + #RTMGRP_DECt_IFADDR + 0x1000 + + ) + +596  + #RTMGRP_DECt_ROUTE + 0x4000 + + ) + +598  + #RTMGRP_IPV6_PREFIX + 0x20000 + + ) + +601 + eÎk_groups + { + +602 + mRTNLGRP_NONE +, + +603  + #RTNLGRP_NONE + +RTNLGRP_NONE + + + ) + +604 + mRTNLGRP_LINK +, + +605  + #RTNLGRP_LINK + +RTNLGRP_LINK + + + ) + +606 + mRTNLGRP_NOTIFY +, + +607  + #RTNLGRP_NOTIFY + +RTNLGRP_NOTIFY + + + ) + +608 + mRTNLGRP_NEIGH +, + +609  + #RTNLGRP_NEIGH + +RTNLGRP_NEIGH + + + ) + +610 + mRTNLGRP_TC +, + +611  + #RTNLGRP_TC + +RTNLGRP_TC + + + ) + +612 + mRTNLGRP_IPV4_IFADDR +, + +613  + #RTNLGRP_IPV4_IFADDR + +RTNLGRP_IPV4_IFADDR + + + ) + +614 + mRTNLGRP_IPV4_MROUTE +, + +615  + #RTNLGRP_IPV4_MROUTE + +RTNLGRP_IPV4_MROUTE + + + ) + +616 + mRTNLGRP_IPV4_ROUTE +, + +617  + #RTNLGRP_IPV4_ROUTE + +RTNLGRP_IPV4_ROUTE + + + ) + +618 + mRTNLGRP_IPV4_RULE +, + +619  + #RTNLGRP_IPV4_RULE + +RTNLGRP_IPV4_RULE + + + ) + +620 + mRTNLGRP_IPV6_IFADDR +, + +621  + #RTNLGRP_IPV6_IFADDR + +RTNLGRP_IPV6_IFADDR + + + ) + +622 + mRTNLGRP_IPV6_MROUTE +, + +623  + #RTNLGRP_IPV6_MROUTE + +RTNLGRP_IPV6_MROUTE + + + ) + +624 + mRTNLGRP_IPV6_ROUTE +, + +625  + #RTNLGRP_IPV6_ROUTE + +RTNLGRP_IPV6_ROUTE + + + ) + +626 + mRTNLGRP_IPV6_IFINFO +, + +627  + #RTNLGRP_IPV6_IFINFO + +RTNLGRP_IPV6_IFINFO + + + ) + +628 + mRTNLGRP_DECt_IFADDR +, + +629  + #RTNLGRP_DECt_IFADDR + +RTNLGRP_DECt_IFADDR + + + ) + +630 + mRTNLGRP_NOP2 +, + +631 + mRTNLGRP_DECt_ROUTE +, + +632  + #RTNLGRP_DECt_ROUTE + +RTNLGRP_DECt_ROUTE + + + ) + +633 + mRTNLGRP_DECt_RULE +, + +634  + #RTNLGRP_DECt_RULE + +RTNLGRP_DECt_RULE + + + ) + +635 + mRTNLGRP_NOP4 +, + +636 + mRTNLGRP_IPV6_PREFIX +, + +637  + #RTNLGRP_IPV6_PREFIX + +RTNLGRP_IPV6_PREFIX + + + ) + +638 + mRTNLGRP_IPV6_RULE +, + +639  + #RTNLGRP_IPV6_RULE + +RTNLGRP_IPV6_RULE + + + ) + +640 + mRTNLGRP_ND_USEROPT +, + +641  + #RTNLGRP_ND_USEROPT + +RTNLGRP_ND_USEROPT + + + ) + +642 + mRTNLGRP_PHONET_IFADDR +, + +643  + #RTNLGRP_PHONET_IFADDR + +RTNLGRP_PHONET_IFADDR + + + ) + +644 + mRTNLGRP_PHONET_ROUTE +, + +645  + #RTNLGRP_PHONET_ROUTE + +RTNLGRP_PHONET_ROUTE + + + ) + +646 + mRTNLGRP_DCB +, + +647  + #RTNLGRP_DCB + +RTNLGRP_DCB + + + ) + +648 + mRTNLGRP_IPV4_NETCONF +, + +649  + #RTNLGRP_IPV4_NETCONF + +RTNLGRP_IPV4_NETCONF + + + ) + +650 + mRTNLGRP_IPV6_NETCONF +, + +651  + #RTNLGRP_IPV6_NETCONF + +RTNLGRP_IPV6_NETCONF + + + ) + +652 + mRTNLGRP_MDB +, + +653  + #RTNLGRP_MDB + +RTNLGRP_MDB + + + ) + +654 + mRTNLGRP_MPLS_ROUTE +, + +655  + #RTNLGRP_MPLS_ROUTE + +RTNLGRP_MPLS_ROUTE + + + ) + +656 + mRTNLGRP_NSID +, + +657  + #RTNLGRP_NSID + +RTNLGRP_NSID + + + ) + +658 + m__RTNLGRP_MAX + + +660  + #RTNLGRP_MAX + ( +__RTNLGRP_MAX + - 1) + + ) + +663  + stmsg + { + +664  + mt_my +; + +665  + mt__d1 +; + +666  + mt__d2 +; + +668  + #TA_RTA +( +r +(( + +*)(((*))+ + `NLMSG_ALIGN +(( +tmsg +)))) + + ) + +669  + #TA_PAYLOAD +( +n + + `NLMSG_PAYLOAD +,( +tmsg +)) + + ) + +670  + #TCA_ACT_TAB + 1 + + ) + +671  + #TCAA_MAX + 1 + + ) + +674  + #RTEXT_FILTER_VF + (1 << 0) + + ) + +675  + #RTEXT_FILTER_BRVLAN + (1 << 1) + + ) + +676  + #RTEXT_FILTER_BRVLAN_COMPRESSED + (1 << 2) + + ) + +677  + #RTEXT_FILTER_SKIP_STATS + (1 << 3) + + ) + + @/usr/include/linux/times.h + +1 #ide +_LINUX_TIMES_H + + +2  + #_LINUX_TIMES_H + + + ) + +4  + ~ + +6  + stms + { + +7 +__kl_ock_t + + mtms_utime +; + +8 +__kl_ock_t + + mtms_ime +; + +9 +__kl_ock_t + + mtms_cutime +; + +10 +__kl_ock_t + + mtms_cime +; + + @/usr/include/linux/unistd.h + +1 #ide +_LINUX_UNISTD_H_ + + +2  + #_LINUX_UNISTD_H_ + + + ) + +7  + ~ + + @/usr/include/linux/version.h + +1  + #LINUX_VERSION_CODE + 264721 + + ) + +2  + #KERNEL_VERSION +( +a +, +b +, +c +((<< 16+ ((b<< 8+ (c)) + + ) + + @/usr/include/asm/unistd_32.h + +1 #ide +_ASM_X86_UNISTD_32_H + + +2  + #_ASM_X86_UNISTD_32_H + 1 + + ) + +4  + #__NR_t_sys + 0 + + ) + +5  + #__NR_ex + 1 + + ) + +6  + #__NR_fk + 2 + + ) + +7  + #__NR_ad + 3 + + ) + +8  + #__NR_wre + 4 + + ) + +9  + #__NR_ݒ + 5 + + ) + +10  + #__NR_o + 6 + + ) + +11  + #__NR_wapid + 7 + + ) + +12  + #__NR_t + 8 + + ) + +13  + #__NR_lk + 9 + + ) + +14  + #__NR_uƚk + 10 + + ) + +15  + #__NR_execve + 11 + + ) + +16  + #__NR_chd + 12 + + ) + +17  + #__NR_time + 13 + + ) + +18  + #__NR_mknod + 14 + + ) + +19  + #__NR_chmod + 15 + + ) + +20  + #__NR_lchown + 16 + + ) + +21  + #__NR_bak + 17 + + ) + +22  + #__NR_d + 18 + + ) + +23  + #__NR_lek + 19 + + ) + +24  + #__NR_gpid + 20 + + ) + +25  + #__NR_mou + 21 + + ) + +26  + #__NR_umou + 22 + + ) + +27  + #__NR_tuid + 23 + + ) + +28  + #__NR_guid + 24 + + ) + +29  + #__NR_ime + 25 + + ) + +30  + #__NR_ + 26 + + ) + +31  + #__NR_m + 27 + + ) + +32  + #__NR_df + 28 + + ) + +33  + #__NR_u + 29 + + ) + +34  + #__NR_utime + 30 + + ) + +35  + #__NR_ty + 31 + + ) + +36  + #__NR_gy + 32 + + ) + +37  + #__NR_acss + 33 + + ) + +38  + #__NR_ni + 34 + + ) + +39  + #__NR_ime + 35 + + ) + +40  + #__NR_sync + 36 + + ) + +41  + #__NR_kl + 37 + + ) + +42  + #__NR_me + 38 + + ) + +43  + #__NR_mkd + 39 + + ) + +44  + #__NR_rmd + 40 + + ) + +45  + #__NR_dup + 41 + + ) + +46  + #__NR_pe + 42 + + ) + +47  + #__NR_times + 43 + + ) + +48  + #__NR_of + 44 + + ) + +49  + #__NR_brk + 45 + + ) + +50  + #__NR_tgid + 46 + + ) + +51  + #__NR_ggid + 47 + + ) + +52  + #__NR_sigl + 48 + + ) + +53  + #__NR_geuid + 49 + + ) + +54  + #__NR_gegid + 50 + + ) + +55  + #__NR_ac + 51 + + ) + +56  + #__NR_umou2 + 52 + + ) + +57  + #__NR_lock + 53 + + ) + +58  + #__NR_iol + 54 + + ) + +59  + #__NR_f + 55 + + ) + +60  + #__NR_mpx + 56 + + ) + +61  + #__NR_gid + 57 + + ) + +62  + #__NR_ulim + 58 + + ) + +63  + #__NR_ddume + 59 + + ) + +64  + #__NR_umask + 60 + + ) + +65  + #__NR_chro + 61 + + ) + +66  + #__NR_u + 62 + + ) + +67  + #__NR_dup2 + 63 + + ) + +68  + #__NR_gid + 64 + + ) + +69  + #__NR_gpg + 65 + + ) + +70  + #__NR_tsid + 66 + + ) + +71  + #__NR_sigai + 67 + + ) + +72  + #__NR_sgmask + 68 + + ) + +73  + #__NR_stmask + 69 + + ) + +74  + #__NR_euid + 70 + + ) + +75  + #__NR_egid + 71 + + ) + +76  + #__NR_sigsud + 72 + + ) + +77  + #__NR_signdg + 73 + + ) + +78  + #__NR_thome + 74 + + ) + +79  + #__NR_lim + 75 + + ) + +80  + #__NR_gim + 76 + + ) + +81  + #__NR_gruge + 77 + + ) + +82  + #__NR_gtimeofday + 78 + + ) + +83  + #__NR_imeofday + 79 + + ) + +84  + #__NR_ggroups + 80 + + ) + +85  + #__NR_tgroups + 81 + + ) + +86  + #__NR_ + 82 + + ) + +87  + #__NR_symlk + 83 + + ) + +88  + #__NR_dl + 84 + + ) + +89  + #__NR_adlk + 85 + + ) + +90  + #__NR_ulib + 86 + + ) + +91  + #__NR_sw + 87 + + ) + +92  + #__NR_bo + 88 + + ) + +93  + #__NR_add + 89 + + ) + +94  + #__NR_mm + 90 + + ) + +95  + #__NR_munm + 91 + + ) + +96  + #__NR_un + 92 + + ) + +97  + #__NR_run + 93 + + ) + +98  + #__NR_fchmod + 94 + + ) + +99  + #__NR_fchown + 95 + + ) + +100  + #__NR_giܙy + 96 + + ) + +101  + #__NR_riܙy + 97 + + ) + +102  + #__NR_of + 98 + + ) + +103  + #__NR_fs + 99 + + ) + +104  + #__NR_ffs + 100 + + ) + +105  + #__NR_iݔm + 101 + + ) + +106  + #__NR_sock + 102 + + ) + +107  + #__NR_syog + 103 + + ) + +108  + #__NR_tim + 104 + + ) + +109  + #__NR_gim + 105 + + ) + +110  + #__NR_ + 106 + + ) + +111  + #__NR_l + 107 + + ) + +112  + #__NR_f + 108 + + ) + +113  + #__NR_dume + 109 + + ) + +114  + #__NR_il + 110 + + ) + +115  + #__NR_vhgup + 111 + + ) + +116  + #__NR_id + 112 + + ) + +117  + #__NR_vm86d + 113 + + ) + +118  + #__NR_wa4 + 114 + + ) + +119  + #__NR_swoff + 115 + + ) + +120  + #__NR_sysfo + 116 + + ) + +121  + #__NR_c + 117 + + ) + +122  + #__NR_fsync + 118 + + ) + +123  + #__NR_sigtu + 119 + + ) + +124  + #__NR_e + 120 + + ) + +125  + #__NR_tdomame + 121 + + ) + +126  + #__NR_ume + 122 + + ) + +127  + #__NR_modify_ldt + 123 + + ) + +128  + #__NR_adjtimex + 124 + + ) + +129  + #__NR_me + 125 + + ) + +130  + #__NR_sigocmask + 126 + + ) + +131  + #__NR__modu + 127 + + ) + +132  + #__NR__modu + 128 + + ) + +133  + #__NR_de_modu + 129 + + ) + +134  + #__NR_g_kl_syms + 130 + + ) + +135  + #__NR_qual + 131 + + ) + +136  + #__NR_gpgid + 132 + + ) + +137  + #__NR_fchd + 133 + + ) + +138  + #__NR_bdush + 134 + + ) + +139  + #__NR_sysfs + 135 + + ) + +140  + #__NR_rsڮy + 136 + + ) + +141  + #__NR_afs_sys + 137 + + ) + +142  + #__NR_tfsuid + 138 + + ) + +143  + #__NR_tfsgid + 139 + + ) + +144  + #__NR__Σek + 140 + + ) + +145  + #__NR_gdts + 141 + + ) + +146  + #__NR__w + 142 + + ) + +147  + #__NR_ock + 143 + + ) + +148  + #__NR_msync + 144 + + ) + +149  + #__NR_adv + 145 + + ) + +150  + #__NR_wrev + 146 + + ) + +151  + #__NR_gsid + 147 + + ) + +152  + #__NR_fdasync + 148 + + ) + +153  + #__NR__sysl + 149 + + ) + +154  + #__NR_mlock + 150 + + ) + +155  + #__NR_muock + 151 + + ) + +156  + #__NR_mlockl + 152 + + ) + +157  + #__NR_muockl + 153 + + ) + +158  + #__NR_sched_am + 154 + + ) + +159  + #__NR_sched_gm + 155 + + ) + +160  + #__NR_sched_tschedur + 156 + + ) + +161  + #__NR_sched_gschedur + 157 + + ) + +162  + #__NR_sched_yld + 158 + + ) + +163  + #__NR_sched_g_iܙy_max + 159 + + ) + +164  + #__NR_sched_g_iܙy_m + 160 + + ) + +165  + #__NR_sched__g_rv + 161 + + ) + +166  + #__NR_nop + 162 + + ) + +167  + #__NR_mm + 163 + + ) + +168  + #__NR_esuid + 164 + + ) + +169  + #__NR_gsuid + 165 + + ) + +170  + #__NR_vm86 + 166 + + ) + +171  + #__NR_quy_modu + 167 + + ) + +172  + #__NR_pl + 168 + + ) + +173  + #__NR_nfsrvl + 169 + + ) + +174  + #__NR_esgid + 170 + + ) + +175  + #__NR_gsgid + 171 + + ) + +176  + #__NR_l + 172 + + ) + +177  + #__NR__sigtu + 173 + + ) + +178  + #__NR__sigai + 174 + + ) + +179  + #__NR__sigocmask + 175 + + ) + +180  + #__NR__signdg + 176 + + ) + +181  + #__NR__sigtimedwa + 177 + + ) + +182  + #__NR__sigqueuefo + 178 + + ) + +183  + #__NR__sigsud + 179 + + ) + +184  + #__NR_d64 + 180 + + ) + +185  + #__NR_pwre64 + 181 + + ) + +186  + #__NR_chown + 182 + + ) + +187  + #__NR_gcwd + 183 + + ) + +188  + #__NR_pg + 184 + + ) + +189  + #__NR_pt + 185 + + ) + +190  + #__NR_sigtack + 186 + + ) + +191  + #__NR_ndfe + 187 + + ) + +192  + #__NR_gpmsg + 188 + + ) + +193  + #__NR_pumsg + 189 + + ) + +194  + #__NR_vfk + 190 + + ) + +195  + #__NR_ugim + 191 + + ) + +196  + #__NR_mm2 + 192 + + ) + +197  + #__NR_un64 + 193 + + ) + +198  + #__NR_run64 + 194 + + ) + +199  + #__NR_64 + 195 + + ) + +200  + #__NR_l64 + 196 + + ) + +201  + #__NR_f64 + 197 + + ) + +202  + #__NR_lchown32 + 198 + + ) + +203  + #__NR_guid32 + 199 + + ) + +204  + #__NR_ggid32 + 200 + + ) + +205  + #__NR_geuid32 + 201 + + ) + +206  + #__NR_gegid32 + 202 + + ) + +207  + #__NR_euid32 + 203 + + ) + +208  + #__NR_egid32 + 204 + + ) + +209  + #__NR_ggroups32 + 205 + + ) + +210  + #__NR_tgroups32 + 206 + + ) + +211  + #__NR_fchown32 + 207 + + ) + +212  + #__NR_esuid32 + 208 + + ) + +213  + #__NR_gsuid32 + 209 + + ) + +214  + #__NR_esgid32 + 210 + + ) + +215  + #__NR_gsgid32 + 211 + + ) + +216  + #__NR_chown32 + 212 + + ) + +217  + #__NR_tuid32 + 213 + + ) + +218  + #__NR_tgid32 + 214 + + ) + +219  + #__NR_tfsuid32 + 215 + + ) + +220  + #__NR_tfsgid32 + 216 + + ) + +221  + #__NR_piv_ro + 217 + + ) + +222  + #__NR_mce + 218 + + ) + +223  + #__NR_madvi + 219 + + ) + +224  + #__NR_gdts64 + 220 + + ) + +225  + #__NR_f64 + 221 + + ) + +226  + #__NR_gtid + 224 + + ) + +227  + #__NR_adahd + 225 + + ) + +228  + #__NR_tx + 226 + + ) + +229  + #__NR_ltx + 227 + + ) + +230  + #__NR_ftx + 228 + + ) + +231  + #__NR_gx + 229 + + ) + +232  + #__NR_lgx + 230 + + ) + +233  + #__NR_fgx + 231 + + ) + +234  + #__NR_lix + 232 + + ) + +235  + #__NR_ix + 233 + + ) + +236  + #__NR_ix + 234 + + ) + +237  + #__NR_movex + 235 + + ) + +238  + #__NR_emovex + 236 + + ) + +239  + #__NR_emovex + 237 + + ) + +240  + #__NR_tkl + 238 + + ) + +241  + #__NR_ndfe64 + 239 + + ) + +242  + #__NR_fux + 240 + + ) + +243  + #__NR_sched_ffy + 241 + + ) + +244  + #__NR_sched_gaffy + 242 + + ) + +245  + #__NR_t_thad_ + 243 + + ) + +246  + #__NR_g_thad_ + 244 + + ) + +247  + #__NR_io_tup + 245 + + ) + +248  + #__NR_io_deroy + 246 + + ) + +249  + #__NR_io_gevts + 247 + + ) + +250  + #__NR_io_subm + 248 + + ) + +251  + #__NR_io_nl + 249 + + ) + +252  + #__NR_dvi64 + 250 + + ) + +253  + #__NR_ex_group + 252 + + ) + +254  + #__NR_lookup_dcook + 253 + + ) + +255  + #__NR_l_ + 254 + + ) + +256  + #__NR_l_l + 255 + + ) + +257  + #__NR_l_wa + 256 + + ) + +258  + #__NR_m_fe_ges + 257 + + ) + +259  + #__NR_t_tid_addss + 258 + + ) + +260  + #__NR_tim_ + 259 + + ) + +261  + #__NR_tim_ime + 260 + + ) + +262  + #__NR_tim_gtime + 261 + + ) + +263  + #__NR_tim_govrun + 262 + + ) + +264  + #__NR_tim_de + 263 + + ) + +265  + #__NR_ock_ime + 264 + + ) + +266  + #__NR_ock_gtime + 265 + + ) + +267  + #__NR_ock_gs + 266 + + ) + +268  + #__NR_ock_nop + 267 + + ) + +269  + #__NR_fs64 + 268 + + ) + +270  + #__NR_ffs64 + 269 + + ) + +271  + #__NR_tgkl + 270 + + ) + +272  + #__NR_utimes + 271 + + ) + +273  + #__NR_dvi64_64 + 272 + + ) + +274  + #__NR_vrv + 273 + + ) + +275  + #__NR_mbd + 274 + + ) + +276  + #__NR_g_mempicy + 275 + + ) + +277  + #__NR_t_mempicy + 276 + + ) + +278  + #__NR_mq_ݒ + 277 + + ) + +279  + #__NR_mq_uƚk + 278 + + ) + +280  + #__NR_mq_timednd + 279 + + ) + +281  + #__NR_mq_timedive + 280 + + ) + +282  + #__NR_mq_nify + 281 + + ) + +283  + #__NR_mq_gr + 282 + + ) + +284  + #__NR_kexec_ld + 283 + + ) + +285  + #__NR_waid + 284 + + ) + +286  + #__NR_add_key + 286 + + ) + +287  + #__NR_que_key + 287 + + ) + +288  + #__NR_keyl + 288 + + ) + +289  + #__NR_irio_t + 289 + + ) + +290  + #__NR_irio_g + 290 + + ) + +291  + #__NR_ify_ + 291 + + ) + +292  + #__NR_ify_add_wch + 292 + + ) + +293  + #__NR_ify_rm_wch + 293 + + ) + +294  + #__NR_mig_ges + 294 + + ) + +295  + #__NR_ݒ + 295 + + ) + +296  + #__NR_mkd + 296 + + ) + +297  + #__NR_mknod + 297 + + ) + +298  + #__NR_fchowt + 298 + + ) + +299  + #__NR_futimet + 299 + + ) + +300  + #__NR_f64 + 300 + + ) + +301  + #__NR_uƚk + 301 + + ) + +302  + #__NR_mt + 302 + + ) + +303  + #__NR_lk + 303 + + ) + +304  + #__NR_symlk + 304 + + ) + +305  + #__NR_adlk + 305 + + ) + +306  + #__NR_fchmod + 306 + + ) + +307  + #__NR_cst + 307 + + ) + +308  + #__NR_p6 + 308 + + ) + +309  + #__NR_l + 309 + + ) + +310  + #__NR_unshe + 310 + + ) + +311  + #__NR_t_robu_li + 311 + + ) + +312  + #__NR_g_robu_li + 312 + + ) + +313  + #__NR_li + 313 + + ) + +314  + #__NR_sync_fe_nge + 314 + + ) + +315  + #__NR_e + 315 + + ) + +316  + #__NR_vmli + 316 + + ) + +317  + #__NR_move_ges + 317 + + ) + +318  + #__NR_gu + 318 + + ) + +319  + #__NR_l_pwa + 319 + + ) + +320  + #__NR_utimt + 320 + + ) + +321  + #__NR_siglfd + 321 + + ) + +322  + #__NR_timfd_ + 322 + + ) + +323  + #__NR_evtfd + 323 + + ) + +324  + #__NR_o + 324 + + ) + +325  + #__NR_timfd_ime + 325 + + ) + +326  + #__NR_timfd_gtime + 326 + + ) + +327  + #__NR_siglfd4 + 327 + + ) + +328  + #__NR_evtfd2 + 328 + + ) + +329  + #__NR_l_1 + 329 + + ) + +330  + #__NR_dup3 + 330 + + ) + +331  + #__NR_pe2 + 331 + + ) + +332  + #__NR_ify_1 + 332 + + ) + +333  + #__NR_dv + 333 + + ) + +334  + #__NR_pwrev + 334 + + ) + +335  + #__NR__tgsigqueuefo + 335 + + ) + +336  + #__NR_rf_evt_ݒ + 336 + + ) + +337  + #__NR_cvmmsg + 337 + + ) + +338  + #__NR_nify_ + 338 + + ) + +339  + #__NR_nify_mk + 339 + + ) + +340  + #__NR_lim64 + 340 + + ) + +341  + #__NR_me_to_hd_ + 341 + + ) + +342  + #__NR_ݒ_by_hd_ + 342 + + ) + +343  + #__NR_ock_adjtime + 343 + + ) + +344  + #__NR_syncfs + 344 + + ) + +345  + #__NR_ndmmsg + 345 + + ) + +346  + #__NR_s + 346 + + ) + +347  + #__NR_oss_vm_adv + 347 + + ) + +348  + #__NR_oss_vm_wrev + 348 + + ) + +349  + #__NR_kcmp + 349 + + ) + +350  + #__NR_f_modu + 350 + + ) + +351  + #__NR_sched_r + 351 + + ) + +352  + #__NR_sched_g + 352 + + ) + +353  + #__NR_mt2 + 353 + + ) + +354  + #__NR_ccomp + 354 + + ) + +355  + #__NR_gndom + 355 + + ) + +356  + #__NR_memfd_ + 356 + + ) + +357  + #__NR_bpf + 357 + + ) + +358  + #__NR_execvt + 358 + + ) + +359  + #__NR_sock + 359 + + ) + +360  + #__NR_sock + 360 + + ) + +361  + #__NR_bd + 361 + + ) + +362  + #__NR_c + 362 + + ) + +363  + #__NR_li + 363 + + ) + +364  + #__NR_ac4 + 364 + + ) + +365  + #__NR_gsockt + 365 + + ) + +366  + #__NR_tsockt + 366 + + ) + +367  + #__NR_gsockme + 367 + + ) + +368  + #__NR_gme + 368 + + ) + +369  + #__NR_ndto + 369 + + ) + +370  + #__NR_ndmsg + 370 + + ) + +371  + #__NR_cvom + 371 + + ) + +372  + #__NR_cvmsg + 372 + + ) + +373  + #__NR_shutdown + 373 + + ) + +374  + #__NR_urufd + 374 + + ) + +375  + #__NR_membrr + 375 + + ) + +376  + #__NR_mlock2 + 376 + + ) + +377  + #__NR_cy_fe_nge + 377 + + ) + +378  + #__NR_dv2 + 378 + + ) + +379  + #__NR_pwrev2 + 379 + + ) + +380  + #__NR_pkey_me + 380 + + ) + +381  + #__NR_pkey_loc + 381 + + ) + +382  + #__NR_pkey_ + 382 + + ) + + @/usr/include/asm/unistd_64.h + +1 #ide +_ASM_X86_UNISTD_64_H + + +2  + #_ASM_X86_UNISTD_64_H + 1 + + ) + +4  + #__NR_ad + 0 + + ) + +5  + #__NR_wre + 1 + + ) + +6  + #__NR_ݒ + 2 + + ) + +7  + #__NR_o + 3 + + ) + +8  + #__NR_ + 4 + + ) + +9  + #__NR_f + 5 + + ) + +10  + #__NR_l + 6 + + ) + +11  + #__NR_pl + 7 + + ) + +12  + #__NR_lek + 8 + + ) + +13  + #__NR_mm + 9 + + ) + +14  + #__NR_me + 10 + + ) + +15  + #__NR_munm + 11 + + ) + +16  + #__NR_brk + 12 + + ) + +17  + #__NR__sigai + 13 + + ) + +18  + #__NR__sigocmask + 14 + + ) + +19  + #__NR__sigtu + 15 + + ) + +20  + #__NR_iol + 16 + + ) + +21  + #__NR_d64 + 17 + + ) + +22  + #__NR_pwre64 + 18 + + ) + +23  + #__NR_adv + 19 + + ) + +24  + #__NR_wrev + 20 + + ) + +25  + #__NR_acss + 21 + + ) + +26  + #__NR_pe + 22 + + ) + +27  + #__NR_ + 23 + + ) + +28  + #__NR_sched_yld + 24 + + ) + +29  + #__NR_mm + 25 + + ) + +30  + #__NR_msync + 26 + + ) + +31  + #__NR_mce + 27 + + ) + +32  + #__NR_madvi + 28 + + ) + +33  + #__NR_shmg + 29 + + ) + +34  + #__NR_shm + 30 + + ) + +35  + #__NR_shml + 31 + + ) + +36  + #__NR_dup + 32 + + ) + +37  + #__NR_dup2 + 33 + + ) + +38  + #__NR_u + 34 + + ) + +39  + #__NR_nop + 35 + + ) + +40  + #__NR_gim + 36 + + ) + +41  + #__NR_m + 37 + + ) + +42  + #__NR_tim + 38 + + ) + +43  + #__NR_gpid + 39 + + ) + +44  + #__NR_ndfe + 40 + + ) + +45  + #__NR_sock + 41 + + ) + +46  + #__NR_c + 42 + + ) + +47  + #__NR_ac + 43 + + ) + +48  + #__NR_ndto + 44 + + ) + +49  + #__NR_cvom + 45 + + ) + +50  + #__NR_ndmsg + 46 + + ) + +51  + #__NR_cvmsg + 47 + + ) + +52  + #__NR_shutdown + 48 + + ) + +53  + #__NR_bd + 49 + + ) + +54  + #__NR_li + 50 + + ) + +55  + #__NR_gsockme + 51 + + ) + +56  + #__NR_gme + 52 + + ) + +57  + #__NR_sock + 53 + + ) + +58  + #__NR_tsockt + 54 + + ) + +59  + #__NR_gsockt + 55 + + ) + +60  + #__NR_e + 56 + + ) + +61  + #__NR_fk + 57 + + ) + +62  + #__NR_vfk + 58 + + ) + +63  + #__NR_execve + 59 + + ) + +64  + #__NR_ex + 60 + + ) + +65  + #__NR_wa4 + 61 + + ) + +66  + #__NR_kl + 62 + + ) + +67  + #__NR_ume + 63 + + ) + +68  + #__NR_mg + 64 + + ) + +69  + #__NR_m + 65 + + ) + +70  + #__NR_ml + 66 + + ) + +71  + #__NR_shmdt + 67 + + ) + +72  + #__NR_msgg + 68 + + ) + +73  + #__NR_msgd + 69 + + ) + +74  + #__NR_msgrcv + 70 + + ) + +75  + #__NR_msgl + 71 + + ) + +76  + #__NR_f + 72 + + ) + +77  + #__NR_ock + 73 + + ) + +78  + #__NR_fsync + 74 + + ) + +79  + #__NR_fdasync + 75 + + ) + +80  + #__NR_un + 76 + + ) + +81  + #__NR_run + 77 + + ) + +82  + #__NR_gdts + 78 + + ) + +83  + #__NR_gcwd + 79 + + ) + +84  + #__NR_chd + 80 + + ) + +85  + #__NR_fchd + 81 + + ) + +86  + #__NR_me + 82 + + ) + +87  + #__NR_mkd + 83 + + ) + +88  + #__NR_rmd + 84 + + ) + +89  + #__NR_t + 85 + + ) + +90  + #__NR_lk + 86 + + ) + +91  + #__NR_uƚk + 87 + + ) + +92  + #__NR_symlk + 88 + + ) + +93  + #__NR_adlk + 89 + + ) + +94  + #__NR_chmod + 90 + + ) + +95  + #__NR_fchmod + 91 + + ) + +96  + #__NR_chown + 92 + + ) + +97  + #__NR_fchown + 93 + + ) + +98  + #__NR_lchown + 94 + + ) + +99  + #__NR_umask + 95 + + ) + +100  + #__NR_gtimeofday + 96 + + ) + +101  + #__NR_gim + 97 + + ) + +102  + #__NR_gruge + 98 + + ) + +103  + #__NR_sysfo + 99 + + ) + +104  + #__NR_times + 100 + + ) + +105  + #__NR_ + 101 + + ) + +106  + #__NR_guid + 102 + + ) + +107  + #__NR_syog + 103 + + ) + +108  + #__NR_ggid + 104 + + ) + +109  + #__NR_tuid + 105 + + ) + +110  + #__NR_tgid + 106 + + ) + +111  + #__NR_geuid + 107 + + ) + +112  + #__NR_gegid + 108 + + ) + +113  + #__NR_gid + 109 + + ) + +114  + #__NR_gid + 110 + + ) + +115  + #__NR_gpg + 111 + + ) + +116  + #__NR_tsid + 112 + + ) + +117  + #__NR_euid + 113 + + ) + +118  + #__NR_egid + 114 + + ) + +119  + #__NR_ggroups + 115 + + ) + +120  + #__NR_tgroups + 116 + + ) + +121  + #__NR_esuid + 117 + + ) + +122  + #__NR_gsuid + 118 + + ) + +123  + #__NR_esgid + 119 + + ) + +124  + #__NR_gsgid + 120 + + ) + +125  + #__NR_gpgid + 121 + + ) + +126  + #__NR_tfsuid + 122 + + ) + +127  + #__NR_tfsgid + 123 + + ) + +128  + #__NR_gsid + 124 + + ) + +129  + #__NR_pg + 125 + + ) + +130  + #__NR_pt + 126 + + ) + +131  + #__NR__signdg + 127 + + ) + +132  + #__NR__sigtimedwa + 128 + + ) + +133  + #__NR__sigqueuefo + 129 + + ) + +134  + #__NR__sigsud + 130 + + ) + +135  + #__NR_sigtack + 131 + + ) + +136  + #__NR_utime + 132 + + ) + +137  + #__NR_mknod + 133 + + ) + +138  + #__NR_ulib + 134 + + ) + +139  + #__NR_rsڮy + 135 + + ) + +140  + #__NR_u + 136 + + ) + +141  + #__NR_fs + 137 + + ) + +142  + #__NR_ffs + 138 + + ) + +143  + #__NR_sysfs + 139 + + ) + +144  + #__NR_giܙy + 140 + + ) + +145  + #__NR_riܙy + 141 + + ) + +146  + #__NR_sched_am + 142 + + ) + +147  + #__NR_sched_gm + 143 + + ) + +148  + #__NR_sched_tschedur + 144 + + ) + +149  + #__NR_sched_gschedur + 145 + + ) + +150  + #__NR_sched_g_iܙy_max + 146 + + ) + +151  + #__NR_sched_g_iܙy_m + 147 + + ) + +152  + #__NR_sched__g_rv + 148 + + ) + +153  + #__NR_mlock + 149 + + ) + +154  + #__NR_muock + 150 + + ) + +155  + #__NR_mlockl + 151 + + ) + +156  + #__NR_muockl + 152 + + ) + +157  + #__NR_vhgup + 153 + + ) + +158  + #__NR_modify_ldt + 154 + + ) + +159  + #__NR_piv_ro + 155 + + ) + +160  + #__NR__sysl + 156 + + ) + +161  + #__NR_l + 157 + + ) + +162  + #__NR_ch_l + 158 + + ) + +163  + #__NR_adjtimex + 159 + + ) + +164  + #__NR_lim + 160 + + ) + +165  + #__NR_chro + 161 + + ) + +166  + #__NR_sync + 162 + + ) + +167  + #__NR_ac + 163 + + ) + +168  + #__NR_imeofday + 164 + + ) + +169  + #__NR_mou + 165 + + ) + +170  + #__NR_umou2 + 166 + + ) + +171  + #__NR_sw + 167 + + ) + +172  + #__NR_swoff + 168 + + ) + +173  + #__NR_bo + 169 + + ) + +174  + #__NR_thome + 170 + + ) + +175  + #__NR_tdomame + 171 + + ) + +176  + #__NR_il + 172 + + ) + +177  + #__NR_iݔm + 173 + + ) + +178  + #__NR__modu + 174 + + ) + +179  + #__NR__modu + 175 + + ) + +180  + #__NR_de_modu + 176 + + ) + +181  + #__NR_g_kl_syms + 177 + + ) + +182  + #__NR_quy_modu + 178 + + ) + +183  + #__NR_qual + 179 + + ) + +184  + #__NR_nfsrvl + 180 + + ) + +185  + #__NR_gpmsg + 181 + + ) + +186  + #__NR_pumsg + 182 + + ) + +187  + #__NR_afs_sys + 183 + + ) + +188  + #__NR_tux + 184 + + ) + +189  + #__NR_cury + 185 + + ) + +190  + #__NR_gtid + 186 + + ) + +191  + #__NR_adahd + 187 + + ) + +192  + #__NR_tx + 188 + + ) + +193  + #__NR_ltx + 189 + + ) + +194  + #__NR_ftx + 190 + + ) + +195  + #__NR_gx + 191 + + ) + +196  + #__NR_lgx + 192 + + ) + +197  + #__NR_fgx + 193 + + ) + +198  + #__NR_lix + 194 + + ) + +199  + #__NR_ix + 195 + + ) + +200  + #__NR_ix + 196 + + ) + +201  + #__NR_movex + 197 + + ) + +202  + #__NR_emovex + 198 + + ) + +203  + #__NR_emovex + 199 + + ) + +204  + #__NR_tkl + 200 + + ) + +205  + #__NR_time + 201 + + ) + +206  + #__NR_fux + 202 + + ) + +207  + #__NR_sched_ffy + 203 + + ) + +208  + #__NR_sched_gaffy + 204 + + ) + +209  + #__NR_t_thad_ + 205 + + ) + +210  + #__NR_io_tup + 206 + + ) + +211  + #__NR_io_deroy + 207 + + ) + +212  + #__NR_io_gevts + 208 + + ) + +213  + #__NR_io_subm + 209 + + ) + +214  + #__NR_io_nl + 210 + + ) + +215  + #__NR_g_thad_ + 211 + + ) + +216  + #__NR_lookup_dcook + 212 + + ) + +217  + #__NR_l_ + 213 + + ) + +218  + #__NR_l_l_d + 214 + + ) + +219  + #__NR_l_wa_d + 215 + + ) + +220  + #__NR_m_fe_ges + 216 + + ) + +221  + #__NR_gdts64 + 217 + + ) + +222  + #__NR_t_tid_addss + 218 + + ) + +223  + #__NR_t_sys + 219 + + ) + +224  + #__NR_mtimed + 220 + + ) + +225  + #__NR_dvi64 + 221 + + ) + +226  + #__NR_tim_ + 222 + + ) + +227  + #__NR_tim_ime + 223 + + ) + +228  + #__NR_tim_gtime + 224 + + ) + +229  + #__NR_tim_govrun + 225 + + ) + +230  + #__NR_tim_de + 226 + + ) + +231  + #__NR_ock_ime + 227 + + ) + +232  + #__NR_ock_gtime + 228 + + ) + +233  + #__NR_ock_gs + 229 + + ) + +234  + #__NR_ock_nop + 230 + + ) + +235  + #__NR_ex_group + 231 + + ) + +236  + #__NR_l_wa + 232 + + ) + +237  + #__NR_l_l + 233 + + ) + +238  + #__NR_tgkl + 234 + + ) + +239  + #__NR_utimes + 235 + + ) + +240  + #__NR_vrv + 236 + + ) + +241  + #__NR_mbd + 237 + + ) + +242  + #__NR_t_mempicy + 238 + + ) + +243  + #__NR_g_mempicy + 239 + + ) + +244  + #__NR_mq_ݒ + 240 + + ) + +245  + #__NR_mq_uƚk + 241 + + ) + +246  + #__NR_mq_timednd + 242 + + ) + +247  + #__NR_mq_timedive + 243 + + ) + +248  + #__NR_mq_nify + 244 + + ) + +249  + #__NR_mq_gr + 245 + + ) + +250  + #__NR_kexec_ld + 246 + + ) + +251  + #__NR_waid + 247 + + ) + +252  + #__NR_add_key + 248 + + ) + +253  + #__NR_que_key + 249 + + ) + +254  + #__NR_keyl + 250 + + ) + +255  + #__NR_irio_t + 251 + + ) + +256  + #__NR_irio_g + 252 + + ) + +257  + #__NR_ify_ + 253 + + ) + +258  + #__NR_ify_add_wch + 254 + + ) + +259  + #__NR_ify_rm_wch + 255 + + ) + +260  + #__NR_mig_ges + 256 + + ) + +261  + #__NR_ݒ + 257 + + ) + +262  + #__NR_mkd + 258 + + ) + +263  + #__NR_mknod + 259 + + ) + +264  + #__NR_fchowt + 260 + + ) + +265  + #__NR_futimet + 261 + + ) + +266  + #__NR_wf + 262 + + ) + +267  + #__NR_uƚk + 263 + + ) + +268  + #__NR_mt + 264 + + ) + +269  + #__NR_lk + 265 + + ) + +270  + #__NR_symlk + 266 + + ) + +271  + #__NR_adlk + 267 + + ) + +272  + #__NR_fchmod + 268 + + ) + +273  + #__NR_cst + 269 + + ) + +274  + #__NR_p6 + 270 + + ) + +275  + #__NR_l + 271 + + ) + +276  + #__NR_unshe + 272 + + ) + +277  + #__NR_t_robu_li + 273 + + ) + +278  + #__NR_g_robu_li + 274 + + ) + +279  + #__NR_li + 275 + + ) + +280  + #__NR_e + 276 + + ) + +281  + #__NR_sync_fe_nge + 277 + + ) + +282  + #__NR_vmli + 278 + + ) + +283  + #__NR_move_ges + 279 + + ) + +284  + #__NR_utimt + 280 + + ) + +285  + #__NR_l_pwa + 281 + + ) + +286  + #__NR_siglfd + 282 + + ) + +287  + #__NR_timfd_ + 283 + + ) + +288  + #__NR_evtfd + 284 + + ) + +289  + #__NR_o + 285 + + ) + +290  + #__NR_timfd_ime + 286 + + ) + +291  + #__NR_timfd_gtime + 287 + + ) + +292  + #__NR_ac4 + 288 + + ) + +293  + #__NR_siglfd4 + 289 + + ) + +294  + #__NR_evtfd2 + 290 + + ) + +295  + #__NR_l_1 + 291 + + ) + +296  + #__NR_dup3 + 292 + + ) + +297  + #__NR_pe2 + 293 + + ) + +298  + #__NR_ify_1 + 294 + + ) + +299  + #__NR_dv + 295 + + ) + +300  + #__NR_pwrev + 296 + + ) + +301  + #__NR__tgsigqueuefo + 297 + + ) + +302  + #__NR_rf_evt_ݒ + 298 + + ) + +303  + #__NR_cvmmsg + 299 + + ) + +304  + #__NR_nify_ + 300 + + ) + +305  + #__NR_nify_mk + 301 + + ) + +306  + #__NR_lim64 + 302 + + ) + +307  + #__NR_me_to_hd_ + 303 + + ) + +308  + #__NR_ݒ_by_hd_ + 304 + + ) + +309  + #__NR_ock_adjtime + 305 + + ) + +310  + #__NR_syncfs + 306 + + ) + +311  + #__NR_ndmmsg + 307 + + ) + +312  + #__NR_s + 308 + + ) + +313  + #__NR_gu + 309 + + ) + +314  + #__NR_oss_vm_adv + 310 + + ) + +315  + #__NR_oss_vm_wrev + 311 + + ) + +316  + #__NR_kcmp + 312 + + ) + +317  + #__NR_f_modu + 313 + + ) + +318  + #__NR_sched_r + 314 + + ) + +319  + #__NR_sched_g + 315 + + ) + +320  + #__NR_mt2 + 316 + + ) + +321  + #__NR_ccomp + 317 + + ) + +322  + #__NR_gndom + 318 + + ) + +323  + #__NR_memfd_ + 319 + + ) + +324  + #__NR_kexec_fe_ld + 320 + + ) + +325  + #__NR_bpf + 321 + + ) + +326  + #__NR_execvt + 322 + + ) + +327  + #__NR_urufd + 323 + + ) + +328  + #__NR_membrr + 324 + + ) + +329  + #__NR_mlock2 + 325 + + ) + +330  + #__NR_cy_fe_nge + 326 + + ) + +331  + #__NR_dv2 + 327 + + ) + +332  + #__NR_pwrev2 + 328 + + ) + +333  + #__NR_pkey_me + 329 + + ) + +334  + #__NR_pkey_loc + 330 + + ) + +335  + #__NR_pkey_ + 331 + + ) + + @/usr/include/asm/unistd_x32.h + +1 #ide +_ASM_X86_UNISTD_X32_H + + +2  + #_ASM_X86_UNISTD_X32_H + 1 + + ) + +4  + #__NR_ad + ( +__X32_SYSCALL_BIT + + 0) + + ) + +5  + #__NR_wre + ( +__X32_SYSCALL_BIT + + 1) + + ) + +6  + #__NR_ݒ + ( +__X32_SYSCALL_BIT + + 2) + + ) + +7  + #__NR_o + ( +__X32_SYSCALL_BIT + + 3) + + ) + +8  + #__NR_ + ( +__X32_SYSCALL_BIT + + 4) + + ) + +9  + #__NR_f + ( +__X32_SYSCALL_BIT + + 5) + + ) + +10  + #__NR_l + ( +__X32_SYSCALL_BIT + + 6) + + ) + +11  + #__NR_pl + ( +__X32_SYSCALL_BIT + + 7) + + ) + +12  + #__NR_lek + ( +__X32_SYSCALL_BIT + + 8) + + ) + +13  + #__NR_mm + ( +__X32_SYSCALL_BIT + + 9) + + ) + +14  + #__NR_me + ( +__X32_SYSCALL_BIT + + 10) + + ) + +15  + #__NR_munm + ( +__X32_SYSCALL_BIT + + 11) + + ) + +16  + #__NR_brk + ( +__X32_SYSCALL_BIT + + 12) + + ) + +17  + #__NR__sigocmask + ( +__X32_SYSCALL_BIT + + 14) + + ) + +18  + #__NR_d64 + ( +__X32_SYSCALL_BIT + + 17) + + ) + +19  + #__NR_pwre64 + ( +__X32_SYSCALL_BIT + + 18) + + ) + +20  + #__NR_acss + ( +__X32_SYSCALL_BIT + + 21) + + ) + +21  + #__NR_pe + ( +__X32_SYSCALL_BIT + + 22) + + ) + +22  + #__NR_ + ( +__X32_SYSCALL_BIT + + 23) + + ) + +23  + #__NR_sched_yld + ( +__X32_SYSCALL_BIT + + 24) + + ) + +24  + #__NR_mm + ( +__X32_SYSCALL_BIT + + 25) + + ) + +25  + #__NR_msync + ( +__X32_SYSCALL_BIT + + 26) + + ) + +26  + #__NR_mce + ( +__X32_SYSCALL_BIT + + 27) + + ) + +27  + #__NR_madvi + ( +__X32_SYSCALL_BIT + + 28) + + ) + +28  + #__NR_shmg + ( +__X32_SYSCALL_BIT + + 29) + + ) + +29  + #__NR_shm + ( +__X32_SYSCALL_BIT + + 30) + + ) + +30  + #__NR_shml + ( +__X32_SYSCALL_BIT + + 31) + + ) + +31  + #__NR_dup + ( +__X32_SYSCALL_BIT + + 32) + + ) + +32  + #__NR_dup2 + ( +__X32_SYSCALL_BIT + + 33) + + ) + +33  + #__NR_u + ( +__X32_SYSCALL_BIT + + 34) + + ) + +34  + #__NR_nop + ( +__X32_SYSCALL_BIT + + 35) + + ) + +35  + #__NR_gim + ( +__X32_SYSCALL_BIT + + 36) + + ) + +36  + #__NR_m + ( +__X32_SYSCALL_BIT + + 37) + + ) + +37  + #__NR_tim + ( +__X32_SYSCALL_BIT + + 38) + + ) + +38  + #__NR_gpid + ( +__X32_SYSCALL_BIT + + 39) + + ) + +39  + #__NR_ndfe + ( +__X32_SYSCALL_BIT + + 40) + + ) + +40  + #__NR_sock + ( +__X32_SYSCALL_BIT + + 41) + + ) + +41  + #__NR_c + ( +__X32_SYSCALL_BIT + + 42) + + ) + +42  + #__NR_ac + ( +__X32_SYSCALL_BIT + + 43) + + ) + +43  + #__NR_ndto + ( +__X32_SYSCALL_BIT + + 44) + + ) + +44  + #__NR_shutdown + ( +__X32_SYSCALL_BIT + + 48) + + ) + +45  + #__NR_bd + ( +__X32_SYSCALL_BIT + + 49) + + ) + +46  + #__NR_li + ( +__X32_SYSCALL_BIT + + 50) + + ) + +47  + #__NR_gsockme + ( +__X32_SYSCALL_BIT + + 51) + + ) + +48  + #__NR_gme + ( +__X32_SYSCALL_BIT + + 52) + + ) + +49  + #__NR_sock + ( +__X32_SYSCALL_BIT + + 53) + + ) + +50  + #__NR_e + ( +__X32_SYSCALL_BIT + + 56) + + ) + +51  + #__NR_fk + ( +__X32_SYSCALL_BIT + + 57) + + ) + +52  + #__NR_vfk + ( +__X32_SYSCALL_BIT + + 58) + + ) + +53  + #__NR_ex + ( +__X32_SYSCALL_BIT + + 60) + + ) + +54  + #__NR_wa4 + ( +__X32_SYSCALL_BIT + + 61) + + ) + +55  + #__NR_kl + ( +__X32_SYSCALL_BIT + + 62) + + ) + +56  + #__NR_ume + ( +__X32_SYSCALL_BIT + + 63) + + ) + +57  + #__NR_mg + ( +__X32_SYSCALL_BIT + + 64) + + ) + +58  + #__NR_m + ( +__X32_SYSCALL_BIT + + 65) + + ) + +59  + #__NR_ml + ( +__X32_SYSCALL_BIT + + 66) + + ) + +60  + #__NR_shmdt + ( +__X32_SYSCALL_BIT + + 67) + + ) + +61  + #__NR_msgg + ( +__X32_SYSCALL_BIT + + 68) + + ) + +62  + #__NR_msgd + ( +__X32_SYSCALL_BIT + + 69) + + ) + +63  + #__NR_msgrcv + ( +__X32_SYSCALL_BIT + + 70) + + ) + +64  + #__NR_msgl + ( +__X32_SYSCALL_BIT + + 71) + + ) + +65  + #__NR_f + ( +__X32_SYSCALL_BIT + + 72) + + ) + +66  + #__NR_ock + ( +__X32_SYSCALL_BIT + + 73) + + ) + +67  + #__NR_fsync + ( +__X32_SYSCALL_BIT + + 74) + + ) + +68  + #__NR_fdasync + ( +__X32_SYSCALL_BIT + + 75) + + ) + +69  + #__NR_un + ( +__X32_SYSCALL_BIT + + 76) + + ) + +70  + #__NR_run + ( +__X32_SYSCALL_BIT + + 77) + + ) + +71  + #__NR_gdts + ( +__X32_SYSCALL_BIT + + 78) + + ) + +72  + #__NR_gcwd + ( +__X32_SYSCALL_BIT + + 79) + + ) + +73  + #__NR_chd + ( +__X32_SYSCALL_BIT + + 80) + + ) + +74  + #__NR_fchd + ( +__X32_SYSCALL_BIT + + 81) + + ) + +75  + #__NR_me + ( +__X32_SYSCALL_BIT + + 82) + + ) + +76  + #__NR_mkd + ( +__X32_SYSCALL_BIT + + 83) + + ) + +77  + #__NR_rmd + ( +__X32_SYSCALL_BIT + + 84) + + ) + +78  + #__NR_t + ( +__X32_SYSCALL_BIT + + 85) + + ) + +79  + #__NR_lk + ( +__X32_SYSCALL_BIT + + 86) + + ) + +80  + #__NR_uƚk + ( +__X32_SYSCALL_BIT + + 87) + + ) + +81  + #__NR_symlk + ( +__X32_SYSCALL_BIT + + 88) + + ) + +82  + #__NR_adlk + ( +__X32_SYSCALL_BIT + + 89) + + ) + +83  + #__NR_chmod + ( +__X32_SYSCALL_BIT + + 90) + + ) + +84  + #__NR_fchmod + ( +__X32_SYSCALL_BIT + + 91) + + ) + +85  + #__NR_chown + ( +__X32_SYSCALL_BIT + + 92) + + ) + +86  + #__NR_fchown + ( +__X32_SYSCALL_BIT + + 93) + + ) + +87  + #__NR_lchown + ( +__X32_SYSCALL_BIT + + 94) + + ) + +88  + #__NR_umask + ( +__X32_SYSCALL_BIT + + 95) + + ) + +89  + #__NR_gtimeofday + ( +__X32_SYSCALL_BIT + + 96) + + ) + +90  + #__NR_gim + ( +__X32_SYSCALL_BIT + + 97) + + ) + +91  + #__NR_gruge + ( +__X32_SYSCALL_BIT + + 98) + + ) + +92  + #__NR_sysfo + ( +__X32_SYSCALL_BIT + + 99) + + ) + +93  + #__NR_times + ( +__X32_SYSCALL_BIT + + 100) + + ) + +94  + #__NR_guid + ( +__X32_SYSCALL_BIT + + 102) + + ) + +95  + #__NR_syog + ( +__X32_SYSCALL_BIT + + 103) + + ) + +96  + #__NR_ggid + ( +__X32_SYSCALL_BIT + + 104) + + ) + +97  + #__NR_tuid + ( +__X32_SYSCALL_BIT + + 105) + + ) + +98  + #__NR_tgid + ( +__X32_SYSCALL_BIT + + 106) + + ) + +99  + #__NR_geuid + ( +__X32_SYSCALL_BIT + + 107) + + ) + +100  + #__NR_gegid + ( +__X32_SYSCALL_BIT + + 108) + + ) + +101  + #__NR_gid + ( +__X32_SYSCALL_BIT + + 109) + + ) + +102  + #__NR_gid + ( +__X32_SYSCALL_BIT + + 110) + + ) + +103  + #__NR_gpg + ( +__X32_SYSCALL_BIT + + 111) + + ) + +104  + #__NR_tsid + ( +__X32_SYSCALL_BIT + + 112) + + ) + +105  + #__NR_euid + ( +__X32_SYSCALL_BIT + + 113) + + ) + +106  + #__NR_egid + ( +__X32_SYSCALL_BIT + + 114) + + ) + +107  + #__NR_ggroups + ( +__X32_SYSCALL_BIT + + 115) + + ) + +108  + #__NR_tgroups + ( +__X32_SYSCALL_BIT + + 116) + + ) + +109  + #__NR_esuid + ( +__X32_SYSCALL_BIT + + 117) + + ) + +110  + #__NR_gsuid + ( +__X32_SYSCALL_BIT + + 118) + + ) + +111  + #__NR_esgid + ( +__X32_SYSCALL_BIT + + 119) + + ) + +112  + #__NR_gsgid + ( +__X32_SYSCALL_BIT + + 120) + + ) + +113  + #__NR_gpgid + ( +__X32_SYSCALL_BIT + + 121) + + ) + +114  + #__NR_tfsuid + ( +__X32_SYSCALL_BIT + + 122) + + ) + +115  + #__NR_tfsgid + ( +__X32_SYSCALL_BIT + + 123) + + ) + +116  + #__NR_gsid + ( +__X32_SYSCALL_BIT + + 124) + + ) + +117  + #__NR_pg + ( +__X32_SYSCALL_BIT + + 125) + + ) + +118  + #__NR_pt + ( +__X32_SYSCALL_BIT + + 126) + + ) + +119  + #__NR__sigsud + ( +__X32_SYSCALL_BIT + + 130) + + ) + +120  + #__NR_utime + ( +__X32_SYSCALL_BIT + + 132) + + ) + +121  + #__NR_mknod + ( +__X32_SYSCALL_BIT + + 133) + + ) + +122  + #__NR_rsڮy + ( +__X32_SYSCALL_BIT + + 135) + + ) + +123  + #__NR_u + ( +__X32_SYSCALL_BIT + + 136) + + ) + +124  + #__NR_fs + ( +__X32_SYSCALL_BIT + + 137) + + ) + +125  + #__NR_ffs + ( +__X32_SYSCALL_BIT + + 138) + + ) + +126  + #__NR_sysfs + ( +__X32_SYSCALL_BIT + + 139) + + ) + +127  + #__NR_giܙy + ( +__X32_SYSCALL_BIT + + 140) + + ) + +128  + #__NR_riܙy + ( +__X32_SYSCALL_BIT + + 141) + + ) + +129  + #__NR_sched_am + ( +__X32_SYSCALL_BIT + + 142) + + ) + +130  + #__NR_sched_gm + ( +__X32_SYSCALL_BIT + + 143) + + ) + +131  + #__NR_sched_tschedur + ( +__X32_SYSCALL_BIT + + 144) + + ) + +132  + #__NR_sched_gschedur + ( +__X32_SYSCALL_BIT + + 145) + + ) + +133  + #__NR_sched_g_iܙy_max + ( +__X32_SYSCALL_BIT + + 146) + + ) + +134  + #__NR_sched_g_iܙy_m + ( +__X32_SYSCALL_BIT + + 147) + + ) + +135  + #__NR_sched__g_rv + ( +__X32_SYSCALL_BIT + + 148) + + ) + +136  + #__NR_mlock + ( +__X32_SYSCALL_BIT + + 149) + + ) + +137  + #__NR_muock + ( +__X32_SYSCALL_BIT + + 150) + + ) + +138  + #__NR_mlockl + ( +__X32_SYSCALL_BIT + + 151) + + ) + +139  + #__NR_muockl + ( +__X32_SYSCALL_BIT + + 152) + + ) + +140  + #__NR_vhgup + ( +__X32_SYSCALL_BIT + + 153) + + ) + +141  + #__NR_modify_ldt + ( +__X32_SYSCALL_BIT + + 154) + + ) + +142  + #__NR_piv_ro + ( +__X32_SYSCALL_BIT + + 155) + + ) + +143  + #__NR_l + ( +__X32_SYSCALL_BIT + + 157) + + ) + +144  + #__NR_ch_l + ( +__X32_SYSCALL_BIT + + 158) + + ) + +145  + #__NR_adjtimex + ( +__X32_SYSCALL_BIT + + 159) + + ) + +146  + #__NR_lim + ( +__X32_SYSCALL_BIT + + 160) + + ) + +147  + #__NR_chro + ( +__X32_SYSCALL_BIT + + 161) + + ) + +148  + #__NR_sync + ( +__X32_SYSCALL_BIT + + 162) + + ) + +149  + #__NR_ac + ( +__X32_SYSCALL_BIT + + 163) + + ) + +150  + #__NR_imeofday + ( +__X32_SYSCALL_BIT + + 164) + + ) + +151  + #__NR_mou + ( +__X32_SYSCALL_BIT + + 165) + + ) + +152  + #__NR_umou2 + ( +__X32_SYSCALL_BIT + + 166) + + ) + +153  + #__NR_sw + ( +__X32_SYSCALL_BIT + + 167) + + ) + +154  + #__NR_swoff + ( +__X32_SYSCALL_BIT + + 168) + + ) + +155  + #__NR_bo + ( +__X32_SYSCALL_BIT + + 169) + + ) + +156  + #__NR_thome + ( +__X32_SYSCALL_BIT + + 170) + + ) + +157  + #__NR_tdomame + ( +__X32_SYSCALL_BIT + + 171) + + ) + +158  + #__NR_il + ( +__X32_SYSCALL_BIT + + 172) + + ) + +159  + #__NR_iݔm + ( +__X32_SYSCALL_BIT + + 173) + + ) + +160  + #__NR__modu + ( +__X32_SYSCALL_BIT + + 175) + + ) + +161  + #__NR_de_modu + ( +__X32_SYSCALL_BIT + + 176) + + ) + +162  + #__NR_qual + ( +__X32_SYSCALL_BIT + + 179) + + ) + +163  + #__NR_gpmsg + ( +__X32_SYSCALL_BIT + + 181) + + ) + +164  + #__NR_pumsg + ( +__X32_SYSCALL_BIT + + 182) + + ) + +165  + #__NR_afs_sys + ( +__X32_SYSCALL_BIT + + 183) + + ) + +166  + #__NR_tux + ( +__X32_SYSCALL_BIT + + 184) + + ) + +167  + #__NR_cury + ( +__X32_SYSCALL_BIT + + 185) + + ) + +168  + #__NR_gtid + ( +__X32_SYSCALL_BIT + + 186) + + ) + +169  + #__NR_adahd + ( +__X32_SYSCALL_BIT + + 187) + + ) + +170  + #__NR_tx + ( +__X32_SYSCALL_BIT + + 188) + + ) + +171  + #__NR_ltx + ( +__X32_SYSCALL_BIT + + 189) + + ) + +172  + #__NR_ftx + ( +__X32_SYSCALL_BIT + + 190) + + ) + +173  + #__NR_gx + ( +__X32_SYSCALL_BIT + + 191) + + ) + +174  + #__NR_lgx + ( +__X32_SYSCALL_BIT + + 192) + + ) + +175  + #__NR_fgx + ( +__X32_SYSCALL_BIT + + 193) + + ) + +176  + #__NR_lix + ( +__X32_SYSCALL_BIT + + 194) + + ) + +177  + #__NR_ix + ( +__X32_SYSCALL_BIT + + 195) + + ) + +178  + #__NR_ix + ( +__X32_SYSCALL_BIT + + 196) + + ) + +179  + #__NR_movex + ( +__X32_SYSCALL_BIT + + 197) + + ) + +180  + #__NR_emovex + ( +__X32_SYSCALL_BIT + + 198) + + ) + +181  + #__NR_emovex + ( +__X32_SYSCALL_BIT + + 199) + + ) + +182  + #__NR_tkl + ( +__X32_SYSCALL_BIT + + 200) + + ) + +183  + #__NR_time + ( +__X32_SYSCALL_BIT + + 201) + + ) + +184  + #__NR_fux + ( +__X32_SYSCALL_BIT + + 202) + + ) + +185  + #__NR_sched_ffy + ( +__X32_SYSCALL_BIT + + 203) + + ) + +186  + #__NR_sched_gaffy + ( +__X32_SYSCALL_BIT + + 204) + + ) + +187  + #__NR_io_deroy + ( +__X32_SYSCALL_BIT + + 207) + + ) + +188  + #__NR_io_gevts + ( +__X32_SYSCALL_BIT + + 208) + + ) + +189  + #__NR_io_nl + ( +__X32_SYSCALL_BIT + + 210) + + ) + +190  + #__NR_lookup_dcook + ( +__X32_SYSCALL_BIT + + 212) + + ) + +191  + #__NR_l_ + ( +__X32_SYSCALL_BIT + + 213) + + ) + +192  + #__NR_m_fe_ges + ( +__X32_SYSCALL_BIT + + 216) + + ) + +193  + #__NR_gdts64 + ( +__X32_SYSCALL_BIT + + 217) + + ) + +194  + #__NR_t_tid_addss + ( +__X32_SYSCALL_BIT + + 218) + + ) + +195  + #__NR_t_sys + ( +__X32_SYSCALL_BIT + + 219) + + ) + +196  + #__NR_mtimed + ( +__X32_SYSCALL_BIT + + 220) + + ) + +197  + #__NR_dvi64 + ( +__X32_SYSCALL_BIT + + 221) + + ) + +198  + #__NR_tim_ime + ( +__X32_SYSCALL_BIT + + 223) + + ) + +199  + #__NR_tim_gtime + ( +__X32_SYSCALL_BIT + + 224) + + ) + +200  + #__NR_tim_govrun + ( +__X32_SYSCALL_BIT + + 225) + + ) + +201  + #__NR_tim_de + ( +__X32_SYSCALL_BIT + + 226) + + ) + +202  + #__NR_ock_ime + ( +__X32_SYSCALL_BIT + + 227) + + ) + +203  + #__NR_ock_gtime + ( +__X32_SYSCALL_BIT + + 228) + + ) + +204  + #__NR_ock_gs + ( +__X32_SYSCALL_BIT + + 229) + + ) + +205  + #__NR_ock_nop + ( +__X32_SYSCALL_BIT + + 230) + + ) + +206  + #__NR_ex_group + ( +__X32_SYSCALL_BIT + + 231) + + ) + +207  + #__NR_l_wa + ( +__X32_SYSCALL_BIT + + 232) + + ) + +208  + #__NR_l_l + ( +__X32_SYSCALL_BIT + + 233) + + ) + +209  + #__NR_tgkl + ( +__X32_SYSCALL_BIT + + 234) + + ) + +210  + #__NR_utimes + ( +__X32_SYSCALL_BIT + + 235) + + ) + +211  + #__NR_mbd + ( +__X32_SYSCALL_BIT + + 237) + + ) + +212  + #__NR_t_mempicy + ( +__X32_SYSCALL_BIT + + 238) + + ) + +213  + #__NR_g_mempicy + ( +__X32_SYSCALL_BIT + + 239) + + ) + +214  + #__NR_mq_ݒ + ( +__X32_SYSCALL_BIT + + 240) + + ) + +215  + #__NR_mq_uƚk + ( +__X32_SYSCALL_BIT + + 241) + + ) + +216  + #__NR_mq_timednd + ( +__X32_SYSCALL_BIT + + 242) + + ) + +217  + #__NR_mq_timedive + ( +__X32_SYSCALL_BIT + + 243) + + ) + +218  + #__NR_mq_gr + ( +__X32_SYSCALL_BIT + + 245) + + ) + +219  + #__NR_add_key + ( +__X32_SYSCALL_BIT + + 248) + + ) + +220  + #__NR_que_key + ( +__X32_SYSCALL_BIT + + 249) + + ) + +221  + #__NR_keyl + ( +__X32_SYSCALL_BIT + + 250) + + ) + +222  + #__NR_irio_t + ( +__X32_SYSCALL_BIT + + 251) + + ) + +223  + #__NR_irio_g + ( +__X32_SYSCALL_BIT + + 252) + + ) + +224  + #__NR_ify_ + ( +__X32_SYSCALL_BIT + + 253) + + ) + +225  + #__NR_ify_add_wch + ( +__X32_SYSCALL_BIT + + 254) + + ) + +226  + #__NR_ify_rm_wch + ( +__X32_SYSCALL_BIT + + 255) + + ) + +227  + #__NR_mig_ges + ( +__X32_SYSCALL_BIT + + 256) + + ) + +228  + #__NR_ݒ + ( +__X32_SYSCALL_BIT + + 257) + + ) + +229  + #__NR_mkd + ( +__X32_SYSCALL_BIT + + 258) + + ) + +230  + #__NR_mknod + ( +__X32_SYSCALL_BIT + + 259) + + ) + +231  + #__NR_fchowt + ( +__X32_SYSCALL_BIT + + 260) + + ) + +232  + #__NR_futimet + ( +__X32_SYSCALL_BIT + + 261) + + ) + +233  + #__NR_wf + ( +__X32_SYSCALL_BIT + + 262) + + ) + +234  + #__NR_uƚk + ( +__X32_SYSCALL_BIT + + 263) + + ) + +235  + #__NR_mt + ( +__X32_SYSCALL_BIT + + 264) + + ) + +236  + #__NR_lk + ( +__X32_SYSCALL_BIT + + 265) + + ) + +237  + #__NR_symlk + ( +__X32_SYSCALL_BIT + + 266) + + ) + +238  + #__NR_adlk + ( +__X32_SYSCALL_BIT + + 267) + + ) + +239  + #__NR_fchmod + ( +__X32_SYSCALL_BIT + + 268) + + ) + +240  + #__NR_cst + ( +__X32_SYSCALL_BIT + + 269) + + ) + +241  + #__NR_p6 + ( +__X32_SYSCALL_BIT + + 270) + + ) + +242  + #__NR_l + ( +__X32_SYSCALL_BIT + + 271) + + ) + +243  + #__NR_unshe + ( +__X32_SYSCALL_BIT + + 272) + + ) + +244  + #__NR_li + ( +__X32_SYSCALL_BIT + + 275) + + ) + +245  + #__NR_e + ( +__X32_SYSCALL_BIT + + 276) + + ) + +246  + #__NR_sync_fe_nge + ( +__X32_SYSCALL_BIT + + 277) + + ) + +247  + #__NR_utimt + ( +__X32_SYSCALL_BIT + + 280) + + ) + +248  + #__NR_l_pwa + ( +__X32_SYSCALL_BIT + + 281) + + ) + +249  + #__NR_siglfd + ( +__X32_SYSCALL_BIT + + 282) + + ) + +250  + #__NR_timfd_ + ( +__X32_SYSCALL_BIT + + 283) + + ) + +251  + #__NR_evtfd + ( +__X32_SYSCALL_BIT + + 284) + + ) + +252  + #__NR_o + ( +__X32_SYSCALL_BIT + + 285) + + ) + +253  + #__NR_timfd_ime + ( +__X32_SYSCALL_BIT + + 286) + + ) + +254  + #__NR_timfd_gtime + ( +__X32_SYSCALL_BIT + + 287) + + ) + +255  + #__NR_ac4 + ( +__X32_SYSCALL_BIT + + 288) + + ) + +256  + #__NR_siglfd4 + ( +__X32_SYSCALL_BIT + + 289) + + ) + +257  + #__NR_evtfd2 + ( +__X32_SYSCALL_BIT + + 290) + + ) + +258  + #__NR_l_1 + ( +__X32_SYSCALL_BIT + + 291) + + ) + +259  + #__NR_dup3 + ( +__X32_SYSCALL_BIT + + 292) + + ) + +260  + #__NR_pe2 + ( +__X32_SYSCALL_BIT + + 293) + + ) + +261  + #__NR_ify_1 + ( +__X32_SYSCALL_BIT + + 294) + + ) + +262  + #__NR_rf_evt_ݒ + ( +__X32_SYSCALL_BIT + + 298) + + ) + +263  + #__NR_nify_ + ( +__X32_SYSCALL_BIT + + 300) + + ) + +264  + #__NR_nify_mk + ( +__X32_SYSCALL_BIT + + 301) + + ) + +265  + #__NR_lim64 + ( +__X32_SYSCALL_BIT + + 302) + + ) + +266  + #__NR_me_to_hd_ + ( +__X32_SYSCALL_BIT + + 303) + + ) + +267  + #__NR_ݒ_by_hd_ + ( +__X32_SYSCALL_BIT + + 304) + + ) + +268  + #__NR_ock_adjtime + ( +__X32_SYSCALL_BIT + + 305) + + ) + +269  + #__NR_syncfs + ( +__X32_SYSCALL_BIT + + 306) + + ) + +270  + #__NR_s + ( +__X32_SYSCALL_BIT + + 308) + + ) + +271  + #__NR_gu + ( +__X32_SYSCALL_BIT + + 309) + + ) + +272  + #__NR_kcmp + ( +__X32_SYSCALL_BIT + + 312) + + ) + +273  + #__NR_f_modu + ( +__X32_SYSCALL_BIT + + 313) + + ) + +274  + #__NR_sched_r + ( +__X32_SYSCALL_BIT + + 314) + + ) + +275  + #__NR_sched_g + ( +__X32_SYSCALL_BIT + + 315) + + ) + +276  + #__NR_mt2 + ( +__X32_SYSCALL_BIT + + 316) + + ) + +277  + #__NR_ccomp + ( +__X32_SYSCALL_BIT + + 317) + + ) + +278  + #__NR_gndom + ( +__X32_SYSCALL_BIT + + 318) + + ) + +279  + #__NR_memfd_ + ( +__X32_SYSCALL_BIT + + 319) + + ) + +280  + #__NR_kexec_fe_ld + ( +__X32_SYSCALL_BIT + + 320) + + ) + +281  + #__NR_bpf + ( +__X32_SYSCALL_BIT + + 321) + + ) + +282  + #__NR_urufd + ( +__X32_SYSCALL_BIT + + 323) + + ) + +283  + #__NR_membrr + ( +__X32_SYSCALL_BIT + + 324) + + ) + +284  + #__NR_mlock2 + ( +__X32_SYSCALL_BIT + + 325) + + ) + +285  + #__NR_cy_fe_nge + ( +__X32_SYSCALL_BIT + + 326) + + ) + +286  + #__NR_pkey_me + ( +__X32_SYSCALL_BIT + + 329) + + ) + +287  + #__NR_pkey_loc + ( +__X32_SYSCALL_BIT + + 330) + + ) + +288  + #__NR_pkey_ + ( +__X32_SYSCALL_BIT + + 331) + + ) + +289  + #__NR__sigai + ( +__X32_SYSCALL_BIT + + 512) + + ) + +290  + #__NR__sigtu + ( +__X32_SYSCALL_BIT + + 513) + + ) + +291  + #__NR_iol + ( +__X32_SYSCALL_BIT + + 514) + + ) + +292  + #__NR_adv + ( +__X32_SYSCALL_BIT + + 515) + + ) + +293  + #__NR_wrev + ( +__X32_SYSCALL_BIT + + 516) + + ) + +294  + #__NR_cvom + ( +__X32_SYSCALL_BIT + + 517) + + ) + +295  + #__NR_ndmsg + ( +__X32_SYSCALL_BIT + + 518) + + ) + +296  + #__NR_cvmsg + ( +__X32_SYSCALL_BIT + + 519) + + ) + +297  + #__NR_execve + ( +__X32_SYSCALL_BIT + + 520) + + ) + +298  + #__NR_ + ( +__X32_SYSCALL_BIT + + 521) + + ) + +299  + #__NR__signdg + ( +__X32_SYSCALL_BIT + + 522) + + ) + +300  + #__NR__sigtimedwa + ( +__X32_SYSCALL_BIT + + 523) + + ) + +301  + #__NR__sigqueuefo + ( +__X32_SYSCALL_BIT + + 524) + + ) + +302  + #__NR_sigtack + ( +__X32_SYSCALL_BIT + + 525) + + ) + +303  + #__NR_tim_ + ( +__X32_SYSCALL_BIT + + 526) + + ) + +304  + #__NR_mq_nify + ( +__X32_SYSCALL_BIT + + 527) + + ) + +305  + #__NR_kexec_ld + ( +__X32_SYSCALL_BIT + + 528) + + ) + +306  + #__NR_waid + ( +__X32_SYSCALL_BIT + + 529) + + ) + +307  + #__NR_t_robu_li + ( +__X32_SYSCALL_BIT + + 530) + + ) + +308  + #__NR_g_robu_li + ( +__X32_SYSCALL_BIT + + 531) + + ) + +309  + #__NR_vmli + ( +__X32_SYSCALL_BIT + + 532) + + ) + +310  + #__NR_move_ges + ( +__X32_SYSCALL_BIT + + 533) + + ) + +311  + #__NR_dv + ( +__X32_SYSCALL_BIT + + 534) + + ) + +312  + #__NR_pwrev + ( +__X32_SYSCALL_BIT + + 535) + + ) + +313  + #__NR__tgsigqueuefo + ( +__X32_SYSCALL_BIT + + 536) + + ) + +314  + #__NR_cvmmsg + ( +__X32_SYSCALL_BIT + + 537) + + ) + +315  + #__NR_ndmmsg + ( +__X32_SYSCALL_BIT + + 538) + + ) + +316  + #__NR_oss_vm_adv + ( +__X32_SYSCALL_BIT + + 539) + + ) + +317  + #__NR_oss_vm_wrev + ( +__X32_SYSCALL_BIT + + 540) + + ) + +318  + #__NR_tsockt + ( +__X32_SYSCALL_BIT + + 541) + + ) + +319  + #__NR_gsockt + ( +__X32_SYSCALL_BIT + + 542) + + ) + +320  + #__NR_io_tup + ( +__X32_SYSCALL_BIT + + 543) + + ) + +321  + #__NR_io_subm + ( +__X32_SYSCALL_BIT + + 544) + + ) + +322  + #__NR_execvt + ( +__X32_SYSCALL_BIT + + 545) + + ) + +323  + #__NR_dv2 + ( +__X32_SYSCALL_BIT + + 546) + + ) + +324  + #__NR_pwrev2 + ( +__X32_SYSCALL_BIT + + 547) + + ) + + @/usr/include/limits.h + +22 #ide +_LIBC_LIMITS_H_ + + +23  + #_LIBC_LIMITS_H_ + 1 + + ) + +25  + ~ + +31  + #MB_LEN_MAX + 16 + + ) + +36 #i! +defed + +__GNUC__ + || __GNUC__ < 2 + +41 #ide +_LIMITS_H + + +42  + #_LIMITS_H + 1 + + ) + +44  + ~ + +53  + #CHAR_BIT + 8 + + ) + +56  + #SCHAR_MIN + (-128) + + ) + +57  + #SCHAR_MAX + 127 + + ) + +60  + #UCHAR_MAX + 255 + + ) + +63 #ifde +__CHAR_UNSIGNED__ + + +64  + #CHAR_MIN + 0 + + ) + +65  + #CHAR_MAX + +UCHAR_MAX + + + ) + +67  + #CHAR_MIN + +SCHAR_MIN + + + ) + +68  + #CHAR_MAX + +SCHAR_MAX + + + ) + +72  + #SHRT_MIN + (-32768) + + ) + +73  + #SHRT_MAX + 32767 + + ) + +76  + #USHRT_MAX + 65535 + + ) + +79  + #INT_MIN + (- +INT_MAX + - 1) + + ) + +80  + #INT_MAX + 2147483647 + + ) + +83  + #UINT_MAX + 4294967295U + + ) + +86 #i +__WORDSIZE + == 64 + +87  + #LONG_MAX + 9223372036854775807L + + ) + +89  + #LONG_MAX + 2147483647L + + ) + +91  + #LONG_MIN + (- +LONG_MAX + - 1L) + + ) + +94 #i +__WORDSIZE + == 64 + +95  + #ULONG_MAX + 18446744073709551615UL + + ) + +97  + #ULONG_MAX + 4294967295UL + + ) + +100 #ifde +__USE_ISOC99 + + +103  + #LLONG_MAX + 9223372036854775807LL + + ) + +104  + #LLONG_MIN + (- +LLONG_MAX + - 1LL) + + ) + +107  + #ULLONG_MAX + 18446744073709551615ULL + + ) + +121 #i +defed + +__GNUC__ + && !defed +_GCC_LIMITS_H_ + + +123 #ude_x< +lims +. +h +> + +129 #i +defed + +__USE_ISOC99 + && defed +__GNUC__ + + +130 #ide +LLONG_MIN + + +131  + #LLONG_MIN + (- +LLONG_MAX +-1) + + ) + +133 #ide +LLONG_MAX + + +134  + #LLONG_MAX + +__LONG_LONG_MAX__ + + + ) + +136 #ide +ULLONG_MAX + + +137  + #ULLONG_MAX + ( +LLONG_MAX + * 2ULL + 1) + + ) + +141 #ifdef +__USE_POSIX + + +143  + ~ + +146 #ifdef +__USE_POSIX2 + + +147  + ~ + +150 #ifdef +__USE_XOPEN + + +151  + ~ + + @/usr/include/linux/fcntl.h + +1 #ide +_LINUX_FCNTL_H + + +2  + #_LINUX_FCNTL_H + + + ) + +4  + ~ + +6  + #F_SETLEASE + ( +F_LINUX_SPECIFIC_BASE + + 0) + + ) + +7  + #F_GETLEASE + ( +F_LINUX_SPECIFIC_BASE + + 1) + + ) + +13  + #F_CANCELLK + ( +F_LINUX_SPECIFIC_BASE + + 5) + + ) + +16  + #F_DUPFD_CLOEXEC + ( +F_LINUX_SPECIFIC_BASE + + 6) + + ) + +22  + #F_NOTIFY + ( +F_LINUX_SPECIFIC_BASE ++2) + + ) + +27  + #F_SETPIPE_SZ + ( +F_LINUX_SPECIFIC_BASE + + 7) + + ) + +28  + #F_GETPIPE_SZ + ( +F_LINUX_SPECIFIC_BASE + + 8) + + ) + +33  + #F_ADD_SEALS + ( +F_LINUX_SPECIFIC_BASE + + 9) + + ) + +34  + #F_GET_SEALS + ( +F_LINUX_SPECIFIC_BASE + + 10) + + ) + +39  + #F_SEAL_SEAL + 0x0001 + + ) + +40  + #F_SEAL_SHRINK + 0x0002 + + ) + +41  + #F_SEAL_GROW + 0x0004 + + ) + +42  + #F_SEAL_WRITE + 0x0008 + + ) + +48  + #DN_ACCESS + 0x00000001 + + ) + +49  + #DN_MODIFY + 0x00000002 + + ) + +50  + #DN_CREATE + 0x00000004 + + ) + +51  + #DN_DELETE + 0x00000008 + + ) + +52  + #DN_RENAME + 0x00000010 + + ) + +53  + #DN_ATTRIB + 0x00000020 + + ) + +54  + #DN_MULTISHOT + 0x80000000 + + ) + +56  + #AT_FDCWD + -100 + + ) + +59  + #AT_SYMLINK_NOFOLLOW + 0x100 + + ) + +60  + #AT_REMOVEDIR + 0x200 + + ) + +62  + #AT_SYMLINK_FOLLOW + 0x400 + + ) + +63  + #AT_NO_AUTOMOUNT + 0x800 + + ) + +64  + #AT_EMPTY_PATH + 0x1000 + + ) + + @/usr/include/linux/if.h + +19 #ide +_LINUX_IF_H + + +20  + #_LINUX_IF_H + + + ) + +22  + ~ + +23  + ~ + +24  + ~ + +27 #i +__UAPI_DEF_IF_IFNAMSIZ + + +28  + #IFNAMSIZ + 16 + + ) + +30  + #IFALIASZ + 256 + + ) + +31  + ~ + +34 #i +__UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO + != 0 || \ + +35 + g__UAPI_DEF_IF_NET_DEVICE_FLAGS + != 0 + +76 + et_devi_ags + { + +78 #i +__UAPI_DEF_IF_NET_DEVICE_FLAGS + + +79 +IFF_UP + = 1<<0, + +80 + mIFF_BROADCAST + = 1<<1, + +81 + mIFF_DEBUG + = 1<<2, + +82 + mIFF_LOOPBACK + = 1<<3, + +83 + mIFF_POINTOPOINT + = 1<<4, + +84 + mIFF_NOTRAILERS + = 1<<5, + +85 + mIFF_RUNNING + = 1<<6, + +86 + mIFF_NOARP + = 1<<7, + +87 + mIFF_PROMISC + = 1<<8, + +88 + mIFF_ALLMULTI + = 1<<9, + +89 + mIFF_MASTER + = 1<<10, + +90 + mIFF_SLAVE + = 1<<11, + +91 + mIFF_MULTICAST + = 1<<12, + +92 + mIFF_PORTSEL + = 1<<13, + +93 + mIFF_AUTOMEDIA + = 1<<14, + +94 + mIFF_DYNAMIC + = 1<<15, + +96 #i +__UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO + + +97 + mIFF_LOWER_UP + = 1<<16, + +98 + mIFF_DORMANT + = 1<<17, + +99 + mIFF_ECHO + = 1<<18, + +105 #i +__UAPI_DEF_IF_NET_DEVICE_FLAGS + + +106  + #IFF_UP + +IFF_UP + + + ) + +107  + #IFF_BROADCAST + +IFF_BROADCAST + + + ) + +108  + #IFF_DEBUG + +IFF_DEBUG + + + ) + +109  + #IFF_LOOPBACK + +IFF_LOOPBACK + + + ) + +110  + #IFF_POINTOPOINT + +IFF_POINTOPOINT + + + ) + +111  + #IFF_NOTRAILERS + +IFF_NOTRAILERS + + + ) + +112  + #IFF_RUNNING + +IFF_RUNNING + + + ) + +113  + #IFF_NOARP + +IFF_NOARP + + + ) + +114  + #IFF_PROMISC + +IFF_PROMISC + + + ) + +115  + #IFF_ALLMULTI + +IFF_ALLMULTI + + + ) + +116  + #IFF_MASTER + +IFF_MASTER + + + ) + +117  + #IFF_SLAVE + +IFF_SLAVE + + + ) + +118  + #IFF_MULTICAST + +IFF_MULTICAST + + + ) + +119  + #IFF_PORTSEL + +IFF_PORTSEL + + + ) + +120  + #IFF_AUTOMEDIA + +IFF_AUTOMEDIA + + + ) + +121  + #IFF_DYNAMIC + +IFF_DYNAMIC + + + ) + +124 #i +__UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO + + +125  + #IFF_LOWER_UP + +IFF_LOWER_UP + + + ) + +126  + #IFF_DORMANT + +IFF_DORMANT + + + ) + +127  + #IFF_ECHO + +IFF_ECHO + + + ) + +130  + #IFF_VOLATILE + ( +IFF_LOOPBACK +| +IFF_POINTOPOINT +| +IFF_BROADCAST +| +IFF_ECHO +|\ + +131 +IFF_MASTER +| +IFF_SLAVE +| +IFF_RUNNING +| +IFF_LOWER_UP +| +IFF_DORMANT +) + + ) + +133  + #IF_GET_IFACE + 0x0001 + + ) + +134  + #IF_GET_PROTO + 0x0002 + + ) + +137  + #IF_IFACE_V35 + 0x1000 + + ) + +138  + #IF_IFACE_V24 + 0x1001 + + ) + +139  + #IF_IFACE_X21 + 0x1002 + + ) + +140  + #IF_IFACE_T1 + 0x1003 + + ) + +141  + #IF_IFACE_E1 + 0x1004 + + ) + +142  + #IF_IFACE_SYNC_SERIAL + 0x1005 + + ) + +143  + #IF_IFACE_X21D + 0x1006 + + ) + +146  + #IF_PROTO_HDLC + 0x2000 + + ) + +147  + #IF_PROTO_PPP + 0x2001 + + ) + +148  + #IF_PROTO_CISCO + 0x2002 + + ) + +149  + #IF_PROTO_FR + 0x2003 + + ) + +150  + #IF_PROTO_FR_ADD_PVC + 0x2004 + + ) + +151  + #IF_PROTO_FR_DEL_PVC + 0x2005 + + ) + +152  + #IF_PROTO_X25 + 0x2006 + + ) + +153  + #IF_PROTO_HDLC_ETH + 0x2007 + + ) + +154  + #IF_PROTO_FR_ADD_ETH_PVC + 0x2008 + + ) + +155  + #IF_PROTO_FR_DEL_ETH_PVC + 0x2009 + + ) + +156  + #IF_PROTO_FR_PVC + 0x200A + + ) + +157  + #IF_PROTO_FR_ETH_PVC + 0x200B + + ) + +158  + #IF_PROTO_RAW + 0x200C + + ) + +162 + mIF_OPER_UNKNOWN +, + +163 + mIF_OPER_NOTPRESENT +, + +164 + mIF_OPER_DOWN +, + +165 + mIF_OPER_LOWERLAYERDOWN +, + +166 + mIF_OPER_TESTING +, + +167 + mIF_OPER_DORMANT +, + +168 + mIF_OPER_UP +, + +173 + mIF_LINK_MODE_DEFAULT +, + +174 + mIF_LINK_MODE_DORMANT +, + +188 #i +__UAPI_DEF_IF_IFMAP + + +189  + sifm + { + +190  + mmem_t +; + +191  + mmem_d +; + +192  + mba_addr +; + +193  + mq +; + +194  + mdma +; + +195  + mpt +; + +200  + sif_gs + { + +201  + mty +; + +202  + msize +; + +205 +w_hdlc_o + * + mw_hdlc +; + +206 +cisco_o + * + mcisco +; + +207 +_o + * + m +; + +208 +_o_pvc + * + m_pvc +; + +209 +_o_pvc_fo + * + m_pvc_fo +; + +212 +sync_rl_gs + * + msync +; + +213 +1_gs + * + m1 +; + +214 } + mifs_ifsu +; + +225 #i +__UAPI_DEF_IF_IFREQ + + +226  + sieq + { + +227  + #IFHWADDRLEN + 6 + + ) + +230  + min_me +[ +IFNAMSIZ +]; + +231 } + mi_in +; + +234  +sockaddr + + miu_addr +; + +235  +sockaddr + + miu_daddr +; + +236  +sockaddr + + miu_brdaddr +; + +237  +sockaddr + + miu_tmask +; + +238  +sockaddr + + miu_hwaddr +; + +239  + miu_ags +; + +240  + miu_ivue +; + +241  + miu_mtu +; + +242  +ifm + + miu_m +; + +243  + miu_ave +[ +IFNAMSIZ +]; + +244  + miu_wme +[ +IFNAMSIZ +]; + +245 * + miu_da +; + +246  +if_gs + + miu_gs +; + +247 } + mi_iu +; + +251  + #i_me + +i_in +. +in_me + + + ) + +252  + #i_hwaddr + +i_iu +. +iu_hwaddr + + + ) + +253  + #i_addr + +i_iu +. +iu_addr + + + ) + +254  + #i_daddr + +i_iu +. +iu_daddr + + + ) + +255  + #i_brdaddr + +i_iu +. +iu_brdaddr + + + ) + +256  + #i_tmask + +i_iu +. +iu_tmask + + + ) + +257  + #i_ags + +i_iu +. +iu_ags + + + ) + +258  + #i_mric + +i_iu +. +iu_ivue + + + ) + +259  + #i_mtu + +i_iu +. +iu_mtu + + + ) + +260  + #i_m + +i_iu +. +iu_m + + + ) + +261  + #i_ave + +i_iu +. +iu_ave + + + ) + +262  + #i_da + +i_iu +. +iu_da + + + ) + +263  + #i_ifdex + +i_iu +. +iu_ivue + + + ) + +264  + #i_bdwidth + +i_iu +. +iu_ivue + + + ) + +265  + #i_qn + +i_iu +. +iu_ivue + + + ) + +266  + #i_wme + +i_iu +. +iu_wme + + + ) + +267  + #i_gs + +i_iu +. +iu_gs + + + ) + +277 #i +__UAPI_DEF_IF_IFCONF + + +278  + sifcf + { + +279  + mifc_n +; + +281 * + mifcu_buf +; + +282  +ieq + * + mifcu_q +; + +283 } + mifc_ifcu +; + +287  + #ifc_buf + +ifc_ifcu +. +ifcu_buf + + + ) + +288  + #ifc_q + +ifc_ifcu +. +ifcu_q + + + ) + + @/usr/include/linux/if_ether.h + +21 #ide +_LINUX_IF_ETHER_H + + +22  + #_LINUX_IF_ETHER_H + + + ) + +24  + ~ + +31  + #ETH_ALEN + 6 + + ) + +32  + #ETH_HLEN + 14 + + ) + +33  + #ETH_ZLEN + 60 + + ) + +34  + #ETH_DATA_LEN + 1500 + + ) + +35  + #ETH_FRAME_LEN + 1514 + + ) + +36  + #ETH_FCS_LEN + 4 + + ) + +38  + #ETH_MIN_MTU + 68 + + ) + +39  + #ETH_MAX_MTU + 0xFFFFU + + ) + +45  + #ETH_P_LOOP + 0x0060 + + ) + +46  + #ETH_P_PUP + 0x0200 + + ) + +47  + #ETH_P_PUPAT + 0x0201 + + ) + +48  + #ETH_P_TSN + 0x22F0 + + ) + +49  + #ETH_P_IP + 0x0800 + + ) + +50  + #ETH_P_X25 + 0x0805 + + ) + +51  + #ETH_P_ARP + 0x0806 + + ) + +52  + #ETH_P_BPQ + 0x08FF + + ) + +53  + #ETH_P_IEEEPUP + 0x0a00 + + ) + +54  + #ETH_P_IEEEPUPAT + 0x0a01 + + ) + +55  + #ETH_P_BATMAN + 0x4305 + + ) + +56  + #ETH_P_DEC + 0x6000 + + ) + +57  + #ETH_P_DNA_DL + 0x6001 + + ) + +58  + #ETH_P_DNA_RC + 0x6002 + + ) + +59  + #ETH_P_DNA_RT + 0x6003 + + ) + +60  + #ETH_P_LAT + 0x6004 + + ) + +61  + #ETH_P_DIAG + 0x6005 + + ) + +62  + #ETH_P_CUST + 0x6006 + + ) + +63  + #ETH_P_SCA + 0x6007 + + ) + +64  + #ETH_P_TEB + 0x6558 + + ) + +65  + #ETH_P_RARP + 0x8035 + + ) + +66  + #ETH_P_ATALK + 0x809B + + ) + +67  + #ETH_P_AARP + 0x80F3 + + ) + +68  + #ETH_P_8021Q + 0x8100 + + ) + +69  + #ETH_P_IPX + 0x8137 + + ) + +70  + #ETH_P_IPV6 + 0x86DD + + ) + +71  + #ETH_P_PAUSE + 0x8808 + + ) + +72  + #ETH_P_SLOW + 0x8809 + + ) + +73  + #ETH_P_WCCP + 0x883E + + ) + +75  + #ETH_P_MPLS_UC + 0x8847 + + ) + +76  + #ETH_P_MPLS_MC + 0x8848 + + ) + +77  + #ETH_P_ATMMPOA + 0x884 + + ) + +78  + #ETH_P_PPP_DISC + 0x8863 + + ) + +79  + #ETH_P_PPP_SES + 0x8864 + + ) + +80  + #ETH_P_LINK_CTL + 0x886 + + ) + +81  + #ETH_P_ATMFATE + 0x8884 + + ) + +84  + #ETH_P_PAE + 0x888E + + ) + +85  + #ETH_P_AOE + 0x88A2 + + ) + +86  + #ETH_P_8021AD + 0x88A8 + + ) + +87  + #ETH_P_802_EX1 + 0x88B5 + + ) + +88  + #ETH_P_TIPC + 0x88CA + + ) + +89  + #ETH_P_MACSEC + 0x88E5 + + ) + +90  + #ETH_P_8021AH + 0x88E7 + + ) + +91  + #ETH_P_MVRP + 0x88F5 + + ) + +92  + #ETH_P_1588 + 0x88F7 + + ) + +93  + #ETH_P_NCSI + 0x88F8 + + ) + +94  + #ETH_P_PRP + 0x88FB + + ) + +95  + #ETH_P_FCOE + 0x8906 + + ) + +96  + #ETH_P_TDLS + 0x890D + + ) + +97  + #ETH_P_FIP + 0x8914 + + ) + +98  + #ETH_P_80221 + 0x8917 + + ) + +99  + #ETH_P_HSR + 0x892F + + ) + +100  + #ETH_P_LOOPBACK + 0x9000 + + ) + +101  + #ETH_P_QINQ1 + 0x9100 + + ) + +102  + #ETH_P_QINQ2 + 0x9200 + + ) + +103  + #ETH_P_QINQ3 + 0x9300 + + ) + +104  + #ETH_P_EDSA + 0xDADA + + ) + +105  + #ETH_P_AF_IUCV + 0xFBFB + + ) + +107  + #ETH_P_802_3_MIN + 0x0600 + + ) + +114  + #ETH_P_802_3 + 0x0001 + + ) + +115  + #ETH_P_AX25 + 0x0002 + + ) + +116  + #ETH_P_ALL + 0x0003 + + ) + +117  + #ETH_P_802_2 + 0x0004 + + ) + +118  + #ETH_P_SNAP + 0x0005 + + ) + +119  + #ETH_P_DDCMP + 0x0006 + + ) + +120  + #ETH_P_WAN_PPP + 0x0007 + + ) + +121  + #ETH_P_PPP_MP + 0x0008 + + ) + +122  + #ETH_P_LOCALTALK + 0x0009 + + ) + +123  + #ETH_P_CAN + 0x000C + + ) + +124  + #ETH_P_CANFD + 0x000D + + ) + +125  + #ETH_P_PPPTALK + 0x0010 + + ) + +126  + #ETH_P_TR_802_2 + 0x0011 + + ) + +127  + #ETH_P_MOBITEX + 0x0015 + + ) + +128  + #ETH_P_CONTROL + 0x0016 + + ) + +129  + #ETH_P_IRDA + 0x0017 + + ) + +130  + #ETH_P_ECONET + 0x0018 + + ) + +131  + #ETH_P_HDLC + 0x0019 + + ) + +132  + #ETH_P_ARCNET + 0x001A + + ) + +133  + #ETH_P_DSA + 0x001B + + ) + +134  + #ETH_P_TRAILER + 0x001C + + ) + +135  + #ETH_P_PHONET + 0x00F5 + + ) + +136  + #ETH_P_IEEE802154 + 0x00F6 + + ) + +137  + #ETH_P_CAIF + 0x00F7 + + ) + +138  + #ETH_P_XDSA + 0x00F8 + + ) + +144  + shhdr + { + +145  + mh_de +[ +ETH_ALEN +]; + +146  + mh_sour +[ +ETH_ALEN +]; + +147 +__be16 + + mh_o +; + +148 } +__ibu__ +(( +cked +)); + + @/usr/include/linux/if_link.h + +1 #ide +_LINUX_IF_LINK_H + + +2  + #_LINUX_IF_LINK_H + + + ) + +4  + ~ + +5  + ~ + +8  + s_lk_s + { + +9 +__u32 + + mrx_cks +; + +10 +__u32 + + mtx_cks +; + +11 +__u32 + + mrx_bys +; + +12 +__u32 + + mtx_bys +; + +13 +__u32 + + mrx_rs +; + +14 +__u32 + + mtx_rs +; + +15 +__u32 + + mrx_drݳd +; + +16 +__u32 + + mtx_drݳd +; + +17 +__u32 + + mmui +; + +18 +__u32 + + mclisis +; + +21 +__u32 + + mrx_ngth_rs +; + +22 +__u32 + + mrx_ov_rs +; + +23 +__u32 + + mrx_c_rs +; + +24 +__u32 + + mrx_ame_rs +; + +25 +__u32 + + mrx_fifo_rs +; + +26 +__u32 + + mrx_misd_rs +; + +29 +__u32 + + mtx_ab܋d_rs +; + +30 +__u32 + + mtx_r_rs +; + +31 +__u32 + + mtx_fifo_rs +; + +32 +__u32 + + mtx_hbt_rs +; + +33 +__u32 + + mtx_wdow_rs +; + +36 +__u32 + + mrx_comesd +; + +37 +__u32 + + mtx_comesd +; + +39 +__u32 + + mrx_nohdr +; + +43  + s_lk_s64 + { + +44 +__u64 + + mrx_cks +; + +45 +__u64 + + mtx_cks +; + +46 +__u64 + + mrx_bys +; + +47 +__u64 + + mtx_bys +; + +48 +__u64 + + mrx_rs +; + +49 +__u64 + + mtx_rs +; + +50 +__u64 + + mrx_drݳd +; + +51 +__u64 + + mtx_drݳd +; + +52 +__u64 + + mmui +; + +53 +__u64 + + mclisis +; + +56 +__u64 + + mrx_ngth_rs +; + +57 +__u64 + + mrx_ov_rs +; + +58 +__u64 + + mrx_c_rs +; + +59 +__u64 + + mrx_ame_rs +; + +60 +__u64 + + mrx_fifo_rs +; + +61 +__u64 + + mrx_misd_rs +; + +64 +__u64 + + mtx_ab܋d_rs +; + +65 +__u64 + + mtx_r_rs +; + +66 +__u64 + + mtx_fifo_rs +; + +67 +__u64 + + mtx_hbt_rs +; + +68 +__u64 + + mtx_wdow_rs +; + +71 +__u64 + + mrx_comesd +; + +72 +__u64 + + mtx_comesd +; + +74 +__u64 + + mrx_nohdr +; + +78  + s_lk_ifm + { + +79 +__u64 + + mmem_t +; + +80 +__u64 + + mmem_d +; + +81 +__u64 + + mba_addr +; + +82 +__u16 + + mq +; + +83 +__u8 + + mdma +; + +84 +__u8 + + mpt +; + +106 + mIFLA_UNSPEC +, + +107 + mIFLA_ADDRESS +, + +108 + mIFLA_BROADCAST +, + +109 + mIFLA_IFNAME +, + +110 + mIFLA_MTU +, + +111 + mIFLA_LINK +, + +112 + mIFLA_QDISC +, + +113 + mIFLA_STATS +, + +114 + mIFLA_COST +, + +115  + #IFLA_COST + +IFLA_COST + + + ) + +116 + mIFLA_PRIORITY +, + +117  + #IFLA_PRIORITY + +IFLA_PRIORITY + + + ) + +118 + mIFLA_MASTER +, + +119  + #IFLA_MASTER + +IFLA_MASTER + + + ) + +120 + mIFLA_WIRELESS +, + +121  + #IFLA_WIRELESS + +IFLA_WIRELESS + + + ) + +122 + mIFLA_PROTINFO +, + +123  + #IFLA_PROTINFO + +IFLA_PROTINFO + + + ) + +124 + mIFLA_TXQLEN +, + +125  + #IFLA_TXQLEN + +IFLA_TXQLEN + + + ) + +126 + mIFLA_MAP +, + +127  + #IFLA_MAP + +IFLA_MAP + + + ) + +128 + mIFLA_WEIGHT +, + +129  + #IFLA_WEIGHT + +IFLA_WEIGHT + + + ) + +130 + mIFLA_OPERSTATE +, + +131 + mIFLA_LINKMODE +, + +132 + mIFLA_LINKINFO +, + +133  + #IFLA_LINKINFO + +IFLA_LINKINFO + + + ) + +134 + mIFLA_NET_NS_PID +, + +135 + mIFLA_IFALIAS +, + +136 + mIFLA_NUM_VF +, + +137 + mIFLA_VFINFO_LIST +, + +138 + mIFLA_STATS64 +, + +139 + mIFLA_VF_PORTS +, + +140 + mIFLA_PORT_SELF +, + +141 + mIFLA_AF_SPEC +, + +142 + mIFLA_GROUP +, + +143 + mIFLA_NET_NS_FD +, + +144 + mIFLA_EXT_MASK +, + +145 + mIFLA_PROMISCUITY +, + +146  + #IFLA_PROMISCUITY + +IFLA_PROMISCUITY + + + ) + +147 + mIFLA_NUM_TX_QUEUES +, + +148 + mIFLA_NUM_RX_QUEUES +, + +149 + mIFLA_CARRIER +, + +150 + mIFLA_PHYS_PORT_ID +, + +151 + mIFLA_CARRIER_CHANGES +, + +152 + mIFLA_PHYS_SWITCH_ID +, + +153 + mIFLA_LINK_NETNSID +, + +154 + mIFLA_PHYS_PORT_NAME +, + +155 + mIFLA_PROTO_DOWN +, + +156 + mIFLA_GSO_MAX_SEGS +, + +157 + mIFLA_GSO_MAX_SIZE +, + +158 + mIFLA_PAD +, + +159 + mIFLA_XDP +, + +160 + m__IFLA_MAX + + +164  + #IFLA_MAX + ( +__IFLA_MAX + - 1) + + ) + +167  + #IFLA_RTA +( +r +(( + +*)(((*))+ + `NLMSG_ALIGN +(( +iffomsg +)))) + + ) + +168  + #IFLA_PAYLOAD +( +n + + `NLMSG_PAYLOAD +,( +iffomsg +)) + + ) + +171 + mIFLA_INET_UNSPEC +, + +172 + mIFLA_INET_CONF +, + +173 + m__IFLA_INET_MAX +, + +176  + #IFLA_INET_MAX + ( +__IFLA_INET_MAX + - 1) + + ) + +209 + mIFLA_INET6_UNSPEC +, + +210 + mIFLA_INET6_FLAGS +, + +211 + mIFLA_INET6_CONF +, + +212 + mIFLA_INET6_STATS +, + +213 + mIFLA_INET6_MCAST +, + +214 + mIFLA_INET6_CACHEINFO +, + +215 + mIFLA_INET6_ICMP6STATS +, + +216 + mIFLA_INET6_TOKEN +, + +217 + mIFLA_INET6_ADDR_GEN_MODE +, + +218 + m__IFLA_INET6_MAX + + +221  + #IFLA_INET6_MAX + ( +__IFLA_INET6_MAX + - 1) + + ) + +223 + e6_addr_g_mode + { + +224 + mIN6_ADDR_GEN_MODE_EUI64 +, + +225 + mIN6_ADDR_GEN_MODE_NONE +, + +226 + mIN6_ADDR_GEN_MODE_STABLE_PRIVACY +, + +227 + mIN6_ADDR_GEN_MODE_RANDOM +, + +233 + mIFLA_BR_UNSPEC +, + +234 + mIFLA_BR_FORWARD_DELAY +, + +235 + mIFLA_BR_HELLO_TIME +, + +236 + mIFLA_BR_MAX_AGE +, + +237 + mIFLA_BR_AGEING_TIME +, + +238 + mIFLA_BR_STP_STATE +, + +239 + mIFLA_BR_PRIORITY +, + +240 + mIFLA_BR_VLAN_FILTERING +, + +241 + mIFLA_BR_VLAN_PROTOCOL +, + +242 + mIFLA_BR_GROUP_FWD_MASK +, + +243 + mIFLA_BR_ROOT_ID +, + +244 + mIFLA_BR_BRIDGE_ID +, + +245 + mIFLA_BR_ROOT_PORT +, + +246 + mIFLA_BR_ROOT_PATH_COST +, + +247 + mIFLA_BR_TOPOLOGY_CHANGE +, + +248 + mIFLA_BR_TOPOLOGY_CHANGE_DETECTED +, + +249 + mIFLA_BR_HELLO_TIMER +, + +250 + mIFLA_BR_TCN_TIMER +, + +251 + mIFLA_BR_TOPOLOGY_CHANGE_TIMER +, + +252 + mIFLA_BR_GC_TIMER +, + +253 + mIFLA_BR_GROUP_ADDR +, + +254 + mIFLA_BR_FDB_FLUSH +, + +255 + mIFLA_BR_MCAST_ROUTER +, + +256 + mIFLA_BR_MCAST_SNOOPING +, + +257 + mIFLA_BR_MCAST_QUERY_USE_IFADDR +, + +258 + mIFLA_BR_MCAST_QUERIER +, + +259 + mIFLA_BR_MCAST_HASH_ELASTICITY +, + +260 + mIFLA_BR_MCAST_HASH_MAX +, + +261 + mIFLA_BR_MCAST_LAST_MEMBER_CNT +, + +262 + mIFLA_BR_MCAST_STARTUP_QUERY_CNT +, + +263 + mIFLA_BR_MCAST_LAST_MEMBER_INTVL +, + +264 + mIFLA_BR_MCAST_MEMBERSHIP_INTVL +, + +265 + mIFLA_BR_MCAST_QUERIER_INTVL +, + +266 + mIFLA_BR_MCAST_QUERY_INTVL +, + +267 + mIFLA_BR_MCAST_QUERY_RESPONSE_INTVL +, + +268 + mIFLA_BR_MCAST_STARTUP_QUERY_INTVL +, + +269 + mIFLA_BR_NF_CALL_IPTABLES +, + +270 + mIFLA_BR_NF_CALL_IP6TABLES +, + +271 + mIFLA_BR_NF_CALL_ARPTABLES +, + +272 + mIFLA_BR_VLAN_DEFAULT_PVID +, + +273 + mIFLA_BR_PAD +, + +274 + mIFLA_BR_VLAN_STATS_ENABLED +, + +275 + mIFLA_BR_MCAST_STATS_ENABLED +, + +276 + mIFLA_BR_MCAST_IGMP_VERSION +, + +277 + mIFLA_BR_MCAST_MLD_VERSION +, + +278 + m__IFLA_BR_MAX +, + +281  + #IFLA_BR_MAX + ( +__IFLA_BR_MAX + - 1) + + ) + +283  + sia_bridge_id + { + +284 +__u8 + + mio +[2]; + +285 +__u8 + + maddr +[6]; + +289 + mBRIDGE_MODE_UNSPEC +, + +290 + mBRIDGE_MODE_HAIRPIN +, + +294 + mIFLA_BRPORT_UNSPEC +, + +295 + mIFLA_BRPORT_STATE +, + +296 + mIFLA_BRPORT_PRIORITY +, + +297 + mIFLA_BRPORT_COST +, + +298 + mIFLA_BRPORT_MODE +, + +299 + mIFLA_BRPORT_GUARD +, + +300 + mIFLA_BRPORT_PROTECT +, + +301 + mIFLA_BRPORT_FAST_LEAVE +, + +302 + mIFLA_BRPORT_LEARNING +, + +303 + mIFLA_BRPORT_UNICAST_FLOOD +, + +304 + mIFLA_BRPORT_PROXYARP +, + +305 + mIFLA_BRPORT_LEARNING_SYNC +, + +306 + mIFLA_BRPORT_PROXYARP_WIFI +, + +307 + mIFLA_BRPORT_ROOT_ID +, + +308 + mIFLA_BRPORT_BRIDGE_ID +, + +309 + mIFLA_BRPORT_DESIGNATED_PORT +, + +310 + mIFLA_BRPORT_DESIGNATED_COST +, + +311 + mIFLA_BRPORT_ID +, + +312 + mIFLA_BRPORT_NO +, + +313 + mIFLA_BRPORT_TOPOLOGY_CHANGE_ACK +, + +314 + mIFLA_BRPORT_CONFIG_PENDING +, + +315 + mIFLA_BRPORT_MESSAGE_AGE_TIMER +, + +316 + mIFLA_BRPORT_FORWARD_DELAY_TIMER +, + +317 + mIFLA_BRPORT_HOLD_TIMER +, + +318 + mIFLA_BRPORT_FLUSH +, + +319 + mIFLA_BRPORT_MULTICAST_ROUTER +, + +320 + mIFLA_BRPORT_PAD +, + +321 + mIFLA_BRPORT_MCAST_FLOOD +, + +322 + m__IFLA_BRPORT_MAX + + +324  + #IFLA_BRPORT_MAX + ( +__IFLA_BRPORT_MAX + - 1) + + ) + +326  + sia_chefo + { + +327 +__u32 + + mmax_asm_n +; + +328 +__u32 + + mtamp +; + +329 +__u32 + + machab_time +; + +330 +__u32 + + ms_time +; + +334 + mIFLA_INFO_UNSPEC +, + +335 + mIFLA_INFO_KIND +, + +336 + mIFLA_INFO_DATA +, + +337 + mIFLA_INFO_XSTATS +, + +338 + mIFLA_INFO_SLAVE_KIND +, + +339 + mIFLA_INFO_SLAVE_DATA +, + +340 + m__IFLA_INFO_MAX +, + +343  + #IFLA_INFO_MAX + ( +__IFLA_INFO_MAX + - 1) + + ) + +348 + mIFLA_VLAN_UNSPEC +, + +349 + mIFLA_VLAN_ID +, + +350 + mIFLA_VLAN_FLAGS +, + +351 + mIFLA_VLAN_EGRESS_QOS +, + +352 + mIFLA_VLAN_INGRESS_QOS +, + +353 + mIFLA_VLAN_PROTOCOL +, + +354 + m__IFLA_VLAN_MAX +, + +357  + #IFLA_VLAN_MAX + ( +__IFLA_VLAN_MAX + - 1) + + ) + +359  + sia_vn_ags + { + +360 +__u32 + + mags +; + +361 +__u32 + + mmask +; + +365 + mIFLA_VLAN_QOS_UNSPEC +, + +366 + mIFLA_VLAN_QOS_MAPPING +, + +367 + m__IFLA_VLAN_QOS_MAX + + +370  + #IFLA_VLAN_QOS_MAX + ( +__IFLA_VLAN_QOS_MAX + - 1) + + ) + +372  + sia_vn_qos_mpg + { + +373 +__u32 + + mom +; + +374 +__u32 + + mto +; + +379 + mIFLA_MACVLAN_UNSPEC +, + +380 + mIFLA_MACVLAN_MODE +, + +381 + mIFLA_MACVLAN_FLAGS +, + +382 + mIFLA_MACVLAN_MACADDR_MODE +, + +383 + mIFLA_MACVLAN_MACADDR +, + +384 + mIFLA_MACVLAN_MACADDR_DATA +, + +385 + mIFLA_MACVLAN_MACADDR_COUNT +, + +386 + m__IFLA_MACVLAN_MAX +, + +389  + #IFLA_MACVLAN_MAX + ( +__IFLA_MACVLAN_MAX + - 1) + + ) + +391 + emacvn_mode + { + +392 + mMACVLAN_MODE_PRIVATE + = 1, + +393 + mMACVLAN_MODE_VEPA + = 2, + +394 + mMACVLAN_MODE_BRIDGE + = 4, + +395 + mMACVLAN_MODE_PASSTHRU + = 8, + +396 + mMACVLAN_MODE_SOURCE + = 16, + +399 + emacvn_maddr_mode + { + +400 + mMACVLAN_MACADDR_ADD +, + +401 + mMACVLAN_MACADDR_DEL +, + +402 + mMACVLAN_MACADDR_FLUSH +, + +403 + mMACVLAN_MACADDR_SET +, + +406  + #MACVLAN_FLAG_NOPROMISC + 1 + + ) + +410 + mIFLA_VRF_UNSPEC +, + +411 + mIFLA_VRF_TABLE +, + +412 + m__IFLA_VRF_MAX + + +415  + #IFLA_VRF_MAX + ( +__IFLA_VRF_MAX + - 1) + + ) + +418 + mIFLA_VRF_PORT_UNSPEC +, + +419 + mIFLA_VRF_PORT_TABLE +, + +420 + m__IFLA_VRF_PORT_MAX + + +423  + #IFLA_VRF_PORT_MAX + ( +__IFLA_VRF_PORT_MAX + - 1) + + ) + +427 + mIFLA_MACSEC_UNSPEC +, + +428 + mIFLA_MACSEC_SCI +, + +429 + mIFLA_MACSEC_PORT +, + +430 + mIFLA_MACSEC_ICV_LEN +, + +431 + mIFLA_MACSEC_CIPHER_SUITE +, + +432 + mIFLA_MACSEC_WINDOW +, + +433 + mIFLA_MACSEC_ENCODING_SA +, + +434 + mIFLA_MACSEC_ENCRYPT +, + +435 + mIFLA_MACSEC_PROTECT +, + +436 + mIFLA_MACSEC_INC_SCI +, + +437 + mIFLA_MACSEC_ES +, + +438 + mIFLA_MACSEC_SCB +, + +439 + mIFLA_MACSEC_REPLAY_PROTECT +, + +440 + mIFLA_MACSEC_VALIDATION +, + +441 + mIFLA_MACSEC_PAD +, + +442 + m__IFLA_MACSEC_MAX +, + +445  + #IFLA_MACSEC_MAX + ( +__IFLA_MACSEC_MAX + - 1) + + ) + +447 + emacc_vidi_ty + { + +448 + mMACSEC_VALIDATE_DISABLED + = 0, + +449 + mMACSEC_VALIDATE_CHECK + = 1, + +450 + mMACSEC_VALIDATE_STRICT + = 2, + +451 + m__MACSEC_VALIDATE_END +, + +452 + mMACSEC_VALIDATE_MAX + = +__MACSEC_VALIDATE_END + - 1, + +457 + mIFLA_IPVLAN_UNSPEC +, + +458 + mIFLA_IPVLAN_MODE +, + +459 + m__IFLA_IPVLAN_MAX + + +462  + #IFLA_IPVLAN_MAX + ( +__IFLA_IPVLAN_MAX + - 1) + + ) + +464 + evn_mode + { + +465 + mIPVLAN_MODE_L2 + = 0, + +466 + mIPVLAN_MODE_L3 +, + +467 + mIPVLAN_MODE_L3S +, + +468 + mIPVLAN_MODE_MAX + + +473 + mIFLA_VXLAN_UNSPEC +, + +474 + mIFLA_VXLAN_ID +, + +475 + mIFLA_VXLAN_GROUP +, + +476 + mIFLA_VXLAN_LINK +, + +477 + mIFLA_VXLAN_LOCAL +, + +478 + mIFLA_VXLAN_TTL +, + +479 + mIFLA_VXLAN_TOS +, + +480 + mIFLA_VXLAN_LEARNING +, + +481 + mIFLA_VXLAN_AGEING +, + +482 + mIFLA_VXLAN_LIMIT +, + +483 + mIFLA_VXLAN_PORT_RANGE +, + +484 + mIFLA_VXLAN_PROXY +, + +485 + mIFLA_VXLAN_RSC +, + +486 + mIFLA_VXLAN_L2MISS +, + +487 + mIFLA_VXLAN_L3MISS +, + +488 + mIFLA_VXLAN_PORT +, + +489 + mIFLA_VXLAN_GROUP6 +, + +490 + mIFLA_VXLAN_LOCAL6 +, + +491 + mIFLA_VXLAN_UDP_CSUM +, + +492 + mIFLA_VXLAN_UDP_ZERO_CSUM6_TX +, + +493 + mIFLA_VXLAN_UDP_ZERO_CSUM6_RX +, + +494 + mIFLA_VXLAN_REMCSUM_TX +, + +495 + mIFLA_VXLAN_REMCSUM_RX +, + +496 + mIFLA_VXLAN_GBP +, + +497 + mIFLA_VXLAN_REMCSUM_NOPARTIAL +, + +498 + mIFLA_VXLAN_COLLECT_METADATA +, + +499 + mIFLA_VXLAN_LABEL +, + +500 + mIFLA_VXLAN_GPE +, + +501 + m__IFLA_VXLAN_MAX + + +503  + #IFLA_VXLAN_MAX + ( +__IFLA_VXLAN_MAX + - 1) + + ) + +505  + sia_vxn_pt_nge + { + +506 +__be16 + + mlow +; + +507 +__be16 + + mhigh +; + +512 + mIFLA_GENEVE_UNSPEC +, + +513 + mIFLA_GENEVE_ID +, + +514 + mIFLA_GENEVE_REMOTE +, + +515 + mIFLA_GENEVE_TTL +, + +516 + mIFLA_GENEVE_TOS +, + +517 + mIFLA_GENEVE_PORT +, + +518 + mIFLA_GENEVE_COLLECT_METADATA +, + +519 + mIFLA_GENEVE_REMOTE6 +, + +520 + mIFLA_GENEVE_UDP_CSUM +, + +521 + mIFLA_GENEVE_UDP_ZERO_CSUM6_TX +, + +522 + mIFLA_GENEVE_UDP_ZERO_CSUM6_RX +, + +523 + mIFLA_GENEVE_LABEL +, + +524 + m__IFLA_GENEVE_MAX + + +526  + #IFLA_GENEVE_MAX + ( +__IFLA_GENEVE_MAX + - 1) + + ) + +530 + mIFLA_PPP_UNSPEC +, + +531 + mIFLA_PPP_DEV_FD +, + +532 + m__IFLA_PPP_MAX + + +534  + #IFLA_PPP_MAX + ( +__IFLA_PPP_MAX + - 1) + + ) + +538 + mIFLA_GTP_UNSPEC +, + +539 + mIFLA_GTP_FD0 +, + +540 + mIFLA_GTP_FD1 +, + +541 + mIFLA_GTP_PDP_HASHSIZE +, + +542 + m__IFLA_GTP_MAX +, + +544  + #IFLA_GTP_MAX + ( +__IFLA_GTP_MAX + - 1) + + ) + +549 + mIFLA_BOND_UNSPEC +, + +550 + mIFLA_BOND_MODE +, + +551 + mIFLA_BOND_ACTIVE_SLAVE +, + +552 + mIFLA_BOND_MIIMON +, + +553 + mIFLA_BOND_UPDELAY +, + +554 + mIFLA_BOND_DOWNDELAY +, + +555 + mIFLA_BOND_USE_CARRIER +, + +556 + mIFLA_BOND_ARP_INTERVAL +, + +557 + mIFLA_BOND_ARP_IP_TARGET +, + +558 + mIFLA_BOND_ARP_VALIDATE +, + +559 + mIFLA_BOND_ARP_ALL_TARGETS +, + +560 + mIFLA_BOND_PRIMARY +, + +561 + mIFLA_BOND_PRIMARY_RESELECT +, + +562 + mIFLA_BOND_FAIL_OVER_MAC +, + +563 + mIFLA_BOND_XMIT_HASH_POLICY +, + +564 + mIFLA_BOND_RESEND_IGMP +, + +565 + mIFLA_BOND_NUM_PEER_NOTIF +, + +566 + mIFLA_BOND_ALL_SLAVES_ACTIVE +, + +567 + mIFLA_BOND_MIN_LINKS +, + +568 + mIFLA_BOND_LP_INTERVAL +, + +569 + mIFLA_BOND_PACKETS_PER_SLAVE +, + +570 + mIFLA_BOND_AD_LACP_RATE +, + +571 + mIFLA_BOND_AD_SELECT +, + +572 + mIFLA_BOND_AD_INFO +, + +573 + mIFLA_BOND_AD_ACTOR_SYS_PRIO +, + +574 + mIFLA_BOND_AD_USER_PORT_KEY +, + +575 + mIFLA_BOND_AD_ACTOR_SYSTEM +, + +576 + mIFLA_BOND_TLB_DYNAMIC_LB +, + +577 + m__IFLA_BOND_MAX +, + +580  + #IFLA_BOND_MAX + ( +__IFLA_BOND_MAX + - 1) + + ) + +583 + mIFLA_BOND_AD_INFO_UNSPEC +, + +584 + mIFLA_BOND_AD_INFO_AGGREGATOR +, + +585 + mIFLA_BOND_AD_INFO_NUM_PORTS +, + +586 + mIFLA_BOND_AD_INFO_ACTOR_KEY +, + +587 + mIFLA_BOND_AD_INFO_PARTNER_KEY +, + +588 + mIFLA_BOND_AD_INFO_PARTNER_MAC +, + +589 + m__IFLA_BOND_AD_INFO_MAX +, + +592  + #IFLA_BOND_AD_INFO_MAX + ( +__IFLA_BOND_AD_INFO_MAX + - 1) + + ) + +595 + mIFLA_BOND_SLAVE_UNSPEC +, + +596 + mIFLA_BOND_SLAVE_STATE +, + +597 + mIFLA_BOND_SLAVE_MII_STATUS +, + +598 + mIFLA_BOND_SLAVE_LINK_FAILURE_COUNT +, + +599 + mIFLA_BOND_SLAVE_PERM_HWADDR +, + +600 + mIFLA_BOND_SLAVE_QUEUE_ID +, + +601 + mIFLA_BOND_SLAVE_AD_AGGREGATOR_ID +, + +602 + mIFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE +, + +603 + mIFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE +, + +604 + m__IFLA_BOND_SLAVE_MAX +, + +607  + #IFLA_BOND_SLAVE_MAX + ( +__IFLA_BOND_SLAVE_MAX + - 1) + + ) + +612 + mIFLA_VF_INFO_UNSPEC +, + +613 + mIFLA_VF_INFO +, + +614 + m__IFLA_VF_INFO_MAX +, + +617  + #IFLA_VF_INFO_MAX + ( +__IFLA_VF_INFO_MAX + - 1) + + ) + +620 + mIFLA_VF_UNSPEC +, + +621 + mIFLA_VF_MAC +, + +622 + mIFLA_VF_VLAN +, + +623 + mIFLA_VF_TX_RATE +, + +624 + mIFLA_VF_SPOOFCHK +, + +625 + mIFLA_VF_LINK_STATE +, + +626 + mIFLA_VF_RATE +, + +627 + mIFLA_VF_RSS_QUERY_EN +, + +630 + mIFLA_VF_STATS +, + +631 + mIFLA_VF_TRUST +, + +632 + mIFLA_VF_IB_NODE_GUID +, + +633 + mIFLA_VF_IB_PORT_GUID +, + +634 + mIFLA_VF_VLAN_LIST +, + +635 + m__IFLA_VF_MAX +, + +638  + #IFLA_VF_MAX + ( +__IFLA_VF_MAX + - 1) + + ) + +640  + sia_vf_mac + { + +641 +__u32 + + mvf +; + +642 +__u8 + + mmac +[32]; + +645  + sia_vf_vn + { + +646 +__u32 + + mvf +; + +647 +__u32 + + mvn +; + +648 +__u32 + + mqos +; + +652 + mIFLA_VF_VLAN_INFO_UNSPEC +, + +653 + mIFLA_VF_VLAN_INFO +, + +654 + m__IFLA_VF_VLAN_INFO_MAX +, + +657  + #IFLA_VF_VLAN_INFO_MAX + ( +__IFLA_VF_VLAN_INFO_MAX + - 1) + + ) + +658  + #MAX_VLAN_LIST_LEN + 1 + + ) + +660  + sia_vf_vn_fo + { + +661 +__u32 + + mvf +; + +662 +__u32 + + mvn +; + +663 +__u32 + + mqos +; + +664 +__be16 + + mvn_o +; + +667  + sia_vf_tx_ + { + +668 +__u32 + + mvf +; + +669 +__u32 + + m +; + +672  + sia_vf_ + { + +673 +__u32 + + mvf +; + +674 +__u32 + + mm_tx_ +; + +675 +__u32 + + mmax_tx_ +; + +678  + sia_vf_oofchk + { + +679 +__u32 + + mvf +; + +680 +__u32 + + mg +; + +683  + sia_vf_guid + { + +684 +__u32 + + mvf +; + +685 +__u64 + + mguid +; + +689 + mIFLA_VF_LINK_STATE_AUTO +, + +690 + mIFLA_VF_LINK_STATE_ENABLE +, + +691 + mIFLA_VF_LINK_STATE_DISABLE +, + +692 + m__IFLA_VF_LINK_STATE_MAX +, + +695  + sia_vf_lk_e + { + +696 +__u32 + + mvf +; + +697 +__u32 + + mlk_e +; + +700  + sia_vf_rss_quy_ + { + +701 +__u32 + + mvf +; + +702 +__u32 + + mg +; + +706 + mIFLA_VF_STATS_RX_PACKETS +, + +707 + mIFLA_VF_STATS_TX_PACKETS +, + +708 + mIFLA_VF_STATS_RX_BYTES +, + +709 + mIFLA_VF_STATS_TX_BYTES +, + +710 + mIFLA_VF_STATS_BROADCAST +, + +711 + mIFLA_VF_STATS_MULTICAST +, + +712 + mIFLA_VF_STATS_PAD +, + +713 + m__IFLA_VF_STATS_MAX +, + +716  + #IFLA_VF_STATS_MAX + ( +__IFLA_VF_STATS_MAX + - 1) + + ) + +718  + sia_vf_u + { + +719 +__u32 + + mvf +; + +720 +__u32 + + mg +; + +739 + mIFLA_VF_PORT_UNSPEC +, + +740 + mIFLA_VF_PORT +, + +741 + m__IFLA_VF_PORT_MAX +, + +744  + #IFLA_VF_PORT_MAX + ( +__IFLA_VF_PORT_MAX + - 1) + + ) + +747 + mIFLA_PORT_UNSPEC +, + +748 + mIFLA_PORT_VF +, + +749 + mIFLA_PORT_PROFILE +, + +750 + mIFLA_PORT_VSI_TYPE +, + +751 + mIFLA_PORT_INSTANCE_UUID +, + +752 + mIFLA_PORT_HOST_UUID +, + +753 + mIFLA_PORT_REQUEST +, + +754 + mIFLA_PORT_RESPONSE +, + +755 + m__IFLA_PORT_MAX +, + +758  + #IFLA_PORT_MAX + ( +__IFLA_PORT_MAX + - 1) + + ) + +760  + #PORT_PROFILE_MAX + 40 + + ) + +761  + #PORT_UUID_MAX + 16 + + ) + +762  + #PORT_SELF_VF + -1 + + ) + +765 + mPORT_REQUEST_PREASSOCIATE + = 0, + +766 + mPORT_REQUEST_PREASSOCIATE_RR +, + +767 + mPORT_REQUEST_ASSOCIATE +, + +768 + mPORT_REQUEST_DISASSOCIATE +, + +772 + mPORT_VDP_RESPONSE_SUCCESS + = 0, + +773 + mPORT_VDP_RESPONSE_INVALID_FORMAT +, + +774 + mPORT_VDP_RESPONSE_INSUFFICIENT_RESOURCES +, + +775 + mPORT_VDP_RESPONSE_UNUSED_VTID +, + +776 + mPORT_VDP_RESPONSE_VTID_VIOLATION +, + +777 + mPORT_VDP_RESPONSE_VTID_VERSION_VIOALTION +, + +778 + mPORT_VDP_RESPONSE_OUT_OF_SYNC +, + +780 + mPORT_PROFILE_RESPONSE_SUCCESS + = 0x100, + +781 + mPORT_PROFILE_RESPONSE_INPROGRESS +, + +782 + mPORT_PROFILE_RESPONSE_INVALID +, + +783 + mPORT_PROFILE_RESPONSE_BADSTATE +, + +784 + mPORT_PROFILE_RESPONSE_INSUFFICIENT_RESOURCES +, + +785 + mPORT_PROFILE_RESPONSE_ERROR +, + +788  + sia_pt_vsi + { + +789 +__u8 + + mvsi_mgr_id +; + +790 +__u8 + + mvsi_ty_id +[3]; + +791 +__u8 + + mvsi_ty_vsi +; + +792 +__u8 + + md +[3]; + +799 + mIFLA_IPOIB_UNSPEC +, + +800 + mIFLA_IPOIB_PKEY +, + +801 + mIFLA_IPOIB_MODE +, + +802 + mIFLA_IPOIB_UMCAST +, + +803 + m__IFLA_IPOIB_MAX + + +807 + mIPOIB_MODE_DATAGRAM + = 0, + +808 + mIPOIB_MODE_CONNECTED + = 1, + +811  + #IFLA_IPOIB_MAX + ( +__IFLA_IPOIB_MAX + - 1) + + ) + +817 + mIFLA_HSR_UNSPEC +, + +818 + mIFLA_HSR_SLAVE1 +, + +819 + mIFLA_HSR_SLAVE2 +, + +820 + mIFLA_HSR_MULTICAST_SPEC +, + +821 + mIFLA_HSR_SUPERVISION_ADDR +, + +822 + mIFLA_HSR_SEQ_NR +, + +823 + mIFLA_HSR_VERSION +, + +824 + m__IFLA_HSR_MAX +, + +827  + #IFLA_HSR_MAX + ( +__IFLA_HSR_MAX + - 1) + + ) + +831  + sif_s_msg + { + +832 +__u8 + + mmy +; + +833 +__u8 + + md1 +; + +834 +__u16 + + md2 +; + +835 +__u32 + + mifdex +; + +836 +__u32 + + mfr_mask +; + +843 + mIFLA_STATS_UNSPEC +, + +844 + mIFLA_STATS_LINK_64 +, + +845 + mIFLA_STATS_LINK_XSTATS +, + +846 + mIFLA_STATS_LINK_XSTATS_SLAVE +, + +847 + mIFLA_STATS_LINK_OFFLOAD_XSTATS +, + +848 + m__IFLA_STATS_MAX +, + +851  + #IFLA_STATS_MAX + ( +__IFLA_STATS_MAX + - 1) + + ) + +853  + #IFLA_STATS_FILTER_BIT +( +ATTR +(1 << (ATTR - 1)) + + ) + +861 + mLINK_XSTATS_TYPE_UNSPEC +, + +862 + mLINK_XSTATS_TYPE_BRIDGE +, + +863 + m__LINK_XSTATS_TYPE_MAX + + +865  + #LINK_XSTATS_TYPE_MAX + ( +__LINK_XSTATS_TYPE_MAX + - 1) + + ) + +869 + mIFLA_OFFLOAD_XSTATS_UNSPEC +, + +870 + mIFLA_OFFLOAD_XSTATS_CPU_HIT +, + +871 + m__IFLA_OFFLOAD_XSTATS_MAX + + +873  + #IFLA_OFFLOAD_XSTATS_MAX + ( +__IFLA_OFFLOAD_XSTATS_MAX + - 1) + + ) + +877  + #XDP_FLAGS_UPDATE_IF_NOEXIST + (1U << 0) + + ) + +878  + #XDP_FLAGS_MASK + ( +XDP_FLAGS_UPDATE_IF_NOEXIST +) + + ) + +881 + mIFLA_XDP_UNSPEC +, + +882 + mIFLA_XDP_FD +, + +883 + mIFLA_XDP_ATTACHED +, + +884 + mIFLA_XDP_FLAGS +, + +885 + m__IFLA_XDP_MAX +, + +888  + #IFLA_XDP_MAX + ( +__IFLA_XDP_MAX + - 1) + + ) + + @/usr/include/linux/if_packet.h + +1 #ide +__LINUX_IF_PACKET_H + + +2  + #__LINUX_IF_PACKET_H + + + ) + +4  + ~ + +6  + ssockaddr_pkt + { + +7  + mkt_my +; + +8  + mkt_devi +[14]; + +9 +__be16 + + mkt_oc +; + +12  + ssockaddr_ + { + +13  + ml_my +; + +14 +__be16 + + ml_oc +; + +15  + ml_ifdex +; + +16  + ml_hy +; + +17  + ml_pky +; + +18  + ml_h +; + +19  + ml_addr +[8]; + +24  + #PACKET_HOST + 0 + + ) + +25  + #PACKET_BROADCAST + 1 + + ) + +26  + #PACKET_MULTICAST + 2 + + ) + +27  + #PACKET_OTHERHOST + 3 + + ) + +28  + #PACKET_OUTGOING + 4 + + ) + +29  + #PACKET_LOOPBACK + 5 + + ) + +30  + #PACKET_USER + 6 + + ) + +31  + #PACKET_KERNEL + 7 + + ) + +33  + #PACKET_FASTROUTE + 6 + + ) + +37  + #PACKET_ADD_MEMBERSHIP + 1 + + ) + +38  + #PACKET_DROP_MEMBERSHIP + 2 + + ) + +39  + #PACKET_RECV_OUTPUT + 3 + + ) + +41  + #PACKET_RX_RING + 5 + + ) + +42  + #PACKET_STATISTICS + 6 + + ) + +43  + #PACKET_COPY_THRESH + 7 + + ) + +44  + #PACKET_AUXDATA + 8 + + ) + +45  + #PACKET_ORIGDEV + 9 + + ) + +46  + #PACKET_VERSION + 10 + + ) + +47  + #PACKET_HDRLEN + 11 + + ) + +48  + #PACKET_RESERVE + 12 + + ) + +49  + #PACKET_TX_RING + 13 + + ) + +50  + #PACKET_LOSS + 14 + + ) + +51  + #PACKET_VNET_HDR + 15 + + ) + +52  + #PACKET_TX_TIMESTAMP + 16 + + ) + +53  + #PACKET_TIMESTAMP + 17 + + ) + +54  + #PACKET_FANOUT + 18 + + ) + +55  + #PACKET_TX_HAS_OFF + 19 + + ) + +56  + #PACKET_QDISC_BYPASS + 20 + + ) + +57  + #PACKET_ROLLOVER_STATS + 21 + + ) + +58  + #PACKET_FANOUT_DATA + 22 + + ) + +60  + #PACKET_FANOUT_HASH + 0 + + ) + +61  + #PACKET_FANOUT_LB + 1 + + ) + +62  + #PACKET_FANOUT_CPU + 2 + + ) + +63  + #PACKET_FANOUT_ROLLOVER + 3 + + ) + +64  + #PACKET_FANOUT_RND + 4 + + ) + +65  + #PACKET_FANOUT_QM + 5 + + ) + +66  + #PACKET_FANOUT_CBPF + 6 + + ) + +67  + #PACKET_FANOUT_EBPF + 7 + + ) + +68  + #PACKET_FANOUT_FLAG_ROLLOVER + 0x1000 + + ) + +69  + #PACKET_FANOUT_FLAG_DEFRAG + 0x8000 + + ) + +71  + sack_s + { + +72  + m_cks +; + +73  + m_drs +; + +76  + sack_s_v3 + { + +77  + m_cks +; + +78  + m_drs +; + +79  + m_ze_q_t +; + +82  + sack_rlov_s + { + +83 +__igd_u64 + + m_l +; + +84 +__igd_u64 + + m_huge +; + +85 +__igd_u64 + + m_ed +; + +88  + uack_s_u + { + +89  +ack_s + + ms1 +; + +90  +ack_s_v3 + + ms3 +; + +93  + sack_auxda + { + +94 +__u32 + + m_us +; + +95 +__u32 + + m_n +; + +96 +__u32 + + m_n +; + +97 +__u16 + + m_mac +; + +98 +__u16 + + m_t +; + +99 +__u16 + + m_vn_tci +; + +100 +__u16 + + m_vn_id +; + +104  + #TP_STATUS_KERNEL + 0 + + ) + +105  + #TP_STATUS_USER + (1 << 0) + + ) + +106  + #TP_STATUS_COPY + (1 << 1) + + ) + +107  + #TP_STATUS_LOSING + (1 << 2) + + ) + +108  + #TP_STATUS_CSUMNOTREADY + (1 << 3) + + ) + +109  + #TP_STATUS_VLAN_VALID + (1 << 4 + + ) + +110  + #TP_STATUS_BLK_TMO + (1 << 5) + + ) + +111  + #TP_STATUS_VLAN_TPID_VALID + (1 << 6 + + ) + +112  + #TP_STATUS_CSUM_VALID + (1 << 7) + + ) + +115  + #TP_STATUS_AVAILABLE + 0 + + ) + +116  + #TP_STATUS_SEND_REQUEST + (1 << 0) + + ) + +117  + #TP_STATUS_SENDING + (1 << 1) + + ) + +118  + #TP_STATUS_WRONG_FORMAT + (1 << 2) + + ) + +121  + #TP_STATUS_TS_SOFTWARE + (1 << 29) + + ) + +122  + #TP_STATUS_TS_SYS_HARDWARE + (1 << 30 + + ) + +123  + #TP_STATUS_TS_RAW_HARDWARE + (1 << 31) + + ) + +126  + #TP_FT_REQ_FILL_RXHASH + 0x1 + + ) + +128  + sack_hdr + { + +129  + m_us +; + +130  + m_n +; + +131  + m_n +; + +132  + m_mac +; + +133  + m_t +; + +134  + m_c +; + +135  + m_uc +; + +138  + #TPACKET_ALIGNMENT + 16 + + ) + +139  + #TPACKET_ALIGN +( +x +(((x)+ +TPACKET_ALIGNMENT +-1)&~(TPACKET_ALIGNMENT-1)) + + ) + +140  + #TPACKET_HDRLEN + ( + `TPACKET_ALIGN +(( +ack_hdr +)+ ( +sockaddr_ +)) + + ) + +142  + sack2_hdr + { + +143 +__u32 + + m_us +; + +144 +__u32 + + m_n +; + +145 +__u32 + + m_n +; + +146 +__u16 + + m_mac +; + +147 +__u16 + + m_t +; + +148 +__u32 + + m_c +; + +149 +__u32 + + m_nc +; + +150 +__u16 + + m_vn_tci +; + +151 +__u16 + + m_vn_id +; + +152 +__u8 + + m_ddg +[4]; + +155  + sack_hdr_v1 + { + +156 +__u32 + + m_rxhash +; + +157 +__u32 + + m_vn_tci +; + +158 +__u16 + + m_vn_id +; + +159 +__u16 + + m_ddg +; + +162  + sack3_hdr + { + +163 +__u32 + + m_xt_offt +; + +164 +__u32 + + m_c +; + +165 +__u32 + + m_nc +; + +166 +__u32 + + m_n +; + +167 +__u32 + + m_n +; + +168 +__u32 + + m_us +; + +169 +__u16 + + m_mac +; + +170 +__u16 + + m_t +; + +173  +ack_hdr_v1 + + mhv1 +; + +175 +__u8 + + m_ddg +[8]; + +178  + sack_bd_ts + { + +179  + mts_c +; + +181  + mts_uc +; + +182  + mts_nc +; + +186  + sack_hdr_v1 + { + +187 +__u32 + + mblock_us +; + +188 +__u32 + + mnum_pkts +; + +189 +__u32 + + mofft_to_f_pkt +; + +194 +__u32 + + mblk_n +; + +205 +__igd_u64 + + mq_num +; + +232  +ack_bd_ts + + mts_f_pkt +, + mts_ϡ_pkt +; + +235  + uack_bd_hd_u + { + +236  +ack_hdr_v1 + + mbh1 +; + +239  + sack_block_desc + { + +240 +__u32 + + mvsi +; + +241 +__u32 + + mofft_to_iv +; + +242  +ack_bd_hd_u + + mhdr +; + +245  + #TPACKET2_HDRLEN + ( + `TPACKET_ALIGN +(( +ack2_hdr +)+ ( +sockaddr_ +)) + + ) + +246  + #TPACKET3_HDRLEN + ( + `TPACKET_ALIGN +(( +ack3_hdr +)+ ( +sockaddr_ +)) + + ) + +248 + eack_vsis + { + +249 + mTPACKET_V1 +, + +250 + mTPACKET_V2 +, + +251 + mTPACKET_V3 + + +267  + sack_q + { + +268  + m_block_size +; + +269  + m_block_ +; + +270  + m_ame_size +; + +271  + m_ame_ +; + +274  + sack_q3 + { + +275  + m_block_size +; + +276  + m_block_ +; + +277  + m_ame_size +; + +278  + m_ame_ +; + +279  + m_te_blk_tov +; + +280  + m_sizeof_iv +; + +281  + m_u_q_wd +; + +284  + uack_q_u + { + +285  +ack_q + + mq +; + +286  +ack_q3 + + mq3 +; + +289  + sck_mq + { + +290  + mmr_ifdex +; + +291  + mmr_ty +; + +292  + mmr_ +; + +293  + mmr_addss +[8]; + +296  + #PACKET_MR_MULTICAST + 0 + + ) + +297  + #PACKET_MR_PROMISC + 1 + + ) + +298  + #PACKET_MR_ALLMULTI + 2 + + ) + +299  + #PACKET_MR_UNICAST + 3 + + ) + + @/usr/include/linux/in.h + +18 #ide +_LINUX_IN_H + + +19  + #_LINUX_IN_H + + + ) + +21  + ~ + +22  + ~ + +23  + ~ + +25 #i +__UAPI_DEF_IN_IPPROTO + + +28 + mIPPROTO_IP + = 0, + +29  + #IPPROTO_IP + +IPPROTO_IP + + + ) + +30 + mIPPROTO_ICMP + = 1, + +31  + #IPPROTO_ICMP + +IPPROTO_ICMP + + + ) + +32 + mIPPROTO_IGMP + = 2, + +33  + #IPPROTO_IGMP + +IPPROTO_IGMP + + + ) + +34 + mIPPROTO_IPIP + = 4, + +35  + #IPPROTO_IPIP + +IPPROTO_IPIP + + + ) + +36 + mIPPROTO_TCP + = 6, + +37  + #IPPROTO_TCP + +IPPROTO_TCP + + + ) + +38 + mIPPROTO_EGP + = 8, + +39  + #IPPROTO_EGP + +IPPROTO_EGP + + + ) + +40 + mIPPROTO_PUP + = 12, + +41  + #IPPROTO_PUP + +IPPROTO_PUP + + + ) + +42 + mIPPROTO_UDP + = 17, + +43  + #IPPROTO_UDP + +IPPROTO_UDP + + + ) + +44 + mIPPROTO_IDP + = 22, + +45  + #IPPROTO_IDP + +IPPROTO_IDP + + + ) + +46 + mIPPROTO_TP + = 29, + +47  + #IPPROTO_TP + +IPPROTO_TP + + + ) + +48 + mIPPROTO_DCCP + = 33, + +49  + #IPPROTO_DCCP + +IPPROTO_DCCP + + + ) + +50 + mIPPROTO_IPV6 + = 41, + +51  + #IPPROTO_IPV6 + +IPPROTO_IPV6 + + + ) + +52 + mIPPROTO_RSVP + = 46, + +53  + #IPPROTO_RSVP + +IPPROTO_RSVP + + + ) + +54 + mIPPROTO_GRE + = 47, + +55  + #IPPROTO_GRE + +IPPROTO_GRE + + + ) + +56 + mIPPROTO_ESP + = 50, + +57  + #IPPROTO_ESP + +IPPROTO_ESP + + + ) + +58 + mIPPROTO_AH + = 51, + +59  + #IPPROTO_AH + +IPPROTO_AH + + + ) + +60 + mIPPROTO_MTP + = 92, + +61  + #IPPROTO_MTP + +IPPROTO_MTP + + + ) + +62 + mIPPROTO_BEETPH + = 94, + +63  + #IPPROTO_BEETPH + +IPPROTO_BEETPH + + + ) + +64 + mIPPROTO_ENCAP + = 98, + +65  + #IPPROTO_ENCAP + +IPPROTO_ENCAP + + + ) + +66 + mIPPROTO_PIM + = 103, + +67  + #IPPROTO_PIM + +IPPROTO_PIM + + + ) + +68 + mIPPROTO_COMP + = 108, + +69  + #IPPROTO_COMP + +IPPROTO_COMP + + + ) + +70 + mIPPROTO_SCTP + = 132, + +71  + #IPPROTO_SCTP + +IPPROTO_SCTP + + + ) + +72 + mIPPROTO_UDPLITE + = 136, + +73  + #IPPROTO_UDPLITE + +IPPROTO_UDPLITE + + + ) + +74 + mIPPROTO_MPLS + = 137, + +75  + #IPPROTO_MPLS + +IPPROTO_MPLS + + + ) + +76 + mIPPROTO_RAW + = 255, + +77  + #IPPROTO_RAW + +IPPROTO_RAW + + + ) + +78 + mIPPROTO_MAX + + +82 #i +__UAPI_DEF_IN_ADDR + + +84  + s_addr + { + +85 +__be32 + + ms_addr +; + +89  + #IP_TOS + 1 + + ) + +90  + #IP_TTL + 2 + + ) + +91  + #IP_HDRINCL + 3 + + ) + +92  + #IP_OPTIONS + 4 + + ) + +93  + #IP_ROUTER_ALERT + 5 + + ) + +94  + #IP_RECVOPTS + 6 + + ) + +95  + #IP_RETOPTS + 7 + + ) + +96  + #IP_PKTINFO + 8 + + ) + +97  + #IP_PKTOPTIONS + 9 + + ) + +98  + #IP_MTU_DISCOVER + 10 + + ) + +99  + #IP_RECVERR + 11 + + ) + +100  + #IP_RECVTTL + 12 + + ) + +101  + #IP_RECVTOS + 13 + + ) + +102  + #IP_MTU + 14 + + ) + +103  + #IP_FREEBIND + 15 + + ) + +104  + #IP_IPSEC_POLICY + 16 + + ) + +105  + #IP_XFRM_POLICY + 17 + + ) + +106  + #IP_PASSSEC + 18 + + ) + +107  + #IP_TRANSPARENT + 19 + + ) + +110  + #IP_RECVRETOPTS + +IP_RETOPTS + + + ) + +113  + #IP_ORIGDSTADDR + 20 + + ) + +114  + #IP_RECVORIGDSTADDR + +IP_ORIGDSTADDR + + + ) + +116  + #IP_MINTTL + 21 + + ) + +117  + #IP_NODEFRAG + 22 + + ) + +118  + #IP_CHECKSUM + 23 + + ) + +119  + #IP_BIND_ADDRESS_NO_PORT + 24 + + ) + +120  + #IP_RECVFRAGSIZE + 25 + + ) + +123  + #IP_PMTUDISC_DONT + 0 + + ) + +124  + #IP_PMTUDISC_WANT + 1 + + ) + +125  + #IP_PMTUDISC_DO + 2 + + ) + +126  + #IP_PMTUDISC_PROBE + 3 + + ) + +131  + #IP_PMTUDISC_INTERFACE + 4 + + ) + +135  + #IP_PMTUDISC_OMIT + 5 + + ) + +137  + #IP_MULTICAST_IF + 32 + + ) + +138  + #IP_MULTICAST_TTL + 33 + + ) + +139  + #IP_MULTICAST_LOOP + 34 + + ) + +140  + #IP_ADD_MEMBERSHIP + 35 + + ) + +141  + #IP_DROP_MEMBERSHIP + 36 + + ) + +142  + #IP_UNBLOCK_SOURCE + 37 + + ) + +143  + #IP_BLOCK_SOURCE + 38 + + ) + +144  + #IP_ADD_SOURCE_MEMBERSHIP + 39 + + ) + +145  + #IP_DROP_SOURCE_MEMBERSHIP + 40 + + ) + +146  + #IP_MSFILTER + 41 + + ) + +147  + #MCAST_JOIN_GROUP + 42 + + ) + +148  + #MCAST_BLOCK_SOURCE + 43 + + ) + +149  + #MCAST_UNBLOCK_SOURCE + 44 + + ) + +150  + #MCAST_LEAVE_GROUP + 45 + + ) + +151  + #MCAST_JOIN_SOURCE_GROUP + 46 + + ) + +152  + #MCAST_LEAVE_SOURCE_GROUP + 47 + + ) + +153  + #MCAST_MSFILTER + 48 + + ) + +154  + #IP_MULTICAST_ALL + 49 + + ) + +155  + #IP_UNICAST_IF + 50 + + ) + +157  + #MCAST_EXCLUDE + 0 + + ) + +158  + #MCAST_INCLUDE + 1 + + ) + +161  + #IP_DEFAULT_MULTICAST_TTL + 1 + + ) + +162  + #IP_DEFAULT_MULTICAST_LOOP + 1 + + ) + +166 #i +__UAPI_DEF_IP_MREQ + + +167  + s_mq + { + +168  +_addr + + mimr_muɟddr +; + +169  +_addr + + mimr_r +; + +172  + s_mqn + { + +173  +_addr + + mimr_muɟddr +; + +174  +_addr + + mimr_addss +; + +175  + mimr_ifdex +; + +178  + s_mq_sour + { + +179 +__be32 + + mimr_muɟddr +; + +180 +__be32 + + mimr_r +; + +181 +__be32 + + mimr_souraddr +; + +184  + s_msfr + { + +185 +__be32 + + mimsf_muɟddr +; + +186 +__be32 + + mimsf_r +; + +187 +__u32 + + mimsf_fmode +; + +188 +__u32 + + mimsf_numc +; + +189 +__be32 + + mimsf_i +[1]; + +192  + #IP_MSFILTER_SIZE +( +numc +) \ + +193 (( +_msfr +- ( +__u32 +) \ + +194 + ( +numc +* ( +__u32 +)) + + ) + +196  + sgroup_q + { + +197 +__u32 + + mgr_r +; + +198  +__kl_sockaddr_age + + mgr_group +; + +201  + sgroup_sour_q + { + +202 +__u32 + + mg_r +; + +203  +__kl_sockaddr_age + + mg_group +; + +204  +__kl_sockaddr_age + + mg_sour +; + +207  + sgroup_fr + { + +208 +__u32 + + mgf_r +; + +209  +__kl_sockaddr_age + + mgf_group +; + +210 +__u32 + + mgf_fmode +; + +211 +__u32 + + mgf_numc +; + +212  +__kl_sockaddr_age + + mgf_i +[1]; + +215  + #GROUP_FILTER_SIZE +( +numc +) \ + +216 (( +group_fr +- ( +__kl_sockaddr_age +) \ + +217 + ( +numc +* ( +__kl_sockaddr_age +)) + + ) + +220 #i +__UAPI_DEF_IN_PKTINFO + + +221  + s_pktfo + { + +222  + mi_ifdex +; + +223  +_addr + + mi_ec_d +; + +224  +_addr + + mi_addr +; + +229 #i +__UAPI_DEF_SOCKADDR_IN + + +230  + #__SOCK_SIZE__ + 16 + + ) + +231  + ssockaddr_ + { + +232 +__kl__my_t + + ms_my +; + +233 +__be16 + + ms_pt +; + +234  +_addr + + ms_addr +; + +237  + m__d +[ +__SOCK_SIZE__ + - () - + +238 (- ( +_addr +)]; + +240  + #s_zo + +__d + + + ) + +243 #i +__UAPI_DEF_IN_CLASS + + +249  + #IN_CLASSA +( +a +(((()& 0x80000000=0) + + ) + +250  + #IN_CLASSA_NET + 0xff000000 + + ) + +251  + #IN_CLASSA_NSHIFT + 24 + + ) + +252  + #IN_CLASSA_HOST + (0xfffffff& ~ +IN_CLASSA_NET +) + + ) + +253  + #IN_CLASSA_MAX + 128 + + ) + +255  + #IN_CLASSB +( +a +(((()& 0xc0000000=0x80000000) + + ) + +256  + #IN_CLASSB_NET + 0xffff0000 + + ) + +257  + #IN_CLASSB_NSHIFT + 16 + + ) + +258  + #IN_CLASSB_HOST + (0xfffffff& ~ +IN_CLASSB_NET +) + + ) + +259  + #IN_CLASSB_MAX + 65536 + + ) + +261  + #IN_CLASSC +( +a +(((()& 0xe0000000=0xc0000000) + + ) + +262  + #IN_CLASSC_NET + 0xffffff00 + + ) + +263  + #IN_CLASSC_NSHIFT + 8 + + ) + +264  + #IN_CLASSC_HOST + (0xfffffff& ~ +IN_CLASSC_NET +) + + ) + +266  + #IN_CLASSD +( +a +(((()& 0xf0000000=0xe0000000) + + ) + +267  + #IN_MULTICAST +( +a + + `IN_CLASSD +) + + ) + +268  + #IN_MULTICAST_NET + 0xF0000000 + + ) + +270  + #IN_EXPERIMENTAL +( +a +(((()& 0xf0000000=0xf0000000) + + ) + +271  + #IN_BADCLASS +( +a + + `IN_EXPERIMENTAL +()) + + ) + +274  + #INADDR_ANY + ((0x00000000) + + ) + +277  + #INADDR_BROADCAST + ((0xffffffff) + + ) + +280  + #INADDR_NONE + ((0xffffffff) + + ) + +283  + #IN_LOOPBACKNET + 127 + + ) + +286  + #INADDR_LOOPBACK + 0x7f000001 + + ) + +287  + #IN_LOOPBACK +( +a +(((()& 0xff000000=0x7f000000) + + ) + +290  + #INADDR_UNSPEC_GROUP + 0xe0000000U + + ) + +291  + #INADDR_ALLHOSTS_GROUP + 0xe0000001U + + ) + +292  + #INADDR_ALLRTRS_GROUP + 0xe0000002U + + ) + +293  + #INADDR_MAX_LOCAL_GROUP + 0xe00000ffU + + ) + +297  + ~ + + @/usr/include/linux/in6.h + +21 #ide +_LINUX_IN6_H + + +22  + #_LINUX_IN6_H + + + ) + +24  + ~ + +25  + ~ + +31 #i +__UAPI_DEF_IN6_ADDR + + +32  + s6_addr + { + +34 +__u8 + + mu6_addr8 +[16]; + +35 #i +__UAPI_DEF_IN6_ADDR_ALT + + +36 +__be16 + + mu6_addr16 +[8]; + +37 +__be32 + + mu6_addr32 +[4]; + +39 } + m6_u +; + +40  + #s6_addr + +6_u +. +u6_addr8 + + + ) + +41 #i +__UAPI_DEF_IN6_ADDR_ALT + + +42  + #s6_addr16 + +6_u +. +u6_addr16 + + + ) + +43  + #s6_addr32 + +6_u +. +u6_addr32 + + + ) + +48 #i +__UAPI_DEF_SOCKADDR_IN6 + + +49  + ssockaddr_6 + { + +50  + ms6_my +; + +51 +__be16 + + ms6_pt +; + +52 +__be32 + + ms6_owfo +; + +53  +6_addr + + ms6_addr +; + +54 +__u32 + + ms6_sce_id +; + +58 #i +__UAPI_DEF_IPV6_MREQ + + +59  + sv6_mq + { + +61  +6_addr + + mv6mr_muɟddr +; + +64  + mv6mr_ifdex +; + +68  + #v6mr_addr + +v6mr_muɟddr + + + ) + +70  + s6_owb_q + { + +71  +6_addr + + mr_d +; + +72 +__be32 + + mr_b +; + +73 +__u8 + + mr_ai +; + +74 +__u8 + + mr_she +; + +75 +__u16 + + mr_ags +; + +76 +__u16 + + mr_expes +; + +77 +__u16 + + mr_lg +; + +78 +__u32 + + m__r_d +; + +82  + #IPV6_FL_A_GET + 0 + + ) + +83  + #IPV6_FL_A_PUT + 1 + + ) + +84  + #IPV6_FL_A_RENEW + 2 + + ) + +86  + #IPV6_FL_F_CREATE + 1 + + ) + +87  + #IPV6_FL_F_EXCL + 2 + + ) + +88  + #IPV6_FL_F_REFLECT + 4 + + ) + +89  + #IPV6_FL_F_REMOTE + 8 + + ) + +91  + #IPV6_FL_S_NONE + 0 + + ) + +92  + #IPV6_FL_S_EXCL + 1 + + ) + +93  + #IPV6_FL_S_PROCESS + 2 + + ) + +94  + #IPV6_FL_S_USER + 3 + + ) + +95  + #IPV6_FL_S_ANY + 255 + + ) + +106  + #IPV6_FLOWINFO_FLOWLABEL + 0x000fffff + + ) + +107  + #IPV6_FLOWINFO_PRIORITY + 0x0ff00000 + + ) + +110  + #IPV6_PRIORITY_UNCHARACTERIZED + 0x0000 + + ) + +111  + #IPV6_PRIORITY_FILLER + 0x0100 + + ) + +112  + #IPV6_PRIORITY_UNATTENDED + 0x0200 + + ) + +113  + #IPV6_PRIORITY_RESERVED1 + 0x0300 + + ) + +114  + #IPV6_PRIORITY_BULK + 0x0400 + + ) + +115  + #IPV6_PRIORITY_RESERVED2 + 0x0500 + + ) + +116  + #IPV6_PRIORITY_INTERACTIVE + 0x0600 + + ) + +117  + #IPV6_PRIORITY_CONTROL + 0x0700 + + ) + +118  + #IPV6_PRIORITY_8 + 0x0800 + + ) + +119  + #IPV6_PRIORITY_9 + 0x0900 + + ) + +120  + #IPV6_PRIORITY_10 + 0x0a00 + + ) + +121  + #IPV6_PRIORITY_11 + 0x0b00 + + ) + +122  + #IPV6_PRIORITY_12 + 0x0c00 + + ) + +123  + #IPV6_PRIORITY_13 + 0x0d00 + + ) + +124  + #IPV6_PRIORITY_14 + 0x0e00 + + ) + +125  + #IPV6_PRIORITY_15 + 0x0f00 + + ) + +130 #i +__UAPI_DEF_IPPROTO_V6 + + +131  + #IPPROTO_HOPOPTS + 0 + + ) + +132  + #IPPROTO_ROUTING + 43 + + ) + +133  + #IPPROTO_FRAGMENT + 44 + + ) + +134  + #IPPROTO_ICMPV6 + 58 + + ) + +135  + #IPPROTO_NONE + 59 + + ) + +136  + #IPPROTO_DSTOPTS + 60 + + ) + +137  + #IPPROTO_MH + 135 + + ) + +143  + #IPV6_TLV_PAD1 + 0 + + ) + +144  + #IPV6_TLV_PADN + 1 + + ) + +145  + #IPV6_TLV_ROUTERALERT + 5 + + ) + +146  + #IPV6_TLV_CALIPSO + 7 + + ) + +147  + #IPV6_TLV_JUMBO + 194 + + ) + +148  + #IPV6_TLV_HAO + 201 + + ) + +153 #i +__UAPI_DEF_IPV6_OPTIONS + + +154  + #IPV6_ADDRFORM + 1 + + ) + +155  + #IPV6_2292PKTINFO + 2 + + ) + +156  + #IPV6_2292HOPOPTS + 3 + + ) + +157  + #IPV6_2292DSTOPTS + 4 + + ) + +158  + #IPV6_2292RTHDR + 5 + + ) + +159  + #IPV6_2292PKTOPTIONS + 6 + + ) + +160  + #IPV6_CHECKSUM + 7 + + ) + +161  + #IPV6_2292HOPLIMIT + 8 + + ) + +162  + #IPV6_NEXTHOP + 9 + + ) + +163  + #IPV6_AUTHHDR + 10 + + ) + +164  + #IPV6_FLOWINFO + 11 + + ) + +166  + #IPV6_UNICAST_HOPS + 16 + + ) + +167  + #IPV6_MULTICAST_IF + 17 + + ) + +168  + #IPV6_MULTICAST_HOPS + 18 + + ) + +169  + #IPV6_MULTICAST_LOOP + 19 + + ) + +170  + #IPV6_ADD_MEMBERSHIP + 20 + + ) + +171  + #IPV6_DROP_MEMBERSHIP + 21 + + ) + +172  + #IPV6_ROUTER_ALERT + 22 + + ) + +173  + #IPV6_MTU_DISCOVER + 23 + + ) + +174  + #IPV6_MTU + 24 + + ) + +175  + #IPV6_RECVERR + 25 + + ) + +176  + #IPV6_V6ONLY + 26 + + ) + +177  + #IPV6_JOIN_ANYCAST + 27 + + ) + +178  + #IPV6_LEAVE_ANYCAST + 28 + + ) + +181  + #IPV6_PMTUDISC_DONT + 0 + + ) + +182  + #IPV6_PMTUDISC_WANT + 1 + + ) + +183  + #IPV6_PMTUDISC_DO + 2 + + ) + +184  + #IPV6_PMTUDISC_PROBE + 3 + + ) + +188  + #IPV6_PMTUDISC_INTERFACE + 4 + + ) + +192  + #IPV6_PMTUDISC_OMIT + 5 + + ) + +195  + #IPV6_FLOWLABEL_MGR + 32 + + ) + +196  + #IPV6_FLOWINFO_SEND + 33 + + ) + +198  + #IPV6_IPSEC_POLICY + 34 + + ) + +199  + #IPV6_XFRM_POLICY + 35 + + ) + +200  + #IPV6_HDRINCL + 36 + + ) + +222  + #IPV6_RECVPKTINFO + 49 + + ) + +223  + #IPV6_PKTINFO + 50 + + ) + +224  + #IPV6_RECVHOPLIMIT + 51 + + ) + +225  + #IPV6_HOPLIMIT + 52 + + ) + +226  + #IPV6_RECVHOPOPTS + 53 + + ) + +227  + #IPV6_HOPOPTS + 54 + + ) + +228  + #IPV6_RTHDRDSTOPTS + 55 + + ) + +229  + #IPV6_RECVRTHDR + 56 + + ) + +230  + #IPV6_RTHDR + 57 + + ) + +231  + #IPV6_RECVDSTOPTS + 58 + + ) + +232  + #IPV6_DSTOPTS + 59 + + ) + +233  + #IPV6_RECVPATHMTU + 60 + + ) + +234  + #IPV6_PATHMTU + 61 + + ) + +235  + #IPV6_DONTFRAG + 62 + + ) + +237  + #IPV6_USE_MIN_MTU + 63 + + ) + +253  + #IPV6_RECVTCLASS + 66 + + ) + +254  + #IPV6_TCLASS + 67 + + ) + +267  + #IPV6_AUTOFLOWLABEL + 70 + + ) + +269  + #IPV6_ADDR_PREFERENCES + 72 + + ) + +271  + #IPV6_PREFER_SRC_TMP + 0x0001 + + ) + +272  + #IPV6_PREFER_SRC_PUBLIC + 0x0002 + + ) + +273  + #IPV6_PREFER_SRC_PUBTMP_DEFAULT + 0x0100 + + ) + +274  + #IPV6_PREFER_SRC_COA + 0x0004 + + ) + +275  + #IPV6_PREFER_SRC_HOME + 0x0400 + + ) + +276  + #IPV6_PREFER_SRC_CGA + 0x0008 + + ) + +277  + #IPV6_PREFER_SRC_NONCGA + 0x0800 + + ) + +280  + #IPV6_MINHOPCOUNT + 73 + + ) + +282  + #IPV6_ORIGDSTADDR + 74 + + ) + +283  + #IPV6_RECVORIGDSTADDR + +IPV6_ORIGDSTADDR + + + ) + +284  + #IPV6_TRANSPARENT + 75 + + ) + +285  + #IPV6_UNICAST_IF + 76 + + ) + +286  + #IPV6_RECVFRAGSIZE + 77 + + ) + + @/usr/include/linux/ioctl.h + +1 #ide +_LINUX_IOCTL_H + + +2  + #_LINUX_IOCTL_H + + + ) + +4  + ~ + + @/usr/include/linux/limits.h + +1 #ide +_LINUX_LIMITS_H + + +2  + #_LINUX_LIMITS_H + + + ) + +4  + #NR_OPEN + 1024 + + ) + +6  + #NGROUPS_MAX + 65536 + + ) + +7  + #ARG_MAX + 131072 + + ) + +8  + #LINK_MAX + 127 + + ) + +9  + #MAX_CANON + 255 + + ) + +10  + #MAX_INPUT + 255 + + ) + +11  + #NAME_MAX + 255 + + ) + +12  + #PATH_MAX + 4096 + + ) + +13  + #PIPE_BUF + 4096 + + ) + +14  + #XATTR_NAME_MAX + 255 + + ) + +15  + #XATTR_SIZE_MAX + 65536 + + ) + +16  + #XATTR_LIST_MAX + 65536 + + ) + +18  + #RTSIG_MAX + 32 + + ) + + @/usr/include/linux/neighbour.h + +1 #ide +__LINUX_NEIGHBOUR_H + + +2  + #__LINUX_NEIGHBOUR_H + + + ) + +4  + ~ + +5  + ~ + +7  + sndmsg + { + +8 +__u8 + + mndm_my +; + +9 +__u8 + + mndm_d1 +; + +10 +__u16 + + mndm_d2 +; + +11 +__s32 + + mndm_ifdex +; + +12 +__u16 + + mndm_e +; + +13 +__u8 + + mndm_ags +; + +14 +__u8 + + mndm_ty +; + +18 + mNDA_UNSPEC +, + +19 + mNDA_DST +, + +20 + mNDA_LLADDR +, + +21 + mNDA_CACHEINFO +, + +22 + mNDA_PROBES +, + +23 + mNDA_VLAN +, + +24 + mNDA_PORT +, + +25 + mNDA_VNI +, + +26 + mNDA_IFINDEX +, + +27 + mNDA_MASTER +, + +28 + mNDA_LINK_NETNSID +, + +29 + m__NDA_MAX + + +32  + #NDA_MAX + ( +__NDA_MAX + - 1) + + ) + +38  + #NTF_USE + 0x01 + + ) + +39  + #NTF_SELF + 0x02 + + ) + +40  + #NTF_MASTER + 0x04 + + ) + +41  + #NTF_PROXY + 0x08 + + ) + +42  + #NTF_EXT_LEARNED + 0x10 + + ) + +43  + #NTF_ROUTER + 0x80 + + ) + +49  + #NUD_INCOMPLETE + 0x01 + + ) + +50  + #NUD_REACHABLE + 0x02 + + ) + +51  + #NUD_STALE + 0x04 + + ) + +52  + #NUD_DELAY + 0x08 + + ) + +53  + #NUD_PROBE + 0x10 + + ) + +54  + #NUD_FAILED + 0x20 + + ) + +57  + #NUD_NOARP + 0x40 + + ) + +58  + #NUD_PERMANENT + 0x80 + + ) + +59  + #NUD_NONE + 0x00 + + ) + +66  + snda_chefo + { + +67 +__u32 + + mndm_cfmed +; + +68 +__u32 + + mndm_ud +; + +69 +__u32 + + mndm_upded +; + +70 +__u32 + + mndm_ft +; + +98  + sndt_s + { + +99 +__u64 + + mndts_locs +; + +100 +__u64 + + mndts_deroys +; + +101 +__u64 + + mndts_hash_grows +; + +102 +__u64 + + mndts_s_ed +; + +103 +__u64 + + mndts_lookups +; + +104 +__u64 + + mndts_hs +; + +105 +__u64 + + mndts_rcv_obes_m +; + +106 +__u64 + + mndts_rcv_obes_u +; + +107 +__u64 + + mndts_riodic_gc_runs +; + +108 +__u64 + + mndts_fd_gc_runs +; + +109 +__u64 + + mndts_b_fus +; + +113 + mNDTPA_UNSPEC +, + +114 + mNDTPA_IFINDEX +, + +115 + mNDTPA_REFCNT +, + +116 + mNDTPA_REACHABLE_TIME +, + +117 + mNDTPA_BASE_REACHABLE_TIME +, + +118 + mNDTPA_RETRANS_TIME +, + +119 + mNDTPA_GC_STALETIME +, + +120 + mNDTPA_DELAY_PROBE_TIME +, + +121 + mNDTPA_QUEUE_LEN +, + +122 + mNDTPA_APP_PROBES +, + +123 + mNDTPA_UCAST_PROBES +, + +124 + mNDTPA_MCAST_PROBES +, + +125 + mNDTPA_ANYCAST_DELAY +, + +126 + mNDTPA_PROXY_DELAY +, + +127 + mNDTPA_PROXY_QLEN +, + +128 + mNDTPA_LOCKTIME +, + +129 + mNDTPA_QUEUE_LENBYTES +, + +130 + mNDTPA_MCAST_REPROBES +, + +131 + mNDTPA_PAD +, + +132 + m__NDTPA_MAX + + +134  + #NDTPA_MAX + ( +__NDTPA_MAX + - 1) + + ) + +136  + sndtmsg + { + +137 +__u8 + + mndtm_my +; + +138 +__u8 + + mndtm_d1 +; + +139 +__u16 + + mndtm_d2 +; + +142  + sndt_cfig + { + +143 +__u16 + + mndtc_key_n +; + +144 +__u16 + + mndtc_y_size +; + +145 +__u32 + + mndtc_s +; + +146 +__u32 + + mndtc_ϡ_ush +; + +147 +__u32 + + mndtc_ϡ_nd +; + +148 +__u32 + + mndtc_hash_d +; + +149 +__u32 + + mndtc_hash_mask +; + +150 +__u32 + + mndtc_hash_cha_gc +; + +151 +__u32 + + mndtc_oxy_qn +; + +155 + mNDTA_UNSPEC +, + +156 + mNDTA_NAME +, + +157 + mNDTA_THRESH1 +, + +158 + mNDTA_THRESH2 +, + +159 + mNDTA_THRESH3 +, + +160 + mNDTA_CONFIG +, + +161 + mNDTA_PARMS +, + +162 + mNDTA_STATS +, + +163 + mNDTA_GC_INTERVAL +, + +164 + mNDTA_PAD +, + +165 + m__NDTA_MAX + + +167  + #NDTA_MAX + ( +__NDTA_MAX + - 1) + + ) + + @/usr/include/linux/sched.h + +1 #ide +_LINUX_SCHED_H + + +2  + #_LINUX_SCHED_H + + + ) + +7  + #CSIGNAL + 0x000000f + + ) + +8  + #CLONE_VM + 0x00000100 + + ) + +9  + #CLONE_FS + 0x00000200 + + ) + +10  + #CLONE_FILES + 0x00000400 + + ) + +11  + #CLONE_SIGHAND + 0x00000800 + + ) + +12  + #CLONE_PTRACE + 0x00002000 + + ) + +13  + #CLONE_VFORK + 0x00004000 + + ) + +14  + #CLONE_PARENT + 0x00008000 + + ) + +15  + #CLONE_THREAD + 0x00010000 + + ) + +16  + #CLONE_NEWNS + 0x00020000 + + ) + +17  + #CLONE_SYSVSEM + 0x00040000 + + ) + +18  + #CLONE_SETTLS + 0x00080000 + + ) + +19  + #CLONE_PARENT_SETTID + 0x00100000 + + ) + +20  + #CLONE_CHILD_CLEARTID + 0x00200000 + + ) + +21  + #CLONE_DETACHED + 0x00400000 + + ) + +22  + #CLONE_UNTRACED + 0x00800000 + + ) + +23  + #CLONE_CHILD_SETTID + 0x01000000 + + ) + +24  + #CLONE_NEWCGROUP + 0x02000000 + + ) + +25  + #CLONE_NEWUTS + 0x04000000 + + ) + +26  + #CLONE_NEWIPC + 0x08000000 + + ) + +27  + #CLONE_NEWUSER + 0x10000000 + + ) + +28  + #CLONE_NEWPID + 0x20000000 + + ) + +29  + #CLONE_NEWNET + 0x40000000 + + ) + +30  + #CLONE_IO + 0x80000000 + + ) + +35  + #SCHED_NORMAL + 0 + + ) + +36  + #SCHED_FIFO + 1 + + ) + +37  + #SCHED_RR + 2 + + ) + +38  + #SCHED_BATCH + 3 + + ) + +40  + #SCHED_IDLE + 5 + + ) + +41  + #SCHED_DEADLINE + 6 + + ) + +44  + #SCHED_RESET_ON_FORK + 0x40000000 + + ) + +49  + #SCHED_FLAG_RESET_ON_FORK + 0x01 + + ) + + @/usr/include/linux/socket.h + +1 #ide +_LINUX_SOCKET_H + + +2  + #_LINUX_SOCKET_H + + + ) + +7  + #_K_SS_MAXSIZE + 128 + + ) + +8  + #_K_SS_ALIGNSIZE + ( + `__ignof__ + ( +sockaddr + *)) + + ) + +11  + t__kl__my_t +; + +13  + s__kl_sockaddr_age + { + +14 +__kl__my_t + + mss_my +; + +16  + m__da +[ +_K_SS_MAXSIZE + - ()]; + +19 } +__ibu__ + (( +igd +( +_K_SS_ALIGNSIZE +))); + + @/usr/include/linux/sysctl.h + +22 #ide +_LINUX_SYSCTL_H + + +23  + #_LINUX_SYSCTL_H + + + ) + +25  + ~ + +26  + ~ + +29  + #CTL_MAXNAME + 10 + + ) + +34  + s__sysl_gs + { + +35 * + mme +; + +36  + mƒ +; + +37 * + mdv +; + +38 +size_t + * + md +; + +39 * + mwv +; + +40 +size_t + + mwn +; + +41  + m__unud +[4]; + +50 + mCTL_KERN +=1, + +51 + mCTL_VM +=2, + +52 + mCTL_NET +=3, + +53 + mCTL_PROC +=4, + +54 + mCTL_FS +=5, + +55 + mCTL_DEBUG +=6, + +56 + mCTL_DEV +=7, + +57 + mCTL_BUS +=8, + +58 + mCTL_ABI +=9, + +59 + mCTL_CPU +=10, + +60 + mCTL_ARLAN +=254, + +61 + mCTL_S390DBF +=5677, + +62 + mCTL_SUNRPC +=7249, + +63 + mCTL_PM +=9899, + +64 + mCTL_FRV +=9898, + +70 + mCTL_BUS_ISA +=1 + +76 + mINOTIFY_MAX_USER_INSTANCES +=1, + +77 + mINOTIFY_MAX_USER_WATCHES +=2, + +78 + mINOTIFY_MAX_QUEUED_EVENTS +=3 + +84 + mKERN_OSTYPE +=1, + +85 + mKERN_OSRELEASE +=2, + +86 + mKERN_OSREV +=3, + +87 + mKERN_VERSION +=4, + +88 + mKERN_SECUREMASK +=5, + +89 + mKERN_PROF +=6, + +90 + mKERN_NODENAME +=7, + +91 + mKERN_DOMAINNAME +=8, + +93 + mKERN_PANIC +=15, + +94 + mKERN_REALROOTDEV +=16, + +96 + mKERN_SPARC_REBOOT +=21, + +97 + mKERN_CTLALTDEL +=22, + +98 + mKERN_PRINTK +=23, + +99 + mKERN_NAMETRANS +=24, + +100 + mKERN_PPC_HTABRECLAIM +=25, + +101 + mKERN_PPC_ZEROPAGED +=26, + +102 + mKERN_PPC_POWERSAVE_NAP +=27, + +103 + mKERN_MODPROBE +=28, + +104 + mKERN_SG_BIG_BUFF +=29, + +105 + mKERN_ACCT +=30, + +106 + mKERN_PPC_L2CR +=31, + +108 + mKERN_RTSIGNR +=32, + +109 + mKERN_RTSIGMAX +=33, + +111 + mKERN_SHMMAX +=34, + +112 + mKERN_MSGMAX +=35, + +113 + mKERN_MSGMNB +=36, + +114 + mKERN_MSGPOOL +=37, + +115 + mKERN_SYSRQ +=38, + +116 + mKERN_MAX_THREADS +=39, + +117 + mKERN_RANDOM +=40, + +118 + mKERN_SHMALL +=41, + +119 + mKERN_MSGMNI +=42, + +120 + mKERN_SEM +=43, + +121 + mKERN_SPARC_STOP_A +=44, + +122 + mKERN_SHMMNI +=45, + +123 + mKERN_OVERFLOWUID +=46, + +124 + mKERN_OVERFLOWGID +=47, + +125 + mKERN_SHMPATH +=48, + +126 + mKERN_HOTPLUG +=49, + +127 + mKERN_IEEE_EMULATION_WARNINGS +=50, + +128 + mKERN_S390_USER_DEBUG_LOGGING +=51, + +129 + mKERN_CORE_USES_PID +=52, + +130 + mKERN_TAINTED +=53, + +131 + mKERN_CADPID +=54, + +132 + mKERN_PIDMAX +=55, + +133 + mKERN_CORE_PATTERN +=56, + +134 + mKERN_PANIC_ON_OOPS +=57, + +135 + mKERN_HPPA_PWRSW +=58, + +136 + mKERN_HPPA_UNALIGNED +=59, + +137 + mKERN_PRINTK_RATELIMIT +=60, + +138 + mKERN_PRINTK_RATELIMIT_BURST +=61, + +139 + mKERN_PTY +=62, + +140 + mKERN_NGROUPS_MAX +=63, + +141 + mKERN_SPARC_SCONS_PWROFF +=64, + +142 + mKERN_HZ_TIMER +=65, + +143 + mKERN_UNKNOWN_NMI_PANIC +=66, + +144 + mKERN_BOOTLOADER_TYPE +=67, + +145 + mKERN_RANDOMIZE +=68, + +146 + mKERN_SETUID_DUMPABLE +=69, + +147 + mKERN_SPIN_RETRY +=70, + +148 + mKERN_ACPI_VIDEO_FLAGS +=71, + +149 + mKERN_IA64_UNALIGNED +=72, + +150 + mKERN_COMPAT_LOG +=73, + +151 + mKERN_MAX_LOCK_DEPTH +=74, + +152 + mKERN_NMI_WATCHDOG +=75, + +153 + mKERN_PANIC_ON_NMI +=76, + +154 + mKERN_PANIC_ON_WARN +=77, + +162 + mVM_UNUSED1 +=1, + +163 + mVM_UNUSED2 +=2, + +164 + mVM_UNUSED3 +=3, + +165 + mVM_UNUSED4 +=4, + +166 + mVM_OVERCOMMIT_MEMORY +=5, + +167 + mVM_UNUSED5 +=6, + +168 + mVM_UNUSED7 +=7, + +169 + mVM_UNUSED8 +=8, + +170 + mVM_UNUSED9 +=9, + +171 + mVM_PAGE_CLUSTER +=10, + +172 + mVM_DIRTY_BACKGROUND +=11, + +173 + mVM_DIRTY_RATIO +=12, + +174 + mVM_DIRTY_WB_CS +=13, + +175 + mVM_DIRTY_EXPIRE_CS +=14, + +176 + mVM_NR_PDFLUSH_THREADS +=15, + +177 + mVM_OVERCOMMIT_RATIO +=16, + +178 + mVM_PAGEBUF +=17, + +179 + mVM_HUGETLB_PAGES +=18, + +180 + mVM_SWAPPINESS +=19, + +181 + mVM_LOWMEM_RESERVE_RATIO +=20, + +182 + mVM_MIN_FREE_KBYTES +=21, + +183 + mVM_MAX_MAP_COUNT +=22, + +184 + mVM_LAPTOP_MODE +=23, + +185 + mVM_BLOCK_DUMP +=24, + +186 + mVM_HUGETLB_GROUP +=25, + +187 + mVM_VFS_CACHE_PRESSURE +=26, + +188 + mVM_LEGACY_VA_LAYOUT +=27, + +189 + mVM_SWAP_TOKEN_TIMEOUT +=28, + +190 + mVM_DROP_PAGECACHE +=29, + +191 + mVM_PERCPU_PAGELIST_FRACTION +=30, + +192 + mVM_ZONE_RECLAIM_MODE +=31, + +193 + mVM_MIN_UNMAPPED +=32, + +194 + mVM_PANIC_ON_OOM +=33, + +195 + mVM_VDSO_ENABLED +=34, + +196 + mVM_MIN_SLAB +=35, + +203 + mNET_CORE +=1, + +204 + mNET_ETHER +=2, + +205 + mNET_802 +=3, + +206 + mNET_UNIX +=4, + +207 + mNET_IPV4 +=5, + +208 + mNET_IPX +=6, + +209 + mNET_ATALK +=7, + +210 + mNET_NETROM +=8, + +211 + mNET_AX25 +=9, + +212 + mNET_BRIDGE +=10, + +213 + mNET_ROSE +=11, + +214 + mNET_IPV6 +=12, + +215 + mNET_X25 +=13, + +216 + mNET_TR +=14, + +217 + mNET_DECNET +=15, + +218 + mNET_ECONET +=16, + +219 + mNET_SCTP +=17, + +220 + mNET_LLC +=18, + +221 + mNET_NETFILTER +=19, + +222 + mNET_DCCP +=20, + +223 + mNET_IRDA +=412, + +229 + mRANDOM_POOLSIZE +=1, + +230 + mRANDOM_ENTROPY_COUNT +=2, + +231 + mRANDOM_READ_THRESH +=3, + +232 + mRANDOM_WRITE_THRESH +=4, + +233 + mRANDOM_BOOT_ID +=5, + +234 + mRANDOM_UUID +=6 + +240 + mPTY_MAX +=1, + +241 + mPTY_NR +=2 + +247 + mBUS_ISA_MEM_BASE +=1, + +248 + mBUS_ISA_PORT_BASE +=2, + +249 + mBUS_ISA_PORT_SHIFT +=3 + +255 + mNET_CORE_WMEM_MAX +=1, + +256 + mNET_CORE_RMEM_MAX +=2, + +257 + mNET_CORE_WMEM_DEFAULT +=3, + +258 + mNET_CORE_RMEM_DEFAULT +=4, + +260 + mNET_CORE_MAX_BACKLOG +=6, + +261 + mNET_CORE_FASTROUTE +=7, + +262 + mNET_CORE_MSG_COST +=8, + +263 + mNET_CORE_MSG_BURST +=9, + +264 + mNET_CORE_OPTMEM_MAX +=10, + +265 + mNET_CORE_HOT_LIST_LENGTH +=11, + +266 + mNET_CORE_DIVERT_VERSION +=12, + +267 + mNET_CORE_NO_CONG_THRESH +=13, + +268 + mNET_CORE_NO_CONG +=14, + +269 + mNET_CORE_LO_CONG +=15, + +270 + mNET_CORE_MOD_CONG +=16, + +271 + mNET_CORE_DEV_WEIGHT +=17, + +272 + mNET_CORE_SOMAXCONN +=18, + +273 + mNET_CORE_BUDGET +=19, + +274 + mNET_CORE_AEVENT_ETIME +=20, + +275 + mNET_CORE_AEVENT_RSEQTH +=21, + +276 + mNET_CORE_WARNINGS +=22, + +287 + mNET_UNIX_DESTROY_DELAY +=1, + +288 + mNET_UNIX_DELETE_DELAY +=2, + +289 + mNET_UNIX_MAX_DGRAM_QLEN +=3, + +295 + mNET_NF_CONNTRACK_MAX +=1, + +296 + mNET_NF_CONNTRACK_TCP_TIMEOUT_SYN_SENT +=2, + +297 + mNET_NF_CONNTRACK_TCP_TIMEOUT_SYN_RECV +=3, + +298 + mNET_NF_CONNTRACK_TCP_TIMEOUT_ESTABLISHED +=4, + +299 + mNET_NF_CONNTRACK_TCP_TIMEOUT_FIN_WAIT +=5, + +300 + mNET_NF_CONNTRACK_TCP_TIMEOUT_CLOSE_WAIT +=6, + +301 + mNET_NF_CONNTRACK_TCP_TIMEOUT_LAST_ACK +=7, + +302 + mNET_NF_CONNTRACK_TCP_TIMEOUT_TIME_WAIT +=8, + +303 + mNET_NF_CONNTRACK_TCP_TIMEOUT_CLOSE +=9, + +304 + mNET_NF_CONNTRACK_UDP_TIMEOUT +=10, + +305 + mNET_NF_CONNTRACK_UDP_TIMEOUT_STREAM +=11, + +306 + mNET_NF_CONNTRACK_ICMP_TIMEOUT +=12, + +307 + mNET_NF_CONNTRACK_GENERIC_TIMEOUT +=13, + +308 + mNET_NF_CONNTRACK_BUCKETS +=14, + +309 + mNET_NF_CONNTRACK_LOG_INVALID +=15, + +310 + mNET_NF_CONNTRACK_TCP_TIMEOUT_MAX_RETRANS +=16, + +311 + mNET_NF_CONNTRACK_TCP_LOOSE +=17, + +312 + mNET_NF_CONNTRACK_TCP_BE_LIBERAL +=18, + +313 + mNET_NF_CONNTRACK_TCP_MAX_RETRANS +=19, + +314 + mNET_NF_CONNTRACK_SCTP_TIMEOUT_CLOSED +=20, + +315 + mNET_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_WAIT +=21, + +316 + mNET_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_ECHOED +=22, + +317 + mNET_NF_CONNTRACK_SCTP_TIMEOUT_ESTABLISHED +=23, + +318 + mNET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_SENT +=24, + +319 + mNET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_RECD +=25, + +320 + mNET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_ACK_SENT +=26, + +321 + mNET_NF_CONNTRACK_COUNT +=27, + +322 + mNET_NF_CONNTRACK_ICMPV6_TIMEOUT +=28, + +323 + mNET_NF_CONNTRACK_FRAG6_TIMEOUT +=29, + +324 + mNET_NF_CONNTRACK_FRAG6_LOW_THRESH +=30, + +325 + mNET_NF_CONNTRACK_FRAG6_HIGH_THRESH +=31, + +326 + mNET_NF_CONNTRACK_CHECKSUM +=32, + +333 + mNET_IPV4_FORWARD +=8, + +334 + mNET_IPV4_DYNADDR +=9, + +336 + mNET_IPV4_CONF +=16, + +337 + mNET_IPV4_NEIGH +=17, + +338 + mNET_IPV4_ROUTE +=18, + +339 + mNET_IPV4_FIB_HASH +=19, + +340 + mNET_IPV4_NETFILTER +=20, + +342 + mNET_IPV4_TCP_TIMESTAMPS +=33, + +343 + mNET_IPV4_TCP_WINDOW_SCALING +=34, + +344 + mNET_IPV4_TCP_SACK +=35, + +345 + mNET_IPV4_TCP_RETRANS_COLLAPSE +=36, + +346 + mNET_IPV4_DEFAULT_TTL +=37, + +347 + mNET_IPV4_AUTOCONFIG +=38, + +348 + mNET_IPV4_NO_PMTU_DISC +=39, + +349 + mNET_IPV4_TCP_SYN_RETRIES +=40, + +350 + mNET_IPV4_IPFRAG_HIGH_THRESH +=41, + +351 + mNET_IPV4_IPFRAG_LOW_THRESH +=42, + +352 + mNET_IPV4_IPFRAG_TIME +=43, + +353 + mNET_IPV4_TCP_MAX_KA_PROBES +=44, + +354 + mNET_IPV4_TCP_KEEPALIVE_TIME +=45, + +355 + mNET_IPV4_TCP_KEEPALIVE_PROBES +=46, + +356 + mNET_IPV4_TCP_RETRIES1 +=47, + +357 + mNET_IPV4_TCP_RETRIES2 +=48, + +358 + mNET_IPV4_TCP_FIN_TIMEOUT +=49, + +359 + mNET_IPV4_IP_MASQ_DEBUG +=50, + +360 + mNET_TCP_SYNCOOKIES +=51, + +361 + mNET_TCP_STDURG +=52, + +362 + mNET_TCP_RFC1337 +=53, + +363 + mNET_TCP_SYN_TAILDROP +=54, + +364 + mNET_TCP_MAX_SYN_BACKLOG +=55, + +365 + mNET_IPV4_LOCAL_PORT_RANGE +=56, + +366 + mNET_IPV4_ICMP_ECHO_IGNORE_ALL +=57, + +367 + mNET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS +=58, + +368 + mNET_IPV4_ICMP_SOURCEQUENCH_RATE +=59, + +369 + mNET_IPV4_ICMP_DESTUNREACH_RATE +=60, + +370 + mNET_IPV4_ICMP_TIMEEXCEED_RATE +=61, + +371 + mNET_IPV4_ICMP_PARAMPROB_RATE +=62, + +372 + mNET_IPV4_ICMP_ECHOREPLY_RATE +=63, + +373 + mNET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES +=64, + +374 + mNET_IPV4_IGMP_MAX_MEMBERSHIPS +=65, + +375 + mNET_TCP_TW_RECYCLE +=66, + +376 + mNET_IPV4_ALWAYS_DEFRAG +=67, + +377 + mNET_IPV4_TCP_KEEPALIVE_INTVL +=68, + +378 + mNET_IPV4_INET_PEER_THRESHOLD +=69, + +379 + mNET_IPV4_INET_PEER_MINTTL +=70, + +380 + mNET_IPV4_INET_PEER_MAXTTL +=71, + +381 + mNET_IPV4_INET_PEER_GC_MINTIME +=72, + +382 + mNET_IPV4_INET_PEER_GC_MAXTIME +=73, + +383 + mNET_TCP_ORPHAN_RETRIES +=74, + +384 + mNET_TCP_ABORT_ON_OVERFLOW +=75, + +385 + mNET_TCP_SYNACK_RETRIES +=76, + +386 + mNET_TCP_MAX_ORPHANS +=77, + +387 + mNET_TCP_MAX_TW_BUCKETS +=78, + +388 + mNET_TCP_FACK +=79, + +389 + mNET_TCP_REORDERING +=80, + +390 + mNET_TCP_ECN +=81, + +391 + mNET_TCP_DSACK +=82, + +392 + mNET_TCP_MEM +=83, + +393 + mNET_TCP_WMEM +=84, + +394 + mNET_TCP_RMEM +=85, + +395 + mNET_TCP_APP_WIN +=86, + +396 + mNET_TCP_ADV_WIN_SCALE +=87, + +397 + mNET_IPV4_NONLOCAL_BIND +=88, + +398 + mNET_IPV4_ICMP_RATELIMIT +=89, + +399 + mNET_IPV4_ICMP_RATEMASK +=90, + +400 + mNET_TCP_TW_REUSE +=91, + +401 + mNET_TCP_FRTO +=92, + +402 + mNET_TCP_LOW_LATENCY +=93, + +403 + mNET_IPV4_IPFRAG_SECRET_INTERVAL +=94, + +404 + mNET_IPV4_IGMP_MAX_MSF +=96, + +405 + mNET_TCP_NO_METRICS_SAVE +=97, + +406 + mNET_TCP_DEFAULT_WIN_SCALE +=105, + +407 + mNET_TCP_MODERATE_RCVBUF +=106, + +408 + mNET_TCP_TSO_WIN_DIVISOR +=107, + +409 + mNET_TCP_BIC_BETA +=108, + +410 + mNET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR +=109, + +411 + mNET_TCP_CONG_CONTROL +=110, + +412 + mNET_TCP_ABC +=111, + +413 + mNET_IPV4_IPFRAG_MAX_DIST +=112, + +414 + mNET_TCP_MTU_PROBING +=113, + +415 + mNET_TCP_BASE_MSS +=114, + +416 + mNET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS +=115, + +417 + mNET_TCP_DMA_COPYBREAK +=116, + +418 + mNET_TCP_SLOW_START_AFTER_IDLE +=117, + +419 + mNET_CIPSOV4_CACHE_ENABLE +=118, + +420 + mNET_CIPSOV4_CACHE_BUCKET_SIZE +=119, + +421 + mNET_CIPSOV4_RBM_OPTFMT +=120, + +422 + mNET_CIPSOV4_RBM_STRICTVALID +=121, + +423 + mNET_TCP_AVAIL_CONG_CONTROL +=122, + +424 + mNET_TCP_ALLOWED_CONG_CONTROL +=123, + +425 + mNET_TCP_MAX_SSTHRESH +=124, + +426 + mNET_TCP_FRTO_RESPONSE +=125, + +430 + mNET_IPV4_ROUTE_FLUSH +=1, + +431 + mNET_IPV4_ROUTE_MIN_DELAY +=2, + +432 + mNET_IPV4_ROUTE_MAX_DELAY +=3, + +433 + mNET_IPV4_ROUTE_GC_THRESH +=4, + +434 + mNET_IPV4_ROUTE_MAX_SIZE +=5, + +435 + mNET_IPV4_ROUTE_GC_MIN_INTERVAL +=6, + +436 + mNET_IPV4_ROUTE_GC_TIMEOUT +=7, + +437 + mNET_IPV4_ROUTE_GC_INTERVAL +=8, + +438 + mNET_IPV4_ROUTE_REDIRECT_LOAD +=9, + +439 + mNET_IPV4_ROUTE_REDIRECT_NUMBER +=10, + +440 + mNET_IPV4_ROUTE_REDIRECT_SILENCE +=11, + +441 + mNET_IPV4_ROUTE_ERROR_COST +=12, + +442 + mNET_IPV4_ROUTE_ERROR_BURST +=13, + +443 + mNET_IPV4_ROUTE_GC_ELASTICITY +=14, + +444 + mNET_IPV4_ROUTE_MTU_EXPIRES +=15, + +445 + mNET_IPV4_ROUTE_MIN_PMTU +=16, + +446 + mNET_IPV4_ROUTE_MIN_ADVMSS +=17, + +447 + mNET_IPV4_ROUTE_SECRET_INTERVAL +=18, + +448 + mNET_IPV4_ROUTE_GC_MIN_INTERVAL_MS +=19, + +453 + mNET_PROTO_CONF_ALL +=-2, + +454 + mNET_PROTO_CONF_DEFAULT +=-3 + +461 + mNET_IPV4_CONF_FORWARDING +=1, + +462 + mNET_IPV4_CONF_MC_FORWARDING +=2, + +463 + mNET_IPV4_CONF_PROXY_ARP +=3, + +464 + mNET_IPV4_CONF_ACCEPT_REDIRECTS +=4, + +465 + mNET_IPV4_CONF_SECURE_REDIRECTS +=5, + +466 + mNET_IPV4_CONF_SEND_REDIRECTS +=6, + +467 + mNET_IPV4_CONF_SHARED_MEDIA +=7, + +468 + mNET_IPV4_CONF_RP_FILTER +=8, + +469 + mNET_IPV4_CONF_ACCEPT_SOURCE_ROUTE +=9, + +470 + mNET_IPV4_CONF_BOOTP_RELAY +=10, + +471 + mNET_IPV4_CONF_LOG_MARTIANS +=11, + +472 + mNET_IPV4_CONF_TAG +=12, + +473 + mNET_IPV4_CONF_ARPFILTER +=13, + +474 + mNET_IPV4_CONF_MEDIUM_ID +=14, + +475 + mNET_IPV4_CONF_NOXFRM +=15, + +476 + mNET_IPV4_CONF_NOPOLICY +=16, + +477 + mNET_IPV4_CONF_FORCE_IGMP_VERSION +=17, + +478 + mNET_IPV4_CONF_ARP_ANNOUNCE +=18, + +479 + mNET_IPV4_CONF_ARP_IGNORE +=19, + +480 + mNET_IPV4_CONF_PROMOTE_SECONDARIES +=20, + +481 + mNET_IPV4_CONF_ARP_ACCEPT +=21, + +482 + mNET_IPV4_CONF_ARP_NOTIFY +=22, + +488 + mNET_IPV4_NF_CONNTRACK_MAX +=1, + +489 + mNET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_SENT +=2, + +490 + mNET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_RECV +=3, + +491 + mNET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_ESTABLISHED +=4, + +492 + mNET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_FIN_WAIT +=5, + +493 + mNET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE_WAIT +=6, + +494 + mNET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_LAST_ACK +=7, + +495 + mNET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_TIME_WAIT +=8, + +496 + mNET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE +=9, + +497 + mNET_IPV4_NF_CONNTRACK_UDP_TIMEOUT +=10, + +498 + mNET_IPV4_NF_CONNTRACK_UDP_TIMEOUT_STREAM +=11, + +499 + mNET_IPV4_NF_CONNTRACK_ICMP_TIMEOUT +=12, + +500 + mNET_IPV4_NF_CONNTRACK_GENERIC_TIMEOUT +=13, + +501 + mNET_IPV4_NF_CONNTRACK_BUCKETS +=14, + +502 + mNET_IPV4_NF_CONNTRACK_LOG_INVALID +=15, + +503 + mNET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_MAX_RETRANS +=16, + +504 + mNET_IPV4_NF_CONNTRACK_TCP_LOOSE +=17, + +505 + mNET_IPV4_NF_CONNTRACK_TCP_BE_LIBERAL +=18, + +506 + mNET_IPV4_NF_CONNTRACK_TCP_MAX_RETRANS +=19, + +507 + mNET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_CLOSED +=20, + +508 + mNET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_WAIT +=21, + +509 + mNET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_ECHOED +=22, + +510 + mNET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_ESTABLISHED +=23, + +511 + mNET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_SENT +=24, + +512 + mNET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_RECD +=25, + +513 + mNET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_ACK_SENT +=26, + +514 + mNET_IPV4_NF_CONNTRACK_COUNT +=27, + +515 + mNET_IPV4_NF_CONNTRACK_CHECKSUM +=28, + +520 + mNET_IPV6_CONF +=16, + +521 + mNET_IPV6_NEIGH +=17, + +522 + mNET_IPV6_ROUTE +=18, + +523 + mNET_IPV6_ICMP +=19, + +524 + mNET_IPV6_BINDV6ONLY +=20, + +525 + mNET_IPV6_IP6FRAG_HIGH_THRESH +=21, + +526 + mNET_IPV6_IP6FRAG_LOW_THRESH +=22, + +527 + mNET_IPV6_IP6FRAG_TIME +=23, + +528 + mNET_IPV6_IP6FRAG_SECRET_INTERVAL +=24, + +529 + mNET_IPV6_MLD_MAX_MSF +=25, + +533 + mNET_IPV6_ROUTE_FLUSH +=1, + +534 + mNET_IPV6_ROUTE_GC_THRESH +=2, + +535 + mNET_IPV6_ROUTE_MAX_SIZE +=3, + +536 + mNET_IPV6_ROUTE_GC_MIN_INTERVAL +=4, + +537 + mNET_IPV6_ROUTE_GC_TIMEOUT +=5, + +538 + mNET_IPV6_ROUTE_GC_INTERVAL +=6, + +539 + mNET_IPV6_ROUTE_GC_ELASTICITY +=7, + +540 + mNET_IPV6_ROUTE_MTU_EXPIRES +=8, + +541 + mNET_IPV6_ROUTE_MIN_ADVMSS +=9, + +542 + mNET_IPV6_ROUTE_GC_MIN_INTERVAL_MS +=10 + +546 + mNET_IPV6_FORWARDING +=1, + +547 + mNET_IPV6_HOP_LIMIT +=2, + +548 + mNET_IPV6_MTU +=3, + +549 + mNET_IPV6_ACCEPT_RA +=4, + +550 + mNET_IPV6_ACCEPT_REDIRECTS +=5, + +551 + mNET_IPV6_AUTOCONF +=6, + +552 + mNET_IPV6_DAD_TRANSMITS +=7, + +553 + mNET_IPV6_RTR_SOLICITS +=8, + +554 + mNET_IPV6_RTR_SOLICIT_INTERVAL +=9, + +555 + mNET_IPV6_RTR_SOLICIT_DELAY +=10, + +556 + mNET_IPV6_USE_TEMPADDR +=11, + +557 + mNET_IPV6_TEMP_VALID_LFT +=12, + +558 + mNET_IPV6_TEMP_PREFERED_LFT +=13, + +559 + mNET_IPV6_REGEN_MAX_RETRY +=14, + +560 + mNET_IPV6_MAX_DESYNC_FACTOR +=15, + +561 + mNET_IPV6_MAX_ADDRESSES +=16, + +562 + mNET_IPV6_FORCE_MLD_VERSION +=17, + +563 + mNET_IPV6_ACCEPT_RA_DEFRTR +=18, + +564 + mNET_IPV6_ACCEPT_RA_PINFO +=19, + +565 + mNET_IPV6_ACCEPT_RA_RTR_PREF +=20, + +566 + mNET_IPV6_RTR_PROBE_INTERVAL +=21, + +567 + mNET_IPV6_ACCEPT_RA_RT_INFO_MAX_PLEN +=22, + +568 + mNET_IPV6_PROXY_NDP +=23, + +569 + mNET_IPV6_ACCEPT_SOURCE_ROUTE +=25, + +570 + mNET_IPV6_ACCEPT_RA_FROM_LOCAL +=26, + +571 + m__NET_IPV6_MAX + + +576 + mNET_IPV6_ICMP_RATELIMIT +=1 + +581 + mNET_NEIGH_MCAST_SOLICIT +=1, + +582 + mNET_NEIGH_UCAST_SOLICIT +=2, + +583 + mNET_NEIGH_APP_SOLICIT +=3, + +584 + mNET_NEIGH_RETRANS_TIME +=4, + +585 + mNET_NEIGH_REACHABLE_TIME +=5, + +586 + mNET_NEIGH_DELAY_PROBE_TIME +=6, + +587 + mNET_NEIGH_GC_STALE_TIME +=7, + +588 + mNET_NEIGH_UNRES_QLEN +=8, + +589 + mNET_NEIGH_PROXY_QLEN +=9, + +590 + mNET_NEIGH_ANYCAST_DELAY +=10, + +591 + mNET_NEIGH_PROXY_DELAY +=11, + +592 + mNET_NEIGH_LOCKTIME +=12, + +593 + mNET_NEIGH_GC_INTERVAL +=13, + +594 + mNET_NEIGH_GC_THRESH1 +=14, + +595 + mNET_NEIGH_GC_THRESH2 +=15, + +596 + mNET_NEIGH_GC_THRESH3 +=16, + +597 + mNET_NEIGH_RETRANS_TIME_MS +=17, + +598 + mNET_NEIGH_REACHABLE_TIME_MS +=18, + +603 + mNET_DCCP_DEFAULT +=1, + +608 + mNET_IPX_PPROP_BROADCASTING +=1, + +609 + mNET_IPX_FORWARDING +=2 + +614 + mNET_LLC2 +=1, + +615 + mNET_LLC_STATION +=2, + +620 + mNET_LLC2_TIMEOUT +=1, + +625 + mNET_LLC_STATION_ACK_TIMEOUT +=1, + +630 + mNET_LLC2_ACK_TIMEOUT +=1, + +631 + mNET_LLC2_P_TIMEOUT +=2, + +632 + mNET_LLC2_REJ_TIMEOUT +=3, + +633 + mNET_LLC2_BUSY_TIMEOUT +=4, + +638 + mNET_ATALK_AARP_EXPIRY_TIME +=1, + +639 + mNET_ATALK_AARP_TICK_TIME +=2, + +640 + mNET_ATALK_AARP_RETRANSMIT_LIMIT +=3, + +641 + mNET_ATALK_AARP_RESOLVE_TIME +=4 + +647 + mNET_NETROM_DEFAULT_PATH_QUALITY +=1, + +648 + mNET_NETROM_OBSOLESCENCE_COUNT_INITIALISER +=2, + +649 + mNET_NETROM_NETWORK_TTL_INITIALISER +=3, + +650 + mNET_NETROM_TRANSPORT_TIMEOUT +=4, + +651 + mNET_NETROM_TRANSPORT_MAXIMUM_TRIES +=5, + +652 + mNET_NETROM_TRANSPORT_ACKNOWLEDGE_DELAY +=6, + +653 + mNET_NETROM_TRANSPORT_BUSY_DELAY +=7, + +654 + mNET_NETROM_TRANSPORT_REQUESTED_WINDOW_SIZE +=8, + +655 + mNET_NETROM_TRANSPORT_NO_ACTIVITY_TIMEOUT +=9, + +656 + mNET_NETROM_ROUTING_CONTROL +=10, + +657 + mNET_NETROM_LINK_FAILS_COUNT +=11, + +658 + mNET_NETROM_RESET +=12 + +663 + mNET_AX25_IP_DEFAULT_MODE +=1, + +664 + mNET_AX25_DEFAULT_MODE +=2, + +665 + mNET_AX25_BACKOFF_TYPE +=3, + +666 + mNET_AX25_CONNECT_MODE +=4, + +667 + mNET_AX25_STANDARD_WINDOW +=5, + +668 + mNET_AX25_EXTENDED_WINDOW +=6, + +669 + mNET_AX25_T1_TIMEOUT +=7, + +670 + mNET_AX25_T2_TIMEOUT +=8, + +671 + mNET_AX25_T3_TIMEOUT +=9, + +672 + mNET_AX25_IDLE_TIMEOUT +=10, + +673 + mNET_AX25_N2 +=11, + +674 + mNET_AX25_PACLEN +=12, + +675 + mNET_AX25_PROTOCOL +=13, + +676 + mNET_AX25_DAMA_SLAVE_TIMEOUT +=14 + +681 + mNET_ROSE_RESTART_REQUEST_TIMEOUT +=1, + +682 + mNET_ROSE_CALL_REQUEST_TIMEOUT +=2, + +683 + mNET_ROSE_RESET_REQUEST_TIMEOUT +=3, + +684 + mNET_ROSE_CLEAR_REQUEST_TIMEOUT +=4, + +685 + mNET_ROSE_ACK_HOLD_BACK_TIMEOUT +=5, + +686 + mNET_ROSE_ROUTING_CONTROL +=6, + +687 + mNET_ROSE_LINK_FAIL_TIMEOUT +=7, + +688 + mNET_ROSE_MAX_VCS +=8, + +689 + mNET_ROSE_WINDOW_SIZE +=9, + +690 + mNET_ROSE_NO_ACTIVITY_TIMEOUT +=10 + +695 + mNET_X25_RESTART_REQUEST_TIMEOUT +=1, + +696 + mNET_X25_CALL_REQUEST_TIMEOUT +=2, + +697 + mNET_X25_RESET_REQUEST_TIMEOUT +=3, + +698 + mNET_X25_CLEAR_REQUEST_TIMEOUT +=4, + +699 + mNET_X25_ACK_HOLD_BACK_TIMEOUT +=5, + +700 + mNET_X25_FORWARD +=6 + +706 + mNET_TR_RIF_TIMEOUT +=1 + +711 + mNET_DECNET_NODE_TYPE + = 1, + +712 + mNET_DECNET_NODE_ADDRESS + = 2, + +713 + mNET_DECNET_NODE_NAME + = 3, + +714 + mNET_DECNET_DEFAULT_DEVICE + = 4, + +715 + mNET_DECNET_TIME_WAIT + = 5, + +716 + mNET_DECNET_DN_COUNT + = 6, + +717 + mNET_DECNET_DI_COUNT + = 7, + +718 + mNET_DECNET_DR_COUNT + = 8, + +719 + mNET_DECNET_DST_GC_INTERVAL + = 9, + +720 + mNET_DECNET_CONF + = 10, + +721 + mNET_DECNET_NO_FC_MAX_CWND + = 11, + +722 + mNET_DECNET_MEM + = 12, + +723 + mNET_DECNET_RMEM + = 13, + +724 + mNET_DECNET_WMEM + = 14, + +725 + mNET_DECNET_DEBUG_LEVEL + = 255 + +730 + mNET_DECNET_CONF_LOOPBACK + = -2, + +731 + mNET_DECNET_CONF_DDCMP + = -3, + +732 + mNET_DECNET_CONF_PPP + = -4, + +733 + mNET_DECNET_CONF_X25 + = -5, + +734 + mNET_DECNET_CONF_GRE + = -6, + +735 + mNET_DECNET_CONF_ETHER + = -7 + +742 + mNET_DECNET_CONF_DEV_PRIORITY + = 1, + +743 + mNET_DECNET_CONF_DEV_T1 + = 2, + +744 + mNET_DECNET_CONF_DEV_T2 + = 3, + +745 + mNET_DECNET_CONF_DEV_T3 + = 4, + +746 + mNET_DECNET_CONF_DEV_FORWARDING + = 5, + +747 + mNET_DECNET_CONF_DEV_BLKSIZE + = 6, + +748 + mNET_DECNET_CONF_DEV_STATE + = 7 + +753 + mNET_SCTP_RTO_INITIAL + = 1, + +754 + mNET_SCTP_RTO_MIN + = 2, + +755 + mNET_SCTP_RTO_MAX + = 3, + +756 + mNET_SCTP_RTO_ALPHA + = 4, + +757 + mNET_SCTP_RTO_BETA + = 5, + +758 + mNET_SCTP_VALID_COOKIE_LIFE + = 6, + +759 + mNET_SCTP_ASSOCIATION_MAX_RETRANS + = 7, + +760 + mNET_SCTP_PATH_MAX_RETRANS + = 8, + +761 + mNET_SCTP_MAX_INIT_RETRANSMITS + = 9, + +762 + mNET_SCTP_HB_INTERVAL + = 10, + +763 + mNET_SCTP_PRESERVE_ENABLE + = 11, + +764 + mNET_SCTP_MAX_BURST + = 12, + +765 + mNET_SCTP_ADDIP_ENABLE + = 13, + +766 + mNET_SCTP_PRSCTP_ENABLE + = 14, + +767 + mNET_SCTP_SNDBUF_POLICY + = 15, + +768 + mNET_SCTP_SACK_TIMEOUT + = 16, + +769 + mNET_SCTP_RCVBUF_POLICY + = 17, + +774 + mNET_BRIDGE_NF_CALL_ARPTABLES + = 1, + +775 + mNET_BRIDGE_NF_CALL_IPTABLES + = 2, + +776 + mNET_BRIDGE_NF_CALL_IP6TABLES + = 3, + +777 + mNET_BRIDGE_NF_FILTER_VLAN_TAGGED + = 4, + +778 + mNET_BRIDGE_NF_FILTER_PPPOE_TAGGED + = 5, + +783 + mNET_IRDA_DISCOVERY +=1, + +784 + mNET_IRDA_DEVNAME +=2, + +785 + mNET_IRDA_DEBUG +=3, + +786 + mNET_IRDA_FAST_POLL +=4, + +787 + mNET_IRDA_DISCOVERY_SLOTS +=5, + +788 + mNET_IRDA_DISCOVERY_TIMEOUT +=6, + +789 + mNET_IRDA_SLOT_TIMEOUT +=7, + +790 + mNET_IRDA_MAX_BAUD_RATE +=8, + +791 + mNET_IRDA_MIN_TX_TURN_TIME +=9, + +792 + mNET_IRDA_MAX_TX_DATA_SIZE +=10, + +793 + mNET_IRDA_MAX_TX_WINDOW +=11, + +794 + mNET_IRDA_MAX_NOREPLY_TIME +=12, + +795 + mNET_IRDA_WARN_NOREPLY_TIME +=13, + +796 + mNET_IRDA_LAP_KEEPALIVE_TIME +=14, + +803 + mFS_NRINODE +=1, + +804 + mFS_STATINODE +=2, + +805 + mFS_MAXINODE +=3, + +806 + mFS_NRDQUOT +=4, + +807 + mFS_MAXDQUOT +=5, + +808 + mFS_NRFILE +=6, + +809 + mFS_MAXFILE +=7, + +810 + mFS_DENTRY +=8, + +811 + mFS_NRSUPER +=9, + +812 + mFS_MAXSUPER +=10, + +813 + mFS_OVERFLOWUID +=11, + +814 + mFS_OVERFLOWGID +=12, + +815 + mFS_LEASES +=13, + +816 + mFS_DIR_NOTIFY +=14, + +817 + mFS_LEASE_TIME +=15, + +818 + mFS_DQSTATS +=16, + +819 + mFS_XFS +=17, + +820 + mFS_AIO_NR +=18, + +821 + mFS_AIO_MAX_NR +=19, + +822 + mFS_INOTIFY +=20, + +823 + mFS_OCFS2 +=988, + +828 + mFS_DQ_LOOKUPS + = 1, + +829 + mFS_DQ_DROPS + = 2, + +830 + mFS_DQ_READS + = 3, + +831 + mFS_DQ_WRITES + = 4, + +832 + mFS_DQ_CACHE_HITS + = 5, + +833 + mFS_DQ_ALLOCATED + = 6, + +834 + mFS_DQ_FREE + = 7, + +835 + mFS_DQ_SYNCS + = 8, + +836 + mFS_DQ_WARNINGS + = 9, + +843 + mDEV_CDROM +=1, + +844 + mDEV_HWMON +=2, + +845 + mDEV_PARPORT +=3, + +846 + mDEV_RAID +=4, + +847 + mDEV_MAC_HID +=5, + +848 + mDEV_SCSI +=6, + +849 + mDEV_IPMI +=7, + +854 + mDEV_CDROM_INFO +=1, + +855 + mDEV_CDROM_AUTOCLOSE +=2, + +856 + mDEV_CDROM_AUTOEJECT +=3, + +857 + mDEV_CDROM_DEBUG +=4, + +858 + mDEV_CDROM_LOCK +=5, + +859 + mDEV_CDROM_CHECK_MEDIA +=6 + +864 + mDEV_PARPORT_DEFAULT +=-3 + +869 + mDEV_RAID_SPEED_LIMIT_MIN +=1, + +870 + mDEV_RAID_SPEED_LIMIT_MAX +=2 + +875 + mDEV_PARPORT_DEFAULT_TIMESLICE +=1, + +876 + mDEV_PARPORT_DEFAULT_SPINTIME +=2 + +881 + mDEV_PARPORT_SPINTIME +=1, + +882 + mDEV_PARPORT_BASE_ADDR +=2, + +883 + mDEV_PARPORT_IRQ +=3, + +884 + mDEV_PARPORT_DMA +=4, + +885 + mDEV_PARPORT_MODES +=5, + +886 + mDEV_PARPORT_DEVICES +=6, + +887 + mDEV_PARPORT_AUTOPROBE +=16 + +892 + mDEV_PARPORT_DEVICES_ACTIVE +=-3, + +897 + mDEV_PARPORT_DEVICE_TIMESLICE +=1, + +902 + mDEV_MAC_HID_KEYBOARD_SENDS_LINUX_KEYCODES +=1, + +903 + mDEV_MAC_HID_KEYBOARD_LOCK_KEYCODES +=2, + +904 + mDEV_MAC_HID_MOUSE_BUTTON_EMULATION +=3, + +905 + mDEV_MAC_HID_MOUSE_BUTTON2_KEYCODE +=4, + +906 + mDEV_MAC_HID_MOUSE_BUTTON3_KEYCODE +=5, + +907 + mDEV_MAC_HID_ADB_MOUSE_SENDS_KEYCODES +=6 + +912 + mDEV_SCSI_LOGGING_LEVEL +=1, + +917 + mDEV_IPMI_POWEROFF_POWERCYCLE +=1, + +923 + mABI_DEFHANDLER_COFF +=1, + +924 + mABI_DEFHANDLER_ELF +=2, + +925 + mABI_DEFHANDLER_LCALL7 +=3, + +926 + mABI_DEFHANDLER_LIBCSO +=4, + +927 + mABI_TRACE +=5, + +928 + mABI_FAKE_UTSNAME +=6, + + @/usr/include/linux/sysinfo.h + +1 #ide +_LINUX_SYSINFO_H + + +2  + #_LINUX_SYSINFO_H + + + ) + +4  + ~ + +6  + #SI_LOAD_SHIFT + 16 + + ) + +7  + ssysfo + { + +8 +__kl_lg_t + + muime +; + +9 +__kl_ulg_t + + mlds +[3]; + +10 +__kl_ulg_t + + mtٮm +; + +11 +__kl_ulg_t + + m䓿m +; + +12 +__kl_ulg_t + + mshedm +; + +13 +__kl_ulg_t + + mbufam +; + +14 +__kl_ulg_t + + mtٮsw +; + +15 +__kl_ulg_t + + msw +; + +16 +__u16 + + mocs +; + +17 +__u16 + + md +; + +18 +__kl_ulg_t + + mtٮhigh +; + +19 +__kl_ulg_t + + mhigh +; + +20 +__u32 + + mmem_un +; + +21  + m_f +[20-2*( +__kl_ulg_t +)-( +__u32 +)]; + + @/usr/include/linux/types.h + +1 #ide +_LINUX_TYPES_H + + +2  + #_LINUX_TYPES_H + + + ) + +4  + ~ + +6 #ide +__ASSEMBLY__ + + +8  + ~ + +16 #ifde +__CHECKER__ + + +17  + #__bwi__ + + `__ibu__ +(( +bwi +)) + + ) + +19  + #__bwi__ + + + ) + +21  + #__bwi + +__bwi__ + + + ) + +23  +__u16 + + t__bwi + + t__16 +; + +24  +__u16 + + t__bwi + + t__be16 +; + +25  +__u32 + + t__bwi + + t__32 +; + +26  +__u32 + + t__bwi + + t__be32 +; + +27  +__u64 + + t__bwi + + t__64 +; + +28  +__u64 + + t__bwi + + t__be64 +; + +30  +__u16 + + t__bwi + + t__sum16 +; + +31  +__u32 + + t__bwi + + t__wsum +; + +42  + #__igd_u64 + +__u64 + + `__ibu__ +(( + `igd +(8))) + + ) + +43  + #__igd_be64 + +__be64 + + `__ibu__ +(( + `igd +(8))) + + ) + +44  + #__igd_64 + +__64 + + `__ibu__ +(( + `igd +(8))) + + ) + + @/usr/include/asm/byteorder.h + +1 #ide +_ASM_X86_BYTEORDER_H + + +2  + #_ASM_X86_BYTEORDER_H + + + ) + +4  + ~ + + @/usr/include/asm/fcntl.h + +1  + ~ + + @/usr/include/asm/ioctl.h + +1  + ~ + + @/usr/include/asm/types.h + +1 #ide +_ASM_X86_TYPES_H + + +2  + #_ASM_X86_TYPES_H + + + ) + +4  + ~ + + @/usr/include/bits/posix1_lim.h + +24 #idef +_BITS_POSIX1_LIM_H + + +25  + #_BITS_POSIX1_LIM_H + 1 + + ) + +31  + #_POSIX_AIO_LISTIO_MAX + 2 + + ) + +34  + #_POSIX_AIO_MAX + 1 + + ) + +37  + #_POSIX_ARG_MAX + 4096 + + ) + +40 #ifde +__USE_XOPEN2K + + +41  + #_POSIX_CHILD_MAX + 25 + + ) + +43  + #_POSIX_CHILD_MAX + 6 + + ) + +47  + #_POSIX_DELAYTIMER_MAX + 32 + + ) + +51  + #_POSIX_HOST_NAME_MAX + 255 + + ) + +54  + #_POSIX_LINK_MAX + 8 + + ) + +57  + #_POSIX_LOGIN_NAME_MAX + 9 + + ) + +60  + #_POSIX_MAX_CANON + 255 + + ) + +64  + #_POSIX_MAX_INPUT + 255 + + ) + +67  + #_POSIX_MQ_OPEN_MAX + 8 + + ) + +70  + #_POSIX_MQ_PRIO_MAX + 32 + + ) + +73  + #_POSIX_NAME_MAX + 14 + + ) + +76 #ifde +__USE_XOPEN2K + + +77  + #_POSIX_NGROUPS_MAX + 8 + + ) + +79  + #_POSIX_NGROUPS_MAX + 0 + + ) + +83 #ifde +__USE_XOPEN2K + + +84  + #_POSIX_OPEN_MAX + 20 + + ) + +86  + #_POSIX_OPEN_MAX + 16 + + ) + +89 #i! +defed + +__USE_XOPEN2K + || defed +__USE_GNU + + +92  + #_POSIX_FD_SETSIZE + +_POSIX_OPEN_MAX + + + ) + +96  + #_POSIX_PATH_MAX + 256 + + ) + +99  + #_POSIX_PIPE_BUF + 512 + + ) + +103  + #_POSIX_RE_DUP_MAX + 255 + + ) + +106  + #_POSIX_RTSIG_MAX + 8 + + ) + +109  + #_POSIX_SEM_NSEMS_MAX + 256 + + ) + +112  + #_POSIX_SEM_VALUE_MAX + 32767 + + ) + +115  + #_POSIX_SIGQUEUE_MAX + 32 + + ) + +118  + #_POSIX_SSIZE_MAX + 32767 + + ) + +121  + #_POSIX_STREAM_MAX + 8 + + ) + +124  + #_POSIX_SYMLINK_MAX + 255 + + ) + +128  + #_POSIX_SYMLOOP_MAX + 8 + + ) + +131  + #_POSIX_TIMER_MAX + 32 + + ) + +134  + #_POSIX_TTY_NAME_MAX + 9 + + ) + +137 #ifde +__USE_XOPEN2K + + +138  + #_POSIX_TZNAME_MAX + 6 + + ) + +140  + #_POSIX_TZNAME_MAX + 3 + + ) + +143 #i! +defed + +__USE_XOPEN2K + || defed +__USE_GNU + + +145  + #_POSIX_QLIMIT + 1 + + ) + +149  + #_POSIX_HIWAT + +_POSIX_PIPE_BUF + + + ) + +152  + #_POSIX_UIO_MAXIOV + 16 + + ) + +156  + #_POSIX_CLOCKRES_MIN + 20000000 + + ) + +160  + ~ + +163 #idef +SSIZE_MAX + + +164  + #SSIZE_MAX + +LONG_MAX + + + ) + +171 #idef +NGROUPS_MAX + + +172  + #NGROUPS_MAX + 8 + + ) + + @/usr/include/bits/posix2_lim.h + +22 #idef +_BITS_POSIX2_LIM_H + + +23  + #_BITS_POSIX2_LIM_H + 1 + + ) + +27  + #_POSIX2_BC_BASE_MAX + 99 + + ) + +30  + #_POSIX2_BC_DIM_MAX + 2048 + + ) + +33  + #_POSIX2_BC_SCALE_MAX + 99 + + ) + +36  + #_POSIX2_BC_STRING_MAX + 1000 + + ) + +40  + #_POSIX2_COLL_WEIGHTS_MAX + 2 + + ) + +44  + #_POSIX2_EXPR_NEST_MAX + 32 + + ) + +47  + #_POSIX2_LINE_MAX + 2048 + + ) + +51  + #_POSIX2_RE_DUP_MAX + 255 + + ) + +55  + #_POSIX2_CHARCLASS_NAME_MAX + 14 + + ) + +62 #idef +BC_BASE_MAX + + +63  + #BC_BASE_MAX + +_POSIX2_BC_BASE_MAX + + + ) + +65 #idef +BC_DIM_MAX + + +66  + #BC_DIM_MAX + +_POSIX2_BC_DIM_MAX + + + ) + +68 #idef +BC_SCALE_MAX + + +69  + #BC_SCALE_MAX + +_POSIX2_BC_SCALE_MAX + + + ) + +71 #idef +BC_STRING_MAX + + +72  + #BC_STRING_MAX + +_POSIX2_BC_STRING_MAX + + + ) + +74 #idef +COLL_WEIGHTS_MAX + + +75  + #COLL_WEIGHTS_MAX + 255 + + ) + +77 #idef +EXPR_NEST_MAX + + +78  + #EXPR_NEST_MAX + +_POSIX2_EXPR_NEST_MAX + + + ) + +80 #idef +LINE_MAX + + +81  + #LINE_MAX + +_POSIX2_LINE_MAX + + + ) + +83 #idef +CHARCLASS_NAME_MAX + + +84  + #CHARCLASS_NAME_MAX + 2048 + + ) + +88  + #RE_DUP_MAX + (0x7fff) + + ) + + @/usr/include/bits/wordsize.h + +3 #i +defed + +__x86_64__ + && !defed +__ILP32__ + + +4  + #__WORDSIZE + 64 + + ) + +6  + #__WORDSIZE + 32 + + ) + +9 #ifde +__x86_64__ + + +10  + #__WORDSIZE_TIME64_COMPAT32 + 1 + + ) + +12  + #__SYSCALL_WORDSIZE + 64 + + ) + + @/usr/include/bits/xopen_lim.h + +29 #ide +_XOPEN_LIM_H + + +30  + #_XOPEN_LIM_H + 1 + + ) + +32  + #__ed_IOV_MAX + + + ) + +33  + ~ + +65  + #_XOPEN_IOV_MAX + +_POSIX_UIO_MAXIOV + + + ) + +70  + #NL_ARGMAX + +_POSIX_ARG_MAX + + + ) + +73  + #NL_LANGMAX + +_POSIX2_LINE_MAX + + + ) + +76  + #NL_MSGMAX + +INT_MAX + + + ) + +80  + #NL_NMAX + +INT_MAX + + + ) + +83  + #NL_SETMAX + +INT_MAX + + + ) + +86  + #NL_TEXTMAX + +INT_MAX + + + ) + +89  + #NZERO + 20 + + ) + +93 #ifde +INT_MAX + + +94 #i +INT_MAX + == 32767 + +95  + #WORD_BIT + 16 + + ) + +97 #i +INT_MAX + == 2147483647 + +98  + #WORD_BIT + 32 + + ) + +101  + #WORD_BIT + 64 + + ) + +104 #i +defed + +__INT_MAX__ + + +105 #i +__INT_MAX__ + == 32767 + +106  + #WORD_BIT + 16 + + ) + +108 #i +__INT_MAX__ + == 2147483647 + +109  + #WORD_BIT + 32 + + ) + +112  + #WORD_BIT + 64 + + ) + +116  + #WORD_BIT + 32 + + ) + +120 #ifde +LONG_MAX + + +121 #i +LONG_MAX + == 2147483647 + +122  + #LONG_BIT + 32 + + ) + +125  + #LONG_BIT + 64 + + ) + +127 #i +defed + +__LONG_MAX__ + + +128 #i +__LONG_MAX__ + == 2147483647 + +129  + #LONG_BIT + 32 + + ) + +132  + #LONG_BIT + 64 + + ) + +135  + ~ + +136 #i +__WORDSIZE + == 64 + +137  + #LONG_BIT + 64 + + ) + +139  + #LONG_BIT + 32 + + ) + + @/usr/include/features.h + +18 #idef +_FEATURES_H + + +19  + #_FEATURES_H + 1 + + ) + +97 #unde +__USE_ISOC11 + + +98 #unde +__USE_ISOC99 + + +99 #unde +__USE_ISOC95 + + +100 #unde +__USE_ISOCXX11 + + +101 #unde +__USE_POSIX + + +102 #unde +__USE_POSIX2 + + +103 #unde +__USE_POSIX199309 + + +104 #unde +__USE_POSIX199506 + + +105 #unde +__USE_XOPEN + + +106 #unde +__USE_XOPEN_EXTENDED + + +107 #unde +__USE_UNIX98 + + +108 #unde +__USE_XOPEN2K + + +109 #unde +__USE_XOPEN2KXSI + + +110 #unde +__USE_XOPEN2K8 + + +111 #unde +__USE_XOPEN2K8XSI + + +112 #unde +__USE_LARGEFILE + + +113 #unde +__USE_LARGEFILE64 + + +114 #unde +__USE_FILE_OFFSET64 + + +115 #unde +__USE_MISC + + +116 #unde +__USE_ATFILE + + +117 #unde +__USE_GNU + + +118 #unde +__USE_REENTRANT + + +119 #unde +__USE_FORTIFY_LEVEL + + +120 #unde +__KERNEL_STRICT_NAMES + + +124 #ide +_LOOSE_KERNEL_NAMES + + +125  + #__KERNEL_STRICT_NAMES + + + ) + +135 #i +defed + +__GNUC__ + && defed +__GNUC_MINOR__ + + +136  + #__GNUC_PREREQ +( +maj +, +m +) \ + +137 (( +__GNUC__ + << 16+ +__GNUC_MINOR__ + >(( +maj +<< 16+ ( +m +)) + + ) + +139  + #__GNUC_PREREQ +( +maj +, +m +0 + + ) + +146 #i( +defed + +_BSD_SOURCE + || defed +_SVID_SOURCE +) \ + +147 && ! +defed + + g_DEFAULT_SOURCE + + +149 #unde +_DEFAULT_SOURCE + + +150  + #_DEFAULT_SOURCE + 1 + + ) + +154 #ifde +_GNU_SOURCE + + +155 #unde +_ISOC95_SOURCE + + +156  + #_ISOC95_SOURCE + 1 + + ) + +157 #unde +_ISOC99_SOURCE + + +158  + #_ISOC99_SOURCE + 1 + + ) + +159 #unde +_ISOC11_SOURCE + + +160  + #_ISOC11_SOURCE + 1 + + ) + +161 #unde +_POSIX_SOURCE + + +162  + #_POSIX_SOURCE + 1 + + ) + +163 #unde +_POSIX_C_SOURCE + + +164  + #_POSIX_C_SOURCE + 200809L + + ) + +165 #unde +_XOPEN_SOURCE + + +166  + #_XOPEN_SOURCE + 700 + + ) + +167 #unde +_XOPEN_SOURCE_EXTENDED + + +168  + #_XOPEN_SOURCE_EXTENDED + 1 + + ) + +169 #unde +_LARGEFILE64_SOURCE + + +170  + #_LARGEFILE64_SOURCE + 1 + + ) + +171 #unde +_DEFAULT_SOURCE + + +172  + #_DEFAULT_SOURCE + 1 + + ) + +173 #unde +_ATFILE_SOURCE + + +174  + #_ATFILE_SOURCE + 1 + + ) + +179 #i( +defed + +_DEFAULT_SOURCE + \ + +180 || (! +defed + + g__STRICT_ANSI__ + \ + +181 && ! +defed + + g_ISOC99_SOURCE + \ + +182 && ! +defed + + g_POSIX_SOURCE + && !defed + g_POSIX_C_SOURCE + \ + +183 && ! +defed + + g_XOPEN_SOURCE +)) + +184 #unde +_DEFAULT_SOURCE + + +185  + #_DEFAULT_SOURCE + 1 + + ) + +189 #i( +defed + +_ISOC11_SOURCE + \ + +190 || ( +defed + + g__STDC_VERSION__ + && __STDC_VERSION__ >= 201112L)) + +191  + #__USE_ISOC11 + 1 + + ) + +195 #i( +defed + +_ISOC99_SOURCE + || defed +_ISOC11_SOURCE + \ + +196 || ( +defed + +__STDC_VERSION__ + && __STDC_VERSION__ >= 199901L)) + +197  + #__USE_ISOC99 + 1 + + ) + +201 #i( +defed + +_ISOC99_SOURCE + || defed +_ISOC11_SOURCE + \ + +202 || ( +defed + +__STDC_VERSION__ + && __STDC_VERSION__ >= 199409L)) + +203  + #__USE_ISOC95 + 1 + + ) + +210 #i(( +defed + +__lulus + && __cplusplus >= 201103L) \ + +211 || +defed + +__GXX_EXPERIMENTAL_CXX0X__ +) + +212  + #__USE_ISOCXX11 + 1 + + ) + +218 #ifde +_DEFAULT_SOURCE + + +219 #i! +defed + +_POSIX_SOURCE + && !defed +_POSIX_C_SOURCE + + +220  + #__USE_POSIX_IMPLICITLY + 1 + + ) + +222 #unde +_POSIX_SOURCE + + +223  + #_POSIX_SOURCE + 1 + + ) + +224 #unde +_POSIX_C_SOURCE + + +225  + #_POSIX_C_SOURCE + 200809L + + ) + +227 #i((! +defed + +__STRICT_ANSI__ + \ + +228 || ( +defed + +_XOPEN_SOURCE + && (_XOPEN_SOURCE - 0) >= 500)) \ + +229 && ! +defed + +_POSIX_SOURCE + && !defed +_POSIX_C_SOURCE +) + +230  + #_POSIX_SOURCE + 1 + + ) + +231 #i +defed + +_XOPEN_SOURCE + && (_XOPEN_SOURCE - 0) < 500 + +232  + #_POSIX_C_SOURCE + 2 + + ) + +233 #i +defed + +_XOPEN_SOURCE + && (_XOPEN_SOURCE - 0) < 600 + +234  + #_POSIX_C_SOURCE + 199506L + + ) + +235 #i +defed + +_XOPEN_SOURCE + && (_XOPEN_SOURCE - 0) < 700 + +236  + #_POSIX_C_SOURCE + 200112L + + ) + +238  + #_POSIX_C_SOURCE + 200809L + + ) + +240  + #__USE_POSIX_IMPLICITLY + 1 + + ) + +243 #i( +defed + +_POSIX_SOURCE + \ + +244 || ( +defed + +_POSIX_C_SOURCE + && _POSIX_C_SOURCE >= 1) \ + +245 || +defed + +_XOPEN_SOURCE +) + +246  + #__USE_POSIX + 1 + + ) + +249 #i +defed + +_POSIX_C_SOURCE + && _POSIX_C_SOURCE >2 || defed +_XOPEN_SOURCE + + +250  + #__USE_POSIX2 + 1 + + ) + +253 #i +defed + +_POSIX_C_SOURCE + && (_POSIX_C_SOURCE - 0) >= 199309L + +254  + #__USE_POSIX199309 + 1 + + ) + +257 #i +defed + +_POSIX_C_SOURCE + && (_POSIX_C_SOURCE - 0) >= 199506L + +258  + #__USE_POSIX199506 + 1 + + ) + +261 #i +defed + +_POSIX_C_SOURCE + && (_POSIX_C_SOURCE - 0) >= 200112L + +262  + #__USE_XOPEN2K + 1 + + ) + +263 #unde +__USE_ISOC95 + + +264  + #__USE_ISOC95 + 1 + + ) + +265 #unde +__USE_ISOC99 + + +266  + #__USE_ISOC99 + 1 + + ) + +269 #i +defed + +_POSIX_C_SOURCE + && (_POSIX_C_SOURCE - 0) >= 200809L + +270  + #__USE_XOPEN2K8 + 1 + + ) + +271 #unde +_ATFILE_SOURCE + + +272  + #_ATFILE_SOURCE + 1 + + ) + +275 #ifdef +_XOPEN_SOURCE + + +276  + #__USE_XOPEN + 1 + + ) + +277 #i( +_XOPEN_SOURCE + - 0) >= 500 + +278  + #__USE_XOPEN_EXTENDED + 1 + + ) + +279  + #__USE_UNIX98 + 1 + + ) + +280 #unde +_LARGEFILE_SOURCE + + +281  + #_LARGEFILE_SOURCE + 1 + + ) + +282 #i( +_XOPEN_SOURCE + - 0) >= 600 + +283 #i( +_XOPEN_SOURCE + - 0) >= 700 + +284  + #__USE_XOPEN2K8 + 1 + + ) + +285  + #__USE_XOPEN2K8XSI + 1 + + ) + +287  + #__USE_XOPEN2K + 1 + + ) + +288  + #__USE_XOPEN2KXSI + 1 + + ) + +289 #unde +__USE_ISOC95 + + +290  + #__USE_ISOC95 + 1 + + ) + +291 #unde +__USE_ISOC99 + + +292  + #__USE_ISOC99 + 1 + + ) + +295 #ifde +_XOPEN_SOURCE_EXTENDED + + +296  + #__USE_XOPEN_EXTENDED + 1 + + ) + +301 #ifde +_LARGEFILE_SOURCE + + +302  + #__USE_LARGEFILE + 1 + + ) + +305 #ifde +_LARGEFILE64_SOURCE + + +306  + #__USE_LARGEFILE64 + 1 + + ) + +309 #i +defed + +_FILE_OFFSET_BITS + && _FILE_OFFSET_BITS == 64 + +310  + #__USE_FILE_OFFSET64 + 1 + + ) + +313 #i +defed + +_DEFAULT_SOURCE + + +314  + #__USE_MISC + 1 + + ) + +317 #ifdef +_ATFILE_SOURCE + + +318  + #__USE_ATFILE + 1 + + ) + +321 #ifdef +_GNU_SOURCE + + +322  + #__USE_GNU + 1 + + ) + +325 #i +defed + +_REENTRANT + || defed +_THREAD_SAFE + + +326  + #__USE_REENTRANT + 1 + + ) + +329 #i +defed + +_FORTIFY_SOURCE + && _FORTIFY_SOURCE > 0 + +330 #i! +defed + +__OPTIMIZE__ + || __OPTIMIZE__ <= 0 + +331 #wng +_FORTIFY_SOURCE + +ques + +compg + +wh + +timizi + (- +O +) + +332 #i! +__GNUC_PREREQ + (4, 1) + +333 #wng +_FORTIFY_SOURCE + +ques + +GCC + 4.1 + + +ϋr + + +334 #i +_FORTIFY_SOURCE + > 1 + +335  + #__USE_FORTIFY_LEVEL + 2 + + ) + +337  + #__USE_FORTIFY_LEVEL + 1 + + ) + +340 #ide +__USE_FORTIFY_LEVEL + + +341  + #__USE_FORTIFY_LEVEL + 0 + + ) + +346  + ~ + +354 #unde +__GNU_LIBRARY__ + + +355  + #__GNU_LIBRARY__ + 6 + + ) + +359  + #__GLIBC__ + 2 + + ) + +360  + #__GLIBC_MINOR__ + 23 + + ) + +362  + #__GLIBC_PREREQ +( +maj +, +m +) \ + +363 (( +__GLIBC__ + << 16+ +__GLIBC_MINOR__ + >(( +maj +<< 16+ ( +m +)) + + ) + +366 #ide +__ASSEMBLER__ + + +367 #ide +_SYS_CDEFS_H + + +368  + ~ + +373 #i +defed + +__USE_FILE_OFFSET64 + && !defed +__REDIRECT + + +374  + #__USE_LARGEFILE + 1 + + ) + +375  + #__USE_LARGEFILE64 + 1 + + ) + +381 #i +__GNUC_PREREQ + (2, 7&& +defed + +__OPTIMIZE__ + \ + +382 && ! +defed + + g__OPTIMIZE_SIZE__ + && !defed + g__NO_INLINE__ + \ + +383 && +defed + + g__ex_le + + +384  + #__USE_EXTERN_INLINES + 1 + + ) + +392  + ~ + + @/usr/include/linux/hdlc/ioctl.h + +1 #ide +__HDLC_IOCTL_H__ + + +2  + #__HDLC_IOCTL_H__ + + + ) + +5  + #GENERIC_HDLC_VERSION + 4 + + ) + +7  + #CLOCK_DEFAULT + 0 + + ) + +8  + #CLOCK_EXT + 1 + + ) + +9  + #CLOCK_INT + 2 + + ) + +10  + #CLOCK_TXINT + 3 + + ) + +11  + #CLOCK_TXFROMRX + 4 + + ) + +14  + #ENCODING_DEFAULT + 0 + + ) + +15  + #ENCODING_NRZ + 1 + + ) + +16  + #ENCODING_NRZI + 2 + + ) + +17  + #ENCODING_FM_MARK + 3 + + ) + +18  + #ENCODING_FM_SPACE + 4 + + ) + +19  + #ENCODING_MANCHESTER + 5 + + ) + +22  + #PARITY_DEFAULT + 0 + + ) + +23  + #PARITY_NONE + 1 + + ) + +24  + #PARITY_CRC16_PR0 + 2 + + ) + +25  + #PARITY_CRC16_PR1 + 3 + + ) + +26  + #PARITY_CRC16_PR0_CCITT + 4 + + ) + +27  + #PARITY_CRC16_PR1_CCITT + 5 + + ) + +28  + #PARITY_CRC32_PR0_CCITT + 6 + + ) + +29  + #PARITY_CRC32_PR1_CCITT + 7 + + ) + +31  + #LMI_DEFAULT + 0 + + ) + +32  + #LMI_NONE + 1 + + ) + +33  + #LMI_ANSI + 2 + + ) + +34  + #LMI_CCITT + 3 + + ) + +35  + #LMI_CISCO + 4 + + ) + +37 #ide +__ASSEMBLY__ + + +40  + mock_ +; + +41  + mock_ty +; + +42  + mloback +; + +43 } + tsync_rl_gs +; + +46  + mock_ +; + +47  + mock_ty +; + +48  + mloback +; + +49  + m_m +; + +50 } + t1_gs +; + +53  + mcodg +; + +54  + mry +; + +55 } + tw_hdlc_o +; + +58  + mt391 +; + +59  + mt392 +; + +60  + mn391 +; + +61  + mn392 +; + +62  + mn393 +; + +63  + mlmi +; + +64  + md +; + +65 } + t_o +; + +68  + mdlci +; + +69 } + t_o_pvc +; + +72  + mdlci +; + +73  + mma +[ +IFNAMSIZ +]; + +74 } + t_o_pvc_fo +; + +77  + mrv +; + +78  + mtimeout +; + +79 } + tcisco_o +; + + @/usr/include/linux/libc-compat.h + +48 #ide +_LIBC_COMPAT_H + + +49  + #_LIBC_COMPAT_H + + + ) + +52 #i +defed +( +__GLIBC__ +) + +55 #i +defed +( +_NET_IF_H +&& defed( +__USE_MISC +) + +60  + #__UAPI_DEF_IF_IFCONF + 0 + + ) + +61  + #__UAPI_DEF_IF_IFMAP + 0 + + ) + +62  + #__UAPI_DEF_IF_IFNAMSIZ + 0 + + ) + +63  + #__UAPI_DEF_IF_IFREQ + 0 + + ) + +65  + #__UAPI_DEF_IF_NET_DEVICE_FLAGS + 0 + + ) + +67 #ide +__UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO + + +68  + #__UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO + 1 + + ) + +77  + #__UAPI_DEF_IF_IFCONF + 1 + + ) + +78  + #__UAPI_DEF_IF_IFMAP + 1 + + ) + +79  + #__UAPI_DEF_IF_IFNAMSIZ + 1 + + ) + +80  + #__UAPI_DEF_IF_IFREQ + 1 + + ) + +82  + #__UAPI_DEF_IF_NET_DEVICE_FLAGS + 1 + + ) + +84  + #__UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO + 1 + + ) + +89 #i +defed +( +_NETINET_IN_H +) + +93  + #__UAPI_DEF_IN_ADDR + 0 + + ) + +94  + #__UAPI_DEF_IN_IPPROTO + 0 + + ) + +95  + #__UAPI_DEF_IN_PKTINFO + 0 + + ) + +96  + #__UAPI_DEF_IP_MREQ + 0 + + ) + +97  + #__UAPI_DEF_SOCKADDR_IN + 0 + + ) + +98  + #__UAPI_DEF_IN_CLASS + 0 + + ) + +100  + #__UAPI_DEF_IN6_ADDR + 0 + + ) + +105 #i +defed +( +__USE_MISC +|| defed ( +__USE_GNU +) + +106  + #__UAPI_DEF_IN6_ADDR_ALT + 0 + + ) + +108  + #__UAPI_DEF_IN6_ADDR_ALT + 1 + + ) + +110  + #__UAPI_DEF_SOCKADDR_IN6 + 0 + + ) + +111  + #__UAPI_DEF_IPV6_MREQ + 0 + + ) + +112  + #__UAPI_DEF_IPPROTO_V6 + 0 + + ) + +113  + #__UAPI_DEF_IPV6_OPTIONS + 0 + + ) + +114  + #__UAPI_DEF_IN6_PKTINFO + 0 + + ) + +115  + #__UAPI_DEF_IP6_MTUINFO + 0 + + ) + +122  + #__UAPI_DEF_IN_ADDR + 1 + + ) + +123  + #__UAPI_DEF_IN_IPPROTO + 1 + + ) + +124  + #__UAPI_DEF_IN_PKTINFO + 1 + + ) + +125  + #__UAPI_DEF_IP_MREQ + 1 + + ) + +126  + #__UAPI_DEF_SOCKADDR_IN + 1 + + ) + +127  + #__UAPI_DEF_IN_CLASS + 1 + + ) + +129  + #__UAPI_DEF_IN6_ADDR + 1 + + ) + +132  + #__UAPI_DEF_IN6_ADDR_ALT + 1 + + ) + +133  + #__UAPI_DEF_SOCKADDR_IN6 + 1 + + ) + +134  + #__UAPI_DEF_IPV6_MREQ + 1 + + ) + +135  + #__UAPI_DEF_IPPROTO_V6 + 1 + + ) + +136  + #__UAPI_DEF_IPV6_OPTIONS + 1 + + ) + +137  + #__UAPI_DEF_IN6_PKTINFO + 1 + + ) + +138  + #__UAPI_DEF_IP6_MTUINFO + 1 + + ) + +143 #i +defed +( +__NETIPX_IPX_H +) + +145  + #__UAPI_DEF_SOCKADDR_IPX + 0 + + ) + +146  + #__UAPI_DEF_IPX_ROUTE_DEFINITION + 0 + + ) + +147  + #__UAPI_DEF_IPX_INTERFACE_DEFINITION + 0 + + ) + +148  + #__UAPI_DEF_IPX_CONFIG_DATA + 0 + + ) + +149  + #__UAPI_DEF_IPX_ROUTE_DEF + 0 + + ) + +153  + #__UAPI_DEF_SOCKADDR_IPX + 1 + + ) + +154  + #__UAPI_DEF_IPX_ROUTE_DEFINITION + 1 + + ) + +155  + #__UAPI_DEF_IPX_INTERFACE_DEFINITION + 1 + + ) + +156  + #__UAPI_DEF_IPX_CONFIG_DATA + 1 + + ) + +157  + #__UAPI_DEF_IPX_ROUTE_DEF + 1 + + ) + +162 #i +defed +( +_SYS_XATTR_H +) + +163  + #__UAPI_DEF_XATTR + 0 + + ) + +165  + #__UAPI_DEF_XATTR + 1 + + ) + +174  + #__UAPI_DEF_IF_IFCONF + 1 + + ) + +175  + #__UAPI_DEF_IF_IFMAP + 1 + + ) + +176  + #__UAPI_DEF_IF_IFNAMSIZ + 1 + + ) + +177  + #__UAPI_DEF_IF_IFREQ + 1 + + ) + +179  + #__UAPI_DEF_IF_NET_DEVICE_FLAGS + 1 + + ) + +181  + #__UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO + 1 + + ) + +184  + #__UAPI_DEF_IN_ADDR + 1 + + ) + +185  + #__UAPI_DEF_IN_IPPROTO + 1 + + ) + +186  + #__UAPI_DEF_IN_PKTINFO + 1 + + ) + +187  + #__UAPI_DEF_IP_MREQ + 1 + + ) + +188  + #__UAPI_DEF_SOCKADDR_IN + 1 + + ) + +189  + #__UAPI_DEF_IN_CLASS + 1 + + ) + +192  + #__UAPI_DEF_IN6_ADDR + 1 + + ) + +193  + #__UAPI_DEF_IN6_ADDR_ALT + 1 + + ) + +194  + #__UAPI_DEF_SOCKADDR_IN6 + 1 + + ) + +195  + #__UAPI_DEF_IPV6_MREQ + 1 + + ) + +196  + #__UAPI_DEF_IPPROTO_V6 + 1 + + ) + +197  + #__UAPI_DEF_IPV6_OPTIONS + 1 + + ) + +198  + #__UAPI_DEF_IN6_PKTINFO + 1 + + ) + +199  + #__UAPI_DEF_IP6_MTUINFO + 1 + + ) + +202  + #__UAPI_DEF_SOCKADDR_IPX + 1 + + ) + +203  + #__UAPI_DEF_IPX_ROUTE_DEFINITION + 1 + + ) + +204  + #__UAPI_DEF_IPX_INTERFACE_DEFINITION + 1 + + ) + +205  + #__UAPI_DEF_IPX_CONFIG_DATA + 1 + + ) + +206  + #__UAPI_DEF_IPX_ROUTE_DEF + 1 + + ) + +209  + #__UAPI_DEF_XATTR + 1 + + ) + + @/usr/include/linux/posix_types.h + +1 #ide +_LINUX_POSIX_TYPES_H + + +2  + #_LINUX_POSIX_TYPES_H + + + ) + +4  + ~ + +21 #unde +__FD_SETSIZE + + +22  + #__FD_SETSIZE + 1024 + + ) + +25  + mfds_bs +[ +__FD_SETSIZE + / (8 * ())]; + +26 } + t__kl_fd_t +; + +29 (* + t__kl_sighdr_t +)(); + +32  + t__kl_key_t +; + +33  + t__kl_mqd_t +; + +35  + ~ + + @/usr/include/asm-generic/fcntl.h + +1 #ide +_ASM_GENERIC_FCNTL_H + + +2  + #_ASM_GENERIC_FCNTL_H + + + ) + +4  + ~ + +18  + #O_ACCMODE + 00000003 + + ) + +19  + #O_RDONLY + 00000000 + + ) + +20  + #O_WRONLY + 00000001 + + ) + +21  + #O_RDWR + 00000002 + + ) + +22 #ide +O_CREAT + + +23  + #O_CREAT + 00000100 + + ) + +25 #ide +O_EXCL + + +26  + #O_EXCL + 00000200 + + ) + +28 #ide +O_NOCTTY + + +29  + #O_NOCTTY + 00000400 + + ) + +31 #ide +O_TRUNC + + +32  + #O_TRUNC + 00001000 + + ) + +34 #ide +O_APPEND + + +35  + #O_APPEND + 00002000 + + ) + +37 #ide +O_NONBLOCK + + +38  + #O_NONBLOCK + 00004000 + + ) + +40 #ide +O_DSYNC + + +41  + #O_DSYNC + 00010000 + + ) + +43 #ide +FASYNC + + +44  + #FASYNC + 00020000 + + ) + +46 #ide +O_DIRECT + + +47  + #O_DIRECT + 00040000 + + ) + +49 #ide +O_LARGEFILE + + +50  + #O_LARGEFILE + 00100000 + + ) + +52 #ide +O_DIRECTORY + + +53  + #O_DIRECTORY + 00200000 + + ) + +55 #ide +O_NOFOLLOW + + +56  + #O_NOFOLLOW + 00400000 + + ) + +58 #ide +O_NOATIME + + +59  + #O_NOATIME + 01000000 + + ) + +61 #ide +O_CLOEXEC + + +62  + #O_CLOEXEC + 02000000 + + ) + +78 #ide +O_SYNC + + +79  + #__O_SYNC + 04000000 + + ) + +80  + #O_SYNC + ( +__O_SYNC +| +O_DSYNC +) + + ) + +83 #ide +O_PATH + + +84  + #O_PATH + 010000000 + + ) + +87 #ide +__O_TMPFILE + + +88  + #__O_TMPFILE + 020000000 + + ) + +92  + #O_TMPFILE + ( +__O_TMPFILE + | +O_DIRECTORY +) + + ) + +93  + #O_TMPFILE_MASK + ( +__O_TMPFILE + | +O_DIRECTORY + | +O_CREAT +) + + ) + +95 #ide +O_NDELAY + + +96  + #O_NDELAY + +O_NONBLOCK + + + ) + +99  + #F_DUPFD + 0 + + ) + +100  + #F_GETFD + 1 + + ) + +101  + #F_SETFD + 2 + + ) + +102  + #F_GETFL + 3 + + ) + +103  + #F_SETFL + 4 + + ) + +104 #ide +F_GETLK + + +105  + #F_GETLK + 5 + + ) + +106  + #F_SETLK + 6 + + ) + +107  + #F_SETLKW + 7 + + ) + +109 #ide +F_SETOWN + + +110  + #F_SETOWN + 8 + + ) + +111  + #F_GETOWN + 9 + + ) + +113 #ide +F_SETSIG + + +114  + #F_SETSIG + 10 + + ) + +115  + #F_GETSIG + 11 + + ) + +118 #ide +CONFIG_64BIT + + +119 #ide +F_GETLK64 + + +120  + #F_GETLK64 + 12 + + ) + +121  + #F_SETLK64 + 13 + + ) + +122  + #F_SETLKW64 + 14 + + ) + +126 #ide +F_SETOWN_EX + + +127  + #F_SETOWN_EX + 15 + + ) + +128  + #F_GETOWN_EX + 16 + + ) + +131 #ide +F_GETOWNER_UIDS + + +132  + #F_GETOWNER_UIDS + 17 + + ) + +147  + #F_OFD_GETLK + 36 + + ) + +148  + #F_OFD_SETLK + 37 + + ) + +149  + #F_OFD_SETLKW + 38 + + ) + +151  + #F_OWNER_TID + 0 + + ) + +152  + #F_OWNER_PID + 1 + + ) + +153  + #F_OWNER_PGRP + 2 + + ) + +155  + sf_owr_ex + { + +156  + mty +; + +157 +__kl_pid_t + + mpid +; + +161  + #FD_CLOEXEC + 1 + + ) + +164 #ide +F_RDLCK + + +165  + #F_RDLCK + 0 + + ) + +166  + #F_WRLCK + 1 + + ) + +167  + #F_UNLCK + 2 + + ) + +171 #ide +F_EXLCK + + +172  + #F_EXLCK + 4 + + ) + +173  + #F_SHLCK + 8 + + ) + +177  + #LOCK_SH + 1 + + ) + +178  + #LOCK_EX + 2 + + ) + +179  + #LOCK_NB + 4 + + ) + +181  + #LOCK_UN + 8 + + ) + +183  + #LOCK_MAND + 32 + + ) + +184  + #LOCK_READ + 64 + + ) + +185  + #LOCK_WRITE + 128 + + ) + +186  + #LOCK_RW + 192 + + ) + +188  + #F_LINUX_SPECIFIC_BASE + 1024 + + ) + +190 #ide +HAVE_ARCH_STRUCT_FLOCK + + +191 #ide +__ARCH_FLOCK_PAD + + +192  + #__ARCH_FLOCK_PAD + + + ) + +195  + sock + { + +196  + ml_ty +; + +197  + ml_wh +; + +198 +__kl_off_t + + ml_t +; + +199 +__kl_off_t + + ml_n +; + +200 +__kl_pid_t + + ml_pid +; + +201 + m__ARCH_FLOCK_PAD + + +205 #ide +HAVE_ARCH_STRUCT_FLOCK64 + + +206 #ide +__ARCH_FLOCK64_PAD + + +207  + #__ARCH_FLOCK64_PAD + + + ) + +210  + sock64 + { + +211  + ml_ty +; + +212  + ml_wh +; + +213 +__kl_loff_t + + ml_t +; + +214 +__kl_loff_t + + ml_n +; + +215 +__kl_pid_t + + ml_pid +; + +216 + m__ARCH_FLOCK64_PAD + + + @/usr/include/asm-generic/ioctl.h + +1 #ide +_ASM_GENERIC_IOCTL_H + + +2  + #_ASM_GENERIC_IOCTL_H + + + ) + +22  + #_IOC_NRBITS + 8 + + ) + +23  + #_IOC_TYPEBITS + 8 + + ) + +30 #ide +_IOC_SIZEBITS + + +31  + #_IOC_SIZEBITS + 14 + + ) + +34 #ide +_IOC_DIRBITS + + +35  + #_IOC_DIRBITS + 2 + + ) + +38  + #_IOC_NRMASK + ((1 << +_IOC_NRBITS +)-1) + + ) + +39  + #_IOC_TYPEMASK + ((1 << +_IOC_TYPEBITS +)-1) + + ) + +40  + #_IOC_SIZEMASK + ((1 << +_IOC_SIZEBITS +)-1) + + ) + +41  + #_IOC_DIRMASK + ((1 << +_IOC_DIRBITS +)-1) + + ) + +43  + #_IOC_NRSHIFT + 0 + + ) + +44  + #_IOC_TYPESHIFT + ( +_IOC_NRSHIFT ++ +_IOC_NRBITS +) + + ) + +45  + #_IOC_SIZESHIFT + ( +_IOC_TYPESHIFT ++ +_IOC_TYPEBITS +) + + ) + +46  + #_IOC_DIRSHIFT + ( +_IOC_SIZESHIFT ++ +_IOC_SIZEBITS +) + + ) + +53 #ide +_IOC_NONE + + +54  + #_IOC_NONE + 0U + + ) + +57 #ide +_IOC_WRITE + + +58  + #_IOC_WRITE + 1U + + ) + +61 #ide +_IOC_READ + + +62  + #_IOC_READ + 2U + + ) + +65  + #_IOC +( +d +, +ty +, + +, +size +) \ + +66 ((( +d +<< +_IOC_DIRSHIFT +) | \ + +67 (( +ty +<< +_IOC_TYPESHIFT +) | \ + +68 (( + +<< +_IOC_NRSHIFT +) | \ + +69 (( +size +<< +_IOC_SIZESHIFT +)) + + ) + +71  + #_IOC_TYPECHECK +( +t +()) + + ) + +74  + #_IO +( +ty +, + + + `_IOC +( +_IOC_NONE +,y),r),0) + + ) + +75  + #_IOR +( +ty +, + +, +size + + `_IOC +( +_IOC_READ +,y),r),( + `_IOC_TYPECHECK +(size))) + + ) + +76  + #_IOW +( +ty +, + +, +size + + `_IOC +( +_IOC_WRITE +,y),r),( + `_IOC_TYPECHECK +(size))) + + ) + +77  + #_IOWR +( +ty +, + +, +size + + `_IOC +( +_IOC_READ +| +_IOC_WRITE +,y),r),( + `_IOC_TYPECHECK +(size))) + + ) + +78  + #_IOR_BAD +( +ty +, + +, +size + + `_IOC +( +_IOC_READ +,y),r),(size)) + + ) + +79  + #_IOW_BAD +( +ty +, + +, +size + + `_IOC +( +_IOC_WRITE +,y),r),(size)) + + ) + +80  + #_IOWR_BAD +( +ty +, + +, +size + + `_IOC +( +_IOC_READ +| +_IOC_WRITE +,y),r),(size)) + + ) + +83  + #_IOC_DIR +( + +((r>> +_IOC_DIRSHIFT +& +_IOC_DIRMASK +) + + ) + +84  + #_IOC_TYPE +( + +((r>> +_IOC_TYPESHIFT +& +_IOC_TYPEMASK +) + + ) + +85  + #_IOC_NR +( + +((r>> +_IOC_NRSHIFT +& +_IOC_NRMASK +) + + ) + +86  + #_IOC_SIZE +( + +((r>> +_IOC_SIZESHIFT +& +_IOC_SIZEMASK +) + + ) + +90  + #IOC_IN + ( +_IOC_WRITE + << +_IOC_DIRSHIFT +) + + ) + +91  + #IOC_OUT + ( +_IOC_READ + << +_IOC_DIRSHIFT +) + + ) + +92  + #IOC_INOUT + (( +_IOC_WRITE +| +_IOC_READ +<< +_IOC_DIRSHIFT +) + + ) + +93  + #IOCSIZE_MASK + ( +_IOC_SIZEMASK + << +_IOC_SIZESHIFT +) + + ) + +94  + #IOCSIZE_SHIFT + ( +_IOC_SIZESHIFT +) + + ) + + @/usr/include/asm-generic/types.h + +1 #ide +_ASM_GENERIC_TYPES_H + + +2  + #_ASM_GENERIC_TYPES_H + + + ) + +6  + ~ + + @/usr/include/asm/posix_types.h + +1 #ifde +__i386__ + + +2  + ~ + +3 #i +defed +( +__ILP32__ +) + +4  + ~ + +6  + ~ + + @/usr/include/bits/local_lim.h + +24 #ide +NR_OPEN + + +25  + #__undef_NR_OPEN + + + ) + +27 #ide +LINK_MAX + + +28  + #__undef_LINK_MAX + + + ) + +30 #ide +OPEN_MAX + + +31  + #__undef_OPEN_MAX + + + ) + +33 #ide +ARG_MAX + + +34  + #__undef_ARG_MAX + + + ) + +38  + ~ + +41 #ifde +__undef_NR_OPEN + + +42 #unde +NR_OPEN + + +43 #unde +__undef_NR_OPEN + + +46 #ifde +__undef_LINK_MAX + + +47 #unde +LINK_MAX + + +48 #unde +__undef_LINK_MAX + + +51 #ifde +__undef_OPEN_MAX + + +52 #unde +OPEN_MAX + + +53 #unde +__undef_OPEN_MAX + + +56 #ifde +__undef_ARG_MAX + + +57 #unde +ARG_MAX + + +58 #unde +__undef_ARG_MAX + + +62  + #_POSIX_THREAD_KEYS_MAX + 128 + + ) + +64  + #PTHREAD_KEYS_MAX + 1024 + + ) + +67  + #_POSIX_THREAD_DESTRUCTOR_ITERATIONS + 4 + + ) + +69  + #PTHREAD_DESTRUCTOR_ITERATIONS + +_POSIX_THREAD_DESTRUCTOR_ITERATIONS + + + ) + +72  + #_POSIX_THREAD_THREADS_MAX + 64 + + ) + +74 #unde +PTHREAD_THREADS_MAX + + +78  + #AIO_PRIO_DELTA_MAX + 20 + + ) + +81  + #PTHREAD_STACK_MIN + 16384 + + ) + +84  + #DELAYTIMER_MAX + 2147483647 + + ) + +87  + #TTY_NAME_MAX + 32 + + ) + +90  + #LOGIN_NAME_MAX + 256 + + ) + +93  + #HOST_NAME_MAX + 64 + + ) + +96  + #MQ_PRIO_MAX + 32768 + + ) + +99  + #SEM_VALUE_MAX + (2147483647) + + ) + + @/usr/include/bits/stdio_lim.h + +18 #i! +defed + +_STDIO_H + && !defed +__ed_FOPEN_MAX + && !defed +__ed_IOV_MAX + + +22 #ifde +_STDIO_H + + +23  + #L_tmam + 20 + + ) + +24  + #TMP_MAX + 238328 + + ) + +25  + #FILENAME_MAX + 4096 + + ) + +27 #ifde +__USE_POSIX + + +28  + #L_mid + 9 + + ) + +29 #i! +defed + +__USE_XOPEN2K + || defed +__USE_GNU + + +30  + #L_curid + 9 + + ) + +35 #i +defed + +__ed_FOPEN_MAX + || defed +_STDIO_H + + +36 #unde +FOPEN_MAX + + +37  + #FOPEN_MAX + 16 + + ) + +40 #i +defed + +__ed_IOV_MAX + && !defed +IOV_MAX + + +41  + #IOV_MAX + 1024 + + ) + + @/usr/include/gnu/stubs.h + +6 #i! +defed + +__x86_64__ + + +7  + ~ + +9 #i +defed + +__x86_64__ + && defed +__LP64__ + + +10  + ~ + +12 #i +defed + +__x86_64__ + && defed +__ILP32__ + + +13  + ~ + + @/usr/include/linux/byteorder/little_endian.h + +1 #ide +_LINUX_BYTEORDER_LITTLE_ENDIAN_H + + +2  + #_LINUX_BYTEORDER_LITTLE_ENDIAN_H + + + ) + +4 #ide +__LITTLE_ENDIAN + + +5  + #__LITTLE_ENDIAN + 1234 + + ) + +7 #ide +__LITTLE_ENDIAN_BITFIELD + + +8  + #__LITTLE_ENDIAN_BITFIELD + + + ) + +11  + ~ + +12  + ~ + +14  + #__cڡt_htl +( +x +(( +__be32 +) + `___cڡt_swab32 +((x))) + + ) + +15  + #__cڡt_ohl +( +x + + `___cڡt_swab32 +(( +__be32 +)(x)) + + ) + +16  + #__cڡt_hts +( +x +(( +__be16 +) + `___cڡt_swab16 +((x))) + + ) + +17  + #__cڡt_ohs +( +x + + `___cڡt_swab16 +(( +__be16 +)(x)) + + ) + +18  + #__cڡt_u_to_64 +( +x +(( +__64 +)( +__u64 +)(x)) + + ) + +19  + #__cڡt_64_to_u +( +x +(( +__u64 +)( +__64 +)(x)) + + ) + +20  + #__cڡt_u_to_32 +( +x +(( +__32 +)( +__u32 +)(x)) + + ) + +21  + #__cڡt_32_to_u +( +x +(( +__u32 +)( +__32 +)(x)) + + ) + +22  + #__cڡt_u_to_16 +( +x +(( +__16 +)( +__u16 +)(x)) + + ) + +23  + #__cڡt_16_to_u +( +x +(( +__u16 +)( +__16 +)(x)) + + ) + +24  + #__cڡt_u_to_be64 +( +x +(( +__be64 +) + `___cڡt_swab64 +((x))) + + ) + +25  + #__cڡt_be64_to_u +( +x + + `___cڡt_swab64 +(( +__u64 +)( +__be64 +)(x)) + + ) + +26  + #__cڡt_u_to_be32 +( +x +(( +__be32 +) + `___cڡt_swab32 +((x))) + + ) + +27  + #__cڡt_be32_to_u +( +x + + `___cڡt_swab32 +(( +__u32 +)( +__be32 +)(x)) + + ) + +28  + #__cڡt_u_to_be16 +( +x +(( +__be16 +) + `___cڡt_swab16 +((x))) + + ) + +29  + #__cڡt_be16_to_u +( +x + + `___cڡt_swab16 +(( +__u16 +)( +__be16 +)(x)) + + ) + +30  + #__u_to_64 +( +x +(( +__64 +)( +__u64 +)(x)) + + ) + +31  + #__64_to_u +( +x +(( +__u64 +)( +__64 +)(x)) + + ) + +32  + #__u_to_32 +( +x +(( +__32 +)( +__u32 +)(x)) + + ) + +33  + #__32_to_u +( +x +(( +__u32 +)( +__32 +)(x)) + + ) + +34  + #__u_to_16 +( +x +(( +__16 +)( +__u16 +)(x)) + + ) + +35  + #__16_to_u +( +x +(( +__u16 +)( +__16 +)(x)) + + ) + +36  + #__u_to_be64 +( +x +(( +__be64 +) + `__swab64 +((x))) + + ) + +37  + #__be64_to_u +( +x + + `__swab64 +(( +__u64 +)( +__be64 +)(x)) + + ) + +38  + #__u_to_be32 +( +x +(( +__be32 +) + `__swab32 +((x))) + + ) + +39  + #__be32_to_u +( +x + + `__swab32 +(( +__u32 +)( +__be32 +)(x)) + + ) + +40  + #__u_to_be16 +( +x +(( +__be16 +) + `__swab16 +((x))) + + ) + +41  + #__be16_to_u +( +x + + `__swab16 +(( +__u16 +)( +__be16 +)(x)) + + ) + +43  +__ways_le + +__64 + + $__u_to_64p +(cڡ +__u64 + * +p +) + +45  ( +__64 +)* +p +; + +46 + } +} + +47  +__ways_le + +__u64 + + $__64_to_up +(cڡ +__64 + * +p +) + +49  ( +__u64 +)* +p +; + +50 + } +} + +51  +__ways_le + +__32 + + $__u_to_32p +(cڡ +__u32 + * +p +) + +53  ( +__32 +)* +p +; + +54 + } +} + +55  +__ways_le + +__u32 + + $__32_to_up +(cڡ +__32 + * +p +) + +57  ( +__u32 +)* +p +; + +58 + } +} + +59  +__ways_le + +__16 + + $__u_to_16p +(cڡ +__u16 + * +p +) + +61  ( +__16 +)* +p +; + +62 + } +} + +63  +__ways_le + +__u16 + + $__16_to_up +(cڡ +__16 + * +p +) + +65  ( +__u16 +)* +p +; + +66 + } +} + +67  +__ways_le + +__be64 + + $__u_to_be64p +(cڡ +__u64 + * +p +) + +69  ( +__be64 +) + `__swab64p +( +p +); + +70 + } +} + +71  +__ways_le + +__u64 + + $__be64_to_up +(cڡ +__be64 + * +p +) + +73  + `__swab64p +(( +__u64 + *) +p +); + +74 + } +} + +75  +__ways_le + +__be32 + + $__u_to_be32p +(cڡ +__u32 + * +p +) + +77  ( +__be32 +) + `__swab32p +( +p +); + +78 + } +} + +79  +__ways_le + +__u32 + + $__be32_to_up +(cڡ +__be32 + * +p +) + +81  + `__swab32p +(( +__u32 + *) +p +); + +82 + } +} + +83  +__ways_le + +__be16 + + $__u_to_be16p +(cڡ +__u16 + * +p +) + +85  ( +__be16 +) + `__swab16p +( +p +); + +86 + } +} + +87  +__ways_le + +__u16 + + $__be16_to_up +(cڡ +__be16 + * +p +) + +89  + `__swab16p +(( +__u16 + *) +p +); + +90 + } +} + +91  + #__u_to_64s +( +x +d{ ()(x); } 0) + + ) + +92  + #__64_to_us +( +x +d{ ()(x); } 0) + + ) + +93  + #__u_to_32s +( +x +d{ ()(x); } 0) + + ) + +94  + #__32_to_us +( +x +d{ ()(x); } 0) + + ) + +95  + #__u_to_16s +( +x +d{ ()(x); } 0) + + ) + +96  + #__16_to_us +( +x +d{ ()(x); } 0) + + ) + +97  + #__u_to_be64s +( +x + + `__swab64s +((x)) + + ) + +98  + #__be64_to_us +( +x + + `__swab64s +((x)) + + ) + +99  + #__u_to_be32s +( +x + + `__swab32s +((x)) + + ) + +100  + #__be32_to_us +( +x + + `__swab32s +((x)) + + ) + +101  + #__u_to_be16s +( +x + + `__swab16s +((x)) + + ) + +102  + #__be16_to_us +( +x + + `__swab16s +((x)) + + ) + + @/usr/include/linux/stddef.h + +3 #ide +__ways_le + + +4  + #__ways_le + +__le__ + + + ) + + @/usr/include/stdc-predef.h + +18 #idef +_STDC_PREDEF_H + + +19  + #_STDC_PREDEF_H + 1 + + ) + +36 #ifde +__GCC_IEC_559 + + +37 #i +__GCC_IEC_559 + > 0 + +38  + #__STDC_IEC_559__ + 1 + + ) + +41  + #__STDC_IEC_559__ + 1 + + ) + +44 #ifde +__GCC_IEC_559_COMPLEX + + +45 #i +__GCC_IEC_559_COMPLEX + > 0 + +46  + #__STDC_IEC_559_COMPLEX__ + 1 + + ) + +49  + #__STDC_IEC_559_COMPLEX__ + 1 + + ) + +55  + #__STDC_ISO_10646__ + 201505L + + ) + +58  + #__STDC_NO_THREADS__ + 1 + + ) + + @/usr/include/sys/cdefs.h + +18 #idef +_SYS_CDEFS_H + + +19  + #_SYS_CDEFS_H + 1 + + ) + +22 #ide +_FEATURES_H + + +23  + ~ + +29 #i +defed + +__GNUC__ + && !defed +__STDC__ + + +34 #unde +__P + + +35 #unde +__PMT + + +37 #ifde +__GNUC__ + + +41 #i +__GNUC_PREREQ + (4, 6&& ! +defed + +_LIBC + + +42  + #__LEAF + , +__af__ + + + ) + +43  + #__LEAF_ATTR + + `__ibu__ + (( +__af__ +)) + + ) + +45  + #__LEAF + + + ) + +46  + #__LEAF_ATTR + + + ) + +54 #i! +defed + +__lulus + && +__GNUC_PREREQ + (3, 3) + +55  + #__THROW + + `__ibu__ + (( +__nhrow__ + +__LEAF +)) + + ) + +56  + #__THROWNL + + `__ibu__ + (( +__nhrow__ +)) + + ) + +57  + #__NTH +( +f + + `__ibu__ + (( +__nhrow__ + +__LEAF +) + ) +fct + +59 #i +defed + +__lulus + && +__GNUC_PREREQ + (2,8) + +60  + #__THROW + + `throw + () + + ) + +61  + #__THROWNL + + `throw + () + + ) + +62  + #__NTH +( +f + +__LEAF_ATTR + f + `throw + () + + ) + +64  + #__THROW + + + ) + +65  + #__THROWNL + + + ) + +66  + #__NTH +( +f + + ) +fct + +72  + #__le + + + ) + +74  + #__THROW + + + ) + +75  + #__THROWNL + + + ) + +76  + #__NTH +( +f + + ) +fct + +82  + #__P +( +gs + + ) +args + +83  + #__PMT +( +gs + + ) +args + +88  + #__CONCAT +( +x +, +y +x ## + ) +y + +89  + #__STRING +( +x +#x + + ) + +92  + #__r_t + * + + ) + +93  + #__lg_doub_t +  + + ) + +97 #ifdef +__lulus + + +98  + #__BEGIN_DECLS + "C" { + + ) + +99  + #__END_DECLS + } + + ) + +101  + #__BEGIN_DECLS + + + ) + +102  + #__END_DECLS + + + ) + +111 #i +defed + +__lulus + && defed +_GLIBCPP_USE_NAMESPACES + + +112  + #__BEGIN_NAMESPACE_STD + +mea + +d + { + + ) + +113  + #__END_NAMESPACE_STD + } + + ) + +114  + #__USING_NAMESPACE_STD +( +me + +usg + +d +::me; + + ) + +115  + #__BEGIN_NAMESPACE_C99 + +mea + +__c99 + { + + ) + +116  + #__END_NAMESPACE_C99 + } + + ) + +117  + #__USING_NAMESPACE_C99 +( +me + +usg + +__c99 +::me; + + ) + +122  + #__BEGIN_NAMESPACE_STD + + + ) + +123  + #__END_NAMESPACE_STD + + + ) + +124  + #__USING_NAMESPACE_STD +( +me +) + + ) + +125  + #__BEGIN_NAMESPACE_C99 + + + ) + +126  + #__END_NAMESPACE_C99 + + + ) + +127  + #__USING_NAMESPACE_C99 +( +me +) + + ) + +132  + #__bos +( +r + + `__but_obje_size + (r, +__USE_FORTIFY_LEVEL + > 1) + + ) + +133  + #__bos0 +( +r + + `__but_obje_size + (r, 0) + + ) + +135 #i +__GNUC_PREREQ + (4,3) + +136  + #__wnde +( +me +, +msg +) \ + +137  + `me + ( + `__ibu__ +(( + `__wng__ + ( +msg +))) + + ) + +138  + #__wljr +( +msg + + `__ibu__ +(( + `__wng__ + (msg))) + + ) + +139  + #__rde +( +me +, +msg +) \ + +140  + `me + ( + `__ibu__ +(( + `__r__ + ( +msg +))) + + ) + +142  + #__wnde +( +me +, +msg +  + `me + () + + ) + +143  + #__wljr +( +msg +) + + ) + +144  + #__rde +( +me +, +msg +  + `me + () + + ) + +148 #i +__GNUC_PREREQ + (2,97) + +150  + #__exr + [] + + ) + +152 #ifde +__GNUC__ + + +153  + #__exr + [0] + + ) + +155 #i +defed + +__STDC_VERSION__ + && __STDC_VERSION__ >= 199901L + +156  + #__exr + [] + + ) + +159  + #__exr + [1] + + ) + +175 #i +defed + +__GNUC__ + && __GNUC__ >= 2 + +177  + #__REDIRECT +( +me +, +o +, +s +m + `__asm__ + ( + `__ASMNAME + (#s)) + + ) + +178 #ifde +__lulus + + +179  + #__REDIRECT_NTH +( +me +, +o +, +s +) \ + +180 +me + +o + +__THROW + + `__asm__ + ( + `__ASMNAME + (#s)) + + ) + +181  + #__REDIRECT_NTHNL +( +me +, +o +, +s +) \ + +182 +me + +o + +__THROWNL + + `__asm__ + ( + `__ASMNAME + (#s)) + + ) + +184  + #__REDIRECT_NTH +( +me +, +o +, +s +) \ + +185 +me + +o + + `__asm__ + ( + `__ASMNAME + (#s) +__THROW + + + ) + +186  + #__REDIRECT_NTHNL +( +me +, +o +, +s +) \ + +187 +me + +o + + `__asm__ + ( + `__ASMNAME + (#s) +__THROWNL + + + ) + +189  + #__ASMNAME +( +ame + + `__ASMNAME2 + ( +__USER_LABEL_PREFIX__ +, cme) + + ) + +190  + #__ASMNAME2 +( +efix +, +ame + + `__STRING + (efix + ) +cname + +203 #i! +defed + +__GNUC__ + || __GNUC__ < 2 + +204  + #__ibu__ +( +xyz + + + ) + +210 #i +__GNUC_PREREQ + (2,96) + +211  + #__ibu_mloc__ + + `__ibu__ + (( +__mloc__ +)) + + ) + +213  + #__ibu_mloc__ + + + ) + +218 #i +__GNUC_PREREQ + (4, 3) + +219  + #__ibu_loc_size__ +( +ms +) \ + +220 + `__ibu__ + (( +__loc_size__ + +ms +)) + + ) + +222  + #__ibu_loc_size__ +( +ms + + + ) + +228 #i +__GNUC_PREREQ + (2,96) + +229  + #__ibu_pu__ + + `__ibu__ + (( +__pu__ +)) + + ) + +231  + #__ibu_pu__ + + + ) + +235 #i +__GNUC_PREREQ + (2,5) + +236  + #__ibu_cڡ__ + + `__ibu__ + (( +__cڡ__ +)) + + ) + +238  + #__ibu_cڡ__ + + + ) + +244 #i +__GNUC_PREREQ + (3,1) + +245  + #__ibu_ud__ + + `__ibu__ + (( +__ud__ +)) + + ) + +246  + #__ibu_nole__ + + `__ibu__ + (( +__nole__ +)) + + ) + +248  + #__ibu_ud__ + + `__ibu__ + (( +__unud__ +)) + + ) + +249  + #__ibu_nole__ + + + ) + +253 #i +__GNUC_PREREQ + (3,2) + +254  + #__ibu_dd__ + + `__ibu__ + (( +__dd__ +)) + + ) + +256  + #__ibu_dd__ + + + ) + +265 #i +__GNUC_PREREQ + (2,8) + +266  + #__ibu_fm_g__ +( +x + + `__ibu__ + (( + `__fm_g__ + (x))) + + ) + +268  + #__ibu_fm_g__ +( +x + + + ) + +275 #i +__GNUC_PREREQ + (2,97) + +276  + #__ibu_fm_rfm__ +( +a +, +b +) \ + +277 + `__ibu__ + (( + `__fm__ + ( +__rfm__ +, +a +, +b +))) + + ) + +279  + #__ibu_fm_rfm__ +( +a +, +b + + + ) + +284 #i +__GNUC_PREREQ + (3,3) + +285  + #__nnu +( +ms + + `__ibu__ + (( +__nnu__ +ams)) + + ) + +287  + #__nnu +( +ms +) + + ) + +292 #i +__GNUC_PREREQ + (3,4) + +293  + #__ibu_wn_unud_su__ + \ + +294 + `__ibu__ + (( +__wn_unud_su__ +)) + + ) + +295 #i +__USE_FORTIFY_LEVEL + > 0 + +296  + #__wur + +__ibu_wn_unud_su__ + + + ) + +299  + #__ibu_wn_unud_su__ + + + ) + +301 #ide +__wur + + +302  + #__wur + + + ) + +306 #i +__GNUC_PREREQ + (3,2) + +307  + #__ways_le + +__le + + `__ibu__ + (( +__ways_le__ +)) + + ) + +309  + #__ways_le + +__le + + + ) + +314 #i +__GNUC_PREREQ + (4,3) + +315  + #__ibu_tificl__ + + `__ibu__ + (( +__tificl__ +)) + + ) + +317  + #__ibu_tificl__ + + + ) + +329 #i(! +defed + +__lulus + || +__GNUC_PREREQ + (4,3) \ + +330 || ( +defed + +__g__ + && (defed +__GNUC_STDC_INLINE__ + \ + +331 || +defed + +__GNUC_GNU_INLINE__ +))) + +332 #i +defed + +__GNUC_STDC_INLINE__ + || defed +__lulus + + +333  + #__ex_le + +__le + + `__ibu__ + (( +__gnu_le__ +)) + + ) + +334  + #__ex_ways_le + \ + +335 +__ways_le + + `__ibu__ + (( +__gnu_le__ +)) + + ) + +337  + #__ex_le + +__le + + + ) + +338  + #__ex_ways_le + +__ways_le + + + ) + +342 #ifde +__ex_ways_le + + +343  + #__ftify_funi + +__ex_ways_le + +__ibu_tificl__ + + + ) + +348 #i +__GNUC_PREREQ + (4,3) + +349  + #__va_g_ck +( + `__but_va_g_ck + () + + ) + +350  + #__va_g_ck_n +( + `__but_va_g_ck_n + () + + ) + +357 #i! +__GNUC_PREREQ + (2,8) + +358  + #__exnsi__ + + + ) + +362 #i! +__GNUC_PREREQ + (2,92) + +363  + #__ri + + + ) + +369 #i +__GNUC_PREREQ + (3,1&& ! +defed + +__GNUG__ + + +370  + #__ri_r + +__ri + + + ) + +372 #ifde +__GNUC__ + + +373  + #__ri_r + + + ) + +375 #i +defed + +__STDC_VERSION__ + && __STDC_VERSION__ >= 199901L + +376  + #__ri_r + +ri + + + ) + +379  + #__ri_r + + + ) + +384 #i +__GNUC__ + >= 3 + +385  + #__glibc_uiky +( +cd + + `__but_ex + ((cd), 0) + + ) + +386  + #__glibc_liky +( +cd + + `__but_ex + ((cd), 1) + + ) + +388  + #__glibc_uiky +( +cd +(cd) + + ) + +389  + #__glibc_liky +( +cd +(cd) + + ) + +392 #i(! +defed + +_Nܑu + \ + +393 && ( +defed + +__STDC_VERSION__ + ? __STDC_VERSION__ : 0) < 201112 \ + +394 && ! + $__GNUC_PREREQ + (4,7)) + +395 #i + `__GNUC_PREREQ + (2,8) + +396  + #_Nܑu + + `__ibu__ + (( +__nܑu__ +)) + + ) + +398  + #_Nܑu + + + ) + +402 #i(! +defed + +_Stic_as + && !defed +__lulus + \ + +403 && ( +defed + +__STDC_VERSION__ + ? __STDC_VERSION__ : 0) < 201112 \ + +404 && (! + `__GNUC_PREREQ + (4, 6|| +defed + +__STRICT_ANSI__ +)) + +405  + #_Stic_as +( +ex +, +dgnoic +) \ + +406 (* + `__Stic_as_funi + ()) \ + +407 [!! (ru {  +__r_if_give +: ( +ex +? 2 : -1; })] + + ) + +410  + ~ + +412 #i +defed + +__LONG_DOUBLE_MATH_OPTIONAL + && defed +__NO_LONG_DOUBLE_MATH + + +413  + #__LDBL_COMPAT + 1 + + ) + +414 #ifde +__REDIRECT + + +415  + #__LDBL_REDIR1 +( +me +, +o +, +s + + `__REDIRECT + (me,ro,ls) + + ) + +416  + #__LDBL_REDIR +( +me +, +o +) \ + +417 + `__LDBL_REDIR1 + ( +me +, +o +, +__dbl_ +##me) + + ) + +418  + #__LDBL_REDIR1_NTH +( +me +, +o +, +s + + `__REDIRECT_NTH + (me,ro,ls) + + ) + +419  + #__LDBL_REDIR_NTH +( +me +, +o +) \ + +420 + `__LDBL_REDIR1_NTH + ( +me +, +o +, +__dbl_ +##me) + + ) + +421  + #__LDBL_REDIR1_DECL +( +me +, +s +) \ + +422 + `__tyof + ( +me +m + `__asm + ( + `__ASMNAME + (#s)); + + ) + +423  + #__LDBL_REDIR_DECL +( +me +) \ + +424 + `__tyof + ( +me +m + `__asm + ( + `__ASMNAME + ("__dbl_" #me)); + + ) + +425  + #__REDIRECT_LDBL +( +me +, +o +, +s +) \ + +426 + `__LDBL_REDIR1 + ( +me +, +o +, +__dbl_ +## +s +) + + ) + +427  + #__REDIRECT_NTH_LDBL +( +me +, +o +, +s +) \ + +428 + `__LDBL_REDIR1_NTH + ( +me +, +o +, +__dbl_ +## +s +) + + ) + +431 #i! +defed + +__LDBL_COMPAT + || !defed +__REDIRECT + + +432  + #__LDBL_REDIR1 +( +me +, +o +, +s +m + ) +proto + +433  + #__LDBL_REDIR +( +me +, +o +m + ) +proto + +434  + #__LDBL_REDIR1_NTH +( +me +, +o +, +s +m +__THROW + + + ) + +435  + #__LDBL_REDIR_NTH +( +me +, +o +m +__THROW + + + ) + +436  + #__LDBL_REDIR_DECL +( +me +) + + ) + +437 #ifde +__REDIRECT + + +438  + #__REDIRECT_LDBL +( +me +, +o +, +s + + `__REDIRECT + (me,ro,ls) + + ) + +439  + #__REDIRECT_NTH_LDBL +( +me +, +o +, +s +) \ + +440 + `__REDIRECT_NTH + ( +me +, +o +, +s +) + + ) + + @/usr/include/asm-generic/int-ll64.h + +8 #ide +_ASM_GENERIC_INT_LL64_H + + +9  + #_ASM_GENERIC_INT_LL64_H + + + ) + +11  + ~ + +13 #ide +__ASSEMBLY__ + + +19  +__sigd__ +  + t__s8 +; + +20  + t__u8 +; + +22  +__sigd__ +  + t__s16 +; + +23  + t__u16 +; + +25  +__sigd__ +  + t__s32 +; + +26  + t__u32 +; + +28 #ifde +__GNUC__ + + +29 +__exnsi__ +  +__sigd__ +  + t__s64 +; + +30 +__exnsi__ +  + t__u64 +; + +32  +__sigd__ +  + t__s64 +; + +33  + t__u64 +; + + @/usr/include/asm/posix_types_32.h + +1 #ide +_ASM_X86_POSIX_TYPES_32_H + + +2  + #_ASM_X86_POSIX_TYPES_32_H + + + ) + +10  + t__kl_mode_t +; + +11  + #__kl_mode_t + +__kl_mode_t + + + ) + +13  + t__kl_c_pid_t +; + +14  + #__kl_c_pid_t + +__kl_c_pid_t + + + ) + +16  + t__kl_uid_t +; + +17  + t__kl_gid_t +; + +18  + #__kl_uid_t + +__kl_uid_t + + + ) + +20  + t__kl_d_dev_t +; + +21  + #__kl_d_dev_t + +__kl_d_dev_t + + + ) + +23  + ~ + + @/usr/include/asm/posix_types_64.h + +1 #ide +_ASM_X86_POSIX_TYPES_64_H + + +2  + #_ASM_X86_POSIX_TYPES_64_H + + + ) + +10  + t__kl_d_uid_t +; + +11  + t__kl_d_gid_t +; + +12  + #__kl_d_uid_t + +__kl_d_uid_t + + + ) + +14  + t__kl_d_dev_t +; + +15  + #__kl_d_dev_t + +__kl_d_dev_t + + + ) + +17  + ~ + + @/usr/include/asm/posix_types_x32.h + +1 #ide +_ASM_X86_POSIX_TYPES_X32_H + + +2  + #_ASM_X86_POSIX_TYPES_X32_H + + + ) + +13  + t__kl_lg_t +; + +14  + t__kl_ulg_t +; + +15  + #__kl_lg_t + +__kl_lg_t + + + ) + +17  + ~ + + @/usr/include/gnu/stubs-32.h + +6 #ifde +_LIBC + + +7 #r +Alitis + +may + +n + +defe + +the + +mao + +_LIBC + + +10  + #__ub_chags + + + ) + +11  + #__ub_ach + + + ) + +12  + #__ub_fchags + + + ) + +13  + #__ub_fdach + + + ) + +14  + #__ub_gy + + + ) + +15  + #__ub_lchmod + + + ) + +16  + #__ub_voke + + + ) + +17  + #__ub_og + + + ) + +18  + #__ub_sigtu + + + ) + +19  + #__ub_sk + + + ) + +20  + #__ub_ty + + + ) + + @/usr/include/gnu/stubs-64.h + +6 #ifde +_LIBC + + +7 #r +Alitis + +may + +n + +defe + +the + +mao + +_LIBC + + +10  + #__ub___comt_bdush + + + ) + +11  + #__ub_chags + + + ) + +12  + #__ub_ach + + + ) + +13  + #__ub_fchags + + + ) + +14  + #__ub_fdach + + + ) + +15  + #__ub_gmsg + + + ) + +16  + #__ub_gy + + + ) + +17  + #__ub_lchmod + + + ) + +18  + #__ub_putmsg + + + ) + +19  + #__ub_voke + + + ) + +20  + #__ub_og + + + ) + +21  + #__ub_sigtu + + + ) + +22  + #__ub_sk + + + ) + +23  + #__ub_ty + + + ) + + @/usr/include/linux/swab.h + +1 #ide +_LINUX_SWAB_H + + +2  + #_LINUX_SWAB_H + + + ) + +4  + ~ + +6  + ~ + +12  + #___cڡt_swab16 +( +x +(( +__u16 +)( \ + +13 ((( +__u16 +)( +x +) & (__u16)0x00ffU) << 8) | \ + +14 ((( +__u16 +)( +x +& (__u16)0xff00U>> 8))) + + ) + +16  + #___cڡt_swab32 +( +x +(( +__u32 +)( \ + +17 ((( +__u32 +)( +x +) & (__u32)0x000000ffUL) << 24) | \ + +18 ((( +__u32 +)( +x +) & (__u32)0x0000ff00UL) << 8) | \ + +19 ((( +__u32 +)( +x +) & (__u32)0x00ff0000UL) >> 8) | \ + +20 ((( +__u32 +)( +x +& (__u32)0xff000000UL>> 24))) + + ) + +22  + #___cڡt_swab64 +( +x +(( +__u64 +)( \ + +23 ((( +__u64 +)( +x +) & (__u64)0x00000000000000ffULL) << 56) | \ + +24 ((( +__u64 +)( +x +) & (__u64)0x000000000000ff00ULL) << 40) | \ + +25 ((( +__u64 +)( +x +) & (__u64)0x0000000000ff0000ULL) << 24) | \ + +26 ((( +__u64 +)( +x +) & (__u64)0x00000000ff000000ULL) << 8) | \ + +27 ((( +__u64 +)( +x +) & (__u64)0x000000ff00000000ULL) >> 8) | \ + +28 ((( +__u64 +)( +x +) & (__u64)0x0000ff0000000000ULL) >> 24) | \ + +29 ((( +__u64 +)( +x +) & (__u64)0x00ff000000000000ULL) >> 40) | \ + +30 ((( +__u64 +)( +x +& (__u64)0xff00000000000000ULL>> 56))) + + ) + +32  + #___cڡt_swahw32 +( +x +(( +__u32 +)( \ + +33 ((( +__u32 +)( +x +) & (__u32)0x0000ffffUL) << 16) | \ + +34 ((( +__u32 +)( +x +& (__u32)0xffff0000UL>> 16))) + + ) + +36  + #___cڡt_swahb32 +( +x +(( +__u32 +)( \ + +37 ((( +__u32 +)( +x +) & (__u32)0x00ff00ffUL) << 8) | \ + +38 ((( +__u32 +)( +x +& (__u32)0xff00ff00UL>> 8))) + + ) + +46  +__le__ + +__u16 + + $__fswab16 +( +__u16 + +v +) + +48 #i + `defed + ( +__ch_swab16 +) + +49  + `__ch_swab16 +( +v +); + +51  + `___cڡt_swab16 +( +v +); + +53 + } +} + +55  +__le__ + +__u32 + + $__fswab32 +( +__u32 + +v +) + +57 #i + `defed +( +__ch_swab32 +) + +58  + `__ch_swab32 +( +v +); + +60  + `___cڡt_swab32 +( +v +); + +62 + } +} + +64  +__le__ + +__u64 + + $__fswab64 +( +__u64 + +v +) + +66 #i + `defed + ( +__ch_swab64 +) + +67  + `__ch_swab64 +( +v +); + +68 #i + `defed +( +__SWAB_64_THRU_32__ +) + +69 +__u32 + +h + = +v + >> 32; + +70 +__u32 + +l + = +v + & ((1ULL << 32) - 1); + +71  ((( +__u64 +) + `__fswab32 +( +l +)<< 32| ((__u64)(__fswab32( +h +))); + +73  + `___cڡt_swab64 +( +v +); + +75 + } +} + +77  +__le__ + +__u32 + + $__fswahw32 +( +__u32 + +v +) + +79 #ifde +__ch_swahw32 + + +80  + `__ch_swahw32 +( +v +); + +82  + `___cڡt_swahw32 +( +v +); + +84 + } +} + +86  +__le__ + +__u32 + + $__fswahb32 +( +__u32 + +v +) + +88 #ifde +__ch_swahb32 + + +89  + `__ch_swahb32 +( +v +); + +91  + `___cڡt_swahb32 +( +v +); + +93 + } +} + +99 #ifde +__HAVE_BUILTIN_BSWAP16__ + + +100  + #__swab16 +( +x +( +__u16 +) + `__but_bsw16 +((__u16)(x)) + + ) + +102  + #__swab16 +( +x +) \ + +103 ( + `__but_cڡt_p +(( +__u16 +)( +x +)) ? \ + +104 + `___cڡt_swab16 +( +x +) : \ + +105 + `__fswab16 +( +x +)) + + ) + +112 #ifde +__HAVE_BUILTIN_BSWAP32__ + + +113  + #__swab32 +( +x +( +__u32 +) + `__but_bsw32 +((__u32)(x)) + + ) + +115  + #__swab32 +( +x +) \ + +116 ( + `__but_cڡt_p +(( +__u32 +)( +x +)) ? \ + +117 + `___cڡt_swab32 +( +x +) : \ + +118 + `__fswab32 +( +x +)) + + ) + +125 #ifde +__HAVE_BUILTIN_BSWAP64__ + + +126  + #__swab64 +( +x +( +__u64 +) + `__but_bsw64 +((__u64)(x)) + + ) + +128  + #__swab64 +( +x +) \ + +129 ( + `__but_cڡt_p +(( +__u64 +)( +x +)) ? \ + +130 + `___cڡt_swab64 +( +x +) : \ + +131 + `__fswab64 +( +x +)) + + ) + +140  + #__swahw32 +( +x +) \ + +141 ( + `__but_cڡt_p +(( +__u32 +)( +x +)) ? \ + +142 + `___cڡt_swahw32 +( +x +) : \ + +143 + `__fswahw32 +( +x +)) + + ) + +151  + #__swahb32 +( +x +) \ + +152 ( + `__but_cڡt_p +(( +__u32 +)( +x +)) ? \ + +153 + `___cڡt_swahb32 +( +x +) : \ + +154 + `__fswahb32 +( +x +)) + + ) + +160  +__ways_le + +__u16 + + $__swab16p +(cڡ +__u16 + * +p +) + +162 #ifde +__ch_swab16p + + +163  + `__ch_swab16p +( +p +); + +165  + `__swab16 +(* +p +); + +167 + } +} + +173  +__ways_le + +__u32 + + $__swab32p +(cڡ +__u32 + * +p +) + +175 #ifde +__ch_swab32p + + +176  + `__ch_swab32p +( +p +); + +178  + `__swab32 +(* +p +); + +180 + } +} + +186  +__ways_le + +__u64 + + $__swab64p +(cڡ +__u64 + * +p +) + +188 #ifde +__ch_swab64p + + +189  + `__ch_swab64p +( +p +); + +191  + `__swab64 +(* +p +); + +193 + } +} + +201  +__le__ + +__u32 + + $__swahw32p +(cڡ +__u32 + * +p +) + +203 #ifde +__ch_swahw32p + + +204  + `__ch_swahw32p +( +p +); + +206  + `__swahw32 +(* +p +); + +208 + } +} + +216  +__le__ + +__u32 + + $__swahb32p +(cڡ +__u32 + * +p +) + +218 #ifde +__ch_swahb32p + + +219  + `__ch_swahb32p +( +p +); + +221  + `__swahb32 +(* +p +); + +223 + } +} + +229  +__le__ +  + $__swab16s +( +__u16 + * +p +) + +231 #ifde +__ch_swab16s + + +232 + `__ch_swab16s +( +p +); + +234 * +p + = + `__swab16p +(p); + +236 + } +} + +241  +__ways_le +  + $__swab32s +( +__u32 + * +p +) + +243 #ifde +__ch_swab32s + + +244 + `__ch_swab32s +( +p +); + +246 * +p + = + `__swab32p +(p); + +248 + } +} + +254  +__ways_le +  + $__swab64s +( +__u64 + * +p +) + +256 #ifde +__ch_swab64s + + +257 + `__ch_swab64s +( +p +); + +259 * +p + = + `__swab64p +(p); + +261 + } +} + +269  +__le__ +  + $__swahw32s +( +__u32 + * +p +) + +271 #ifde +__ch_swahw32s + + +272 + `__ch_swahw32s +( +p +); + +274 * +p + = + `__swahw32p +(p); + +276 + } +} + +284  +__le__ +  + $__swahb32s +( +__u32 + * +p +) + +286 #ifde +__ch_swahb32s + + +287 + `__ch_swahb32s +( +p +); + +289 * +p + = + `__swahb32p +(p); + +291 + } +} + + @/usr/include/asm-generic/posix_types.h + +1 #ide +__ASM_GENERIC_POSIX_TYPES_H + + +2  + #__ASM_GENERIC_POSIX_TYPES_H + + + ) + +4  + ~ + +13 #ide +__kl_lg_t + + +14  + t__kl_lg_t +; + +15  + t__kl_ulg_t +; + +18 #ide +__kl_o_t + + +19  +__kl_ulg_t + + t__kl_o_t +; + +22 #ide +__kl_mode_t + + +23  + t__kl_mode_t +; + +26 #ide +__kl_pid_t + + +27  + t__kl_pid_t +; + +30 #ide +__kl_c_pid_t + + +31  + t__kl_c_pid_t +; + +34 #ide +__kl_uid_t + + +35  + t__kl_uid_t +; + +36  + t__kl_gid_t +; + +39 #ide +__kl_sucds_t + + +40  +__kl_lg_t + + t__kl_sucds_t +; + +43 #ide +__kl_daddr_t + + +44  + t__kl_daddr_t +; + +47 #ide +__kl_uid32_t + + +48  + t__kl_uid32_t +; + +49  + t__kl_gid32_t +; + +52 #ide +__kl_d_uid_t + + +53  +__kl_uid_t + + t__kl_d_uid_t +; + +54  +__kl_gid_t + + t__kl_d_gid_t +; + +57 #ide +__kl_d_dev_t + + +58  + t__kl_d_dev_t +; + +65 #ide +__kl_size_t + + +66 #i +__BITS_PER_LONG + != 64 + +67  + t__kl_size_t +; + +68  + t__kl_ssize_t +; + +69  + t__kl_rdiff_t +; + +71  +__kl_ulg_t + + t__kl_size_t +; + +72  +__kl_lg_t + + t__kl_ssize_t +; + +73  +__kl_lg_t + + t__kl_rdiff_t +; + +77 #ide +__kl_fsid_t + + +79  + mv +[2]; + +80 } + t__kl_fsid_t +; + +86  +__kl_lg_t + + t__kl_off_t +; + +87  + t__kl_loff_t +; + +88  +__kl_lg_t + + t__kl_time_t +; + +89  +__kl_lg_t + + t__kl_ock_t +; + +90  + t__kl_tim_t +; + +91  + t__kl_ockid_t +; + +92 * + t__kl_ddr_t +; + +93  + t__kl_uid16_t +; + +94  + t__kl_gid16_t +; + + @/usr/include/asm/bitsperlong.h + +1 #ide +__ASM_X86_BITSPERLONG_H + + +2  + #__ASM_X86_BITSPERLONG_H + + + ) + +4 #i +defed +( +__x86_64__ +&& !defed( +__ILP32__ +) + +5  + #__BITS_PER_LONG + 64 + + ) + +7  + #__BITS_PER_LONG + 32 + + ) + +10  + ~ + + @/usr/include/asm/swab.h + +1 #ide +_ASM_X86_SWAB_H + + +2  + #_ASM_X86_SWAB_H + + + ) + +4  + ~ + +7  +__le__ + +__u32 + + $__ch_swab32 +( +__u32 + +v +) + +9 + `__asm__ +("bsw%0" : "" ( +v +) : "0" (val)); + +10  +v +; + +11 + } +} + +12  + #__ch_swab32 + +__ch_swab32 + + + ) + +14  +__le__ + +__u64 + + $__ch_swab64 +( +__u64 + +v +) + +16 #ifde +__i386__ + + +19 +__u32 + +a +; + +20 +__u32 + +b +; + +21 } +s +; + +22 +__u64 + +u +; + +23 } +v +; + +24 +v +. +u + = +v +; + +25 + `__asm__ +("bswapl %0 ; bswapl %1 ; xchgl %0,%1" + +26 : "" ( +v +. +s +. +a +), "" (v.s. +b +) + +27 : "0" ( +v +. +s +. +a +), "1" (v.s. +b +)); + +28  +v +. +u +; + +30 + `__asm__ +("bswq %0" : "" ( +v +) : "0" (val)); + +31  +v +; + +33 + } +} + +34  + #__ch_swab64 + +__ch_swab64 + + + ) + + @/usr/include/asm-generic/bitsperlong.h + +1 #ide +__ASM_GENERIC_BITS_PER_LONG + + +2  + #__ASM_GENERIC_BITS_PER_LONG + + + ) + +11 #ide +__BITS_PER_LONG + + +12  + #__BITS_PER_LONG + 32 + + ) + + @ +1 +. +1 +/usr/include +95 +2475 +bonding.c +compat.c +driver.c +driverlink_ip.c +epoll_device.c +iscsi_support.c +linux_cplane.c +linux_efabcfg.c +linux_sock_ops.c +linux_stats.c +linux_trampoline.c +mmap.c +onload_internal.h +onload_kernel_compat.h +onloadfs.c +ossock_calls.c +pinbuf.c +ppc64_linux_trampoline.c +ppc64_linux_trampoline_internal.c +ppc64_linux_trampoline_internal.h +shmbuf.c +sigaction_calls.c +tcp_sendpage.c +terminate.c +x86_linux_trampoline.c +../linux_resource/kernel_compat.h +/usr/include/asm/msr.h +/usr/include/asm/unistd.h +/usr/include/linux/eventpoll.h +/usr/include/linux/fs.h +/usr/include/linux/if_addr.h +/usr/include/linux/if_arp.h +/usr/include/linux/kernel.h +/usr/include/linux/netdevice.h +/usr/include/linux/netfilter.h +/usr/include/linux/netfilter_arp.h +/usr/include/linux/netfilter_ipv4.h +/usr/include/linux/netlink.h +/usr/include/linux/rtnetlink.h +/usr/include/linux/times.h +/usr/include/linux/unistd.h +/usr/include/linux/version.h +/usr/include/asm/unistd_32.h +/usr/include/asm/unistd_64.h +/usr/include/asm/unistd_x32.h +/usr/include/limits.h +/usr/include/linux/fcntl.h +/usr/include/linux/if.h +/usr/include/linux/if_ether.h +/usr/include/linux/if_link.h +/usr/include/linux/if_packet.h +/usr/include/linux/in.h +/usr/include/linux/in6.h +/usr/include/linux/ioctl.h +/usr/include/linux/limits.h +/usr/include/linux/neighbour.h +/usr/include/linux/sched.h +/usr/include/linux/socket.h +/usr/include/linux/sysctl.h +/usr/include/linux/sysinfo.h +/usr/include/linux/types.h +/usr/include/asm/byteorder.h +/usr/include/asm/fcntl.h +/usr/include/asm/ioctl.h +/usr/include/asm/types.h +/usr/include/bits/posix1_lim.h +/usr/include/bits/posix2_lim.h +/usr/include/bits/wordsize.h +/usr/include/bits/xopen_lim.h +/usr/include/features.h +/usr/include/linux/hdlc/ioctl.h +/usr/include/linux/libc-compat.h +/usr/include/linux/posix_types.h +/usr/include/asm-generic/fcntl.h +/usr/include/asm-generic/ioctl.h +/usr/include/asm-generic/types.h +/usr/include/asm/posix_types.h +/usr/include/bits/local_lim.h +/usr/include/bits/stdio_lim.h +/usr/include/gnu/stubs.h +/usr/include/linux/byteorder/little_endian.h +/usr/include/linux/stddef.h +/usr/include/stdc-predef.h +/usr/include/sys/cdefs.h +/usr/include/asm-generic/int-ll64.h +/usr/include/asm/posix_types_32.h +/usr/include/asm/posix_types_64.h +/usr/include/asm/posix_types_x32.h +/usr/include/gnu/stubs-32.h +/usr/include/gnu/stubs-64.h +/usr/include/linux/swab.h +/usr/include/asm-generic/posix_types.h +/usr/include/asm/bitsperlong.h +/usr/include/asm/swab.h +/usr/include/asm-generic/bitsperlong.h diff --git a/src/driver/linux_onload/epoll_device.c b/src/driver/linux_onload/epoll_device.c index 85ce16d..7791530 100644 --- a/src/driver/linux_onload/epoll_device.c +++ b/src/driver/linux_onload/epoll_device.c @@ -558,7 +558,8 @@ static int oo_epoll2_action(struct oo_epoll_private *priv, memcpy(¤t->saved_sigmask, &sigsaved, sizeof(sigsaved)); /* Must check for both symbols: see def'n of EFRM_HAVE_SET_RESTORE_SIGMASK. */ #if defined(HAVE_SET_RESTORE_SIGMASK) || \ - defined(EFRM_HAVE_SET_RESTORE_SIGMASK) + defined(EFRM_HAVE_SET_RESTORE_SIGMASK) || \ + defined(EFRM_HAVE_SET_RESTORE_SIGMASK1) set_restore_sigmask(); #else set_thread_flag(TIF_RESTORE_SIGMASK); @@ -681,12 +682,16 @@ static int oo_epoll1_mmap(struct oo_epoll1_private* priv, goto fail1; } priv->os_file = fget(priv->sh->epfd); + if( priv->os_file == NULL ) { + rc = -EINVAL; + goto fail2; + } /* Map memory to user */ if( remap_pfn_range(vma, vma->vm_start, page_to_pfn(priv->page), PAGE_SIZE, vma->vm_page_prot) < 0) { rc = -EIO; - goto fail2; + goto fail3; } /* Install callback */ @@ -695,8 +700,9 @@ static int oo_epoll1_mmap(struct oo_epoll1_private* priv, return 0; -fail2: +fail3: fput(priv->os_file); +fail2: efab_linux_sys_close(priv->sh->epfd); fail1: priv->sh = NULL; @@ -913,11 +919,19 @@ static int oo_epoll1_block_on(struct file* home_filp, static int oo_epoll_move_fd(struct oo_epoll1_private* priv, int epoll_fd) { struct file* epoll_file = fget(epoll_fd); + + /* We expect that os_file is non-NULL, but we can't rely on it because + * we do not trust UL. In a "good" case, we just check that the new + * epoll_fd points to the same underlying os_file. In the "bad" case we + * just avoid crashing; misbehaving UL should be happy with any result + * from this ioctl. */ if( epoll_file != priv->os_file ) { - fput(epoll_file); + if( epoll_file != NULL ) + fput(epoll_file); return -EINVAL; } - fput(epoll_file); + if( epoll_file != NULL ) + fput(epoll_file); priv->sh->epfd = epoll_fd; return 0; @@ -1000,6 +1014,8 @@ static long oo_epoll_fop_unlocked_ioctl(struct file* filp, return -EFAULT; sock_file = fget(sock_fd); + if( sock_file == NULL ) + return -EINVAL; if( sock_file->f_op != &linux_tcp_helper_fops_udp && sock_file->f_op != &linux_tcp_helper_fops_tcp ) { fput(sock_file); @@ -1027,6 +1043,8 @@ static long oo_epoll_fop_unlocked_ioctl(struct file* filp, return -EFAULT; sock_file = fget(local_arg.sockfd); + if( sock_file == NULL ) + return -EINVAL; if( sock_file->f_op != &linux_tcp_helper_fops_udp && sock_file->f_op != &linux_tcp_helper_fops_tcp ) { fput(sock_file); @@ -1095,7 +1113,8 @@ static long oo_epoll_fop_unlocked_ioctl(struct file* filp, memcpy(¤t->saved_sigmask, &sigsaved, sizeof(sigsaved)); /* Must check for both symbols: see def'n of EFRM_HAVE_SET_RESTORE_SIGMASK. */ #if defined(HAVE_SET_RESTORE_SIGMASK) || \ - defined(EFRM_HAVE_SET_RESTORE_SIGMASK) + defined(EFRM_HAVE_SET_RESTORE_SIGMASK) || \ + defined(EFRM_HAVE_SET_RESTORE_SIGMASK1) set_restore_sigmask(); #else set_thread_flag(TIF_RESTORE_SIGMASK); diff --git a/src/driver/linux_onload/mmap.c b/src/driver/linux_onload/mmap.c index f939301..eb0580d 100644 --- a/src/driver/linux_onload/mmap.c +++ b/src/driver/linux_onload/mmap.c @@ -317,7 +317,14 @@ static struct page* vm_op_nopage(struct vm_area_struct* vma, } #ifndef EFRM_VMA_HAS_NOPAGE -static int vm_op_fault(struct vm_area_struct *vma, struct vm_fault *vmf) { +static int vm_op_fault( +#ifndef EFRM_HAVE_NEW_FAULT + struct vm_area_struct *vma, +#endif + struct vm_fault *vmf) { +#ifdef EFRM_HAVE_NEW_FAULT + struct vm_area_struct *vma = vmf->vma; +#endif struct page* page; page = vm_op_nopage(vma, VM_FAULT_ADDRESS(vmf), NULL); diff --git a/src/driver/linux_onload/onload_kernel_compat.h b/src/driver/linux_onload/onload_kernel_compat.h index c1092b1..0057ce2 100644 --- a/src/driver/linux_onload/onload_kernel_compat.h +++ b/src/driver/linux_onload/onload_kernel_compat.h @@ -20,6 +20,7 @@ #include #include #include +#include #ifndef current_fsuid #define current_fsuid() current->fsuid diff --git a/src/driver/linux_onload/ossock_calls.c b/src/driver/linux_onload/ossock_calls.c index 5120058..1a967b6 100644 --- a/src/driver/linux_onload/ossock_calls.c +++ b/src/driver/linux_onload/ossock_calls.c @@ -178,6 +178,7 @@ int efab_tcp_helper_handover(ci_private_t* priv, void *p_fd) struct file *oo_file = priv->_filp; int rc, line, in_epoll, new_fd; citp_waitable_obj* wobj; + ci_sock_cmn* sock; struct file* os_file; if( priv->fd_type != CI_PRIV_TYPE_TCP_EP && @@ -192,21 +193,16 @@ int efab_tcp_helper_handover(ci_private_t* priv, void *p_fd) goto unexpected_error; } - /* get locks */ - wobj = SP_TO_WAITABLE_OBJ(&priv->thr->netif, priv->sock_id); - rc = ci_netif_lock(&priv->thr->netif); - if( rc != 0 ) { - oo_os_sock_put(os_file); - return rc; - } + /* Caller must have taken the stack lock */ + ci_assert(ci_netif_is_locked(&priv->thr->netif)); + wobj = SP_TO_WAITABLE_OBJ(&priv->thr->netif, priv->sock_id); /* shut down fasync */ if( ep->fasync_queue ) fasync_helper(-1, oo_file, 0, &ep->fasync_queue); citp_waitable_cleanup(&priv->thr->netif, wobj, 0); efab_ep_handover_setup(priv, &in_epoll); - ci_netif_unlock(&priv->thr->netif); if( in_epoll ) { oo_os_sock_put(os_file); @@ -218,6 +214,10 @@ int efab_tcp_helper_handover(ci_private_t* priv, void *p_fd) if( rc != 0 ) return rc; + /* Remove SO_LINGER flag from the old ep: we want to close it silently */ + sock = SP_TO_SOCK(&priv->thr->netif, priv->sock_id); + sock->s_flags &=~ CI_SOCK_FLAG_LINGER; + *(ci_int32*) p_fd = new_fd; /* exit from ioctl drops the last reference to the onload file */ diff --git a/src/driver/linux_onload/x86_linux_trampoline.c b/src/driver/linux_onload/x86_linux_trampoline.c index ff19e39..9f9ec6a 100644 --- a/src/driver/linux_onload/x86_linux_trampoline.c +++ b/src/driver/linux_onload/x86_linux_trampoline.c @@ -946,19 +946,19 @@ efab_linux_trampoline_handler_close3232(struct pt_regs *regs) } user_sp = (unsigned long*)sp(regs); user_sp--; - if (copy_to_user (user_sp, &ip(regs), 4) != 0) + if( put_user(ip(regs), user_sp) != 0 ) return tramp_close_passthrough(bx(regs)); user_sp--; - if (copy_to_user (user_sp, &cx(regs), 4) != 0) + if( put_user(cx(regs), user_sp) != 0 ) return tramp_close_passthrough(bx(regs)); user_sp--; - if (copy_to_user (user_sp, &dx(regs), 4) != 0) + if( put_user(dx(regs), user_sp) != 0 ) return tramp_close_passthrough(bx(regs)); user_sp--; - if( put_user(bx(regs), user_sp) != 0) + if( put_user(bx(regs), user_sp) != 0 ) return tramp_close_passthrough(bx(regs)); user_sp--; - if( put_user(CI_TRAMP_OPCODE_CLOSE, user_sp) != 0) + if( put_user(CI_TRAMP_OPCODE_CLOSE, user_sp) != 0 ) return tramp_close_passthrough(bx(regs)); /* Hack registers so they're restored to state expected by tramp handler */ @@ -1157,15 +1157,15 @@ efab_linux_trampoline_handler_close64(int fd, unsigned long* stack_start) user_sp--; /* Return address */ - if (copy_to_user (user_sp, &ip(regs), 8) != 0) + if( put_user(ip(regs), user_sp) != 0 ) return tramp_close_passthrough(fd); user_sp--; /* %rdi will be trashed by opcode */ - if (copy_to_user (user_sp, &di(regs), 8) != 0) + if( put_user(di(regs), user_sp) != 0 ) return tramp_close_passthrough(fd); user_sp--; /* %rsi will be trashed by data */ - if (copy_to_user (user_sp, &si(regs), 8) != 0) + if( put_user(si(regs), user_sp) != 0 ) return tramp_close_passthrough(fd); /* Write the updated rsp */ @@ -1343,19 +1343,19 @@ efab_linux_trampoline_handler_close32(unsigned long bx, unsigned long cx, } user32_sp = (unsigned int*)sp(regs); user32_sp--; - if (copy_to_user (user32_sp, &ip(regs), 4) != 0) + if( put_user(ip(regs), user32_sp) != 0 ) return tramp_close_passthrough(bx); user32_sp--; - if (copy_to_user (user32_sp, &cx(regs), 4) != 0) + if( put_user(cx(regs), user32_sp) != 0 ) return tramp_close_passthrough(bx); user32_sp--; - if (copy_to_user (user32_sp, &dx(regs), 4) != 0) + if( put_user(dx(regs), user32_sp) != 0) return tramp_close_passthrough(bx); user32_sp--; - if( put_user(bx, user32_sp) != 0) + if( put_user(bx, user32_sp) != 0 ) return tramp_close_passthrough(bx); user32_sp--; - if( put_user(CI_TRAMP_OPCODE_CLOSE, user32_sp) != 0) + if( put_user(CI_TRAMP_OPCODE_CLOSE, user32_sp) != 0 ) return tramp_close_passthrough(bx); /* Hack registers so they're restored to state expected by tramp handler */ diff --git a/src/driver/linux_resource/filter.c b/src/driver/linux_resource/filter.c index 961c139..3155de9 100644 --- a/src/driver/linux_resource/filter.c +++ b/src/driver/linux_resource/filter.c @@ -50,6 +50,7 @@ **************************************************************************** */ #include +#include #include "linux_resource_internal.h" #include #include "kernel_compat.h" @@ -194,7 +195,7 @@ static int efrm_hextoi( const char** src, size_t* length ) /* This function works much like atoi, but modifies its inputs to make progress through the data stream. */ int rval = 0; - while ( length ) { + while ( *length ) { char c = **src; if ( c >= '0' && c <= '9' ) { rval *= 16; @@ -229,11 +230,8 @@ static void efrm_skip_num( const char** src, size_t* length, int num ) static void efrm_skip_whitespace( const char** src, size_t* length ) { - /* Skip past arbitary whitespace */ - while ( length ) { - char c = **src; - if ( c != ' ' && c != '\t' && c != '\r' && c != '\0' ) - break; + /* Skip past arbitary whitespace but not '\n' which terminates rules */ + while ( *length && **src != '\n' && isspace(**src) ) { *src = *src + 1; *length = *length - 1; } @@ -245,23 +243,23 @@ static int efrm_consume_next_word( const char** src, size_t* length, /* Read non-whitespace until you run out of buffer, or reach whitespace.*/ int rval = 0; - - if ( !src || !*src || !length || !dest ) + + if ( !src || !*src || !length || !*length || !dest ) return -EINVAL; - - while ( length && destlen ) { - char c = **src; - if ( c == ' ' || c == '\t' || c == '\r' - || c == '\n' || c == '\0' ) { - *dest = '\0'; - break; - } - *dest++ = c; + + /* Iterate over src buffer copying to dest buffer. Terminate if + * - there is no more data to copy + * - we are in last entry of dest buffer so it can be '\0' terminated + * - we reach a word separator (space or end of string) + */ + while ( *length && destlen > 1 && !isspace(**src) && **src != '\0' ) { + *dest++ = **src; *src = *src + 1; *length = *length - 1; destlen--; rval++; } + *dest = '\0'; return rval; } @@ -271,13 +269,11 @@ static int efrm_compare_and_skip( const char** src, size_t* length, /* Returns strncmp() and moves on if it matches. */ size_t compare_length; int mismatch; - compare_length = strlen(compare); - mismatch = strncmp( *src, compare, compare_length ); if ( compare_length > *length ) { return -1; } - + mismatch = strncmp( *src, compare, compare_length ); if ( !mismatch ) { efrm_skip_num( src, length, compare_length ); } @@ -1475,13 +1471,53 @@ static int efrm_text_to_table_entry( const char ** buf, size_t* remain ) /* /proc/driver/sfc_resource/ */ /* ************************** */ -ssize_t efrm_add_rule(struct file *file, const char __user *buf, +static int create_kstr_from_ubuf( const char __user *ubuf, size_t size, + const char** out_kstr ) +{ + /* Creates a buffer in kernel space and copies data into it from + * user space buffer. '\0' terminates the output buffer so it + * can be safely passed into string handling functions. */ + char* kbuf; + int rc; + if( out_kstr == NULL ) { + EFRM_ERR( "%s: Output buffer pointer is NULL.", __func__ ); + return -EINVAL; + } + *out_kstr = NULL; + kbuf = kmalloc(size + 1, GFP_KERNEL); + if( kbuf == NULL ) { + EFRM_ERR( "%s: Failed to allocate kernel buffer.", __func__ ); + return -ENOMEM; + } + rc = copy_from_user(kbuf, ubuf, size); + if( rc != 0 ) { + EFRM_ERR( "%s: Failed to copy %d bytes from user buffer.", + __func__, rc ); + kfree(kbuf); + return -EFAULT; + } + kbuf[size] = '\0'; + *out_kstr = kbuf; + return 0; +} + + +static ssize_t efrm_add_rule(struct file *file, const char __user *ubuf, size_t count, loff_t *ppos) { /* ENTRYPOINT from firewall_add Interpret the provided buffer, and add the rules therein. */ size_t remain = count; - + const char* buf; + const char* orig_buf; + int rc; + rc = create_kstr_from_ubuf( ubuf, count, &orig_buf ); + if( rc != 0 ) { + EFRM_ERR( "%s: Failed to create kernel input string, rc=%d.", + __func__, rc ); + return rc; + } + buf = orig_buf; mutex_lock( &efrm_ft_mutex ); while ( *buf != '\0' && remain > 0 ) { @@ -1490,6 +1526,7 @@ ssize_t efrm_add_rule(struct file *file, const char __user *buf, } mutex_unlock( &efrm_ft_mutex ); + kfree(orig_buf); return count; } static const struct file_operations efrm_fops_add_rule = { @@ -1497,29 +1534,38 @@ static const struct file_operations efrm_fops_add_rule = { .write = efrm_add_rule, }; -ssize_t efrm_del_rule(struct file *file, const char __user *buf, - size_t count, loff_t *ppos) +static ssize_t efrm_del_rule(struct file *file, const char __user *ubuf, + size_t count, loff_t *ppos) { /* ENTRYPOINT from firewall_del. Interpret the buffer and delete the specified rule(s) */ size_t remain = count; char ifname [IFNAMSIZ]; + const char* orig_buf; + const char* buf; int is_all = 0; int interface = 0; int rule_number = -1; int rc = 0; + rc = create_kstr_from_ubuf(ubuf, count, &orig_buf); + if( rc != 0 ) { + EFRM_ERR( "%s: Failed to create kernel input string, rc=%d.", + __func__, rc ); + return rc; + } + buf = orig_buf; efrm_skip_whitespace( &buf, &remain ); /* Either if=ethX or ethX supported */ efrm_compare_and_skip( &buf, &remain, "if=" ); efrm_skip_whitespace( &buf, &remain ); interface = efrm_consume_next_word( &buf, &remain, ifname, IFNAMSIZ ); - - if ( interface < 0 ) { + if ( interface <= 0 ) { EFRM_ERR( "%s: Failed to understand interface.", __func__ ); + kfree(orig_buf); return count; } - + /* Either rule= or plain, supported */ efrm_skip_whitespace( &buf, &remain ); efrm_compare_and_skip( &buf, &remain, "rule=" ); @@ -1548,6 +1594,7 @@ ssize_t efrm_del_rule(struct file *file, const char __user *buf, EFRM_ERR( "%s: Failed to remove rule %d from %s. Code: %d\n", __func__, rule_number, ifname, rc ); } + kfree(orig_buf); return count; } static const struct file_operations efrm_fops_del_rule = { diff --git a/src/include/ci/internal/ip.h b/src/include/ci/internal/ip.h index 7000f03..5324254 100644 --- a/src/include/ci/internal/ip.h +++ b/src/include/ci/internal/ip.h @@ -1563,6 +1563,7 @@ extern void ci_tcp_timeout_delack(ci_netif* netif, ci_tcp_state* ts) CI_HF; extern void ci_tcp_timeout_rto(ci_netif* netif, ci_tcp_state* ts) CI_HF; extern void ci_tcp_timeout_cork(ci_netif* netif, ci_tcp_state* ts) CI_HF; extern void ci_tcp_stop_timers(ci_netif* netif, ci_tcp_state* ts) CI_HF; +extern void ci_tcp_send_corked_packets(ci_netif* netif, ci_tcp_state* ts) CI_HF; #if CI_CFG_TAIL_DROP_PROBE extern void ci_tcp_timeout_taildrop(ci_netif *netif, ci_tcp_state *ts) CI_HF; #endif @@ -4133,7 +4134,7 @@ ci_inline int oo_tcpdump_free_pkts_4write(ci_netif *ni) ci_inline void oo_tcpdump_dump_pkt(ci_netif *ni, ci_ip_pkt_fmt *pkt) { if( !oo_tcpdump_free_pkts_4write(ni) || - (ni->flags & CI_NETIF_FLAG_MSG_WARM) ) + (pkt->flags & CI_PKT_FLAG_MSG_WARM) ) return; ci_assert_equal(ni->state->dump_queue[ni->state->dump_write_i % diff --git a/src/include/ci/internal/ip_shared_types.h b/src/include/ci/internal/ip_shared_types.h index 7e19912..1780056 100644 --- a/src/include/ci/internal/ip_shared_types.h +++ b/src/include/ci/internal/ip_shared_types.h @@ -353,6 +353,7 @@ struct ci_ip_pkt_fmt_s { #define CI_PKT_FLAG_NONB_POOL 0x0100 /* allocated from nonb-pool */ #define CI_PKT_FLAG_RX 0x0200 /* pkt is on RX path */ #define CI_PKT_FLAG_TX_TIMESTAMPED 0x0400 /* pkt with a TX timestamp */ +#define CI_PKT_FLAG_MSG_WARM 0x0800 /* pkt with a TX timestamp */ #define CI_PKT_FLAG_TX_MASK_ALLOWED \ (CI_PKT_FLAG_TX_MORE | CI_PKT_FLAG_TX_PSH | CI_PKT_FLAG_NONB_POOL) @@ -1971,6 +1972,9 @@ struct ci_tcp_state_s { /* peer have graciously closed this connection by sending FIN */ #define CI_TCPT_FLAG_ACTIVE_WILD 0x8000 /* shares active wild */ + /* this socket in in send(MSG_WARM) just now */ +#define CI_TCPT_FLAG_MSG_WARM 0x10000 + /* flags advertised on SYN */ # define CI_TCPT_SYN_FLAGS \ (CI_TCPT_FLAG_WSCL | CI_TCPT_FLAG_TSO | CI_TCPT_FLAG_SACK) diff --git a/src/include/ci/internal/ip_types.h b/src/include/ci/internal/ip_types.h index 4cf2f79..2ed7c29 100644 --- a/src/include/ci/internal/ip_types.h +++ b/src/include/ci/internal/ip_types.h @@ -172,8 +172,6 @@ struct ci_netif_s { /* This field must be protected by the netif lock. */ unsigned flags; - /* Sending ONLOAD_MSG_WARM */ -# define CI_NETIF_FLAG_MSG_WARM 0x1 /* Set to request allocation of scalable filters at stack creation * This flag is not stored in netif state. It is passed to * tcp_helper_resource_rm_alloc_proxy function through ioctl. diff --git a/src/include/ci/tools/platform/linux_kernel.h b/src/include/ci/tools/platform/linux_kernel.h index bbb1220..c79c5ca 100644 --- a/src/include/ci/tools/platform/linux_kernel.h +++ b/src/include/ci/tools/platform/linux_kernel.h @@ -48,7 +48,7 @@ * Need to know the kernel version. */ -#include +#include #ifndef LINUX_VERSION_CODE # include @@ -391,21 +391,14 @@ typedef struct iovec ci_iovec; #define CI_IOVEC_BASE(i) ((i)->iov_base) #define CI_IOVEC_LEN(i) ((i)->iov_len) -/********************************************************************** - * Signals - */ -#include - -ci_inline void -ci_send_sig(int signum) -{ - send_sig(signum, current, 0); -} - /********************************************************************** * UID */ +#ifdef EFRM_HAVE_CRED_H +#include +#endif + ci_inline uid_t ci_geteuid(void) { #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) @@ -441,10 +434,10 @@ ci_inline uid_t ci_getgid(void) } -#if LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0) -#define ci_net_random() net_random() -#else +#ifdef EFRM_HAVE_PRANDOM_U32 #define ci_net_random() prandom_u32() +#else +#define ci_net_random() net_random() #endif diff --git a/src/include/onload/linux_onload.h b/src/include/onload/linux_onload.h index 9de3990..a94353f 100644 --- a/src/include/onload/linux_onload.h +++ b/src/include/onload/linux_onload.h @@ -206,6 +206,9 @@ task_nsproxy_done(struct task_struct *tsk) rcu_read_unlock(); } #else +#ifdef EFRM_HAVE_SCHED_TASK_H +#include +#endif static inline struct nsproxy * task_nsproxy_start(struct task_struct *tsk) { diff --git a/src/include/onload/version.h b/src/include/onload/version.h index 5389626..53e4ed6 100644 --- a/src/include/onload/version.h +++ b/src/include/onload/version.h @@ -29,7 +29,7 @@ #ifndef ONLOAD_VERSION -# define ONLOAD_VERSION "201606-u1.2" +# define ONLOAD_VERSION "201606-u1.3" #endif #define ONLOAD_PRODUCT "OpenOnload" diff --git a/src/lib/efthrm/iobufset.c b/src/lib/efthrm/iobufset.c index 4c8a7ee..b3c29ee 100755 --- a/src/lib/efthrm/iobufset.c +++ b/src/lib/efthrm/iobufset.c @@ -88,6 +88,7 @@ static int oo_bufpage_huge_alloc(struct oo_buffer_pages *p, int *flags) int rc; int restore_creds = 0; #ifdef current_cred + const struct cred *orig_creds = NULL; /* placate compiler */ struct cred *creds; #endif @@ -102,7 +103,7 @@ static int oo_bufpage_huge_alloc(struct oo_buffer_pages *p, int *flags) creds = prepare_creds(); if( creds != NULL ) { creds->cap_effective.cap[0] |= 1 << CAP_IPC_LOCK; - commit_creds(creds); + orig_creds = override_creds(creds); restore_creds = 1; } } @@ -216,11 +217,8 @@ static int oo_bufpage_huge_alloc(struct oo_buffer_pages *p, int *flags) out: if (restore_creds) { #ifdef current_cred - creds = prepare_creds(); - if( creds != NULL ) { - creds->cap_effective.cap[0] &= ~(1 << CAP_IPC_LOCK); - commit_creds(creds); - } + ci_assert(orig_creds); + revert_creds(orig_creds); #elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) kernel_cap_t eff = current->cap_effective; cap2int(eff) &= ~(1 << CAP_IPC_LOCK); diff --git a/src/lib/transport/ip/common_sockopts.c b/src/lib/transport/ip/common_sockopts.c index 6d5ad6b..8c8291a 100644 --- a/src/lib/transport/ip/common_sockopts.c +++ b/src/lib/transport/ip/common_sockopts.c @@ -1329,8 +1329,10 @@ int ci_setsockopt_os_fail_ignore(ci_netif* ni, ci_sock_cmn* s, int err, /* This function is the common handler for SOL_SOCKET level options that do * not require the stack lock to be held. It is safe to call this function - * with the lock held though, and this is done in the TCP case, as all options - * on a TCP socket must be set with the stack lock held. + * with the lock held though, and this is done in both the TCP and UDP case. + * In the TCP case this is because all options on a TCP socket must be set + * with the stack lock held. In the UDP case we do so because of lock + * ordering requirements. */ int ci_set_sol_socket_nolock(ci_netif* ni, ci_sock_cmn* s, int optname, const void* optval, socklen_t optlen) diff --git a/src/lib/transport/ip/cscope.out b/src/lib/transport/ip/cscope.out new file mode 100644 index 0000000..b8e66bd --- /dev/null +++ b/src/lib/transport/ip/cscope.out @@ -0,0 +1,233315 @@ +cscope 15 $HOME/incoming/onload_tests/src/lib/transport/ip 0001278468 + @active_wild.c + +3  + ~"_.h +" + +6  + $ci_aive_wd_e_ +( +ci_tif +* +tif +, +ci_aive_wd +* +aw +) + +8 +oo_p + +p +; + +10 + `ci_sock_cmn_ +( +tif +, & +aw +-> +s +, 1); + +11 +aw +-> +s +. +b +. +e + = +CI_TCP_STATE_ACTIVE_WILD +; + +12 +aw +-> +s +. +b +. +sb_aags + = 0; + +14 + `sock_oc +(& +aw +-> +s + +IPPROTO_TCP +; + +15 + `sock_ddr_be32 +(& +aw +-> +s +) = 0u; + +16 + `sock_t_be16 +(& +aw +-> +s +) = 0u; + +17 + `sock_ddr_be32 +(& +aw +-> +s +) = 0u;; + +18 + `sock_t_be16 +(& +aw +-> +s +) = 0u; + +20 +p + = + `TS_OFF +( +tif +, +aw +); + +21 + `OO_P_ADD +( +p +, + `CI_MEMBER_OFFSET +( +ci_aive_wd +, +po_lk +)); + +22 + `ci_ni_di_lk_ +( +tif +, & +aw +-> +po_lk +, +p +, "pool"); + +23 + `ci_ni_di_lf_lk +( +tif +, & +aw +-> +po_lk +); + +25 +aw +-> +expy + = + `ci__time_now +( +tif +); + +26 +aw +-> +ϡ_ddr + = 0u; + +27 +aw +-> +ϡ_ddr + = 0u; + +28 +aw +-> +ϡ_t + = 0u; + +29 + } +} + +32 +ci_aive_wd +* + $ci_aive_wd_g_e_buf +( +ci_tif +* +tif +) + +34 +cp_waab_obj +* +wo +; + +36 + `ci_as +( +tif +); + +38 +wo + = + `cp_waab_obj_loc +( +tif +); + +39 if +wo + ) { + +40 + `ci_aive_wd_e_ +( +tif +, & +wo +-> +aw +); + +41  & +wo +-> +aw +; + +43  +NULL +; + +44 + } +} + +51  + $ci_aive_wd_l_fds_ge +( +ci_tif +* +ni +, +ci_aive_wd +* +aw +,  +do_ +) + +53 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +54 + `ci_as +( +aw +-> +s +. +b +. +e + = +CI_TCP_STATE_ACTIVE_WILD +); + +56 + `ci_t__r_frs +( +ni +, + `SC_SP +(& +aw +-> +s +), 0); + +58 if +do_ + ) + +59 + `cp_waab_obj_ +( +ni +, & +aw +-> +s +. +b +); + +60 + } +} + + @common_ioctl.c + +14 #ifde +__sun__ + + +15  + ~ + +16  + ~ + +19 #ifde +__lux__ + + +20  + ~ + +23  + ~"_.h +" + +24  + ~ + +30  + $ci_cmn_iol +( +ci_tif +* +tif +, +ci_sock_cmn +* +s +,  +que +, + +31 * +g +,  +os_rc +,  +os_sock_exis +) + +33 + `ci_as +( +tif +); + +34 + `ci_as +( +s +); + +39 + `LOG_SV + + `ci_log +("que = %u/%#x,rg = %lu/%#lx", +que +,equest, + +40 ( +g +, ()rg)); + +42  +que + ) { + +43 #ifde +__unix__ + + +44  +SIOCGPGRP +: + +46 if! + `CI_IOCTL_ARG_OK +(, +g +) ) + +47  +_u +; + +48 + `CI_IOCTL_SETARG +((*) +g +), +s +-> +b +. +sigown +); + +51  +SIOCSPGRP +: + +53 if! + `CI_IOCTL_ARG_OK +(, +g +) ) + +54  +_u +; + +55 +s +-> +b +. +sigown + = + `CI_IOCTL_GETARG +(, +g +); + +56 if +s +-> +b +. +sigown + && (s->b. +sb_aags + & +CI_SB_AFLAG_O_ASYNC +) ) + +57 + `ci_b_t +(& +s +-> +b +. +wake_que +, +CI_SB_FLAG_WAKE_RX_B +); + +61 #ifde +__lux__ + + +62  +SIOCGSTAMP +: + +63  +SIOCGSTAMPNS +: + +64 + `RET_WITH_ERRNO +( +ENOENT +); + +68 i(! +os_sock_exis +) + +69 + `RET_WITH_ERRNO +( +ENOTTY +); + +71  +os_rc +; + +77 #ifde +__unix__ + + +78 +_u +: + +79 + `LOG_SC + + `ci_log +("%s: " +NS_FMT +"eq %d/%#xrg %ld/%#lx unhandled (EINVAL)", + +80 +__FUNCTION__ +, + `NS_PRI_ARGS +( +tif +, +s +), + +81 +que +,eque, () +g +, ()arg)); + +82 + `RET_WITH_ERRNO +( +EFAULT +); + +84 + } +} + + @common_sockopts.c + +14  + ~"_.h +" + +15  + ~ + +16  + ~ + +19 #ifde +__lux__ + + +28  + #IP_MTU + 14 + + ) + +31  + #VERB +( +x +) + + ) + +33 #ide +NDEBUG + + +34  + #STG_VERB +( +x + + ) +x + +36  + #STG_VERB +( +x +) + + ) + +39 #ifde +_WIN32 + + +41  + #REPORT_CASE +( +sym +sym: + `STG_VERB +( + `ci_log +( +__FUNCTION__ +": "#sym)); + + ) + +44  + #OPTION_ALERT_NOT_SUPP +( +sym +, +l +) sym: { \ + +45 + `ci_log +("%s: ******************************************", +__FUNCTION__ +); \ + +46 + `ci_log +("%s: "#sym, +__FUNCTION__ +); \ + +47 + `ci_log +("%s: !! unsu܋d oi,di !! ", +__FUNCTION__ +); \ + +48 + `ci_log +("%s: ******************************************", +__FUNCTION__ +); \ + +49  +l +; } + + ) + +52  + #OPTION_NOT_SUPP +( +sym +, +l +) sym: { \ + +53 + `VERB +( + `ci_log +("%s: sunsu܋d oi "#sym, +__FUNCTION__ +)); \ + +54  +l +; } + + ) + +57  + #OPTION_ABORT_NOT_EXP +( +sym +) sym: { \ + +58 + `ci_log +("%s: *********************************************", +__FUNCTION__ +); \ + +59 + `ci_log +("%s: "#sym, +__FUNCTION__ +); \ + +60 + `ci_log +("%s: !! oiڂكxed he,dfixg !! ", +__FUNCTION__ +); \ + +61 + `ci_log +("%s: *********************************************", +__FUNCTION__ +); \ + +62 + `ci_as +(0); } + + ) + +65  + #OPTION_UDP_MSG +( +sym +, +sc +, +l +) sym: { \ + +66 if + `sock_oc +( +sc += +IPPROTO_TCP + )  +l +; \ + +67 +u + = +CI_UDP_MAX_PAYLOAD_BYTES +; \ + +68  +u_out +; } + + ) + +71  + #OPTION_NOT_TCP +( +sym +, +sc +, +l +) sym: { \ + +72 if + `sock_oc +( +sc += +IPPROTO_TCP + )  +l +; \ + +73 + `ci_log +( +__FUNCTION__ +": *** "#sym"ot implemented for UDP ***");\ + +74  +l +; } + + ) + +77  + #REPORT_CASE +( +sym +sym: + + ) + +80 #ide +__KERNEL__ + + +81  + ~ + +82  + ~ + +84 #ifde +__lux__ + + +86  + ~ + +87  + ~ + +89  + gci_tos2iܙy +[] = { + +90 +TC_PRIO_BESTEFFORT +, + +91 +TC_PRIO_FILLER +, + +92 +TC_PRIO_BESTEFFORT +, + +93 +TC_PRIO_BESTEFFORT +, + +94 +TC_PRIO_BULK +, + +95 +TC_PRIO_BULK +, + +96 +TC_PRIO_BULK +, + +97 +TC_PRIO_BULK +, + +98 +TC_PRIO_INTERACTIVE +, + +99 +TC_PRIO_INTERACTIVE +, + +100 +TC_PRIO_INTERACTIVE +, + +101 +TC_PRIO_INTERACTIVE +, + +102 +TC_PRIO_INTERACTIVE_BULK +, + +103 +TC_PRIO_INTERACTIVE_BULK +, + +104 +TC_PRIO_INTERACTIVE_BULK +, + +105 +TC_PRIO_INTERACTIVE_BULK + + +110  + $ci_sock_rx_bd2dev +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +, +ci_ifid_t + +ifdex +) + +112 +ci_ifid_t + +ba_ifdex +; + +113 +ci_hwpt_id_t + +hwpt +; + +114 +ci_p_t + +p +; + +115  +rc +; + +118 +rc + = + `ci_έ_ve +( + `CICP_HANDLE +( +ni +), +ifdex +, +NULL + , & +hwpt +, + +119 +NULL + , & +p +, & +ba_ifdex +, NULL); + +120 if +rc + != 0 ) { + +122  +CI_SOCKET_HANDOVER +; + +124 if( +hwpt + > +CPLANE_MAX_REGISTER_INTERFACES + ) + +125  +CI_SOCKET_HANDOVER +; + +126 if + `__ci_hwpt_to_tf_i +( +ni +, +hwpt +) < 0 ) + +130  +CI_SOCKET_HANDOVER +; + +132 +s +-> +rx_bd2dev_ifdex + = +ifdex +; + +133 +s +-> +rx_bd2dev_ba_ifdex + = +ba_ifdex +; + +134 +s +-> +rx_bd2dev_vn + = +p +. +vn_id +; + +135 + `ci__che_vide +(& +s +-> +pkt +); + +136 if +s +-> +b +. +e + = +CI_TCP_STATE_UDP + ) + +138 + `ci__che_vide +(& + `SOCK_TO_UDP +( +s +)-> +hem_pkt +); + +140 + } +} + +143  + $ci_sock_bdtodevi +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +, + +144 cڡ * +tv +, +sockn_t + +ݎ +) + +146 +ci_ifid_t + +ifdex +; + +147  +ieq + +i +; + +148  +rc +; + +150 if +ݎ + =0 || ((*) +tv +)[0] == '\0' ) { + +152 +s +-> + +. +so_bdtodevi + = +CI_IFID_BAD +; + +153 +s +-> +rx_bd2dev_ifdex + = +CI_IFID_BAD +; + +158 +s +-> +rx_bd2dev_ba_ifdex + = 0; + +159 +s +-> +rx_bd2dev_vn + = 0; + +163 if + `NI_OPTS +( +ni +). +bdtodevi_hdov + ) + +164  +hdov +; + +167 + `memt +(& +i +, 0, (ifr)); + +168 + `memy +( +i +. +i_me +, +tv +, + `CI_MIN +( +ݎ +, (ifr.ifr_name))); + +169 +i +. +i_me +[(ifr.ifr_name) - 1] = '\0'; + +170 +ifdex + = + `if_modex +( +i +. +i_me +); + +171 if +ifdex + == 0 ) { + +176 + `LOG_E +( + `ci_log +("%s: ERROR: if_nametoindex(%s) failed", + +177 +__FUNCTION__ +, +i +. +i_me +)); + +178  - +ENODEV +; + +181 +rc + = + `ci_sock_rx_bd2dev +( +ni +, +s +, +ifdex +); + +182 if +rc + == 0 ) + +183 +s +-> + +. +so_bdtodevi + = +ifdex +; + +184  +rc +; + +186 +hdov +: + +197  +CI_SOCKET_HANDOVER +; + +198 + } +} + +203 +ci_le +  + +204 + $ci_g_os_sockt +( +ci_fd_t + +fd +,  +v +,  +݊ame +, * +tv +, + +205 +sockn_t + * +ݎ + ) + +207  +rc +; + +208 +ci_fd_t + +os_sock + = + `ci_g_os_sock_fd +( +fd +); + +210 i( + `CI_IS_VALID_SOCKET +( +os_sock +) ) { + +211 +rc + = + `ci_sys_gsockt +( +os_sock +, +v +, +݊ame +, +tv +, +ݎ +); + +212 + `ci_l_os_sock_fd +( +os_sock +); + +213 i( +rc + != 0) + +214 + `RET_WITH_ERRNO +( +o +); + +218 + `RET_WITH_ERRNO +( +ENOPROTOOPT +); + +220 + } +} + +233  + $ci_g_s_ + +ci_tif +* +ni +, +ci_sock_cmn +* +s +, +ci_fd_t + +fd +, + +234  +݊ame +, * +tv +, +sockn_t + * +ݎ + ) + +236  +u +; + +241  +݊ame +) { + +242  +IP_OPTIONS +: + +244 + `LOG_U +( + `ci_log +("%s: " +NS_FMT +" unhdd IP_OPTIONS", +__FUNCTION__ +, + +245 + `NS_PRI_ARGS +( +ni +, +s +))); + +246  +_unsup +; + +248  +IP_TOS +: + +250 + `ci_as +(( +s +-> +b +. +e + & +CI_TCP_STATE_TCP +) || + +251 +s +-> +b +. +e + = +CI_TCP_STATE_UDP +); + +253 +u + = +s +-> +pkt +. + +. +_tos +; + +256  +IP_TTL +: + +258 + `ci_as +(( +s +-> +b +. +e + & +CI_TCP_STATE_TCP +) || + +259 +s +-> +b +. +e + = +CI_TCP_STATE_UDP +); + +261 +u + = +s +-> + +. +_l +; + +264 #ifde +__lux__ + + +265  +IP_MTU +: + +266 if +s +-> +b +. +e + = +CI_TCP_STATE_UDP + ) { + +267 #ide +__KERNEL__ + + +268 if + `sock_ddr_be32 +( +s +) != 0 ) { + +269 + `ci__che_vide +(& +s +-> +pkt +); + +270 + `ci_ur_ve +( +ni +, & +s +-> +pkt +, &s-> + +); + +271 if + `ci__che_is_vid +( + `CICP_HANDLE +( +ni +), & +s +-> +pkt +) ) { + +272 +u + = +s +-> +pkt +. +mtu +; + +276  + `ci_g_os_sockt +( +fd +, +IPPROTO_IP +, +݊ame +, +tv +, +ݎ +); + +281 + `ci_as +(0); + +287 if +s +-> +b +. +e + < +CI_TCP_LISTEN + || + +288 +s +-> +b +. +e + > +CI_TCP_TIME_WAIT + ) { + +290 + `RET_WITH_ERRNO +( +ENOTCONN +); + +292 +u + = + `SOCK_TO_TCP +( +s +)-> +pmtus +. +pmtu +; + +295  +IP_MTU_DISCOVER +: + +297  +s +-> +s_ags + & ( +CI_SOCK_FLAG_PMTU_DO + | +CI_SOCK_FLAG_ALWAYS_DF +) ) { + +298  +CI_SOCK_FLAG_PMTU_DO + | +CI_SOCK_FLAG_ALWAYS_DF +: + +299 +u + = +IP_PMTUDISC_DO +; + +301  +CI_SOCK_FLAG_PMTU_DO +: + +302 +u + = +IP_PMTUDISC_WANT +; + +304  +CI_SOCK_FLAG_ALWAYS_DF +: + +305 #ifde +IP_PMTUDISC_PROBE + + +306 +u + = +IP_PMTUDISC_PROBE +; + +308 + `ci_as +(0); + +309 +u + = +IP_PMTUDISC_DO +; + +313 +u + = +IP_PMTUDISC_DONT +; + +318  +IP_RECVTOS +: + +319 +u + = !!( +s +-> +cmsg_ags + & +CI_IP_CMSG_TOS +); + +322  +IP_PKTOPTIONS +: + +324  +msghdr + +msg +; + +325  +cmsg_e + cmsg_state; + +327 #ifde +__lux__ + + +329 if +s +-> +b +. +e + = +CI_TCP_STATE_UDP + ) + +330 + `RET_WITH_ERRNO +( +ENOPROTOOPT +); + +335 + `memt +( +tv +, 0, * +ݎ +); + +337 +msg +. +msg_cڌ + = +tv +; + +338 +msg +. +msg_cڌn + = * +ݎ +; + +339 +msg +. +msg_ags + = 0; + +340 +cmsg_e +. +msg + = &msg; + +341 +cmsg_e +. +cm + = + `CMSG_FIRSTHDR +(& +msg +); + +342 +cmsg_e +. +cmsg_bys_ud + = 0; + +343 +cmsg_e +. +p_msg_ags + = & +msg +. +msg_ags +; + +345 i( +s +-> +cmsg_ags + & +CI_IP_CMSG_PKTINFO +) { + +346  +_pktfo + +fo +; + +347 +fo +. +i_addr +. +s_addr + = info. +i_ec_d +.s_add + `sock_ddr_be32 +( +s +); + +349 +fo +. +i_ifdex + = +s +-> + +. +_mui_if + < 0 ? + +350 0 : +s +-> + +. +_mui_if +; + +351 + `ci_put_cmsg +(& +cmsg_e +, +IPPROTO_IP +, +IP_PKTINFO +, ( +fo +), &info); + +352 if( +msg +. +msg_ags + & +MSG_CTRUNC +) + +353  +_v +; + +356 i( +s +-> +cmsg_ags + & +CI_IP_CMSG_TTL +) { + +357  +l + = +s +-> + +. +_m_l +; + +358 + `ci_put_cmsg +(& +cmsg_e +, +IPPROTO_IP +, +IP_TTL +, ( +l +), &ttl); + +359 if( +msg +. +msg_ags + & +MSG_CTRUNC +) + +360  +_v +; + +363 * +ݎ + = +cmsg_e +. +cmsg_bys_ud +; + +367  +IP_RECVERR +: + +368 +u + = !!( +s +-> +so +. +so_debug + & +CI_SOCKOPT_FLAG_IP_RECVERR +); + +371 #ifde +IP_TRANSPARENT + + +372  +IP_TRANSPARENT +: + +373 +u + = !!( +s +-> +s_ags + & +CI_SOCK_FLAG_TPROXY +); + +379 #ifde +__unix__ + + +380  +IP_RECVTTL +: + +381 +u + = !!( +s +-> +cmsg_ags + & +CI_IP_CMSG_TTL +); + +384  +IP_RECVOPTS +: + +385 +u + = !!( +s +-> +cmsg_ags + & +CI_IP_CMSG_RECVOPTS +); + +388  +IP_RETOPTS +: + +389 +u + = !!( +s +-> +cmsg_ags + & +CI_IP_CMSG_RETOPTS +); + +393 #ide +__KERNEL__ + + +395 + `REPORT_CASE +( +IP_MULTICAST_IF +) + +396 + `REPORT_CASE +( +IP_MULTICAST_LOOP +) + +397 + `REPORT_CASE +( +IP_MULTICAST_TTL +) + +402 if +s +-> +b +. +sb_aags + & +CI_SB_AFLAG_OS_BACKED + ) + +403  + `ci_g_os_sockt +( +fd +, +IPPROTO_IP +, +݊ame +, +tv +, +ݎ +); + +405 + `RET_WITH_ERRNO +( +ENOPROTOOPT +); + +408 #i + `defed +( +__lux__ +|| defed( +_WIN32 +) + +409  +IP_PKTINFO +: + +410 +u + = !!( +s +-> +cmsg_ags + & +CI_IP_CMSG_PKTINFO +); + +414 #ifde +_WIN32 + + +415  +IP_DONTFRAGMENT +: + +418 +u + = !!( +s +-> +s_ags + & +CI_SOCK_FLAG_DF +); + +421  +IP_RECEIVE_BROADCAST +: + +424 if +s +-> +b +. +e + ! +CI_TCP_STATE_UDP + ) + +425  +_not +; + +427 +u + = !!( + `SOCK_TO_UDP +( +s +)-> +udpags + & +CI_UDPF_RECV_BROADCAST +); + +434 + `OPTION_NOT_SUPP +( +IP_HDRINCL +, +_not +); + +438  +_not +; + +441  + `ci_gsockt_f +( +tv +, +ݎ +, +SOL_IP +, & +u +, (u)); + +443 #ifde +__lux__ + + +444 +_v +: + +445 + `LOG_SC + + `log +("%s: " +NS_FMT +" invalid option: %i (EINVAL)", + +446 +__FUNCTION__ +, + `NS_PRI_ARGS +( +ni +, +s +), +݊ame +)); + +447 + `RET_WITH_ERRNO +( +EINVAL +); + +450 +_not +: + +451 + `LOG_SC + + `log +("%s: " +NS_FMT +" unimplemented/bad option: %i (ENOPROTOOPT)", + +452 +__FUNCTION__ +, + `NS_PRI_ARGS +( +ni +, +s +), +݊ame +)); + +454 +_unsup +: + +455 + `RET_WITH_ERRNO +( +ENOPROTOOPT +); + +456 + } +} + +458 #ide +__KERNEL__ + + +459 #i +CI_CFG_FAKE_IPV6 + + +461  + $ci_g_s_6 +( +ci_sock_cmn +* +s +, +ci_fd_t + +fd +,  +݊ame +, * +tv +, + +462 +sockn_t + * +ݎ + ) + +464  +rc +; + +465 +ci_fd_t + +os_sock + = + `ci_g_os_sock_fd +( +fd +); + +467 i( + `CI_IS_VALID_SOCKET +( +os_sock +) ) { + +468 +rc + = + `ci_sys_gsockt + +os_sock +, +IPPROTO_IPV6 +, +݊ame +, +tv +, +ݎ +); + +469 + `ci_l_os_sock_fd + +os_sock + ); + +470 i( +rc + != 0) + +471 + `RET_WITH_ERRNO +( +o +); + +475 + `RET_WITH_ERRNO +( +ENOPROTOOPT +); + +477 + } +} + +482  + $ci_g_s_sock + +ci_tif +* +tif +, +ci_sock_cmn +* +s +, + +483  +݊ame +, * +tv +, +sockn_t + * +ݎ + ) + +485  +u +; + +487  +݊ame +) { + +488 #i +CI_CFG_TCP_SOCK_STATS + + +489  +CI_SO_L5_GET_SOCK_STATS +: + +494 if(* +ݎ + < (( +ci__sock_s +)<<1) ) + +495  +_v +; + +496 + `ci_t_s_ai +( +tif +, ( +ci_t_e +* +s +, +CI_IP_STATS_REPORT +, + +497 +CI_IP_STATS_OUTPUT_NONE +, +tv +, +ݎ + ); + +500  +CI_SO_L5_DUMP_SOCK_STATS +: + +501 #i +CI_CFG_SEND_STATS_TO_LOG +==0 + +503 if(* +ݎ + == 0) + +504  +_v +; + +506 if! ( +s +-> +b +. +e + & +CI_TCP_STATE_TCP_CONN +) ) + +507  +_v +; + +508 + `ci_t_s_ai +( +tif +, + `SOCK_TO_TCP +( +s +), +CI_IP_STATS_REPORT +, + +509 +CI_IP_STATS_OUTPUT_NONE +, +tv +, +ݎ + ); + +513 #i +CI_CFG_SUPPORT_STATS_COLLECTION + + +514  +CI_SO_L5_GET_NETIF_STATS +: + +519 if(* +ݎ + < (( +ci__s +)<<1) ) + +520  +_v +; + +522 + `ci_tif_s_ai +( +tif +, +CI_IP_STATS_REPORT +, + +523 +CI_IP_STATS_OUTPUT_NONE +, +tv +, +ݎ + ); + +526  +CI_SO_L5_DUMP_NETIF_STATS +: + +527 #i +CI_CFG_SEND_STATS_TO_LOG +==0 + +529 if(* +ݎ + == 0) + +530  +_v +; + +533 + `ci_tif_s_ai +( +tif +, +CI_IP_STATS_REPORT +, + +534 +CI_IP_STATS_OUTPUT_NONE +, +tv +, +ݎ + ); + +538  +SO_KEEPALIVE +: + +539 #ifde +_WIN32 + + +540 if + `sock_oc +( +s += +IPPROTO_UDP + ) + +541  +_not +; + +543 +u + = !!( +s +-> +s_ags + & +CI_SOCK_FLAG_KALIVE +); + +544  +u_out +; + +546  +SO_OOBINLINE +: + +548 #ifde +_WIN32 + + +549 if + `sock_oc +( +s += +IPPROTO_UDP + ) + +550  +_not +; + +553 +u + = !!( +s +-> +s_ags + & +CI_SOCK_FLAG_OOBINLINE +); + +554  +u_out +; + +556  +SO_RCVLOWAT +: + +557 #ifde +_WIN32 + + +558  +_not +; + +560 +u + = +s +-> +so +. +rcvlow +; + +561  +u_out +; + +564  +SO_SNDLOWAT +: + +565 #ifde +_WIN32 + + +566  +_not +; + +569 +u + = 1u; + +570  +u_out +; + +573  +SO_RCVTIMEO +: { + +575 #ifde +_WIN32 + + +576 +DWORD + +t +; + +577 +t + = ( +DWORD +)(( +s +-> +so +. +rcvtimeo +. +tv_c + * 1000) + + +578 ( +s +-> +so +. +rcvtimeo +. +tv_uc + / 1000)); + +579  + `ci_gsockt_f +( +tv +, +ݎ +, +SOL_SOCKET +, & +t +, (t)); + +581  +timev + +tv +; + +582 +tv +. +tv_c + = +s +-> +so +. +rcvtimeo_mc + / 1000; + +583 +tv +. +tv_uc + = ( +s +-> +so +. +rcvtimeo_mc + - (tv. +tv_c + * 1000ULL)) * 1000ULL; + +584  + `ci_gsockt_f +( +tv +, +ݎ +, +SOL_SOCKET +, & +tv +, (tv)); + +588  +SO_SNDTIMEO +: { + +590 #ifde +_WIN32 + + +591 +DWORD + +t +; + +592 +t + = ( +DWORD +)(( +s +-> +so +. +dtimeo +. +tv_c + * 1000) + + +593 ( +s +-> +so +. +dtimeo +. +tv_uc + / 1000)); + +594  + `ci_gsockt_f +( +tv +, +ݎ +, +SOL_SOCKET +, & +t +, (t)); + +596  +timev + +tv +; + +597 +tv +. +tv_c + = +s +-> +so +. +dtimeo_mc + / 1000; + +598 +tv +. +tv_uc + = ( +s +-> +so +. +dtimeo_mc + - (tv. +tv_c + * 1000ULL)) * 1000ULL; + +599  + `ci_gsockt_f +( +tv +, +ݎ +, +SOL_SOCKET +, & +tv +, (tv)); + +603  +SO_REUSEADDR +: + +605 +u + = !!( +s +-> +s_ags + & +CI_SOCK_FLAG_REUSEADDR +); + +606  +u_out +; + +608  +SO_TYPE +: + +610 + `ci_as +(( +s +-> +b +. +e + & +CI_TCP_STATE_TCP +) || + +611 +s +-> +b +. +e + = +CI_TCP_STATE_UDP +); + +612 +u + = ( +s +-> +b +. +e + & +CI_TCP_STATE_TCP +? +SOCK_STREAM + : +SOCK_DGRAM +; + +613  +u_out +; + +615 #ifde +SO_PROTOCOL + + +616  +SO_PROTOCOL +: + +618 + `ci_as +(( +s +-> +b +. +e + & +CI_TCP_STATE_TCP +) || + +619 +s +-> +b +. +e + = +CI_TCP_STATE_UDP +); + +620 +u + = ( +s +-> +b +. +e + & +CI_TCP_STATE_TCP +? +IPPROTO_TCP + : +IPPROTO_UDP +; + +621  +u_out +; + +624 #ifde +_WIN32 + + +625  +SO_GROUP_ID +: + +627 +u +=0; + +628  +u_out +; + +630  +SO_GROUP_PRIORITY +: + +631 +u +=0; + +633  +u_out +; + +636  +SO_DONTROUTE +: + +638 #ifde +_WIN32 + + +639 +u + = !!( +s +-> +s_ags + & +CI_SOCK_FLAG_DONTROUTE +); + +640  +u_out +; + +643  +_not +; + +646  +SO_BROADCAST +: + +648 #ifde +_WIN32 + + +649 if + `sock_oc +( +s += +IPPROTO_TCP + ) + +650  +_not +; + +653 +u + = !!( +s +-> +s_ags + & +CI_SOCK_FLAG_BROADCAST +); + +654  +u_out +; + +656  +SO_SNDBUF +: + +658 +u + = +s +-> +so +. +dbuf +; + +659  +u_out +; + +661  +SO_RCVBUF +: + +663 +u + = +s +-> +so +. +rcvbuf +; + +664  +u_out +; + +666  +SO_LINGER +: + +668  +lg + +l +; + +669 + `memt +(& +l +, 0, (l)); + +671 #ifde +_WIN32 + + +672 if + `sock_oc +( +s += +IPPROTO_UDP + ) + +673  +_not +; + +676 if +s +-> +s_ags + & +CI_SOCK_FLAG_LINGER + ) { + +677 +l +. +l_off + = 1; + +678 +l +. +l_lg + = +s +-> +so +. +lg +; + +680 +l +. +l_off + = 0; + +681 #ifde +_WIN32 + + +683 +l +. +l_lg + = +s +-> +so +. +lg +; + +686 + `VERB +( + `ci_log +("%s: onoff:%d fl:%x", +__FUNCTION__ +, + +687 +l +. +l_off +, +s +-> +s_ags +)); + +688  + `ci_gsockt_f +( +tv +, +ݎ +, +SOL_SOCKET +, & +l +, (l)); + +691 #ifde +__lux__ + + +692  +SO_PRIORITY +: + +693 +u + = ( +s +-> +so_iܙy +; + +694  +u_out +; + +697  +SO_ERROR +: + +698 #ifde +_WIN32 + + +701 +u + = +s +-> +so_r +; + +704 +u + = + `ci_g_so_r +( +s +); + +706  +u_out +; + +708  +SO_ACCEPTCONN +: + +709 #ifde +_WIN32 + + +710 if + `sock_oc +( +s += +IPPROTO_UDP + ) + +711  +_not +; + +713 +u + = ( +s +-> +b +. +e + = +CI_TCP_LISTEN +); + +714  +u_out +; + +716  +SO_DEBUG +: + +717 +u + = !!( +s +-> +so +. +so_debug + & +CI_SOCKOPT_FLAG_SO_DEBUG +); + +718  +u_out +; + +720 #ifde +_WIN32 + + +721  +SO_EXCLUSIVEADDRUSE +: + +722 + `VERB +( + `ci_log +("%s: SO_EXCLUSIVEADDRUSE", +__FUNCTION__ +)); + +723 +u + = ( +s +-> +s_ags + & +CI_SOCK_FLAG_REUSEADDR +)==0; + +724  +u_out +; + +726  +SO_DONTLINGER +: + +727 if + `sock_oc +( +s += +IPPROTO_UDP + ) + +728  +_not +; + +730 +u + = ( +s +-> +s_ags + & +CI_SOCK_FLAG_LINGER +)==0; + +731  +u_out +; + +733  +SO_CONNECT_TIME +: + +736 if + `sock_oc +( +s += +IPPROTO_UDP + || + +737 +s +-> +b +. +e + & +CI_TCP_STATE_NOT_CONNECTED + ) + +738 +u + = -1; + +740 +ci_time_t + +t + = + `ci_t_time_now +( +tif +- +s +-> +ced_time +; + +741  +ms + = + `ci__time_ticks2ms +( +tif +, +t +); + +742 +u + = +ms + / 1000u; + +744  +u_out +; + +746 + `OPTION_UDP_MSG +( +SO_MAX_MSG_SIZE +, +s +, +_not +); + +747 + `OPTION_UDP_MSG +( +SO_MAXDG +, +s +, +_not +); + +748 + `OPTION_UDP_MSG +( +SO_MAXPATHDG +, +s +, +_not +); + +750 + `OPTION_NOT_SUPP +( +SO_OPENTYPE +, +_not +); + +751 + `OPTION_NOT_SUPP +( +SO_USELOOPBACK +, +_not +); + +753 + `OPTION_ALERT_NOT_SUPP + +SO_CONDITIONAL_ACCEPT +, +_not + ); + +755 #ifde +SO_PROTECT + + +756  +SO_PROTECT +: + +759  +_not +; + +764  +SO_TIMESTAMP +: + +765 +u + = !!( +s +-> +cmsg_ags + & +CI_IP_CMSG_TIMESTAMP +); + +766  +u_out +; + +768  +SO_TIMESTAMPNS +: + +769 +u + = !!( +s +-> +cmsg_ags + & +CI_IP_CMSG_TIMESTAMPNS +); + +770  +u_out +; + +772  +ONLOAD_SO_TIMESTAMPING +: + +773 +u + = +s +-> +timeampg_ags +; + +774  +u_out +; + +776  +SO_REUSEPORT +: + +777 +u + = !!( +s +-> +s_ags + & +CI_SOCK_FLAG_REUSEPORT +); + +778  +u_out +; + +780  +ONLOAD_SO_BUSY_POLL +: + +782  +v + = + `oo_cyes64_to_uc +( +tif +, +s +-> +b +. +_cyes +); + +784 if +v + > +INT_MAX + ) + +785 +u + = +INT_MAX +; + +787 +u + = +v +; + +788  +u_out +; + +791 #ifde +SO_SELECT_ERR_QUEUE + + +792  +SO_SELECT_ERR_QUEUE +: + +793 if +s +-> +s_aags + & +CI_SOCK_AFLAG_SELECT_ERR_QUEUE + ) + +794 +u + = 1; + +796 +u + = 0; + +797  +u_out +; + +801  +_not +; + +806 +u_out +: + +807 if()* +ݎ + >= 0 ) { + +808  +mn + = + `CI_MIN +(( +u +), ()* +ݎ +); + +809 + `memy +( +tv +, (*)& +u +, +mn +); + +810 * +ݎ + = +mn +; + +815 +_v +: + +816 + `LOG_SC +( + `log +("%s: " +NS_FMT +" option %itr/lenrror (EINVAL or EFAULT)", + +817 +__FUNCTION__ +, + `NS_PRI_ARGS +( +tif +, +s +), +݊ame +)); + +818 + `RET_WITH_ERRNO +( +EINVAL +); + +820 +_not +: + +821 + `LOG_SC +( + `log +("%s: " +NS_FMT +" unimplemented/bad option %i (ENOPROTOOPT)", + +822 +__FUNCTION__ +, + `NS_PRI_ARGS +( +tif +, +s +), +݊ame +)); + +823 + `RET_WITH_ERRNO +( +ENOPROTOOPT +); + +824 + } +} + +826 #ide +__KERNEL__ + + +828  + $ci_t_s_ + +ci_tif +* +tif +, +ci_sock_cmn +* +s +, + +829  +݊ame +, cڡ * +tv +, +sockn_t + +ݎ +) + +831  +rc + = 0; + +833 + `ci_as +( +tif +); + +836  +݊ame +) { + +837  +IP_OPTIONS +: + +840 + `LOG_U +( + `ci_log +("%s: " +NS_FMT +" unhdd IP_OPTIONS", +__FUNCTION__ +, + +841 + `NS_PRI_ARGS +( +tif +, +s +))); + +842  +_unh +; + +844  +IP_TOS +: + +846  +v +; + +851 if( +rc + = + `t_n_ok + +tv +, +ݎ +, )) ) { + +852 #ifde +__lux__ + + +853 if +ݎ + == 0 ) + +856  +_u +; + +858 +v + = + `ci_g_tv +( +tv +, +ݎ +); + +862 if*(*) +ݎ + > +CI_IP_MAX_TOS + ) + +863  +_v +; + +866 #ifde +__lux__ + + +867 if +s +-> +b +. +e + & +CI_TCP_STATE_TCP + ) { + +869 +v + &= ~3; + +870 +v + | +s +-> +pkt +. + +. +_tos + & 3; + +873 +v + = + `CI_MIN +(v, +CI_IP_MAX_TOS +); + +874 +s +-> +pkt +. + +. +_tos + = ( +ci_ut8 +) +v +; + +875 if +s +-> +b +. +e + = +CI_TCP_STATE_UDP + ) + +876 + `SOCK_TO_UDP +( +s +)-> +hem_pkt +. + +. +_tos + = ( +ci_ut8 +) +v +; + +878 + `LOG_TV +( + `log +("%s: " +NS_FMT +" TCP IP_TOS = %u", +__FUNCTION__ +, + +879 + `NS_PRI_ARGS +( +tif +, +s +), s-> +pkt +. + +. +_tos +)); + +881 #ifde +__lux__ + + +883 +s +-> +so_iܙy + = +ci_tos2iܙy +[((( +v +)>>1) & 0xf)]; + +888  +IP_TTL +: { + +889  +v +; + +891 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +892  +_u +; + +893 +v + = + `ci_g_tv +( +tv +, +ݎ +); + +896 #ide +_WIN32 + + +897 +v + == 0 || + +899 +v + > +CI_IP_MAX_TTL + ) { + +900 +rc + = - +EINVAL +; + +901  +_u +; + +904 +s +-> + +. +_l + = ( +ci_ut8 + +v +; + +905 +s +-> +s_ags + | +CI_SOCK_FLAG_SET_IP_TTL +; + +906 if! + `CI_IP_IS_MULTICAST +( +s +-> +pkt +. + +. +_daddr_be32 +) ) + +907 +s +-> +pkt +. + +. +_l + = s-> + +.ip_ttl; + +908 if +s +-> +b +. +e + = +CI_TCP_STATE_UDP +) { + +909 +ci_udp_e +* +us + = + `SOCK_TO_UDP +( +s +); + +910 i(! + `CI_IP_IS_MULTICAST +( +us +-> +hem_pkt +. + +. +_daddr_be32 +) ) + +911 +us +-> +hem_pkt +. + +. +_l + = +s +-> + +.ip_ttl; + +913 + `LOG_TV +( + `log +("%s: " +NS_FMT +" IP_TTL = %u", +__FUNCTION__ +, + +914 + `NS_PRI_ARGS +( +tif +, +s +), s-> + +. +_l +)); + +919 #i + `defed +( +__lux__ +|| defed( +_WIN32 +) + +920  +IP_PKTINFO +: + +921 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) { + +922 #ifde +__lux__ + + +923 if +ݎ + == 0 ) + +926  +_u +; + +929 i( + `ci_g_tv +( +tv +, +ݎ +)) + +930 +s +-> +cmsg_ags + | +CI_IP_CMSG_PKTINFO +; + +932 +s +-> +cmsg_ags + &~ +CI_IP_CMSG_PKTINFO +; + +936 #ifde +__lux__ + + +937  +IP_MTU_DISCOVER +: + +939  +v +; + +941 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +942  +_u +; + +943 +v + = + `ci_g_tv +( +tv +, +ݎ +); + +945 if +v + < +IP_PMTUDISC_DONT + || + +946 #ifde +IP_PMTUDISC_PROBE + + +947 +v + > +IP_PMTUDISC_PROBE + + +949 +v + > +IP_PMTUDISC_DO + + +952 +rc + = - +EINVAL +; + +953  +_u +; + +956  +v + ) { + +957  +IP_PMTUDISC_DONT +: + +958 +s +-> +s_ags + &~( +CI_SOCK_FLAG_ALWAYS_DF + | +CI_SOCK_FLAG_PMTU_DO +); + +960  +IP_PMTUDISC_DO +: + +961 +s +-> +s_ags + | +CI_SOCK_FLAG_PMTU_DO + | +CI_SOCK_FLAG_ALWAYS_DF +; + +963  +IP_PMTUDISC_WANT +: + +964 +s +-> +s_ags + | +CI_SOCK_FLAG_PMTU_DO +; + +965 +s +-> +s_ags + &~ +CI_SOCK_FLAG_ALWAYS_DF +; + +967 #ifde +IP_PMTUDISC_PROBE + + +968  +IP_PMTUDISC_PROBE +: + +969 +s +-> +s_ags + | +CI_SOCK_FLAG_ALWAYS_DF +; + +970 +s +-> +s_ags + &~ +CI_SOCK_FLAG_PMTU_DO +; + +977  +IP_RECVTOS +: + +978 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +979  +_u +; + +981 i( + `ci_g_tv +( +tv +, +ݎ +)) + +982 +s +-> +cmsg_ags + | +CI_IP_CMSG_TOS +; + +984 +s +-> +cmsg_ags + &~ +CI_IP_CMSG_TOS +; + +987  +IP_RECVERR +: + +988 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +989  +_u +; + +990 i( + `ci_g_tv +( +tv +, +ݎ +)) + +991 +s +-> +so +. +so_debug + | +CI_SOCKOPT_FLAG_IP_RECVERR +; + +993 +s +-> +so +. +so_debug + &~ +CI_SOCKOPT_FLAG_IP_RECVERR +; + +994 if +s +-> +os_sock_us + & +OO_OS_STATUS_ERR + ) { + +995 +oo_ + +sock_id + = + `SC_SP +( +s +); + +996 + `oo_sour_ +( + `ci_tif_g_driv_hd +( +tif +), + +997 +OO_IOC_OS_POLLERR_CLEAR +, & +sock_id +); + +1002 #ifde +IP_TRANSPARENT + + +1003  +IP_TRANSPARENT +: + +1004 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1005  +_u +; + +1006 i( + `ci_g_tv +( +tv +, +ݎ +)) { + +1007 if( + `NI_OPTS +( +tif +). +sb_fr_ab + != + +1008 +CITP_SCALABLE_FILTERS_ENABLE +) || + +1009 ( + `NI_OPTS +( +tif +). +sb_fr_mode + & + +1010 +CITP_SCALABLE_MODE_TPROXY_ACTIVE +) == 0 || + +1011 ! ( +s +-> +b +. +e + & +CI_TCP_STATE_TCP +) ) + +1012  +hdov +; + +1013 if +s +-> +b +. +sb_aags + & +CI_SB_AFLAG_OS_BACKED + ) { + +1017 +rc + = - +EINVAL +; + +1018  +_u +; + +1020 +s +-> +s_ags + | +CI_SOCK_FLAG_TPROXY +; + +1031 if( +s +-> +s_ags + & +CI_SOCK_FLAG_TPROXY +) && + +1032 ( +s +-> +s_ags + & +CI_SOCK_FLAG_BOUND +) ) { + +1033 +rc + = - +EINVAL +; + +1034  +_u +; + +1037 +s +-> +s_ags + &~ +CI_SOCK_FLAG_TPROXY +; + +1045 #ifde +__unix__ + + +1047  +IP_RECVTTL +: + +1048 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1049  +_u +; + +1051 i( + `ci_g_tv +( +tv +, +ݎ +)) + +1052 +s +-> +cmsg_ags + | +CI_IP_CMSG_TTL +; + +1054 +s +-> +cmsg_ags + &~ +CI_IP_CMSG_TTL +; + +1057  +IP_RECVOPTS +: + +1058 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1059  +_u +; + +1061 i( + `ci_g_tv +( +tv +, +ݎ +)) + +1062 +s +-> +cmsg_ags + | +CI_IP_CMSG_RECVOPTS +; + +1064 +s +-> +cmsg_ags + &~ +CI_IP_CMSG_RECVOPTS +; + +1067  +IP_RETOPTS +: + +1068 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1069  +_u +; + +1071 i( + `ci_g_tv +( +tv +, +ݎ +)) + +1072 +s +-> +cmsg_ags + | +CI_IP_CMSG_RETOPTS +; + +1074 +s +-> +cmsg_ags + &~ +CI_IP_CMSG_RETOPTS +; + +1079 + `REPORT_CASE +( +IP_ADD_MEMBERSHIP +) + +1080 + `REPORT_CASE +( +IP_DROP_MEMBERSHIP +) + +1081 #ifde +MCAST_JOIN_GROUP + + +1082 + `REPORT_CASE +( +MCAST_JOIN_GROUP +) + +1083 + `REPORT_CASE +( +MCAST_LEAVE_GROUP +) + +1085 + `REPORT_CASE +( +IP_MULTICAST_IF +) + +1086 + `REPORT_CASE +( +IP_MULTICAST_LOOP +) + +1087 + `REPORT_CASE +( +IP_MULTICAST_TTL +) + +1092 #ifde +_WIN32 + + +1093  +IP_DONTFRAGMENT +: + +1096 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1097  +_u +; + +1099 i(*(*) +tv +) + +1100 +s +-> +s_ags + | +CI_SOCK_FLAG_DF +; + +1102 +s +-> +s_ags + &~ +CI_SOCK_FLAG_DF +; + +1105  +IP_RECEIVE_BROADCAST +: + +1110 +ci_udp_e +* +us +; + +1112 if +s +-> +b +. +e + ! +CI_TCP_STATE_UDP + ) + +1113  +_not +; + +1115 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1116  +_u +; + +1117 +us + = + `SOCK_TO_UDP +( +s +); + +1118 if*(*) +tv + ) + +1119 +us +-> +udpags + | +CI_UDPF_RECV_BROADCAST +; + +1121 +us +-> +udpags + &~ +CI_UDPF_RECV_BROADCAST +; + +1122 #i +CI_CFG_INSTALL_UDP_BROADCAST_FILTERS + + +1123 #r +Frg + +UDP + +b +; +we + +ed + +to + +mod + +frs + + + +IP_RECEIVE_BROADCAST + + +1129 + `OPTION_NOT_SUPP +( +IP_HDRINCL +, +_not +); + +1131 + `OPTION_NOT_TCP + +IP_ADD_SOURCE_MEMBERSHIP +, +s +, +_not +); + +1132 + `OPTION_NOT_TCP + +IP_BLOCK_SOURCE +, +s +, +_not +); + +1133 + `OPTION_NOT_TCP + +IP_DROP_SOURCE_MEMBERSHIP +, +s +, +_not +); + +1134 + `OPTION_NOT_TCP + +IP_UNBLOCK_SOURCE +, +s +, +_not +); + +1139  +_not +; + +1144 +_u +: + +1145 + `LOG_SC +( + `log +("%s: " +NS_FMT +" oi %r/r (EFAULT oEINVAL)", +__FUNCTION__ +, + +1146 + `NS_PRI_ARGS +( +tif +, +s +), +݊ame +)); + +1147 + `RET_WITH_ERRNO +- +rc + ); + +1149 +_not +: + +1150 + `LOG_SC +( + `log +("%s: " +NS_FMT +" unimplemented/bad option %i (ENOPROTOOPT)", + +1151 +__FUNCTION__ +, + `NS_PRI_ARGS +( +tif +, +s +), +݊ame +)); + +1152 +_unh +: + +1153 + `RET_WITH_ERRNO + +ENOPROTOOPT + ); + +1155 #ifde +IP_TRANSPARENT + + +1156 +hdov +: + +1157 + `LOG_SC +( + `log +("%s: " +NS_FMT +" can't handle option %i; handing over", + +1158 +__FUNCTION__ +, + `NS_PRI_ARGS +( +tif +, +s +), +݊ame +)); + +1160  +CI_SOCKET_HANDOVER +; + +1162 + } +} + +1164 #i +CI_CFG_FAKE_IPV6 + + +1166  + $ci_t_s_6 + +ci_tif +* +tif +, +ci_sock_cmn +* +s +, + +1167  +݊ame +, cڡ * +tv +, +sockn_t + +ݎ + ) + +1169 #ifde +IPV6_V6ONLY + + +1170 i( +݊ame + = +IPV6_V6ONLY + && + +1171 ( + `t_n_ok +( +tv +, +ݎ +, ) || *(*)optval)) { + +1172  +CI_SOCKET_HANDOVER +; + +1178 + } +} + +1182  + $ci_t_s_sock +( +ci_tif +* +tif +, +ci_sock_cmn +* +s +, + +1183  +݊ame +, cڡ * +tv +, +sockn_t + +ݎ +) + +1185  +v +; + +1186  +rc +; + +1188 + `ci_as +( +tif +); + +1190  +݊ame +) { + +1191 #i +CI_CFG_TCP_SOCK_STATS + + +1193  +CI_SO_L5_CONFIG_SOCK_STATS +: + +1195 +ci_t_e +* +ts + = (ci_t_e* +s +; + +1196 +ci__s_cfig + * +t_cfig +; + +1197 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, +ci__s_cfig +)) ) + +1198  +_v +; + +1200 +t_cfig + = ( +ci__s_cfig + * +tv +; + +1202 + `NI_CONF +( +tif +). +tcڡ_s + = + +1203 + `ci_t_time_ms2ticks +( +tif +, +t_cfig +-> +timeout +); + +1205 +ts +-> +s_fmt + = +t_cfig +-> +ouut_fmt +; + +1207 + `ci_t_s_ai + +tif +, +ts +, + +1208 +t_cfig +-> +ai_ty +, + +1209 +t_cfig +-> +ouut_fmt +, + +1210 +NULL +, NULL); + +1215 #i +CI_CFG_SUPPORT_STATS_COLLECTION + + +1216  +CI_SO_L5_CONFIG_NETIF_STATS +: + +1218 +ci__s_cfig + * +tif_cfig +; + +1220 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, +ci__s_cfig +)) ) + +1221  +_v +; + +1223 +tif_cfig + = ( +ci__s_cfig + * +tv +; + +1225 + `NI_CONF +( +tif +). +tcڡ_s + = + +1226 + `ci_t_time_ms2ticks +( +tif +, +tif_cfig +-> +timeout +); + +1228 +tif +-> +e +-> +s_fmt + = +tif_cfig +-> +ouut_fmt +; + +1230 + `ci_tif_s_ai + +tif +, + +1231 +tif_cfig +-> +ai_ty +, + +1232 +tif_cfig +-> +ouut_fmt +, + +1233 +NULL +, NULL); + +1238  +SO_KEEPALIVE +: + +1241 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1242  +_v +; + +1244 if(*(*) +tv +) + +1245 +s +-> +s_ags + | +CI_SOCK_FLAG_KALIVE +; + +1247 +s +-> +s_ags + &~ +CI_SOCK_FLAG_KALIVE +; + +1250  +SO_OOBINLINE +: + +1253 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1254  +_v +; + +1256 #ifde +_WIN32 + + +1257 if + `sock_oc +( +s += +IPPROTO_UDP + ) + +1258  +_not +; + +1261 +s +-> +s_ags + = ( *((*) +tv +) ) + +1262 ? +s +-> +s_ags + | +CI_SOCK_FLAG_OOBINLINE + + +1263 : +s +-> +s_ags + & (~ +CI_SOCK_FLAG_OOBINLINE +); + +1266  +SO_RCVLOWAT +: { + +1267  +v +; + +1268 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1269  +_v +; + +1270 +v + = *(* +tv +; + +1272 #ifde +__lux__ + + +1273 if +v + < 0) + +1274 +v + = +INT_MAX +; + +1276 +s +-> +so +. +rcvlow + = +v + ? val : 1; + +1278 if +v + < 1 ) { + +1279 +rc + = - +EINVAL +; + +1280  +_v +; + +1282 +s +-> +so +. +rcvlow + = +v +; + +1287  +SO_DONTROUTE +: + +1289 #ifde +_WIN32 + + +1290 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1291  +_v +; + +1293 if(*(*) +tv +) + +1294 +s +-> +s_ags + | +CI_SOCK_FLAG_DONTROUTE +; + +1296 +s +-> +s_ags + &~ +CI_SOCK_FLAG_DONTROUTE +; + +1300 + `LOG_U +( + `ci_log +("%s: " +NS_FMT +" SO_DONTROUTE seen (not supported)", + +1301 +__FUNCTION__ +, + `NS_PRI_ARGS +( +tif +, +s +))); + +1302  +_not +; + +1305  +SO_BROADCAST +: + +1307 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1308  +_v +; + +1310 if(*(*) +tv +) + +1311 +s +-> +s_ags + | +CI_SOCK_FLAG_BROADCAST +; + +1313 +s +-> +s_ags + &~ +CI_SOCK_FLAG_BROADCAST +; + +1316  +SO_REUSEADDR +: + +1317 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1318  +_v +; + +1319 if*(* +tv + ) + +1320 +s +-> +s_ags + | +CI_SOCK_FLAG_REUSEADDR +; + +1322 +s +-> +s_ags + &~ +CI_SOCK_FLAG_REUSEADDR +; + +1325  +SO_SNDBUF +: + +1327 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1328  +_v +; + +1329 +v + = *(* +tv +; + +1330 if +s +-> +b +. +e + & +CI_TCP_STATE_TCP + ) { + +1331 +v + = + `CI_MIN +(v, ( + `NI_OPTS +( +tif +). +t_dbuf_max +); + +1332 +s +-> +so +. +dbuf + = + `CI_MAX +( + `oo_adju_SO_XBUF +( +v +), ( + `NI_OPTS +( +tif +). +t_dbuf_m +); + +1337 if! ( +s +-> +b +. +e + & +CI_TCP_STATE_NOT_CONNECTED +) ) + +1338 + `ci_t_t_dbuf +( +tif +, + `SOCK_TO_TCP +( +s +)); + +1341 +v + = + `CI_MIN +(v, ( + `NI_OPTS +( +tif +). +udp_dbuf_max +); + +1342 +s +-> +so +. +dbuf + = + `CI_MAX +( + `oo_adju_SO_XBUF +( +v +), ( + `NI_OPTS +( +tif +). +udp_dbuf_m +); + +1344 +s +-> +s_ags + | +CI_SOCK_FLAG_SET_SNDBUF +; + +1347  +SO_RCVBUF +: + +1349 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1350  +_v +; + +1351 +v + = *(* +tv +; + +1352 if +s +-> +b +. +e + & +CI_TCP_STATE_TCP + ) { + +1353 +v + = + `CI_MIN +(v, ( + `NI_OPTS +( +tif +). +t_rcvbuf_max +); + +1354 +s +-> +so +. +rcvbuf + = + `CI_MAX +( + `oo_adju_SO_XBUF +( +v +), ( + `NI_OPTS +( +tif +). +t_rcvbuf_m +); + +1355 if~ +s +-> +b +. +e + & +CI_TCP_STATE_NOT_CONNECTED + ) + +1356 + `ci_t_t_rcvbuf +( +tif +, + `SOCK_TO_TCP +( +s +)); + +1359 +v + = + `CI_MIN +(v, ( + `NI_OPTS +( +tif +). +udp_rcvbuf_max +); + +1360 +s +-> +so +. +rcvbuf + = + `CI_MAX +( + `oo_adju_SO_XBUF +( +v +), ( + `NI_OPTS +( +tif +). +udp_rcvbuf_m +); + +1362 +s +-> +s_ags + | +CI_SOCK_FLAG_SET_RCVBUF +; + +1365  +SO_LINGER +: + +1367  +lg + * +l + = (lg*) +tv +; + +1370 if( +rc + = + `t_n_ok +( +tv +, +ݎ +,  +lg +)) ) + +1371  +_v +; + +1373 if +l +-> +l_off + ) { + +1374 +s +-> +s_ags + | +CI_SOCK_FLAG_LINGER +; + +1375 +s +-> +so +. +lg + = +l +-> +l_lg +; + +1377 +s +-> +s_ags + &~ +CI_SOCK_FLAG_LINGER +; + +1379 + `VERB +( + `ci_log +("%s: onoff:%d fl:%x", +__FUNCTION__ +, + +1380 +l +-> +l_off +, +s +-> +s_ags +)); + +1384 #ifde +__lux__ + + +1385  +SO_PRIORITY +: + +1386 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, +ci_pkt_iܙy_t +)) ) + +1387  +_v +; + +1390 +s +-> +so_iܙy + = *( +ci_pkt_iܙy_t + *) +tv +; + +1393  +SO_BINDTODEVICE +: + +1394 +rc + = + `ci_sock_bdtodevi +( +tif +, +s +, +tv +, +ݎ +); + +1395 if +rc + =0 ||= +CI_SOCKET_HANDOVER + ) + +1396  +rc +; + +1398  +_h +; + +1402  +SO_DEBUG +: + +1403 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1404  +_v +; + +1406 i(*(*) +tv +) + +1407 +s +-> +so +. +so_debug + | +CI_SOCKOPT_FLAG_SO_DEBUG +; + +1409 +s +-> +so +. +so_debug + &~ +CI_SOCKOPT_FLAG_SO_DEBUG +; + +1412 #ifde +_WIN32 + + +1413  +SO_GROUP_ID +: + +1414 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1415  +_v +; + +1418  +SO_GROUP_PRIORITY +: + +1419 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1420  +_v +; + +1424  +SO_EXCLUSIVEADDRUSE +: + +1428 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1429  +_v +; + +1430 if(*(*) +tv +) + +1431 +s +-> +s_ags + &~ +CI_SOCK_FLAG_REUSEADDR +; + +1433 +s +-> +s_ags + | +CI_SOCK_FLAG_REUSEADDR +; + +1436  +SO_DONTLINGER +: + +1437 + `VERB +( + `ci_log +("%s: SO_DONTLINGER", +__FUNCTION__ +)); + +1438 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1439  +_v +; + +1441 i(*(*) +tv +) + +1442 +s +-> +s_ags + &~ +CI_SOCK_FLAG_LINGER +; + +1444 +s +-> +s_ags + | +CI_SOCK_FLAG_LINGER +; + +1447 #i + `defed +( +_WIN32 +&& defed( +SO_PROTECT +) + +1448  +SO_PROTECT +: + +1450 + `LOG_U +( + `ci_log +("%s: *** SO_PROTECT s***", +__FUNCTION__ +)); + +1451  +_not +; + +1454 + `OPTION_NOT_SUPP + +SO_OPENTYPE +, +_not + ); + +1455 + `OPTION_ALERT_NOT_SUPP + +SO_CONDITIONAL_ACCEPT +, +_not + ); + +1457 + `OPTION_ABORT_NOT_EXP + +SO_UPDATE_CONNECT_CONTEXT + ); + +1458 + `OPTION_ABORT_NOT_EXP + +SO_UPDATE_ACCEPT_CONTEXT + ); + +1462  +SO_TIMESTAMP +: + +1463 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1464  +_v +; + +1465 if + `ci_g_tv +( +tv +, +ݎ +) ) + +1466 +s +-> +cmsg_ags + | +CI_IP_CMSG_TIMESTAMP +; + +1468 +s +-> +cmsg_ags + &~ +CI_IP_CMSG_TIMESTAMP +; + +1471  +SO_TIMESTAMPNS +: + +1472 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1473  +_v +; + +1474 if + `ci_g_tv +( +tv +, +ݎ +) ) + +1475 +s +-> +cmsg_ags + | +CI_IP_CMSG_TIMESTAMPNS +; + +1477 +s +-> +cmsg_ags + &~ +CI_IP_CMSG_TIMESTAMPNS +; + +1480  +SO_REUSEPORT +: + +1481 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1482  +_v +; + +1483 if*(* +tv + ) + +1484 +s +-> +s_ags + | +CI_SOCK_FLAG_REUSEPORT +; + +1486 +s +-> +s_ags + &~ +CI_SOCK_FLAG_REUSEPORT +; + +1489  +ONLOAD_SO_BUSY_POLL +: + +1491  +v +; + +1492 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1493  +_v +; + +1494 +v + = *(* +tv +; + +1496 if +v + < 0 ) + +1497  +_v +; + +1499 +s +-> +b +. +_cyes + = + `oo_uc_to_cyes64 +( +tif +, + +1500 +v + = +INT_MAX + ? -1 : val); + +1504  +ONLOAD_SO_TIMESTAMPING +: + +1505 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1506  +_v +; + +1507 +v + = + `ci_g_tv +( +tv +, +ݎ +); + +1508 +rc + = - +EINVAL +; + +1509 if +v + & ~( +ONLOAD_SOF_TIMESTAMPING_MASK + | + +1510 +ONLOAD_SOF_TIMESTAMPING_STREAM +) ) + +1511  +_v +; + +1512 if( +v + & +ONLOAD_SOF_TIMESTAMPING_STREAM +) && + +1513 ! ( +s +-> +b +. +e + & +CI_TCP_STATE_TCP +) || + +1514 ! ( +v + & +ONLOAD_SOF_TIMESTAMPING_TX_HARDWARE +) ) ) + +1515  +_v +; + +1517 if( +v + & +ONLOAD_SOF_TIMESTAMPING_TX_HARDWARE +) ) { + +1518  +tf_i +; + +1519  +some_good + = 0; + +1521 + `OO_STACK_FOR_EACH_INTF_I +( +tif +, +tf_i +) { + +1522 if +tif +-> +e +-> +nic +[ +tf_i +]. +oo_vi_ags + & + +1523 +OO_VI_FLAGS_TX_HW_TS_EN + ) + +1524 +some_good + = 1; + +1526 + `LOG_U +( + `log +("WARNING: Request for SOF_TIMESTAMPING_TX_HARDWARE when " + +1530 + `ci_tif_tf_i_to_ba_ifdex +( +tif +, +tf_i +))); + +1532 if! +some_good + ) + +1533 + `log +("WARNING: Request for SOF_TIMESTAMPING_TX_HARDWARE when " + +1537 if( +v + & +ONLOAD_SOF_TIMESTAMPING_RX_HARDWARE +) ) { + +1538  +tf_i +; + +1539  +some_good + = 0; + +1541 + `OO_STACK_FOR_EACH_INTF_I +( +tif +, +tf_i +) { + +1542 if +tif +-> +e +-> +nic +[ +tf_i +]. +oo_vi_ags + & + +1543 +OO_VI_FLAGS_RX_HW_TS_EN + ) + +1544 +some_good + = 1; + +1546 + `LOG_U +( + `log +("WARNING: Request for SOF_TIMESTAMPING_RX_HARDWARE when " + +1550 + `ci_tif_tf_i_to_ba_ifdex +( +tif +, +tf_i +))); + +1552 if! +some_good + ) + +1553 + `log +("WARNING: Request for SOF_TIMESTAMPING_RX_HARDWARE when " + +1560 if +v + & +ONLOAD_SOF_TIMESTAMPING_OPT_ID + && + +1561 ~ +s +-> +timeampg_ags + & +ONLOAD_SOF_TIMESTAMPING_OPT_ID + ) { + +1562 +s +-> +ts_key + = 0; + +1563 if +s +-> +b +. +e + & +CI_TCP_STATE_TCP_CONN + ) + +1564 +s +-> +ts_key + = + `SOCK_TO_TCP +(s)-> +d_u +; + +1567 +rc + = 0; + +1568 +s +-> +timeampg_ags + = +v +; + +1569 i( +s +-> +b +. +e + & +CI_TCP_STATE_TCP +) && + +1570 (~ +s +-> +b +. +e + & +CI_TCP_STATE_NOT_CONNECTED +) ) + +1571 + `ci_t_t_dbuf +( +tif +, + `SOCK_TO_TCP +( +s +)); + +1574 if +v + & ( +ONLOAD_SOF_TIMESTAMPING_RX_HARDWARE + | + +1575 +ONLOAD_SOF_TIMESTAMPING_RX_SOFTWARE +) ) + +1576 +s +-> +cmsg_ags + | +CI_IP_CMSG_TIMESTAMPING +; + +1578 +s +-> +cmsg_ags + &~ +CI_IP_CMSG_TIMESTAMPING +; + +1581 #ifde +SO_SELECT_ERR_QUEUE + + +1582  +SO_SELECT_ERR_QUEUE +: + +1583 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +1584  +_v +; + +1585 if + `ci_g_tv +( +tv +, +ݎ +) ) + +1586 + `ci_b_t +(& +s +-> +s_aags +, +CI_SOCK_AFLAG_SELECT_ERR_QUEUE_BIT +); + +1588 + `ci_b_r +(& +s +-> +s_aags +, +CI_SOCK_AFLAG_SELECT_ERR_QUEUE_BIT +); + +1597  +_not +; + +1603 +_v +: + +1604 + `LOG_SC +( + `log +("%s: " +NS_FMT +" option %itr/lenrror (EINVAL or EFAULT)", + +1605 +__FUNCTION__ +, + `NS_PRI_ARGS +( +tif +, +s +), +݊ame +)); + +1606 + `RET_WITH_ERRNO +- +rc + ); + +1608 +_not +: + +1609 + `LOG_SC +( + `log +("%s: " +NS_FMT +" unimplemented/bad option %i (ENOPROTOOPT)", + +1610 +__FUNCTION__ +, + `NS_PRI_ARGS +( +tif +, +s +), +݊ame +)); + +1611 + `RET_WITH_ERRNO + +ENOPROTOOPT + ); + +1613 +_h +: + +1614 + `RET_WITH_ERRNO +(- +rc +); + +1615 + } +} + +1618  + $ci_t_is_g_upt +( +v +,  +݊ame +, cڡ * +tv +, + +1619 +sockn_t + +ݎ +) + +1621 if +v + = +SOL_SOCKET + && +݊ame + = +SO_REUSEPORT + && + +1622 + `t_ok +( +tv +, +ݎ +, ) && *(*)optval == 1 ) + +1625 + } +} + +1627  + $ci_tsockt_os__igne +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +,  +r +, + +1628  +v +,  +݊ame +, + +1629 cڡ * +tv +, +sockn_t + +ݎ +) + +1631 if +v + = +SOL_SOCKET + && +݊ame + = +ONLOAD_SO_BUSY_POLL + && + +1632 +ݎ + >= () ) + +1634 if( +s +-> +b +. +e + & +CI_TCP_STATE_TCP +&& +v + = +SOL_SOCKET + && + +1635 +݊ame + = +SO_TIMESTAMP + || om= +SO_TIMESTAMPNS + || + +1636 +݊ame + = +ONLOAD_SO_TIMESTAMPING + ) && + +1637 +ݎ + >= () ) + +1640 + } +} + +1648  + $ci_t_s_sock_nock +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +,  +݊ame +, + +1649 cڡ * +tv +, +sockn_t + +ݎ +) + +1651  +rc + = 1; + +1653  +݊ame + ) { + +1654  +SO_RCVTIMEO +: { + +1655 #ifde +_WIN32 + + +1656 +DWORD + +dw +; + +1657 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, +DWORD +)) ) + +1658  +_v +; + +1659 +dw + = *( +DWORD +*) +tv +; + +1660 if! +dw + ) + +1661 + `ci_b_r +(& +s +-> +s_aags +, +CI_SOCK_AFLAG_RCVTIMEO_BIT +); + +1663 + `ci_b_t +(& +s +-> +s_aags +, +CI_SOCK_AFLAG_RCVTIMEO_BIT +); + +1664 +s +-> +so +. +rcvtimeo +. +tv_c + = ( +ci_t32 +)( +dw +/1000); + +1665 +s +-> +so +. +rcvtimeo +. +tv_uc + = ( +ci_t32 +)(( +dw +%1000)*1000); + +1667  +timev + * +tv + = (timev *) +tv +; + +1668 +ci_ut64 + +timeo_uc +; + +1669 if( +rc + = + `t_n_ok +( +tv +, +ݎ +,  +timev +)) ) + +1670  +_v +; + +1671 +timeo_uc + = +tv +-> +tv_c + * 1000000ULL +v-> +tv_uc +; + +1672 if +timeo_uc + == 0 ) + +1673 +s +-> +so +. +rcvtimeo_mc + = 0; + +1674 if +timeo_uc + > 0xffffffffULL * 1000 ) + +1675 +s +-> +so +. +rcvtimeo_mc + = -1; + +1676 if +timeo_uc + < 1000 ) + +1677 +s +-> +so +. +rcvtimeo_mc + = 1; + +1679 +s +-> +so +. +rcvtimeo_mc + = +tv +-> +tv_c + * 1000 +v-> +tv_uc + / 1000; + +1681 +rc + = 0; + +1685  +SO_SNDTIMEO +: { + +1686 #ifde +_WIN32 + + +1687 +DWORD + +dw +; + +1688 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, +DWORD +)) ) + +1689  +_v +; + +1690 +dw + = *( +DWORD +*) +tv +; + +1691 if! +dw + ) + +1692 + `ci_b_r +(& +s +-> +s_aags +, +CI_SOCK_AFLAG_SNDTIMEO_BIT +); + +1694 + `ci_b_t +(& +s +-> +s_aags +, +CI_SOCK_AFLAG_SNDTIMEO_BIT +); + +1695 +s +-> +so +. +dtimeo +. +tv_c + = ( +ci_t32 +)( +dw +/1000); + +1696 +s +-> +so +. +dtimeo +. +tv_uc + = ( +ci_t32 +)(( +dw +%1000)*1000); + +1698  +timev + * +tv + = (timev *) +tv +; + +1699 +ci_ut64 + +timeo_uc +; + +1700 if( +rc + = + `t_n_ok +( +tv +, +ݎ +,  +timev +)) ) + +1701  +_v +; + +1702 +timeo_uc + = +tv +-> +tv_c + * 1000000ULL +v-> +tv_uc +; + +1703 if +timeo_uc + == 0 ) + +1704 +s +-> +so +. +dtimeo_mc + = 0; + +1705 if +timeo_uc + > 0xffffffffULL * 1000 ) + +1706 +s +-> +so +. +dtimeo_mc + = -1; + +1707 if +timeo_uc + < 1000 ) + +1708 +s +-> +so +. +dtimeo_mc + = 1; + +1710 +s +-> +so +. +dtimeo_mc + = +tv +-> +tv_c + * 1000 +v-> +tv_uc + / 1000; + +1712 +rc + = 0; + +1716 #ifde +_WIN32 + + +1717  +SO_ERROR +: + +1718 if + `t_ok +( +tv +, +ݎ +, )) { + +1722 +s +-> +so_r + = *(*) +tv +; + +1724 +rc + = 0; + +1728  +rc +; + +1730 +_v +: + +1731 + `RET_WITH_ERRNO +(- +rc +); + +1732 + } +} + + @cplane_ops.c + +65  + ~ + +69 #ide +TRUE + + +70  + #TRUE + 1 + + ) + +71  + #FALSE + 0 + + ) + +76 #ifde +__KERNEL__ + + +77  + ~ + +90  + #DPRINTF + +ci_log + + + ) + +92  + #CODEID + "(ld)" + + ) + +105 +ci_le +  + $ci_l_aves__ack +(cڡ +ci_ul_mibs_t + * +ur +, + +106 +ci_tif + * +ni +, +ci_t16 + +bd_rowid +) + +112 +ci_bd_row_t +* +bd_row +; + +113 +ci_hwpt_id_t + +hwpt +; + +115 + `ci_as +( +bd_rowid + >0 && bd_rowid < +ur +-> +bdfo_ub +-> +rows_max +); + +116 +bd_row + = & +ur +-> +bdfo_ub +-> +bd +[ +bd_rowid +]; + +118  +bd_row +-> +xt + ! +CICP_BOND_ROW_NEXT_BAD + ) { + +119 + `ci_as +( +bd_row +-> +xt + < +ur +-> +bdfo_ub +-> +rows_max +); + +120 +bd_row + = & +ur +-> +bdfo_ub +-> +bd +[bd_row-> +xt +]; + +121 if +bd_row +-> +ty + ! +CICP_BOND_ROW_TYPE_SLAVE + ) + +123 +hwpt + = +bd_row +-> +ave +.hwport; + +124 if( +hwpt + > +CPLANE_MAX_REGISTER_INTERFACES + || + +125 + `__ci_hwpt_to_tf_i +( +ni +, +hwpt +) < 0 ) + +130 + } +} + +133 +ci_le +  + +134 + $ci__che_is_ldab +( +ci_tif +* +ni +, +ci__ched_hdrs +* +che +) + +141 +ci_hwpt_id_t + +hwpt + = +che +->hwport; + +142 + `ci_as +( +hwpt + = +CI_HWPORT_ID_BAD + || + +143 ( +hwpt + < +CPLANE_MAX_REGISTER_INTERFACES +); + +144  ( +hwpt + < +CPLANE_MAX_REGISTER_INTERFACES + && + +145 ( +che +-> +tf_i + = + `__ci_hwpt_to_tf_i +( +ni +, +hwpt +)) >= 0; + +146 + } +} + +149 #i +CPLANE_TEAMING + + +151 + $ci_ur_bd_hash_g_hwpt +( +ci_tif +* +ni +, +ci__ched_hdrs +* +che +, + +152 cڡ +ci_έ_row_t +* +έ_row +, + +153 +ci_ut16 + +c_pt_be16 +, + +154 +ci_p_t + +p +) + +159  +ci_hash_e + +hs +; + +161 if +c_pt_be16 + !0 || +che +-> +dpt_be16 + != 0) + +162 +hs +. +ags + = +CICP_HASH_STATE_FLAGS_IS_TCP_UDP + | + +163 +CICP_HASH_STATE_FLAGS_IS_IP +; + +165 +hs +. +ags + = +CICP_HASH_STATE_FLAGS_IS_IP +; + +166 + `CI_MAC_ADDR_SET +(& +hs +. +d_mac +, + `ci__che_h_dho +( +che +)); + +167 + `CI_MAC_ADDR_SET +(& +hs +. +c_mac +, + `ci__che_h_sho +( +che +)); + +168 +hs +. +c_addr_be32 + = +che +-> +_ddr_be32 +; + +169 +hs +. +d_addr_be32 + = +che +-> + +. +_daddr_be32 +; + +170 +hs +. +c_pt_be16 + = src_port_be16; + +171 +hs +. +d_pt_be16 + = +che +-> +dpt_be16 +; + +172 +che +-> +hwpt + = + `ci_hwpt_bd_g +( + `CICP_HANDLE +( +ni +), & +p +, + +173 +έ_row +-> +bd_rowid +, & +hs +); + +174  ! + `ci__che_is_ldab +( +ni +, +che +); + +175 + } +} + +179 +ci_le +  + +180 + $ci_m_u_gw_mac +(cڡ +ci_fwd_row_t +* +row +, + +181 cڡ  +oo_sock_ +* +sock_ +) + +199 if +row + ! +NULL + &&ow-> +f_h + !0 &&ow-> +det_t + != 0 ) { + +200 if +sock_ +-> +_mui_if + = +CI_IFID_BAD + ) { + +201  ( +sock_ +-> +sock__ags + & + +202 ( +OO_SCP_LADDR_BOUND + | +OO_SCP_CONNECTED +)) == 0; + +205  +sock_ +-> +_mui_if + = +row +-> +de_ifdex +; + +209 + } +} + +212 +ci_le +  + +213 + $ci__che__m_mac +( +ci_tif +* +ni +, +ci__ched_hdrs +* +che +, + +214  +daddr_be32 +) + +216 +ci_ut8 +* +dho + = + `ci__che_h_dho +( +che +); + +217  +daddr + = + `CI_BSWAP_BE32 +( +daddr_be32 +); + +218 +dho +[0] = 1; + +219 +dho +[1] = 0; + +220 +dho +[2] = 0x5e; + +221 +dho +[3] = ( +daddr + >> 16) & 0x7f; + +222 +dho +[4] = ( +daddr + >> 8) & 0xff; + +223 +dho +[5] = +daddr + & 0xff; + +224 + `ci_mac_t_moly_vid +( + `CICP_USER_MIBS +( + `CICP_HANDLE +( +ni +)). +mac_ub +, + +225 & +che +-> +mac_gry +); + +226 +che +-> +xth + = 0; + +227 + } +} + +231 + $ci_ur_ve +( +ci_tif +* +ni +, + +232 +ci__ched_hdrs +* +che +, + +233 cڡ  +oo_sock_ +* +sock_ +) + +235 cڡ +ci_ul_mibs_t +* +ur + = & + `CICP_USER_MIBS +( + `CICP_HANDLE +( +ni +)); + +236 +ci_fwdfo_t +* +fwdt + = +ur +-> +fwdfo_ub +; + +237 +ci_έfo_t +* +έt + = +ur +-> +έfo_ub +; + +238 cڡ +ci_fwd_row_t +* +row +; + +239 cڡ +ci_έ_row_t +* +ow + = +NULL +; + +240 +ci_mac_vfo_t + +mac_fo +; + +241  +oc +; + +243 + `ci_as +( +ur +); + +244 + `ci_as +( +έt +); + +245 ( +έt +; + +246 + `CI_DEBUG +( +che +-> +us + = -1); + +248 if( + `CI_UNLIKELY + + `CI_IP_IS_MULTICAST +( +che +-> + +. +_daddr_be32 +) && + +249 ( +sock_ +-> +sock__ags + & +OO_SCP_NO_MULTICAST +) )) + +250  +ou_no_vlock +; + +252 +aga +: + +253 + `CICP_READ_LOCK +( + `CICP_HANDLE +( +ni +), +έt +-> +vsi +) + +261 +row + = + `_ci_fwd_fd_ +( +fwdt +, +che +-> + +. +_daddr_be32 +, + +262 +sock_ +-> +so_bdtodevi +); + +263 if +row + ! +NULL + ) { + +264 +ow + = & +ur +-> +έfo_ub +-> +έ +[ +row +-> +έ_rowid +]; + +265 if +row +-> +de_ifdex + ! +ow +-> +ifdex +) { + +270 + `LOG_U +( + `ci_log +("WARNING in %s: unexpected data inhe controllane " + +273 +__func__ +, + `_addr_r +( +che +-> + +. +_daddr_be32 +), + +274 +row +-> +de_ifdex +,ow-> +έ_rowid +, +ow +-> +ifdex +)); + +275 #ifde +__KERNEL__ + + +276  +ou +; + +278  +aga +; + +283 if +sock_ +-> +so_bdtodevi + ! +CI_IFID_BAD + ) { + +284 +che +-> +ifdex + = +sock_ +-> +so_bdtodevi +; + +285  +hd_bound_dev +; + +287 if + `CI_IP_IS_MULTICAST +( +che +-> + +. +_daddr_be32 +) && + +288 +sock_ +-> +_mui_if + ! +CI_IFID_BAD + ) { + +295 +che +-> +ifdex + = +sock_ +-> +_mui_if +; + +298 +row + = +NULL +; + +299 +hd_bound_dev +: + +300 +ow + = + `ci_έ_fd_ifid +( +ur +-> +έfo_ub +, +che +-> +ifdex +); + +301 if +ow + = +NULL + ) + +302  +ou +; + +303 +che +-> +mtu + = +ow +->mtu; + +304 +che +-> +hwpt + = +ow +->hwport; + +305 +che +-> +p + = +ow +->encap; + +307 if! + `ci__che_is_ldab +( +ni +, +che +) + +308 #i +CPLANE_TEAMING + + +309 || ( ( +che +-> +p +. +ty + & +CICP_LLAP_TYPE_BOND +) && + +310 ! + `ci_l_aves__ack +( +ur +, +ni +, +ow +-> +bd_rowid +) ) + +313  +ou +; + +325 if +sock_ +-> +_ddr_be32 + != 0 ) + +326 +che +-> +_ddr_be32 + = +sock_ +-> +_ddr_be32 +; + +327 if +sock_ +-> +_mui_if + ! +CI_IFID_BAD + && + +328 +sock_ +-> +_mui_if_ddr_be32 + != 0 ) + +329 +che +-> +_ddr_be32 + = +sock_ +-> +_mui_if_ddr_be32 +; + +335 if +row + ! +NULL + ) + +336 +che +-> +_ddr_be32 + = +row +-> +ef_sour +; + +337 if +ow +-> +_addr + ! +INADDR_ANY + ) + +338 +che +-> +_ddr_be32 + = +ow +-> +_addr +; + +340  +ou +; + +343 if( + `CI_UNLIKELY + +row + = +NULL + )) + +344  +nou +; + +345 if( + `CI_UNLIKELY + +row +-> +ty + = +CICP_ROUTE_ALIEN + )) + +346  +ou +; + +347 +che +-> +mtu + = +row +->mtu =0 ? +ow +->mtu :ow->mtu; + +348 + `ci_as +( +che +-> +mtu +); + +350 if +che +-> + +. +_daddr_be32 + = +row +-> +ef_sour + || + +351 +ow +-> +p +. +ty + = +CICP_LLAP_TYPE_LOOP +) { + +352 +che +-> +us + = +rc_loou +; + +353 +che +-> +p +. +ty + = +CICP_LLAP_TYPE_SFC +; + +354 +che +-> +h_offt + = 4; + +355 +che +-> +tf_i + = +OO_INTF_I_LOOPBACK +; + +356 + `ci_mac_t_moly_vid +( + `CICP_USER_MIBS +( + `CICP_HANDLE +( +ni +)). +mac_ub +, + +357 & +che +-> +mac_gry +); + +358  +check_vlock_d_out +; + +360 +che +-> +hwpt + = +ow +->hwport; + +361 if! + `ci__che_is_ldab +( +ni +, +che +) + +362 #i +CPLANE_TEAMING + + +363 || ( ( +ow +-> +p +. +ty + & +CICP_LLAP_TYPE_BOND +) && + +364 ! + `ci_l_aves__ack +( +ur +, +ni +, +ow +-> +bd_rowid +) ) + +367  +ou +; + +368 +che +-> +ifdex + = +row +-> +de_ifdex +; + +369 if +sock_ +-> +_ddr_be32 + != 0 ) + +370 +che +-> +_ddr_be32 + = +sock_ +-> +_ddr_be32 +; + +372 +che +-> +_ddr_be32 + = +row +-> +ef_sour +; + +373 +che +-> +p + = +ow +->encap; + +377 + `ci_che_vn_t +( +che +); + +378 + `memy +( + `ci__che_h_sho +( +che +), +ow +-> +mac +, +ETH_ALEN +); + +381 if + `CI_IP_IS_MULTICAST +( +che +-> + +. +_daddr_be32 +) ) { + +382 +che +-> + +. +_l + = +sock_ +-> +_m_l +; + +383 if! + `ci_m_u_gw_mac +( +row +, +sock_ +) ) { + +384 + `ci__che__m_mac +( +ni +, +che +, ipche-> + +. +_daddr_be32 +); + +385 #i +CPLANE_TEAMING + + +386 if +che +-> +p +. +ty + & +CICP_LLAP_TYPE_USES_HASH + ) + +387 if + `ci_ur_bd_hash_g_hwpt +( +ni +, +che +, +ow +, + +388 +sock_ +-> +t_be16 +, + +389 +che +-> +p +) != 0 ) + +390  +ou +; + +392 +che +-> +us + = +rc_sucss +; + +393  +check_vlock_d_out +; + +395 +che +-> +xth + = +row +-> +f_h +; + +398 +che +-> + +. +_l + = +sock_ +->ip_ttl; + +399 if +row + ! +NULL + &&ow-> +f_h + != 0 && + +400 ( +sock_ +-> +so_bdtodevi + = +CI_IFID_BAD + || + +401 +che +-> +ifdex + = +row +-> +de_ifdex +) ) { + +402 +che +-> +xth + = +row +-> +f_h +; + +405 +che +-> +xth + = ipche-> + +. +_daddr_be32 +; + +417 +oc + = + `ci_mac_g +( +ur +-> +mac_ub +, +che +-> +ifdex +, ipche-> +xth +, + +418 + `ci__che_h_dho +( +che +), & +mac_fo +); + +420 if +oc + == 0 ) { + +421 #i +CPLANE_TEAMING + + +422 if +che +-> +p +. +ty + & +CICP_LLAP_TYPE_USES_HASH + ) + +423 if + `ci_ur_bd_hash_g_hwpt +( +ni +, +che +, +ow +, +sock_ +-> +t_be16 +, + +424 +che +-> +p +) != 0 ) + +425  +ou +; + +427 +che +-> +mac_gry + = +mac_fo +; + +428 +che +-> +us + = +rc_sucss +; + +429 if +ur +-> +mac_ub +-> +mac +[ +mac_fo +. +row_dex +]. +ed_upde + ) { + +430 +che +-> +ags + | +CI_IP_CACHE_NEED_UPDATE_SOON +; + +431 if +ur +-> +mac_ub +-> +mac +[ +mac_fo +. +row_dex +]. +ed_upde + == + +432 +CICP_MAC_ROW_NEED_UPDATE_STALE + ) + +433 +che +-> +ags + | +CI_IP_CACHE_NEED_UPDATE_STALE +; + +435  +check_vlock_d_out +; + +437 if +oc + =- +EDESTADDRREQ + ) { + +439 +che +-> +mac_gry +. +row_vsi + = +CI_VERLOCK_BAD +; + +440 +che +-> +us + = +rc_nomac +; + +441  +check_vlock_d_out +; + +443 if +oc + =- +EAGAIN + ) { + +444 #ifde +__KERNEL__ + + +447 + `ci_uock +( +_cڌ_e +); + +449  +aga +; + +456 +che +-> +us + = ( +ci_t16 + +oc +; + +457 if +che +-> +us + =- +EHOSTUNREACH + ) { + +463 +che +-> +mac_gry +. +row_vsi + = +CI_VERLOCK_BAD +; + +464 +che +-> +us + = +rc_nomac +; + +465  +check_vlock_d_out +; + +467  +n_ldab +; + +470 +check_vlock_d_out +: + +472 + `CICP_READ_UNLOCK +( + `CICP_HANDLE +( +ni +), +έt +-> +vsi +) + +473 +out +: + +474 + `ci_as +( +che +-> +us + != -1); + +477 +n_ldab +: + +478 +che +-> +hwpt + = +CI_HWPORT_ID_BAD +; + +479 +che +-> +tf_i + = -1; + +480 + `ci_mac_t_moly_vid +( + `CICP_USER_MIBS +( + `CICP_HANDLE +( +ni +)). +mac_ub +, + +481 & +che +-> +mac_gry +); + +482  +check_vlock_d_out +; + +484 +ou +: + +485 +che +-> +us + = +rc_ou +; + +486  +n_ldab +; + +488 +nou +: + +489 +che +-> +us + = +rc_nou +; + +490  +n_ldab +; + +492 +ou_no_vlock +: + +493 +che +-> +hwpt + = +CI_HWPORT_ID_BAD +; + +494 +che +-> +tf_i + = -1; + +495 + `ci_mac_t_moly_vid +( + `CICP_USER_MIBS +( + `CICP_HANDLE +( +ni +)). +mac_ub +, + +496 & +che +-> +mac_gry +); + +497 +che +-> +us + = +rc_ou +; + +498  +out +; + +499 + } +} + +503 + $ci__che_upde_om +( +ci_tif +* +ni +, +ci__ched_hdrs +* +che +, + +504 cڡ +ci__ched_hdrs +* +om_che +) + +509 + `ci_as_equ +( +che +-> + +. +_daddr_be32 +, +om_che +->ip.ip_daddr_be32); + +510 + `ci_as_equ +( +che +-> +dpt_be16 +, +om_che +->dport_be16); + +512 +che +-> +mac_gry + = +om_che +->mac_integrity; + +513 +che +-> +_ddr_be32 + = +om_che +->ip_saddr_be32; + +514 +che +-> + +. +_l + = +om_che +->ip.ip_ttl; + +515 +che +-> +us + = +om_che +->status; + +516 +che +-> +ags + = +om_che +->flags; + +517 +che +-> +xth + = +om_che +->nexthop; + +519 +che +-> +mtu + = +om_che +->mtu; + +520 +che +-> +ifdex + = +om_che +->ifindex; + +521 +che +-> +p + = +om_che +->encap; + +522 +che +-> +tf_i + = +om_che +->intf_i; + +523 +che +-> +hwpt + = +om_che +->hwport; + +524 +che +-> +h_offt + = +om_che +->ether_offset; + +525 + `memy +( +che +-> +h_hd +, +om_che +->ether_header, + +526 ( +che +-> +h_hd +)); + +527 + } +} + + @csum_copy_iovec_setlen.c + +14  + ~"_.h +" + +17 +ci_le +  +do_cy_om_ur +(* +to +, cڡ * +om +,  +n_bys + + +18 + $CI_KERNEL_ARG +( +ci_addr_c_t + +addr_c +)) + +20 #ifde +__unix__ + + +21 #ifde +__KERNEL__ + + +22 if +addr_c + ! +CI_ADDR_SPC_KERNEL + ) + +23  + `cy_om_ur +( +to +, +om +, +n_bys +); + +26 + `memy +( +to +, +om +, +n_bys +); + +28 + } +} + +31  +__ci_cy_iovec_to_pkt +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +, + +32 +ci_iovec_r +* +piov + + +33 + $CI_KERNEL_ARG +( +ci_addr_c_t + +addr_c +)) + +35  +n +, +tٮ +; + +36 * +de +; + +38 + `ci_as +(! + `ci_iovec_r_is_emy_ݔ +( +piov +)); + +39 + `ci_as_gt +( + `oo_offbuf_ +(& +pkt +-> +buf +), 0); + +41 +de + = + `oo_offbuf_r +(& +pkt +-> +buf +); + +43 + `ci_as_equ +( +pkt +-> +n_bufrs +, 1); + +45 +tٮ + = 0; + +47 +n + = + `oo_offbuf_ +(& +pkt +-> +buf +); + +48 +n + = + `CI_MIN +, () + `CI_IOVEC_LEN +(& +piov +-> +io +)); + +49 if( + `CI_UNLIKELY + + `do_cy_om_ur +( +de +, + `CI_IOVEC_BASE +(& +piov +-> +io +), +n + + +50 + `CI_KERNEL_ARG +( +addr_c +)) )) + +51  - +EFAULT +; + +57 +pkt +-> +buf_n + + +n +; + +58 +pkt +-> +y_n + + +n +; + +60 +tٮ + + +n +; + +61 + `ci_iovec_r_adv +( +piov +, +n +); + +62 + `oo_offbuf_adv +(& +pkt +-> +buf +, +n +); + +68 if + `CI_IOVEC_LEN +(& +piov +-> +io +) == 0 ) { + +69 if +piov +-> +iovn + =0 )  +de +; + +70 -- +piov +-> +iovn +; + +71 +piov +-> +io + = *piov-> +iov +++; + +74 if + `oo_offbuf_ +(& +pkt +-> +buf +=0 )  +de +; + +76 +de + + +n +; + +79 +de +: + +80  +tٮ +; + +81 + } +} + +84 #ifde +__KERNEL__ + + +85 #i +defed +( +__unix__ +) + +86 +ssize_t + + +87 + $__ci__cy_pkt_to_ur +( +ci_tif +* +ni +, +ci_iovec +* +iov +, +ci__pkt_fmt +* +pkt +, + +88  +ek_off +) + +90  +n +; + +92 +n + = + `CI_MIN +( + `oo_offbuf_ +(& +pkt +-> +buf +- +ek_off +, +iov +-> +iov_n +); + +93 if + `cy_to_ur +( + `CI_IOVEC_BASE +( +iov +), + +94 + `oo_offbuf_r +(& +pkt +-> +buf ++ +ek_off +, +n +) ) { + +95 + `ci_log +("%s: faued", +__FUNCTION__ +); + +96  - +EFAULT +; + +98 + `oo_offbuf_adv +(& +pkt +-> +buf +, +n +); + +99 + `CI_IOVEC_BASE +( +iov +(*)CI_IOVEC_BASE(iov+ +n +; + +100 + `CI_IOVEC_LEN +( +iov +- +n +; + +101  +n +; + +102 + } +} + +106 +ssize_t + + +107 + $__ci__cy_pkt_to_ur +( +ci_tif +* +ni +, +ci_iovec +* +iov +, + +108 +ci__pkt_fmt +* +pkt +,  +ek_off +) + +110  +n +; + +112 +n + = + `oo_offbuf_ +(& +pkt +-> +buf +- +ek_off +; + +113 +n + = + `CI_MIN +֒, ( + `CI_IOVEC_LEN +( +iov +)); + +115 + `memy +( + `CI_IOVEC_BASE +( +iov +), + `oo_offbuf_r +(& +pkt +-> +buf ++ +ek_off +, +n +); + +117 + `oo_offbuf_adv +(& +pkt +-> +buf +, +n +); + +118 + `CI_IOVEC_BASE +( +iov +(*)CI_IOVEC_BASE(iov+ +n +; + +119 + `CI_IOVEC_LEN +( +iov +- +n +; + +121  +n +; + +122 + } +} + +126 #ifde +__KERNEL__ + + +127 #i +defed +( +__unix__ +) + +129 +ci_le + +size_t + + +130 + $ci__flow_d_cy_ge +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +, + +131 +ci_addr_c_t + +addr_c +, * +c +, + +132  +offt +,  +n +) + +134  +ge + *page; + +135 * +de +; + +136 +ci_iovec_r + +piov +; + +138 +ge + = + `ci_flow_ge +( +addr_c +, +c +); + +139 i( +ge + = +NULL +) + +142 +de + = + `ci_km__omic +( +ge +); + +143 + `ci_as +( +de +); + +145 +n + = + `CI_MIN +֒, +CI_PAGE_SIZE + - +offt +); + +147 + `ci_iovec_r__buf +(& +piov +, +de + + +offt +, +n +); + +148 +n + = + `ci_cy_iovec_to_pkt +( +ni +, +pkt +, & +piov +, +CI_ADDR_SPC_KERNEL +); + +150 + `ci_kunm__omic +( +ge +, +de +); + +151 + `put_ge +( +ge +); + +153  +n +; + +154 + } +} + +157 +size_t + + +158 + $__ci__cy_pkt_om_piov +( + +159 +ci_tif + * +ni +, + +160 +ci__pkt_fmt + * +pkt +, + +161 +ci_iovec_r + * +piov +, + +162 +ci_addr_c_t + +addr_c +) + +164  +tٮ +; + +166 if +addr_c + = +CI_ADDR_SPC_KERNEL + ||ddr_= +CI_ADDR_SPC_CURRENT +) + +167  + `ci_cy_iovec_to_pkt +( +ni +, +pkt +, +piov +, +addr_c +); + +169 if +addr_c + = +CI_ADDR_SPC_INVALID + ) { + +171 + `ci_log +("%s: CI_ADDR_SPC_INVALID", +__FUNCTION__ +); + +175 +tٮ + = 0; + +176  + `oo_offbuf_ +(& +pkt +-> +buf +&& ! + `ci_iovec_r_is_emy_ݔ +( +piov +) ) { + +177 * +c + = + `CI_IOVEC_BASE +(& +piov +-> +io +); + +178  +offt + = + `CI_PTR_OFFSET +( +c +, +CI_PAGE_SIZE +); + +179  +n + = + `CI_IOVEC_LEN +(& +piov +-> +io +); + +181 +n + = + `ci__flow_d_cy_ge +( +ni +, +pkt +, +addr_c +, +c +, +offt +,en); + +182 if +n + == 0 ) + +184 +tٮ + + +n +; + +185 + `ci_iovec_r_adv +( +piov +, +n +); + +188  +tٮ +; + +189 + } +} + +193 #ifde +_WIN32 + + +194 +size_t + + +195 + $__ci__cy_pkt_om_piov +( + +196 +ci_tif + * +ni +, + +197 +ci__pkt_fmt + * +pkt +, + +198 +ci_iovec_r + * +piov +, + +199 +ci_addr_c_t + +addr_c +) + +201  +n +, +tٮ +; + +202 +ci_iovec_r + +mp_piov +; + +204 +tٮ + = 0; + +206 if +addr_c + = +CI_ADDR_SPC_KERNEL + ) { + +207  + `ci_cy_iovec_to_pkt +( +ni +, +pkt +, +piov +); + +209 if( +addr_c + ! +CI_ADDR_SPC_CURRENT +) && + +210 ( +addr_c + !( +ci_addr_c_t +) +ni +-> +addr_c_id +) ) { + +213 + `LOG_E +( + `ci_log +("%s: %d badddsa %!%p", +__FUNCTION__ +, + +214 + `NI_ID +( +ni +), +addr_c +, ( +ci_addr_c_t +i-> +addr_c_id +)); + +221 + `ke_cy_pkt_om_piov +( +ni +, +pkt +, +piov +, & +tٮ +); + +223  +tٮ +; + +226 +__y + { + +227  + `oo_offbuf_ +(& +pkt +-> +buf +&& ! + `ci_iovec_r_is_emy_ݔ +( +piov +) ) { + +228 + `ProbeFRd +( + `CI_IOVEC_BASE +(& +piov +-> +io +), + `CI_IOVEC_LEN +(&piov->io), 1); + +230 + `ci_iovec_r__buf +(& +mp_piov +, + `CI_IOVEC_BASE +(& +piov +-> +io +), + +231 + `CI_IOVEC_LEN +(& +piov +-> +io +)); + +232 +n + = + `ci_cy_iovec_to_pkt +( +ni +, +pkt +, & +mp_piov +); + +234 +tٮ + + +n +; + +236 + `ci_iovec_r_adv +( +piov +, +n +); + +239 + `__ex +( +EXCEPTION_EXECUTE_HANDLER +) { + +243 + `LOG_E +( + `ci_log +("WARNING: %s faulted during copy - faking data write" + +244 " (bug3767)", +__FUNCTION__ +)); + +251 + `ke_cy_pkt_om_piov +( +ni +, +pkt +, +piov +, & +tٮ +); + +253  +tٮ +; + +256  +tٮ +; + +257 + } +} + +262 +size_t + + +263 + $__ci__cy_pkt_om_piov +( + +264 +ci_tif + * +ni +, + +265 +ci__pkt_fmt + * +pkt +, + +266 +ci_iovec_r + * +piov +) + +269  + `ci_cy_iovec_to_pkt +( +ni +, +pkt +, +piov +); + +270 + } +} + + @efabcfg.c + +14  + ~"_.h +" + +15  + ~ + +18 #ifde +DO + + +19 #unde +DO + + +22 #ifde +IGNORE + + +23 #unde +IGNORE + + +26  + #DPRINTF + +ci_log + + + ) + +28  + #DO +( +_x + + ) +_x + +29  + #IGNORE +( +_x +) + + ) + +33 #ifde +NDEBUG + + +34 #unde +DEBUG_INTERCEPT + + +37 #ide +DEBUG_INTERCEPT + + +38  + #DEBUG_INTERCEPT + +IGNORE + + + ) + +42 #unde +CI_CFG_OPT + + +43  + #CI_CFG_OPT +( +v +, +me +, +ty +, +doc +, +ty_m +, +group +, , +max +, +m +, +e +) \ + +44 + `CI_STRUCT_MBR +( +me +, ), + + ) + +45 +ci_cfg_ts_t + + gci_cfg_ts + = { + +47  + ~ + +50  + ~ + +53  + ~ + +56 #unde +CI_CFG_OPT + + +68  + $ci_cfg_quy +(* +oc_me_utf8 +, * +f_cfgr +) + +70 +ci_iol_cfg_quy_t + +q +; + +71 +ci_cfg_iol_desc_t + +desc +; + +72 +ef_driv_hd + +fd +; + +73  +rc +, +i + = 0; + +75 * +f_cfgr + = 0; + +81 + `ci_tif_cfig_ts_deus +(& +ci_cfg_ts +. +tif_ts +); + +83 + `memt +(& +desc +, 0, (desc)); + +84 + `CI_USER_PTR_SET +( +desc +. +r +, & +q +); + +85 +desc +. +n + = ( +q +); + +87 + `CI_USER_PTR_SET +( +q +. +uid_n_oc +. +uid_r +, 0); + +88 +q +. +uid_n_oc +. +uid_n + = 0; + +89 + `CI_USER_PTR_SET +( +q +. +uid_n_oc +. +oc_me_r +, +oc_me_utf8 +); + +90 +q +. +uid_n_oc +. +oc_me_n + = +oc_me_utf8 + + +91 ? ( + ` +( +oc_me_utf8 +)+1) : 0; + +92 +q +. +ts + = +ci_cfg_ts +; + +94 +rc + = + `ef_ld_driv_ݒ +(& +fd +, +OO_STACK_DEV +, 1); + +95 if +rc + < 0 ) { + +96 + `LOG_E +( + `ci_log +("%s:f_onload_driver_open() failed (rc=%d)", + +97 +__FUNCTION__ +, +rc +); + +98 if +rc + =- +ENOENT + ) + +99 + `ci_log +("%s: I/dev/ld missg?", +__FUNCTION__ +); + +100 if +rc + =- +ENXIO + ) + +101 + `ci_log +("%s: Ithld moduˆded?", +__FUNCTION__ +); + +103  +dt_r_wn +; + +106 +rc + = + `oo_cfig_quy +( +fd +, & +desc +); + +107  + `CI_UNLIKELY + +rc + =0 && +desc +. +r + = +CICFG_DESC_EAGAIN + && +i + < 5 )) { + +109 + `CI_DEBUG +( + `ci_log +("%s: you should onlyver seehis message if youre " + +111 +__FUNCTION__ +)); + +112 +rc + = + `oo_cfig_quy +( +fd +, & +desc +); + +113 +i +++; + +116 + `ef_ld_driv_o +( +fd +); + +123 if +rc + || ( +desc +. +r + && desc.! +CICFG_DESC_ENOTINST +) ) { + +124 if +rc + =0 && +desc +. +r + = +CICFG_DESC_EPROCEXCL + ) + +125  +dt_r +; + +126 + `LOG_E +( + `ci_log +("%s: oo_config_query() failed (rc=%d,rr=%d)", + +127 +__FUNCTION__ +, +rc +, +desc +. +r +)); + +128 if +rc + == 0 ) + +129 +rc + = - +EINVAL +; + +130  +dt_r_wn +; + +134 if! +desc +. +r + ) + +135 +ci_cfg_ts + = +q +. +ts +; + +138 + `ci_tif_cfig_ts_gv +(& +ci_cfg_ts +. +tif_ts +); + +139 + `ci_tif_cfig_ts_ngecheck +(& +ci_cfg_ts +. +tif_ts +); + +140 + `LOG_S +( + `ci_tif_cfig_ts_dump +(& +ci_cfg_ts +. +tif_ts +)); + +143 i( +ci_cfg_ts +. +cp_ts +. +r + == 0) { + +144 +rc + = 0; + +145  +dt_r +; + +148 + `DEBUG_INTERCEPT +( + `DPRINTF +("config:ccelerationnabled - '%s'", + +149 +oc_me_utf8 +);); + +152 +dt_r_wn +: + +153 + `ci_log +("%s: WARNING: OnOdc˿ti dibd.", +__FUNCTION__ +); + +154 +dt_r +: + +155 + `ci_cfg_dt_r +(& +CITP_OPTS +); + +156 + `DEBUG_INTERCEPT +( + `DPRINTF +("config:cceleration disabled - '%s'", + +157 +oc_me_utf8 +);); + +158  +rc +; + +159 + } +} + + @eplock_slow.c + +13  + ~ + +14  + ~ + +16 #ide +__KERNEL__ + + +17  + ~ + +18  + ~"_.h +" + +22 +CI_BUILD_ASSERT +( +CI_EPLOCK_LOCK_FLAGS + & +CI_EPLOCK_CALLBACK_FLAGS +) == 0 ); + +25  + $__ef_lock_lock_wa +( +ci_tif + * +ni +,  +maybe_wedged +) + +27 #ide +__KERNEL__ + + +28 + `ci_as_equ +( +maybe_wedged +, 0); + +29  + `oo_sour_ +( + `ci_tif_g_driv_hd +( +ni +), +OO_IOC_EPLOCK_LOCK_WAIT +, + +30 +NULL +); + +32 #ifde +_WIN32 + + +36 + `ci_lo_u +(); + +39  + `eb_lock_lock_wa +( +ni + + +40 + `CI_BLOCKING_CTX_ARG +( + `ci_blockg_x_g_eded +()), + +41 +maybe_wedged +); + +44 + } +} + +47  + $__ef_lock_lock_ow +( +ci_tif + * +ni +,  +maybe_wedged +) + +49 #ide +__KERNEL__ + + +50 +ci_ut64 + +t_c +, +now_c +; + +52  +rc +; + +53 +ci_ut64 + +l +, +n +; + +55 #ide +__KERNEL__ + + +56 + `ci_as_equ +( +maybe_wedged +, 0); + +59 if + `ef_lock_ylock +(& +ni +-> +e +-> +lock +) ) + +62 #ide +__KERNEL__ + + +66 if + `oo_r_thad_g +()-> +e + & (1 << +ONLOAD_SPIN_STACK_LOCK +) ) { + +67 + `CITP_STATS_NETIF +(++ +ni +-> +e +-> +s +. +ack_lock_buzz +); + +68 + `ci_c64 +(& +now_c +); + +69 +t_c + = +now_c +; + +70  +now_c + - +t_c + < +ni +-> +e +-> +buzz_cyes + ) { + +71 + `ci_lo_u +(); + +72 + `ci_c64 +(& +now_c +); + +73 if + `ef_lock_ylock +(& +ni +-> +e +-> +lock +) ) + +80 if( +rc + = + `__ef_lock_lock_wa +( +ni +, +maybe_wedged +)) < 0 ) { + +81 #ide +__KERNEL__ + + +82 if +rc + =- +EINTR + ) + +92 + `LOG_E +( + `ci_log +("%s: ERROR:c=%d", +__FUNCTION__ +, +rc +)); + +93 + `CI_TEST +(0); + +98 if( +rc + =- +ERESTARTSYS +|| (r=- +ECANCELED +) ) + +99  +rc +; + +100 + `LOG_E +( + `ci_log +("%s: ERROR:c=%d", +__FUNCTION__ +, +rc +)); + +101  +rc +; + +108 +aga +: + +109 +l + = +ni +-> +e +-> +lock +.lock; + +110 if +l + & +CI_EPLOCK_UNLOCKED + ) { + +111 +n + = ( +l + &~ +CI_EPLOCK_UNLOCKED +| +CI_EPLOCK_LOCKED +; + +112 if + `ci_s64u_suced +(& +ni +-> +e +-> +lock +.lock, +l +, +n +) ) + +115  +aga +; + +120 + `ci_as +(0); + +122 + } +} + + @icmp_send.c + +14  + ~"_.h +" + +15  + ~"_tx.h +" + +18  + #LPF + "ci_icmp_" + + ) + +19  + #LPFIN + "-> " +LPF + + + ) + +20  + #LPFOUT + "<- " +LPF + + + ) + +26 +ci_ut32 + + mnobuf +; + +27 +ci_ut32 + + mnoa +; + +28 +ci_ut32 + + mok +; + +29 } + tci_icmp_tx_s +; + +31  +ci_icmp_tx_s + + gicmp_tx_s + = {0,0,0}; + +33  + #CI_ICMP_TX_STAT_NOBUF +( +ni +( +icmp_tx_s +. +nobuf +++) + + ) + +34  + #CI_ICMP_TX_STAT_NOSPACE +( +ni +( +icmp_tx_s +. +noa +++) + + ) + +35  + #CI_ICMP_TX_STAT_SENT +( +ni +( +icmp_tx_s +. +ok +++) + + ) + +38  + #CI_ICMP_MAX_PAYLOAD + ( 60 + 8 ) + + ) + +41  + #CI_ICMP_MAX_MSG_LEN + \ + +42 (( +ci_4_hdr ++ ( +ci_icmp_hdr ++ 4 + +CI_ICMP_MAX_PAYLOAD +) + + ) + +48 + $ci_icmp_nd +( +ci_tif + * +ni +, +ci__pkt_fmt + * +tx_pkt +, + +49 cڡ +ci__addr_t + * +f__sour +, + +50 cڡ +ci__addr_t + * +f__de +, + +51 cڡ +ci_mac_addr_t + * +mac_de +, + +52 +ci_ut8 + +ty +, ci_ut8 +code +, +ci_ut16 + +da_n +) + +54  +oo_h_hdr + * +tx_h +; + +55 +ci_4_hdr + * +tx_ +; + +56 +ci_icmp_hdr + * +icmp +; + +57 +ci_ut16 + +id +; + +58  +csum +; + +60 + `ci_as +( +ni +); + +62 +tx_ + = + `oo_tx__hdr +( +tx_pkt +); + +63 +tx_h + = + `oo_h_hdr +( +tx_pkt +); + +64 +icmp + = ( +ci_icmp_hdr +*( +tx_ + + 1); + +67 + `ci_as +(( +ci_icmp_hdr +) == 4); + +68 + `oo_offbuf_ +(& +tx_pkt +-> +buf +, + +69 (*) +tx_ ++( +ci_4_hdr ++ ( +ci_icmp_hdr +) + 4, + +70 +CI_ICMP_MAX_PAYLOAD +); + +73 i( + `oo_offbuf_ +(& +tx_pkt +-> +buf +< +CI_ICMP_MAX_PAYLOAD +) { + +74 + `LOG_IPP + + `log +( +LPF + "send_error: Bufferoo short forn ICMP msg (%d)!", + +75 + `oo_offbuf_ +(& +tx_pkt +-> +buf +))); + +76 + `ci_tif_pkt_a +( +ni +, +tx_pkt +); + +77 + `CI_ICMP_TX_STAT_NOSPACE +( +ni +); + +78 + `CI_ICMP_STATS_INC_OUT_ERRS + +ni + ); + +83 + `memy + +tx_h +-> +h_dho +, +mac_de +, +ETH_ALEN + ); + +84 +tx_h +-> +h_ty + = +CI_ETHERTYPE_IP +; + +88 + `memt + +tx_ +, 0, ( +ci_4_hdr +)); + +89 +tx_ +-> +_ihl_vsi + = + `CI_IP4_IHL_VERSION +( +ci_4_hdr +)); + +90 +id + = + `NEXT_IP_ID + +ni + ); + +91 +tx_ +-> +_id_be16 + = + `CI_BSWAP_BE16 + +id + ); + +92 +tx_ +-> +_ag_off_be16 + = +CI_IP4_FRAG_DONT +; + +93 +tx_ +-> +_l + = +CI_IP_DFLT_TTL +; + +94 +tx_ +-> +_oc + = +IPPROTO_ICMP +; + +95 +tx_ +-> +_ddr_be32 + = * +f__sour +; + +96 +tx_ +-> +_daddr_be32 + = * +f__de +; + +99 +icmp +-> +ty + =ype; + +100 +icmp +-> +code + = code; + +101 +icmp +-> +check + = 0; + +102 + `ci_as +( +ci_icmp_hdr +) == 4 ); + +104 +csum + = + `ci__csum_l +(0, +icmp +, ( +ci_icmp_hdr ++ 4 + +da_n + ); + +105 +icmp +-> +check + = ( +ci_ut16 +) + `ci_icmp_csum_fish +( +csum +); + +107 +tx_ +-> +_t_n_be16 + = + `CI_BSWAP_BE16 +( +ci_4_hdr +) + +108 + ( +ci_icmp_hdr ++ 4 + +da_n + ); + +109 +tx_ +-> +_check_be16 + = ( +ci_ut16 +) + `ci__checksum +(tx_ip); + +111 +tx_pkt +-> +buf_n + =x_pkt-> +y_n + = + +112 + `CI_BSWAP_BE16 +( +tx_ +-> +_t_n_be16 ++ + `oo_h_hdr_size +( +tx_pkt +); + +118 + `ci__nd_pkt +( +ni +, +NULL +, +tx_pkt +); + +129 + `CI_ICMP_STATS_INC_OUT_MSGS +( +ni +); + +130 + `ci_tif_pkt_a +( +ni +, +tx_pkt +); + +131 + `CI_ICMP_TX_STAT_SENT +( +ni +); + +132 + `LOG_IPP +( + `log +( +LPF + "send_error: sent %d/%do %s", + +133 +code +, +ty +, + `_addr_r +* +f__de + ))); + +135 #i +CI_CFG_SUPPORT_STATS_COLLECTION + + +136 + `CI_ICMP_OUT_STATS_COLLECT +( +ni +, +icmp +); + +140 + } +} + +150  + $__ci_icmp_nd_r +( +ci_tif + * +ni +, + +151 +ci_4_hdr +* +rx_ +, + +152  +oo_h_hdr +* +rx_h +, + +153 +ci_ut8 + +ty +, ci_ut8 +code +) + +155 + `ci_as +( +ni +); + +156 + `ci_as +( +rx_ +); + +157 + `ci_as +( +rx_h +); + +162 if + `ci_ur_is_lol_addr +( + `CICP_HANDLE +( +ni +), & +rx_ +-> +_ddr_be32 +) ) { + +163  +buf +[32]; + +164 if +rx_ +-> +_oc + = +IPPROTO_TCP + ) + +165 + `ry +( +buf +, "TCPacket"); + +166 i +rx_ +-> +_oc + = +IPPROTO_UDP + ) + +167 + `ry +( +buf +, "UDPacket"); + +170 #i + `defed + ( +__unix__ +) + +171 + `tf +( +buf +, (buf), "ck whroc=%u", +rx_ +-> +_oc +); + +173 + `ry +( +buf +, "Otherrotocol"); + +176 if +rx_ +-> +_ddr_be32 + =rx_-> +_daddr_be32 + ) { + +177 + `LOG_U +( + `ci_log +("WARNING: Unexpectedeceipt of %s with source IP\n" + +179 "N sdg ICMPy=%u code=%u", +buf +, + +180 + `_addr_r + +rx_ +-> +_ddr_be32 + ), +ty +, +code +)); + +184 + `LOG_U +( + `ci_log +("Unexpectedeceipt of %sacket fromocal IP\n" + +185 "adds(%s). N sdg ICMPy=%u code=%u", +buf +, + +186 + `_addr_r + +rx_ +-> +_ddr_be32 + ), +ty +, +code +)); + +191 { +ci__pkt_fmt + * +tx_pkt + = + `ci_tif_pkt_loc +( +ni +); + +193 i( +NULL + = +tx_pkt +) { + +194 + `LOG_IPP + + `log +( +LPF + "send-error: !!No buff, yetxpectedteast one!!")); + +195 + `CI_ICMP_TX_STAT_NOBUF + +ni + ); + +196 + `CI_ICMP_STATS_INC_OUT_ERRS + +ni + ); + +200 { +ci_ut16 + +da_n + = + `CI_MIN + + `CI_IP4_IHL +( +rx_ +) + 8, + +201 +rx_ +-> +_t_n_be16 + ); + +202 +ci_icmp_hdr + * +icmp +; + +204 + `oo_tx_pkt_yout_ +( +tx_pkt +); + +205 + `oo_tx_h_ty_t +( +tx_pkt +, +CI_ETHERTYPE_IP +); + +206 +icmp + = ( +ci_icmp_hdr +*( + `oo_tx__hdr +( +tx_pkt +) + 1); + +208 *( +ci_ut32 +*)& +icmp +[1] = 0; + +209 + `memy +& +icmp +[2], +rx_ +, +da_n + ); + +211  + `ci_icmp_nd +( +ni +, +tx_pkt +, + +212 & +rx_ +-> +_daddr_be32 +, + +213 & +rx_ +-> +_ddr_be32 +, + +214 (cڡ +ci_mac_addr_t + *) + +215 & +rx_h +-> +h_sho +, + +216 +ty +, +code +, +da_n +); + +219 + } +} + + @init.c + +14  + ~"_.h +" + +15  + ~ + +16  + ~ + +20  + gci__log + = +CI_TP_LOG_DEFAULT +; + +21  + gci__max_dump + = 80; + +24  + $ci__ +( +cp__thad_back + +cb +) + +26 cڡ * +s +; + +28 #ide +NDEBUG + + +29  +de + = 0; + +30 + `ci_as +(! +de +); + +31 +de + = 1; + +35 if( +s + = + `gv +("TP_LOG") + `ssnf +(s, "%x", & +ci__log +); + +36 + `LOG_S +( + `log +("TP_LOG = %x", +ci__log +)); + +38 +_thad_back + = +cb +; + +39 + `oo_r_thad_ +(); + +42 + } +} + + @iovec_ptr.h + +13 #ide +__ETHERFABRIC_IOVEC_PTR_H__ + + +14  + #__ETHERFABRIC_IOVEC_PTR_H__ + + + ) + +16 #ifde +__lulus + + +24 cڡ +ef_iovec +* +iov +; + +25  +iovn +; + +26 +ef_iovec + +io +; + +27 } + tef_iovec_r +; + +30 +ef_vi_le +  +ef_iovec_r_ +( +ef_iovec_r +* +p +, cڡ +ef_iovec +* +iov +, + +31  +iovn +) { + +32 +p +-> +iov + = iov; + +33 +p +-> +iovn + = iovlen; + +34 +p +-> +io +. +iov_n + = 0; + +37 +ef_vi_le +  +ef_iovec_r__nz +( +ef_iovec_r +* +p +, cڡ +ef_iovec +* +iov +, + +38  +iovn +) { + +39 +ci_as +( +iovn + > 0); + +40 +p +-> +iov + = iov + 1; + +41 +p +-> +iovn + = iovlen - 1; + +42 +p +-> +io + = * +iov +; + +49 +ef_vi_le +  +ef_iovec_r_is_emy +(cڡ +ef_iovec_r +* +p +) + +50 {  +p +-> +io +. +iov_n + =0 &&-> +iovn + == 0; } + +55 +ef_vi_le +  +ef_iovec_r_is_emy_ݔ +( +ef_iovec_r +* +p +) { + +56  +p +-> +io +. +iov_n + == 0 ) { + +57 if +p +-> +iovn + == 0 )  1; + +58 +p +-> +io + = *p-> +iov +++; + +59 -- +p +-> +iovn +; + +65 +ef_vi_le +  +ef_iovec_r_adv +( +ef_iovec_r +* +p +,  +n +) { + +66 +ci_as_ge +( +p +-> +io +. +iov_n +, ( +ci_ut32 +) +n +); + +67 +p +-> +io +. +iov_n + - +n +; + +68 +p +-> +io +. +iov_ba + + +n +; + +72 +ef_vi_le +  +ef_iovec_r_xt +( +ef_iovec_r +* +p +) { + +73 +ci_as_equ +( +p +-> +io +. +iov_n +, 0); + +74 +ci_as_gt +( +p +-> +iovn +, 0); + +75 +p +-> +io + = *p-> +iov +++; + +76 -- +p +-> +iovn +; + +79 #ifde +__lulus + + + @ip_cmsg.c + +14  + ~"_.h +" + +17  + #LPF + "IP CMSG " + + ) + +21 #i +defed +( +__lux__ +) + +22  + #NEED_A_WORKAROUND_FOR_GLIBC_BUG_13500 + + + ) + +26 #i +defed + +__lux__ +) + +39  + $ci_put_cmsg +( +cmsg_e + *cmsg_state, + +40  +v +,  +ty +, +sockn_t + +n +, cڡ * +da +) + +43  +da_a +, +da_n + = +n +; + +49 if* +cmsg_e +-> +p_msg_ags + & +MSG_CTRUNC + ) + +51 if +cmsg_e +-> +cm + = +NULL + ) { + +52 * +cmsg_e +-> +p_msg_ags + | +MSG_CTRUNC +; + +56 +da_a + = ((*) +cmsg_e +-> +msg +-> +msg_cڌ + + + +57 +cmsg_e +-> +msg +-> +msg_cڌn +) - + +58 (*) + `CMSG_DATA +( +cmsg_e +-> +cm +); + +59 if +da_a + < 0 ) { + +60 * +cmsg_e +-> +p_msg_ags + | +MSG_CTRUNC +; + +64 if +da_n + > +da_a + ) { + +65 * +cmsg_e +-> +p_msg_ags + | +MSG_CTRUNC +; + +66 +da_n + = +da_a +; + +69 +cmsg_e +-> +cm +-> +cmsg_n + = + `CMSG_LEN +( +da_n +); + +70 +cmsg_e +-> +cm +-> +cmsg_v + = +v +; + +71 +cmsg_e +-> +cm +-> +cmsg_ty + = +ty +; + +73 + `memy +( + `CMSG_DATA +( +cmsg_e +-> +cm +), +da +, +da_n +); + +75 +cmsg_e +-> +cmsg_bys_ud + + + `CMSG_SPACE +( +da_n +); + +77 if* +cmsg_e +-> +p_msg_ags + & +MSG_CTRUNC + ) + +80 #i! + `defed +( +NEED_A_WORKAROUND_FOR_GLIBC_BUG_13500 +|| defed( +__KERNEL__ +) + +81 +cmsg_e +-> +cm + = + `CMSG_NXTHDR +(cmsg_e-> +msg +, cmsg_state->cm); + +84 +cmsg_e +-> +cm + = ( +cmsghdr +*)(((*)(cmsg_state->cm)) + +85 + ( + `CMSG_ALIGN +( +cmsg_e +-> +cm +-> +cmsg_n +))); + +87 + } +} + +90 #ide +__KERNEL__ + + +95  + $_cmsg_cv_pktfo +( +ci_tif +* +tif +, cڡ +ci__pkt_fmt +* +pkt +, + +96  +cmsg_e + *cmsg_state) + +101  +_pktfo + +fo +; + +102 +ci_ut32 + +addr +; + +103  +hwpt +; + +104 +ci_έ_row_t + * +ow +; + +106 +addr + = + `oo__hdr_cڡ +( +pkt +)-> +_daddr_be32 +; + +107 +fo +. +i_addr +. +s_addr + = +addr +; + +111 +ci_ifid_t + +ifdex + = 0; + +112  +rc + = 0; + +114 +hwpt + = +tif +-> +e +-> +tf_i_to_hwpt +[ +pkt +-> +tf_i +]; + +115 +rc + = + `ci_έ_fd +( + `CICP_HANDLE +( +tif +), & +ifdex +, + +116 + `CI_HWPORT_ID +( +hwpt +), +pkt +-> +vn +); + +117 if +rc + != 0 ) + +118 + `LOG_E +( + `ci_log +("%s: cicp_llap_find(intf_i=%d, hwport=%d) failedc=%d", + +119 +__FUNCTION__ +, +pkt +-> +tf_i +, +hwpt +, +rc +)); + +120 +fo +. +i_ifdex + = +ifdex +; + +132 if + `CI_IP_ADDR_IS_MULTICAST +(& + `oo__hdr_cڡ +( +pkt +)-> +_daddr_be32 +) ) { + +133 +ow + = + `ci_έ_fd_ifid +( + +134 + `CICP_USER_MIBS +( + `CICP_HANDLE +( +tif +)). +έfo_ub +, + +135 +fo +. +i_ifdex +); + +136 +fo +. +i_ec_d +. +s_addr + = +ow +-> +_addr +; + +139 +fo +. +i_ec_d +. +s_addr + = + `oo__hdr_cڡ +( +pkt +)-> +_daddr_be32 +; + +141 + `ci_put_cmsg +( +cmsg_e +, +IPPROTO_IP +, +IP_PKTINFO +, ( +fo +), &info); + +142 + } +} + +147 +ci_le +  + $_cmsg_cv_l +(cڡ +ci__pkt_fmt + * +pkt +, + +148  +cmsg_e + *cmsg_state) + +150  +l + = + `oo__hdr_cڡ +( +pkt +)-> +_l +; + +152 + `ci_put_cmsg +( +cmsg_e +, +IPPROTO_IP +, +IP_TTL +, ( +l +), &ttl); + +153 + } +} + +158 +ci_le +  + $_cmsg_cv_tos +(cڡ +ci__pkt_fmt + * +pkt +, + +159  +cmsg_e + *cmsg_state) + +161  +tos + = + `oo__hdr_cڡ +( +pkt +)-> +_tos +; + +163 + `ci_put_cmsg +( +cmsg_e +, +IPPROTO_IP +, +IP_TOS +, ( +tos +), &tos); + +164 + } +} + +169  + $_cmsg_cv_timeamp +( +ci_tif + * +ni +, +ci_ut64 + +timeamp +, + +170  +cmsg_e + *cmsg_state) + +172  +timeec + +ts +; + +173  +timev + +tv +; + +175 + `ci_udp_compu_amp +( +ni +, +timeamp +, & +ts +); + +176 +tv +. +tv_c + = +ts +.tv_sec; + +177 +tv +. +tv_uc + = +ts +. +tv_nc + / 1000; + +179 + `ci_put_cmsg +( +cmsg_e +, +SOL_SOCKET +, +SO_TIMESTAMP +, ( +tv +), &tv); + +180 + } +} + +185  + $_cmsg_cv_timeams +( +ci_tif + * +ni +, +ci_ut64 + +timeamp +, + +186  +cmsg_e + *cmsg_state) + +188  +timeec + +ts +; + +190 + `ci_udp_compu_amp +( +ni +, +timeamp +, & +ts +); + +192 + `ci_put_cmsg +( +cmsg_e +, +SOL_SOCKET +, +SO_TIMESTAMPNS +, ( +ts +), &ts); + +193 + } +} + +199  + $_cmsg_cv_timeampg +( +ci_tif + * +ni +, + +200 +ci_ut64 + +sys_timeamp +,  +timeec +* +hw_timeamp +, + +201  +ags +,  +cmsg_e + *cmsg_state) + +204  +timeec + +syime +; + +205  +timeec + +hwtimns +; + +206  +timeec + +hwtimaw +; + +207 } +ts +; + +209  +c_ags + = 0; + +211 if +hw_timeamp +-> +tv_c + != 0 ) + +212 +c_ags + = +ags + & ( +ONLOAD_SOF_TIMESTAMPING_RAW_HARDWARE + + +213 | +ONLOAD_SOF_TIMESTAMPING_SYS_HARDWARE +); + +214 if +sys_timeamp + != 0 ) + +215 +c_ags + | +ags + & +ONLOAD_SOF_TIMESTAMPING_SOFTWARE +; + +217 + `memt +(& +ts +, 0, (ts)); + +218 if +c_ags + & +ONLOAD_SOF_TIMESTAMPING_SOFTWARE + ) + +219 + `ci_udp_compu_amp +( +ni +, +sys_timeamp +, & +ts +. +syime +); + +220 if +c_ags + & +ONLOAD_SOF_TIMESTAMPING_RAW_HARDWARE + ) + +221 +ts +. +hwtimaw + = * +hw_timeamp +; + +222 if +c_ags + & +ONLOAD_SOF_TIMESTAMPING_SYS_HARDWARE + ) + +223 +ts +. +hwtimns + = * +hw_timeamp +; + +225 + `ci_put_cmsg +( +cmsg_e +, +SOL_SOCKET +, +ONLOAD_SO_TIMESTAMPING +, ( +ts +), &ts); + +226 + } +} + +228  + $ci__cmsg_fish +( +cmsg_e +* cmsg_state) + +230 #ide +NEED_A_WORKAROUND_FOR_GLIBC_BUG_13500 + + +234 if( +cmsg_e +-> +cm +) && + +235 ((*)((& +cmsg_e +-> +cm +-> +cmsg_n +) + 1)) + +236 - ((*) +cmsg_e +-> +msg +-> +msg_cڌ +) + +237 < +cmsg_e +-> +msg +-> +msg_cڌn + ) ) + +238 +cmsg_e +-> +cm +-> +cmsg_n + = 0; + +241 +cmsg_e +-> +msg +-> +msg_cڌn + = cmsg_e-> +cmsg_bys_ud +; + +242 + } +} + +248  + $ci__cmsg_cv +( +ci_tif +* +ni +, +ci_udp_e +* +us +, cڡ +ci__pkt_fmt + * +pkt +, + +249  +msghdr + * +msg +,  +tif_locked +, * +p_msg_ags +) + +251  +ags + = +us +-> +s +. +cmsg_ags +; + +252  +cmsg_e + cmsg_state; + +254 +cmsg_e +. +msg + = msg; + +255 +cmsg_e +. +cmsg_bys_ud + = 0; + +256 +cmsg_e +. +cm + = + `CMSG_FIRSTHDR +( +msg +); + +257 +cmsg_e +. +p_msg_ags + =_msg_flags; + +259 if +pkt +-> +ags + & +CI_PKT_FLAG_RX_INDIRECT + ) + +260 +pkt + = + `PKT_CHK_NML +( +ni +,kt-> +ag_xt +, +tif_locked +); + +262 i( +ags + & +CI_IP_CMSG_PKTINFO +) { + +263 ++ +us +-> +s +. +n_rx_pktfo +; + +264 + `_cmsg_cv_pktfo +( +ni +, +pkt +, & +cmsg_e +); + +267 i( +ags + & +CI_IP_CMSG_TTL +) + +268 + `_cmsg_cv_l +( +pkt +, & +cmsg_e +); + +270 i( +ags + & +CI_IP_CMSG_TOS +) + +271 + `_cmsg_cv_tos +( +pkt +, & +cmsg_e +); + +273 if +ags + & +CI_IP_CMSG_TIMESTAMPNS + ) + +274 + `_cmsg_cv_timeams +( +ni +, +pkt +-> +pf +. +udp +. +rx_amp +, & +cmsg_e +); + +276 if +ags + & +CI_IP_CMSG_TIMESTAMP + ) + +277 + `_cmsg_cv_timeamp +( +ni +, +pkt +-> +pf +. +udp +. +rx_amp +, & +cmsg_e +); + +279 if +ags + & +CI_IP_CMSG_TIMESTAMPING + ) { + +280  +ags + = +us +-> +s +. +timeampg_ags +; + +281 if +ags + & ( +ONLOAD_SOF_TIMESTAMPING_RAW_HARDWARE + + +282 | +ONLOAD_SOF_TIMESTAMPING_SYS_HARDWARE + + +283 | +ONLOAD_SOF_TIMESTAMPING_SOFTWARE +) ) { + +284  +timeec + +rx_hw_amp +; + +285 +rx_hw_amp +. +tv_c + = +pkt +-> +pf +. +udp +.rx_hw_stamp.tv_sec; + +286 +rx_hw_amp +. +tv_nc + = +pkt +-> +pf +. +udp +.rx_hw_stamp.tv_nsec; + +287 if! ( +rx_hw_amp +. +tv_nc + & +CI_IP_PKT_HW_STAMP_FLAG_IN_SYNC +) ) + +288 +ags + &~ +ONLOAD_SOF_TIMESTAMPING_SYS_HARDWARE +; + +289 + `_cmsg_cv_timeampg +( +ni +, +pkt +-> +pf +. +udp +. +rx_amp +, & +rx_hw_amp +, + +290 +ags +, & +cmsg_e +); + +294 + `ci__cmsg_fish +(& +cmsg_e +); + +295 + } +} + +305  + $ci__cmsg_nd +(cڡ  +msghdr +* +msg +,  +_pktfo +** +fo_out +) + +307  +cmsghdr + * +cmsg +; + +312  +cmsg + = + `CMSG_FIRSTHDR +( +msg +); cmsg; + +313 +cmsg + = + `CMSG_NXTHDR +(( +msghdr +* +msg +, cmsg) ) { + +315 if +cmsg +-> +cmsg_n + < ( +cmsghdr +) || + +316 ( +sockn_t +)(((*) +cmsg + - (*) +msg +-> +msg_cڌ +) + +317 + +cmsg +-> +cmsg_n +> +msg +-> +msg_cڌn + ) + +318  - +EINVAL +; + +320 if +cmsg +-> +cmsg_v + ! +IPPROTO_IP + ) + +323  +cmsg +-> +cmsg_ty + ) { + +324 #ide +_WIN32 + + +325  +IP_RETOPTS +: + +327  - +ENOPROTOOPT +; + +330  +IP_PKTINFO +: + +331 i( +cmsg +-> +cmsg_n + ! + `CMSG_LEN +(( +_pktfo +))) + +332  - +EINVAL +; + +333 * +fo_out + = ( +_pktfo + *) + `CMSG_DATA +( +cmsg +); + +337  - +EINVAL +; + +342 + } +} + + @ip_internal.h + +14 #ide +__CI_LIB_IP_INTERNAL_H__ + + +15  + #__CI_LIB_IP_INTERNAL_H__ + + + ) + +17  + ~ + +18  + ~ + +19  + ~ + +20  + ~ + +21 #ifde +__KERNEL__ + + +22  + ~ + +24  + ~ + +27 #ifde +__KERNEL__ + + +33  + #ONLOAD_MSG_WARM + 0 + + ) + +38  + #ONLOAD_MSG_ONEPKT + 0 + + ) + +46  +ci__log + +CI_HV +; + +47  +ci__max_dump + +CI_HV +; + +50  + #log + +ci_log + + + ) + +53 +ci_le +  + $_pkt_dump_n +( +n +) { + +54 +n + + +ETH_HLEN +; + +55 if +n + > +ETH_FRAME_LEN + )en = 80; + +56 #i + `defed +( +__ci_driv__ +) + +57 if +n + > 80 )en = 80; + +59 if +n + > +ci__max_dump + )en = ci_tp_max_dump; + +61  +n +; + +62 + } +} + +65 #ifde +__ci_driv__ + + +67  + ~ + +68  + ~ + +79 +ci_le +  + $ci_t_upde_t +( +ci_tif +* +tif +, +ci_t_e +* +ts +,  +m +) + +83 + `ci_as_ge +( +m +, 0); + +84 +m + = + `CI_MAX +(1, m); + +86 if + `CI_LIKELY +( +ts +-> + +) ) { + +90 +m + -( +ts +-> + + >> 3u); + +91 +ts +-> + + + +m +; + +92 if +m + < 0 ) m = -m; + +93 +m + -( +ts +-> +sv + >> 2u); + +94 +ts +-> +sv + + +m +; + +95 +ts +-> +o + = + `t_ +s+s-> +sv +; + +99 +ts +-> + + = ( +m + << 3u); + +100 +ts +-> +sv + = ( +m + << 1u); + +101 +ts +-> +o + = +m + +s-> +sv +; + +104 + `ci_t_o_bound +( +tif +, +ts +); + +106 + `CI_IP_SOCK_STATS_VAL_RTT_SRTT_RTO + +ts +,s-> +sv + >> 2,s-> + + >> 3,s-> +o + ); + +107 + `LOG_TR +( + `ci_log +("TCP RX %d UPDATE RTT sa=%u sv=%u SRTT=%u RTTVAR=%u RTO=%u", + +108 + `S_FMT +( +ts +),s-> + +,s-> +sv +, + +109 + `t_ +( +ts +), + `t_tv +s),s-> +o +)); + +110 + } +} + +115  +_cmsg_cv_timeamp +( +ci_tif + * +ni +, +ci_ut64 + +timeamp +, + +116  +cmsg_e + *cmsg_state); + +117  +_cmsg_cv_timeams +( +ci_tif + * +ni +, +ci_ut64 + +timeamp +, + +118  +cmsg_e + *cmsg_state); + +119  +_cmsg_cv_timeampg +( +ci_tif + * +ni +, + +120 +ci_ut64 + +sys_timeamp +,  +timeec +* +hw_timeamp +, + +121  +ags +,  +cmsg_e + *cmsg_state); + +129 #i +defed +( +_WIN32 +&& defed( +__KERNEL__ +) + +131  + #CITP_WAITABLE_SLEEP_DELAY_USECS + 100000 + + ) + +132  + #CITP_WAITABLE_SLEEP_WHILE +( +ni +, +w +, +why +, +timeout +, +cd +, +c +) \ + +134 +LARGE_INTEGER + +rg_ticks +, +cut_ticks +, +day +; \ + +135 if( +timeout +! +NULL + && (imeout)-> +tv_c + != 0 || \ + +136 ( +timeout +)-> +tv_uc + != 0) ) { \ + +137 + `KeQuyTickCou +(& +rg_ticks +); \ + +138 +rg_ticks +. +QuadPt + +(( +timeout +)-> +tv_c + * 10000000LL \ + +139 + ( +timeout +)-> +tv_uc + * 10LL) \ + +140 / + `KeQuyTimeInemt +(); \ + +142 +rg_ticks +. +QuadPt + = 0LL; \ + +144 *( +c +) = 0; \ + +145  ( +cd +) ) { \ + +146 + `ci_tif_pl +( +ni +); \ + +147 if +rg_ticks +. +QuadPt + != 0) { \ + +148 + `KeQuyTickCou +(& +cut_ticks +); \ + +149 if +rg_ticks +. +QuadPt + < +cut_ticks +.QuadPart ) { \ + +150 *( +c +- +EAGAIN +; \ + +154 + `ci_tif_uock +( +ni +); \ + +155 +day +. +QuadPt + = - +CITP_WAITABLE_SLEEP_DELAY_USECS +; \ + +156 + `KeDayExecutiThad +( +KlMode +, +FALSE +, & +day +); \ + +157 + `ci_tif_lock +( +ni +); \ + +159 } 0) + + ) + +162  + #CITP_WAITABLE_SLEEP_WHILE +( +ni +, +w +, +why +, +timeout +, +cd +, +c +) \ + +164 +ci_ut64 + +__p_q +; \ + +165 +ci_ut32 + +t + = ( +timeout +); \ + +166 *( +c +) = 0; \ + +168 +__p_q + = ( +w +)-> +p_q +. +l +; \ + +169 + `ci_rmb +(); \ + +170 if!( +cd +) ) ; \ + +171 (* +c + + `ci_sock_p +(( +ni +), ( +w +), ( +why +), \ + +172 +CI_SLEEP_NETIF_LOCKED + | \ + +173 +CI_SLEEP_NETIF_RQ +, \ + +174 +__p_q +, & +t +); \ + +176 + `CI_TEST +( + `ci_tif_lock +( +ni +) == 0); \ + +177 if*( +c +) ) ; \ + +178 + `ci_tif_pl +( +ni +); \ + +180 } 0) + + ) + +184  + #CI_TCP_SLEEP_WHILE +( +ni +, +ts +, +why +, +timeout +, +cd +, +c +) \ + +185 + `CITP_WAITABLE_SLEEP_WHILE +(( +ni +), &( +ts +)-> +s +. +b +, ( +why +), ( +timeout +), ( +cd +), ( +c +)) + + ) + +208 +ci_le +  + +209 + $ci_t__t_frs +( +ci_tif + * +ni +, + +210 +oo_ + +sock_id +, + +211 +ci_ifid_t + +bdto_ifdex +, + +212 +oo_ + +om_t_id +) + +214  +rc +; + +216 + `ci_as +( +ni +); + +218 + `LOG_TC +( + `ci_log +("%s: %d:%d bindto_ifindex=%dort_sock=%d", + +219 +__FUNCTION__ +, + `NI_ID +( +ni +), + `OO_SP_FMT +( +sock_id +), + +220 ( +bdto_ifdex +, + `OO_SP_FMT +( +om_t_id +))); + +222 #ifde +__ci_driv__ + + +223 +rc + = + `t_hr_dpot_t_frs +( + `ci_tif_g_vid_ +( +ni +, +sock_id +), + +224 +bdto_ifdex +, +om_t_id +); + +227 if + `ci_t_n_t_fr__ul +( +ni +, + `SP_TO_SOCK +i, +sock_id +)) ) + +228 +rc + = + `ci_t_sock_t_sb_fr +( +ni +, + `SP_TO_TCP +i, +sock_id +)); + +230 +rc + = + `ci_t_hr__t_frs +( + `ci_tif_g_driv_hd +( +ni +), +sock_id +, + +231 +bdto_ifdex +, +om_t_id +); + +234 + `LOG_TC +if( +rc + < 0) + +235 + `ci_log +(" ---> %c=%d)", +__FUNCTION__ +, +rc +) ); + +236  +rc +; + +237 + } +} + +239 #ide +__ci_driv__ + + +240 +ci_le +  + +241 + $ci_t__upt_bd +( +ci_fd_t + +fd +, cڡ * +u_me +, + +242 +ci_t32 + +u_size +, +ci_ut32 + +u_t_t +, + +243 +ci_ut32 + +addr_be32 +, +ci_ut16 + +pt_be16 +) + +245  +rc +; + +247 + `LOG_TC +( + `ci_log +("%s: %dddr_be32: %dt: %d", +__FUNCTION__ +, +fd +, +addr_be32 +, + +248 +pt_be16 +)); + +249 +rc + = + `ci_t_hr__upt_bd +( +fd +, +u_me +, +u_size +, + +250 +u_t_t +, +addr_be32 +, + +251 +pt_be16 +); + +252 + `LOG_TC +if( +rc + < 0) + +253 + `ci_log +(" ---> %c=%d)", +__FUNCTION__ +, +rc +) ); + +254  +rc +; + +255 + } +} + +271 +ci_le +  + +272 + $ci_t__r_frs +( +ci_tif +* +ni +, + +273 +oo_ + +sock_id +, + +274  +ed_upde +) + +276  +rc +; + +277 #ifde +__ci_driv__ + + +278  +suess_hw_s + = +ni +-> +ags + & +CI_NETIF_FLAG_IN_DL_CONTEXT +; + +280 + `ci_as +( +ni +); + +282 + `LOG_TC +( + `ci_log +("%s: %d:%d (%d)", +__FUNCTION__ +, + +283 +ni +-> +e +-> +ack_id +, + `OO_SP_FMT +( +sock_id +), +ed_upde +)); + +284 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +286 #ifde +__ci_driv__ + + +287 +rc + = + `t_hr_dpot_r_frs +( + `ci_tif_g_vid_ +( +ni +, +sock_id +), + +288 +suess_hw_s +, +ed_upde +); + +290 if( + `SP_TO_SOCK +( +ni +, +sock_id +)-> +s_ags + & +CI_SOCK_FLAG_MAC_FILTER +) && + +291 + `ci_t_n_t_fr__ul +( +ni +, + `SP_TO_SOCK +i, +sock_id +)) ) { + +292 + `ci_t_sock_r_sb_fr +( +ni +, + `SP_TO_TCP +i, +sock_id +)); + +293 +rc + = 0; + +296 +rc + = + `ci_t_hr__r_frs +( + `ci_tif_g_driv_hd +( +ni +), +sock_id +, + +297 +ed_upde +); + +300 + `LOG_TC +i( +rc + < 0 &&!- +EAGAIN +) + +301 + `ci_log +(" ---> %c=%d)", +__FUNCTION__ +, +rc +) ); + +302  +rc +; + +303 + } +} + +330 +ci_le +  + +331 + $ci_t__m_add_d +( +ci_tif +* +ni +, + +332 +oo_ + +sock_id +, + +333 +ci_ifid_t + +ifdex +, + +334 +ci_ut32 + +m_addr +, + +335  +add +) + +337  +rc +; + +339 + `ci_as +( +ni +); + +341 + `LOG_TC +( + `ci_log +("%s: id=%d (ifid=%d, maddr=%s)", + +342 +__FUNCTION__ +, + `OO_SP_FMT +( +sock_id +), +ifdex +, + +343 + `_addr_r +( +m_addr +))); + +345 #ifde +__ci_driv__ + + +347 +t_hr_dpot_t +* + + = + `ci_tif_g_vid_ +( +ni +, +sock_id +); + +348 if +add + ) + +349 +rc + = + `oof_sock_m_add +( +eb_t_driv +. +fr_mag +, + +350 & + +-> +oofr +, +m_addr +, +ifdex +); + +352 + `oof_sock_m_d +( +eb_t_driv +. +fr_mag +, + +353 & + +-> +oofr +, +m_addr +, +ifdex +); + +354 +rc + = 0; + +358 +rc + = + `ci_t_hr__m_add_d +( + `ci_tif_g_driv_hd +( +ni +), + +359 +sock_id +, +m_addr +, +ifdex +, +add +); + +362 + `LOG_TC +if( +rc + < 0) + +363 + `ci_log +(" ---> %c=%d)", +__FUNCTION__ +, +rc +) ); + +364  +rc +; + +365 + } +} + +372 #ifde +__KERNEL__ + + +373  + #vify_ +( + + ) + +375  + #vify_ +( + `ci_ +(("STOP.")) + + ) + +378  + #vify +( +exp +) \ + +380 if + `CI_UNLIKELY +(!( +exp +)) ) { \ + +381 + `ci_log +("********** vify(%s %s:%d", #exp, +__FILE__ +, +__LINE__ +); \ + +382 + `ci_log +("********** from %s:%d", +fe +?fe:"", +le +); \ + +383 + `vify_ +(); \ + +385 }0) + + ) + +387 #unde +vify + + +388  + #vify +( +exp + + `ci_as +xp) + + ) + +395 #ide +SO_TIMESTAMPNS + + +396  + #SO_TIMESTAMPNS + 35 + + ) + +399 #ide +SO_REUSEPORT + + +400  + #SO_REUSEPORT + 15 + + ) + +406  + #ONLOAD_SO_TIMESTAMPING + 37 + + ) + +407  + #ONLOAD_SCM_TIMESTAMPING + +ONLOAD_SO_TIMESTAMPING + + + ) + +413 + mONLOAD_SOF_TIMESTAMPING_TX_HARDWARE + = (1<<0), + +414 + mONLOAD_SOF_TIMESTAMPING_TX_SOFTWARE + = (1<<1), + +415 + mONLOAD_SOF_TIMESTAMPING_RX_HARDWARE + = (1<<2), + +416 + mONLOAD_SOF_TIMESTAMPING_RX_SOFTWARE + = (1<<3), + +417 + mONLOAD_SOF_TIMESTAMPING_SOFTWARE + = (1<<4), + +418 + mONLOAD_SOF_TIMESTAMPING_SYS_HARDWARE + = (1<<5), + +419 + mONLOAD_SOF_TIMESTAMPING_RAW_HARDWARE + = (1<<6), + +420 + mONLOAD_SOF_TIMESTAMPING_OPT_ID + = (1<<7), + +421 + mONLOAD_SOF_TIMESTAMPING_TX_SCHED + = (1<<8), + +422 + mONLOAD_SOF_TIMESTAMPING_TX_ACK + = (1<<9), + +423 + mONLOAD_SOF_TIMESTAMPING_OPT_CMSG + = (1<<10), + +424 + mONLOAD_SOF_TIMESTAMPING_OPT_TSONLY + = (1<<11), + +426 + mONLOAD_SOF_TIMESTAMPING_LAST + = +ONLOAD_SOF_TIMESTAMPING_OPT_TSONLY +, + +427 + mONLOAD_SOF_TIMESTAMPING_MASK + = + +428 ( +ONLOAD_SOF_TIMESTAMPING_LAST + << 1) - 1 ) + +433  + soo_sock_exnded_r + { + +434 +ci_ut32 + + m_o +; + +435 +ci_ut8 + + m_ig +; + +436 +ci_ut8 + + m_ty +; + +437 +ci_ut8 + + m_code +; + +438 +ci_ut8 + + m_d +; + +439 +ci_ut32 + + m_fo +; + +440 +ci_ut32 + + m_da +; + +444 #ide +SO_EE_ORIGIN_TIMESTAMPING + + +445  + #SO_EE_ORIGIN_TIMESTAMPING + 4 + + ) + +451  + #ONLOAD_SO_BUSY_POLL + 46 + + ) + +455  + #t_ok +( +ov +, + +, +ty +((ov&& (>y)) + + ) + +456  + #t_n_ok +( +ov +, + +, +ty +) \ + +457 (( + +< ( +ty +? - +EINVAL + : ( +ov +? 0 : - +EFAULT +) + + ) + +459 +ci_le +  + +460 + $ci_g_tv +(cڡ * +tv +, +sockn_t + +ݎ +) + +462 i( +ݎ + >= ()) + +463  (*(*) +tv +); + +464  ()(*(*) +tv +); + +465 + } +} + +468 +ci_le +  + +469 + $ci_gsockt_f_e +(* +tv +, +sockn_t + * +ݎ +,  +v +, + +470 * +v +, +size_t + +v_size +) + +472 if* +ݎ + > 0 ) + +473 + `memy +( +tv +, +v +, + `CI_MIN +(* +ݎ +, +v_size +)); + +474 #i + `defed +( +_WIN32 +) + +475 if* +ݎ + > +v_size + ) + +476 #i + `defed +( +__lux__ +) + +477 if* +ݎ + > +v_size + ) + +479 * +ݎ + = +v_size +; + +482 + } +} + +486 +ci_le +  + +487 + $ci_gsockt_f +(* +tv +, +sockn_t + * +ݎ +,  +v +, + +488 * +v +, +size_t + +v_size +) + +490 #ifde +__lux__ + + +491 if( +v + = +SOL_SOCKET + ||ev = +SOL_IP +) && + +492 +v_size + == () && + +493 * +ݎ + >= () && *optlen < () ) { + +494  +iv + = *((*) +v +); + +495  +ucv + = () +iv +; + +496 if +iv + >=0 && ival <= 255) + +497  + `ci_gsockt_f_e +( +tv +, +ݎ +, +v +, + +498 & +ucv +, (ucval)); + +501  + `ci_gsockt_f_e +( +tv +, +ݎ +, +v +, + +502 +v +, +v_size +); + +503 + } +} + +514  + $ci_g_s_t +( +ci_tif +* +tif +, +ci_sock_cmn +* +s +, + +515  +݊ame +, * +tv +, + +516 +sockn_t + * +ݎ + +CI_HF +; + +528  + $ci_g_s_ + +ci_tif +* +tif +, +ci_sock_cmn +* +s +, +ci_fd_t + +fd +, + +529  +݊ame +, * +tv +, + +530 +sockn_t + * +ݎ + ) +CI_HF +; + +532 #i +CI_CFG_FAKE_IPV6 + + +542  + $ci_g_s_6 + +ci_sock_cmn +* +s +, +ci_fd_t + +fd +, + +543  +݊ame +, * +tv +, + +544 +sockn_t + * +ݎ + ) +CI_HF +; + +555  + $ci_g_s_sock + +ci_tif +* +tif +, +ci_sock_cmn +* +s +, + +556  +݊ame +, * +tv +, + +557 +sockn_t + * +ݎ + ) +CI_HF +; + +568 + $ci_t_s_ + +ci_tif +* +tif +, +ci_sock_cmn +* +s +, + +569  +݊ame +, cڡ * +tv +, +sockn_t + +ݎ + +CI_HF +; + +571 #i +CI_CFG_FAKE_IPV6 + + +581 + $ci_t_s_6 + +ci_tif +* +tif +, +ci_sock_cmn +* +s +, + +582  +݊ame +, cڡ * +tv +, +sockn_t + +ݎ + +CI_HF +; + +594 + $ci_t_s_sock + +ci_tif +* +tif +, +ci_sock_cmn +* +s +, + +595  +݊ame +, cڡ * +tv +, +sockn_t + +ݎ + +CI_HF +; + +599 + $ci_t_s_sock_nock +( +ci_tif +*, +ci_sock_cmn +* +s +,  +݊ame +, + +600 cڡ * +tv +, +sockn_t + +ݎ + +CI_HF +; + +606 #i! + `defed +( +__KERNEL__ +|| defed( +__lux__ +) + +608 #ifde +__KERNEL__ + + +609  + #CI_IOCTL_ARG_OK +( +t +, +a +({ +_v +;  +_rc + = + `g_ur +(_v, (t*))); ()_v; _rc==0; + } +}) + + ) + +610  + #CI_IOCTL_SETARG +( +a +, +v +d{ + `put_ur +(v,a); } 0) + + ) + +611  + #CI_IOCTL_GETARG +( +t +, +a +({ +_v +; + `g_ur +(_v, (t*))); _v; }) + + ) + +613  + #CI_IOCTL_ARG_OK +( +t +, +a +(!0) + + ) + +614  + #CI_IOCTL_SETARG +( +a +, +v +d{ *)=(v); } 0) + + ) + +615  + #CI_IOCTL_GETARG +( +t +, +v +(**)(v)) + + ) + +618 #i +defed +( +__KERNEL +) + +621  + #CI_CMN_IOCTL_FIONBIO +( +s +, +g +) do { \ + +622  +v +, +_rc + = + `g_ur +(v, +g +); \ + +623 if +v + ) { \ + +624 + `LOG_SV + + `ci_log +("%s: s-blockg mode", +__FUNCTION__ + ) ); \ + +625 + `ci_b_t +(&( +s +)-> +b +. +sb_aags +, +CI_SB_AFLAG_O_NONBLOCK_BIT +); \ + +627 + `LOG_SV + + `ci_log +("%s: cˬ-blockg mode", +__FUNCTION__ + ) ); \ + +628 + `ci_b_r +(&( +s +)-> +b +. +sb_aags +, +CI_SB_AFLAG_O_NONBLOCK_BIT +); \ + +629 } } 0) + + ) + +633  + #CI_CMN_IOCTL_FIONBIO +( +s +, +g +) do { \ + +634 if*(*)( +g +) ) { \ + +635 + `LOG_SV + + `ci_log +("%s: s-blockg mode", +__FUNCTION__ + ) ); \ + +636 + `ci_b_t +(&( +s +)-> +b +. +sb_aags +, +CI_SB_AFLAG_O_NONBLOCK_BIT +); \ + +638 + `LOG_SV + + `ci_log +("%s: cˬ-blockg mode", +__FUNCTION__ + ) ); \ + +639 + `ci_b_r +(&( +s +)-> +b +. +sb_aags +, +CI_SB_AFLAG_O_NONBLOCK_BIT +); \ + +640 } } 0) + + ) + +652  +ci_cmn_iol +( +ci_tif +* +tif +, +ci_sock_cmn +* +s +,  +que +, + +653 * +g +,  +os_rc +,  +os_sock_exis +); + +658  +ci_udp_compu_amp +( +ci_tif + * +tif +, +ci_ut64 + +amp +, + +659  +timeec + * +ts +); + +666 #i +defed +( +__lux__ +) + +667  + #SOCKOPT_RET_INVALID_LEVEL +( +s +) \ + +668 i(( +s +)-> +doma + = +AF_INET6 + ) \ + +669 + `RET_WITH_ERRNO +( +ENOPROTOOPT +); \ + +671 + `RET_WITH_ERRNO +( +EOPNOTSUPP +) + + ) + +672 #i +defed +( +__sun__ +) + +673  + #SOCKOPT_RET_INVALID_LEVEL +( +s + + `RET_WITH_ERRNO +( +ENOPROTOOPT +) + + ) + +674 #i +defed +( +_WIN32 +) + +675  + #SOCKOPT_RET_INVALID_LEVEL +( +s + + `RET_WITH_ERRNO +( +EINVAL +) + + ) + +686 #ifde +_WIN32 + + +688  + #WSS_OPERATION_IN_PROGRESS + 0x00000103L + + ) + +689  + #TF_REUSE_SOCKET + 0x02 + + ) + +693  + #AFN_FMT + "%s: %d:%d [a:%d,ty=%d] " + + ) + +694  + #AFN_PRI_ARGS +( +ni +, +a + +__FUNCTION__ +, + `NI_ID +i), (a)-> +sock_id +, \ + +695 + `AOP_ID +(( +ni +),( +a +)), (a)-> +ty + + + ) + +697  + #AFNS_FMT + "%s: " +NSS_FMT +" [a:%d,ty=%d] " + + ) + +698  + #AFNS_PRI_ARGS +( +ni +, +a + +__FUNCTION__ +, \ + +699 + `NSS_PRI_ARGS +(( +ni +), + `SP_TO_SOCK +(i),( +a +)-> +sock_id +)), \ + +700 + `AOP_ID +(( +ni +),( +a +)), (a)-> +ty + + + ) + +702 #ifde +__KERNEL__ + + +705 +wdm_ci_come_io +( +ci_os_fe + + +, +PVOID + +ovϵed +, + +706 +ci_ut32 + +us +, ci_ut32 +bys +,  +do_comi_pt +); + +710  + $_comi_c +( +PVOID + +g1 +, PVOID +g2 +, PVOID +g3 + +CI_HF +; + +715 +ci_le + +DWORD + + $w_wr_to_r +( +DWORD + +rcode +) + +717  +rcode +) { + +718  +WSAECONNRESET +: + +719  +ERROR_NETNAME_DELETED +; + +722 i(( +rcode + > 10000) && (errcode < 12000)) { + +723 + `ci_log +("Warning:assing winsockrror %doon-winsock callback", + +724 +rcode +); + +728  +rcode +; + +730 + } +} + +735 #i +defed +( +__lux__ +&& !defed( +ECANCELED +) + +736  + #ECANCELED + 125 + + ) + +740 #i +defed +( +__KERNEL__ +) + +741  + $ci__queue_queue_l +( +ci_tif +* +tif +, +ci__pkt_queue +* +qu +, + +742 +ci__pkt_fmt +* +pkt + +CI_HF +; + +744 +ci__pkt_fmt +* + $ci_pkt_loc_n +( +ci_tif +* +ni +,  +n + +CI_HF +; + +745 +ci__pkt_fmt +* + $ci_pkt_loc_n_l +( +ci_tif +* +ni +,  +n + +CI_HF +; + +757  + #UDP_PAYLOAD1_SPACE_PMTU +( +pmtu +) \ + +758 ((( +pmtu +)-( +ci_4_hdr +)- ( +ci_udp_hdr +))&0xfff8) + + ) + +761  + #UDP_PAYLOAD2_SPACE_PMTU +( +pmtu +((mtu)-( +ci_4_hdr +))&0xfff8) + + ) + +763 #ifde +_WIN32 + + +764  + #UDP_HAS_SENDQ_SPACE +( +us +, +l +((us)-> +s +. +so +. +dbuf + > ()(us)-> +tx_cou +) + + ) + +766  + #UDP_HAS_SENDQ_SPACE +( +us +, +l +) \ + +767 (( +us +)-> +s +. +so +. +dbuf + >()((us)-> +tx_cou + + ( +l +))) + + ) + +771 #ifde +__lux__ + + +773  + #oo_adju_SO_XBUF +( +v +((v* 2) + + ) + +775  + #oo_adju_SO_XBUF +( +v +(v) + + ) + +783 #ifde +__KERNEL__ + + +785 +ci_le +  + +786 + $oo_lo_u_check_sigls +( +ci_tif +* +ni +, +ci_ut64 + +now_c +, + +787 +ci_ut64 +* +schedu_c +,  +have_timeout +) + +789 if( + `CI_UNLIKELY + + `sigl_ndg +( +cut +) )) + +790  +have_timeout + ? - +EINTR + : - +ERESTARTSYS +; + +791 if +now_c + - * +schedu_c + > + `IPTIMER_STATE +( +ni +)-> +khz + ) { + +792 + `schedu +(); + +793 * +schedu_c + = +now_c +; + +796 + } +} + +798  + #OO_SPINLOOP_PAUSE_CHECK_SIGNALS +( +ni +, +now_c +, +schedu_c +, \ + +799 +have_timeout +, +w +, +si +) \ + +800 + `oo_lo_u_check_sigls +( +ni +, +now_c +, +schedu_c +, +have_timeout +) + + ) + +804  + ~"ci//_sigl.h +" + +805  + $oo_lo_run_ndg_sigs +( +ci_tif +*, +cp_waab +*, + +806 +cp_sigl_fo +*,  +CI_HF +; + +808 +ci_le +  + +809 + $oo_lo_u_check_sigls +( +ci_tif +* +ni +, +ci_ut64 + +now_c +, + +810 +ci_ut64 +* +schedu_c + , + +811  +have_timeout +, + +812 +cp_waab +* +w +, +cp_sigl_fo +* +si +) + +814 + `ci_as_gt +( +si +-> +side_lib +, 0); + +815 + `ci_as +(~ +si +-> +aags + & +OO_SIGNAL_FLAG_FDTABLE_LOCKED +); + +817 if( + `CI_LIKELY +~ +si +-> +aags + & +OO_SIGNAL_FLAG_HAVE_PENDING + )) { + +818 + `ci_lo_u +(); + +821  + `oo_lo_run_ndg_sigs +( +ni +, +w +, +si +, +have_timeout +); + +822 + } +} + +824  + #OO_SPINLOOP_PAUSE_CHECK_SIGNALS +( +ni +, +now_c +, +schedu_c +, \ + +825 +have_timeout +, +w +, +si +) \ + +826 + `oo_lo_u_check_sigls +( +ni +, +now_c +, +schedu_c +, \ + +827 +have_timeout +, +w +, +si +) + + ) + +836 #ide +__KERNEL__ + + +837 +cp__thad_back + +_thad_back + +CI_HV +; + +845 #i +CI_CFG_PORT_STRIPING + + +846  + #ci_ts_pt_sw +( +q +, +ts +((q / + `t_eff_mss +s)& 1) + + ) + +849 +ci_le +  + $ci_tif_tf_i_to_ba_ifdex +( +ci_tif +* +ni +,  +tf_i +) + +851 +ci_hwpt_id_t + +hwpt +; + +852 + `ci_as_ +(( +tf_i +, +CI_CFG_MAX_INTERFACES +); + +853 +hwpt + = +ni +-> +e +-> +tf_i_to_hwpt +[ +tf_i +]; + +854 + `ci_as_ +(( +hwpt +, +CPLANE_MAX_REGISTER_INTERFACES +); + +855  + `ci_fwd_hwpt_to_ba_ifdex +(& + `CICP_USER_MIBS +( + `CICP_HANDLE +( +ni +)), + +856 +hwpt +); + +857 + } +} + +865 +ci_le +  + +866 + $ci_tif_pkt_a__pl +( +ci_tif +* +tif +, +ci__pkt_fmt +* +pkt +, + +867  +ci_tif_pl_e +* +ps +) + +869 if +pkt +-> +fcou + == 1 ) { + +872 + `ci_as +(~ +pkt +-> +ags + & +CI_PKT_FLAG_TX_PENDING +); + +874 +pkt +-> +fcou + = 0; + +875 if +pkt +-> +ags + & +CI_PKT_FLAG_RX + ) + +876 -- +tif +-> +e +-> +n_rx_pkts +; + +877 + `__ci_tif_pkt_n +( +pkt +); + +878 if +pkt +-> +ags + & +CI_PKT_FLAG_NONB_POOL + ) { + +879 * +ps +-> +tx_pkt__li_ + = + `OO_PKT_P +( +pkt +); + +880 +ps +-> +tx_pkt__li_ + = & +pkt +-> +xt +; + +881 ++ +ps +-> +tx_pkt__li_n +; + +884 + `ci_tif_pkt_put +( +tif +, +pkt +); + +886  +CI_TRUE +; + +889 + `ci_as_gt +( +pkt +-> +fcou +, 1); + +890 -- +pkt +-> +fcou +; + +891  +CI_FALSE +; + +893 + } +} + +896 #ifde +__KERNEL__ + + +897  +ci_tif_t_mge_omic_ag +( +ci_tif +* +ni +); + +898  + #CI_NETIF_STATE_MOD +( +ni +, +is_locked +, +fld +, +mod +) \ + +900 if +is_locked + ) { \ + +901 +mod +##mod +ni +-> +e +-> +fld +; \ + +904 +ci_t32 + +v +; \ + +906 +v + = +ni +-> +e +-> +omic_ +## +fld +; \ + +907 }  + `ci_s32u_ +(& +ni +-> +e +-> +omic_ +## +fld +, +v +, v +mod + 1) );\ + +909 } 0) + + ) + +911  + #CI_NETIF_STATE_MOD +( +ni +, +is_locked +, +fld +, +mod +) \ + +912 d{ +mod +##mod +ni +-> +e +-> +fld +; } 0) + + ) + + @ip_tx.c + +14  + ~"_.h +" + +15  + ~"_tx.h +" + +16  + ~ + +19  + $ci__nd_pkt_lookup +( +ci_tif +* +ni +, + +20 cڡ  +oo_sock_ +* +sock__t +, + +21 +ci__pkt_fmt +* +pkt +, + +22 +ci__ched_hdrs +* +che +) + +24 +ci_4_hdr +* +pkt_ + = + `oo_tx__hdr +( +pkt +); + +25  +oo_sock_ + +sock_ +; + +27 + `ci_as +( +pkt_ +-> +_ddr_be32 + != 0); + +28 + `ci_as +( +pkt_ +-> +_daddr_be32 + != 0); + +30 if +sock__t + ! +NULL + ) + +31 +sock_ + = * +sock__t +; + +33 + `oo_sock__ +(& +sock_ +); + +34 + `ci__che_ +( +che +); + +35 +sock_ +. +_ddr_be32 + = +pkt_ +-> +_ddr_be32 +; + +36 +che +-> + +. +_daddr_be32 + = +pkt_ +->ip_daddr_be32; + +38  +pkt_ +-> +_oc + ) { + +39  +IPPROTO_UDP +: + +40  +IPPROTO_TCP +: + +41 +sock_ +. +t_be16 + = + `TX_PKT_SPORT_BE16 +( +pkt +); + +42 +che +-> +dpt_be16 + = + `TX_PKT_DPORT_BE16 +( +pkt +); + +45 +sock_ +. +t_be16 + = 0; + +46 +che +-> +dpt_be16 + = 0; + +50 + `ci_ur_ve +( +ni +, +che +, & +sock_ +); + +51 + } +} + +53  + $ci__nd_pkt_nd +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +, + +54 cڡ +ci__ched_hdrs +* +che +) + +56  +os_rc + = 0; + +58  +che +-> +us + ) { + +59  +rc_sucss +: + +60 + `ci__t_mac_d_pt +( +ni +, +che +, +pkt +); + +61 + `ci_tif_pkt_hd +( +ni +, +pkt +); + +62 + `ci_tif_nd +( +ni +, +pkt +); + +64  +rc_nomac +: + +65 + `ci_ur_der_nd +( +ni +, +rc_nomac +, & +os_rc +, + `OO_PKT_P +( +pkt +), + +66 +che +-> +ifdex +); + +68  +rc_nou +: + +69  - +EHOSTUNREACH +; + +70  +rc_ou +: + +71  - +ENETUNREACH +; + +72  +rc_loou +: + +73 if +che +-> +ags + & +CI_IP_CACHE_IS_LOCALROUTE + ) + +74 + `ci_as +(0); + +77 if +che +-> +us + < 0 ) + +78  +che +-> +us +; + +83 + } +} + +86  + $ci__nd_pkt +( +ci_tif +* +ni +, cڡ  +oo_sock_ +* +sock__t +, + +87 +ci__pkt_fmt +* +pkt +) + +89 +ci__ched_hdrs + +che +; + +90 + `ci__nd_pkt_lookup +( +ni +, +sock__t +, +pkt +, & +che +); + +91  + `ci__nd_pkt_nd +( +ni +, +pkt +, & +che +); + +92 + } +} + +95  + $ci__nd_t_ow +( +ci_tif +* +ni +, +ci_t_e +* +ts +, +ci__pkt_fmt +* +pkt +) + +98  +rc +, +ev_mtu + = +ts +-> +s +. +pkt +. +mtu +; + +100 + `ci_ur_ve +( +ni +, & +ts +-> +s +. +pkt +, &ts->s. + +); + +102 if +ts +-> +s +. +pkt +. +us + = +rc_sucss + ) { + +103 if +ts +-> +s +. +pkt +. +mtu + ! +ev_mtu + ) + +104 + `CI_PMTU_TIMER_NOW +( +ni +, & +ts +-> +pmtus +); + +105 + `ci__t_mac_d_pt +( +ni +, & +ts +-> +s +. +pkt +,kt); + +106 + `ci_tif_pkt_hd +( +ni +, +pkt +); + +107 + `ci_tif_nd +( +ni +, +pkt +); + +110 if +ts +-> +s +. +pkt +. +us + = +rc_loou + && + +111 ( +ts +-> +s +. +pkt +. +ags + & +CI_IP_CACHE_IS_LOCALROUTE +) ) { + +112 + `ci_tif_pkt_hd +( +ni +, +pkt +); + +113 + `ci__lol_nd +( +ni +, +pkt +, + `S_SP +( +ts +), +OO_SP_NULL +); + +117 + `ci__che_vide +(& +ts +-> +s +. +pkt +); + +119  +ts +-> +s +. +pkt +. +us + ) { + +120  +rc_nomac +: + +121 +rc + = 0; + +122 #ifde +__lux__ + + +128 if +ts +-> +s +. +b +. +e + = +CI_TCP_SYN_SENT + ) { + +129 if +ts +-> +sms + == 1 ) + +130 +ts +-> +tags + | +CI_TCPT_FLAG_NO_ARP +; + +131 if( +ts +-> +tags + & +CI_TCPT_FLAG_NO_ARP +) && + +132 +ts +-> +sms + == 2 ) { + +133 + `ci_t_dr +( +ni +, +ts +, +EHOSTUNREACH +); + +138 + `ci_ur_der_nd +( +ni +, +rc_nomac +, & +rc +, + `OO_PKT_P +( +pkt +), + +139 +ts +-> +s +. +pkt +. +ifdex +); + +140 ++ +ts +-> +s +. +tx_nomac_der +; + +142  +rc_nou +: + +143 +rc + = - +EHOSTUNREACH +; + +145  +rc_ou +: + +146  +rc_loou +: + +150 + `ci_as_ +( +ts +-> +s +. +pkt +. +us +, 0); + +151 if +ts +-> +s +. +pkt +. +us + < 0 ) + +152 +rc + = +ts +-> +s +. +pkt +. +us +; + +155 +rc + = 0; + +158 + `ci_as_ +( +rc +, 0); + +171 if +ts +-> +s +. +b +. +e + = +CI_TCP_SYN_SENT + && +rc + < 0 &&s-> +sms + > 0 && + +172 ( +rc + =- +EHOSTUNREACH + ||=- +ENETUNREACH + ||=- +ENETDOWN +) ) + +173 + `ci_t_dr +( +ni +, +ts +, - +rc +); + +174 + } +} + + @ip_tx.h + +14 #ide +__CI_INTERNAL_IP_TX_H__ + + +15  + #__CI_INTERNAL_IP_TX_H__ + + + ) + +17  + ~ + +18  + ~"tif_tx.h +" + +32  + $ci__nd_pkt +( +ci_tif +* +ni +, + +33 cڡ  +oo_sock_ +* +sock__t +, + +34 +ci__pkt_fmt +* +pkt + +CI_HF +; + +44  + $ci__nd_pkt_lookup +( +ci_tif +* +ni +, + +45 cڡ  +oo_sock_ +* +sock__t +, + +46 +ci__pkt_fmt +* +pkt +, + +47 +ci__ched_hdrs +* +che + +CI_HF +; + +50  + $ci__nd_pkt_nd +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +, + +51 cڡ +ci__ched_hdrs +* +che + +CI_HF +; + +55 +ci_le +  + $ci__lol_nd +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +, + +56 +oo_ + +c +, oo_ +d +) + +58 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +59 +pkt +-> +pf +. +t_tx +. +lo +. +tx_sock + = +c +; + +60 +pkt +-> +pf +. +t_tx +. +lo +. +rx_sock + = +d +; + +61 if + `OO_SP_IS_NULL +( +pkt +-> +pf +. +t_tx +. +lo +. +rx_sock +) ) { + +62 + `ci_tif_pkt_a +( +ni +, +pkt +); + +66 + `LOG_NT +( + `ci_log +("%d:%doback TXk%d%d", + `NI_ID +( +ni +), + `OO_SP_FMT +( +c +), + +67 + `OO_PKT_FMT +( +pkt +), + `OO_SP_FMT +( +d +))); + +68 +pkt +-> +xt + = +ni +-> +e +-> +lopkts +; + +69 +ni +-> +e +-> +lopkts + = + `OO_PKT_P +( +pkt +); + +70 +ni +-> +e +-> +n_lopkts +++; + +71 +ni +-> +e +-> +pl_wk_outdg + = 1; + +72 + } +} + +74 +ci_le +  + +75 + $ci__t_mac_d_pt +( +ci_tif +* +ni +, cڡ +ci__ched_hdrs +* +che +, + +76 +ci__pkt_fmt +* +pkt +) + +78 + `ci_as_equ +( +che +-> +h_ty +, +CI_ETHERTYPE_IP +); + +79 + `oo_tx_pkt_yout_upde +( +pkt +, +che +-> +h_offt +); + +80 + `memy +( + `oo_tx_h_hdr +( +pkt +), + `ci__che_h_hdr +( +che +), + +81 + `oo_h_hdr_size +( +pkt +)); + +82 +pkt +-> +tf_i + = +che +->intf_i; + +83 #i +CI_CFG_PORT_STRIPING + + +87 +pkt +-> +tf_i + ^pkt-> +tif +. +tx +. +tf_sw +; + +88 + `oo_h_dho +( +pkt +)[5] ^pkt-> +tif +. +tx +. +tf_sw +; + +89 + `oo_h_sho +( +pkt +)[5] ^pkt-> +tif +. +tx +. +tf_sw +; + +91 + `ci_as_equ +( + `oo_h_ty_g +( +pkt +), +CI_ETHERTYPE_IP +); + +92 + `ci_as_equ +( + `CI_IP4_IHL +( + `oo_tx__hdr +( +pkt +)), ( +ci_4_hdr +)); + +93 + } +} + +96  + $ci__nd_t_ow +( +ci_tif +*, +ci_t_e +*, +ci__pkt_fmt +*) +CI_HF +; + +99 +ci_le +  + +100 + $__ci__nd_t +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +, +ci_t_e +* +ts +) + +102 if +ts +-> +s +. +pkt +. +ags + & +CI_IP_CACHE_IS_LOCALROUTE + ) { + +103 + `ci_tif_pkt_hd +( +ni +, +pkt +); + +104 + `ci__lol_nd +( +ni +, +pkt +, + `S_SP +( +ts +),s-> +lol_ +); + +107 + `CI_IPV4_STATS_INC_OUT_REQUESTS +( +ni +); + +108 if( + `CI_LIKELY + + `ci__che_is_vid +( + `CICP_HANDLE +( +ni +), & +ts +-> +s +. +pkt +) )) { + +109 + `ci__t_mac_d_pt +( +ni +, & +ts +-> +s +. +pkt +,kt); + +110 + `ci_tif_pkt_hd +( +ni +, +pkt +); + +111 + `ci_tif_nd +( +ni +, +pkt +); + +114 + `ci__nd_t_ow +( +ni +, +ts +, +pkt +); + +116 + } +} + +119 +ci_le +  + +120 + $ci__nd_t +( +ci_tif + * +ni +, +ci__pkt_fmt + * +pkt +, +ci_t_e + * +ts +) + +122 #i +CI_CFG_PORT_STRIPING + + +123 +pkt +-> +tif +. +tx +. +tf_sw + = 0; + +125 + `__ci__nd_t +( +ni +, +pkt +, +ts +); + +126 + } +} + + @ipid.c + +14  + ~"_.h +" + +15 #ifde +__ci_driv__ + + +16  + ~ + +18  + ~ + +19  + ~ + +23  + #LPF + "ci_id_" + + ) + +26 +ci_le +  + $ci_id_nge_g + +ci_tif +* +ni +, +ci_fd_t + +fd + ) + +28 #ifde +__ci_driv__ + + +29  +rc + = + `eb_id_loc +(& +eb_t_driv +. +id +); + +30 + `LOG_IP +( + `ci_log + +LPF + "nge_g: %d", +rc + )); + +31  +rc +; + +33 +ci_t32 + +v +; + +35  +rc + = + `oo_id_nge_loc +( +fd +, & +v +); + +36 + `LOG_IP +( + `ci_log + +LPF + "nge_g: %d", +rc + )); + +37  +rc + ?: +v +; + +40 + } +} + +42 +ci_le +  + $ci_id_nge_a + +ci_tif +* +ni +, +ci_fd_t + +fd +, +ci_t32 + +r + ) + +44 #ifde +__ci_driv__ + + +45  + `eb_id_ +(& +eb_t_driv +. +id +, +r +); + +48  + `oo_id_nge_ + +fd +, & +r + ); + +50 + } +} + +52 +ci_le +  + $ci_id__xt + +ci_tif_id_cb_t +* +id +,  +idx + ) + +55 +id +-> +nge +[ +idx + ]. +xt + = + +56 +id +-> +nge +[ +idx + ]. +ba + + +CI_IPID_BLOCK_MASK +; + +57 + } +} + +62 +ci_le +  + $ci_id_nge_add + +ci_tif_id_cb_t +* +id +,  +nge + ) + +64 + `ci_as +( +id +); + +66 if + `CI_LIKELY + +nge + >= 0 )) { + +67 + `ci_as +( +nge ++ +CI_IPID_BLOCK_MASK +) <0x10000); + +68 + `ci_as +( +id +-> +max_dex + < ( +CI_IPID_BLOCK_COUNT + - 1)); + +69 + `ci_as +( +id +-> +max_dex + < +CI_TP_IPID_RANGES +); + +71 +id +-> +nge +[id-> +max_dex +]. +ba + = ( +ci_ut16 +)range; + +72 + `ci_id__xt + +id +, ipid-> +max_dex + ); + +73 ++ +id +-> +max_dex +; + +74 + `LOG_IP +( + `ci_log + +LPF + "range_add: block %xt slot %d", + +75 +nge +, +id +-> +max_dex + - 1)); + +79 + } +} + +81 #i +CI_CFG_FULL_IP_ID_HANDLING + + +86  + $ci_id_cye + +ci_tif +* +ni +, +ci_fd_t + +fd + ) + +88 +ci_tif_id_cb_t +* +id +; + +90 + `ci_as +( +ni +); + +91 +id + = + `NI_IPID +( +ni +); + +93 + `LOG_IP +( + `ci_log + +LPF + "recycle: curr %d max %d", + +94 +id +-> +cut_dex +, ipid-> +max_dex + )); + +95 + `ci_as + +id +-> +cut_dex + >= 0 ); + +96 + `ci_as + +id +-> +cut_dex + < ipid-> +max_dex + ); + +98 + `ci_id__xt + +id +, ipid-> +cut_dex + ); + +101 if++ +id +-> +cut_dex + =id-> +max_dex + ) { + +102  +now + = + `ci__time_now +( +ni +); + +103  +diff + = +now + - +id +-> +lo_t_time +; + +107 if( +diff + < +CI_IPID_MIN_CYCLE_TIME + ) { + +112 + `LOG_IP +( + `ci_log +( +LPF + "recycle: we're busy -eednother block")); + +113 if( +id +-> +max_dex + =( +CI_TP_IPID_RANGES + - 1)) || + +114 + `ci_id_nge_add + +id +, + `ci_id_nge_g +( +ni +, +fd +) ) ) { + +117 +id +-> +low_u_t_time + = +now +; + +118 +id +-> +cut_dex + = 0; + +122 +id +-> +cut_dex + = 0; + +123 +id +-> +lo_t_time + = +now +; + +125 if +diff + > +CI_IPID_MAX_CYCLE_TIME + ) && + +126 +id +-> +max_dex + > 1 ) ) { + +129 if( +now + - +id +-> +low_u_t_time +) >= + +130 +CI_IPID_LOW_USE_TIME +) { + +132 + `LOG_IP +( + `ci_log +( +LPF + "recycle:ot so busy,elease one block")); + +133 + `ci_id_nge_a + +ni +, +fd +, + +134 ( +ci_t32 +) +id +-> +nge +[ --id-> +max_dex + ]. +ba +); + +135 +id +-> +low_u_t_time + = +now +; + +138 +id +-> +low_u_t_time + = +now +; + +142 + } +} + +157  + $ci_id_ + +ci_tif +* +ni +, +ci_fd_t + +fd + ) + +159 +ci_tif_id_cb_t +* +id +; + +160  +rc +; + +162 + `ci_as +( +ni +); + +164 +id + = + `NI_IPID +( +ni +); + +165 + `memt + +id +, 0, (*ipid)); + +167 #i +CI_CFG_NO_IP_ID_FAILURE + + +168 if0 > ( +rc + = + `ci_id_nge_g +( +ni +, +fd +)) ) { + +169 +id +-> +no_ + = 1; + +170 +rc + = +CI_IPID_MIN +; + +173 + `CI_TRY_RET + +rc + = + `ci_id_nge_g +( +ni +, +fd +) ); + +176 + `ci_id_nge_add + +id +, +rc + ); + +178 #i +CI_CFG_FULL_IP_ID_HANDLING +==0 + +179 +id +-> +ba + = ipid-> +nge +[0].base; + +180 +id +-> +xt + = 0; + +183 +id +-> +lo_t_time + = + +184 +id +-> +low_u_t_time + = + `ci__time_now +( +ni +); + +186 + } +} + +189  + $ci_id_dt + +ci_tif +* +ni +, +ci_fd_t + +fd + ) + +191 +ci_tif_id_cb_t +* +id +; + +192 + `ci_as +( +ni +); + +193 +id + = + `NI_IPID +( +ni +); + +194 + `ci_as + +id +-> +max_dex + >= 0 && + +195 +id +-> +max_dex + < +CI_TP_IPID_RANGES + ); + +197 #i +CI_CFG_NO_IP_ID_FAILURE + + +200  +id +-> +max_dex +-- > ipid-> +no_ + ) { + +203  +id +-> +max_dex +-- ) { + +205 + `ci_as + +id +-> +nge +[id-> +max_dex +]. +ba + <= + +206 ( +ci_ut16 +)(0x10000 - +CI_IPID_BLOCK_LENGTH +) ); + +207 + `ci_as +!( +id +-> +nge +[id-> +max_dex +]. +ba + & + +208 +CI_IPID_BLOCK_MASK +)); + +209 + `LOG_IP +( + `ci_log +( +LPF + "dtor:eleaseange %#x (%d)", + +210 +id +-> +nge +[id-> +max_dex + ]. +ba +, + +211 +id +-> +max_dex +)); + +212 + `ci_id_nge_a + +ni +, +fd +, + +213 ( +ci_t32 +) +id +-> +nge +[id-> +max_dex + ]. +ba + ); + +216 + } +} + +219 #i +CI_CFG_FULL_IP_ID_HANDLING + && ! +defed +( +NDEBUG +) + +222  + $ci_id_as_vid +( +ci_tif +* +ni +, cڡ * +fe +,  +le +) + +224  +r +; + +225 +ci_tif_id_cb_t +* +id +; + +227 + `vify +( +ni +); + +228 +id + = + `NI_IPID +( +ni +); + +230 + `vify + +id +-> +max_dex + >= 0 && + +231 +id +-> +max_dex + < +CI_TP_IPID_RANGES + ); + +233 + `vify + +id +-> +cut_dex + >=0 && + +234 +id +-> +cut_dex + < ipid-> +max_dex + ); + +236 + `vify + +id +-> +low_u_t_time + <= + +237 +id +-> +lo_t_time + ); + +239  +r + = 0; c < +id +-> +max_dex +; ctr++ ) { + +240 + `vify + +id +-> +nge +[ +r +]. +ba + <= + +241 ( +ci_ut16 +)(0x10000 - +CI_IPID_BLOCK_LENGTH +) ); + +242 + `vify +!( +id +-> +nge +[ +r +]. +ba + & +CI_IPID_BLOCK_MASK +) ); + +243 + `vify + +id +-> +nge +[ +r +]. +xt + >id->nge[r]. +ba + ); + +244 if +r + ! +id +-> +cut_dex + ) + +245 + `vify + +id +-> +nge +[ +r +]. +xt + == + +246 +id +-> +nge +[ +r +]. +ba + + +CI_IPID_BLOCK_MASK + ); + +248 + `vify + +id +-> +nge +[ +r +]. +xt + <= + +249 +id +-> +nge +[ +r +]. +ba + + +CI_IPID_BLOCK_MASK + ); + +251 + } +} + + @iptimer.c + +14  + ~"_.h +" + +15 #ide +__KERNEL__ + + +16  + ~ + +20  + #SAMPLE +( +n +) + + ) + +22  + #LPF + "IPTIMER " + + ) + +24  + #DUMP_TIMER_SUPPORT + 1 + + ) + +27  + #DETAILED_CHECK_TIMERS +( +ni +) + + ) + +29  + #DETAILED_CHECK_TIMERS + +CHECK_TIMERS + + + ) + +33  + #LINK2TIMER +( +k +) \ + +34 + `CI_CONTAINER +( +ci__tim +, +lk +, ( +k +)) + + ) + +36  + #ADDR2TIMER +( +ni +, +id +) \ + +37 + `LINK2TIMER +(( +ci_ni_di_lk +* + `CI_NETIF_PTR +(( +ni +), ( +id +))) + + ) + +40 #i +CI_CFG_IP_TIMER_DEBUG + + +42  + $ci__tim_debug +( +ci_tif +* +tif +,  +tim_id +,  +m +) { + +43 + `LOG_ITV +( + `log + +LPF + "netif=%lximer_id=%uaram=%xow=%u", + +44 () +tif +, +tim_id +, +m +, + +45 + `ci__time_now +( +tif +))); + +46 + } +} + +49 (* +ci__tim_debug_ +)( +ci_tif +*, ,  +ci__tim_debug +; + +62  + #BUCKETNO +( +who +, +abs +) \ + +63 ((( +abs +>> (( +who +)* +CI_IPTIME_BUCKETBITS +)& +CI_IPTIME_BUCKETMASK +) + + ) + +66  + #BUCKET +( +tif +, +who +, +abs +) \ + +67 (&( + `IPTIMER_STATE +(( +tif +))-> +wy +[( +who +)* +CI_IPTIME_BUCKETS + + + `BUCKETNO +((who), ( +abs +))])) + + ) + +69  + #WHEEL2_MASK + ( +CI_IPTIME_BUCKETMASK + << ( +CI_IPTIME_BUCKETBITS +*3)) + + ) + +70  + #WHEEL1_MASK + ( +WHEEL2_MASK + + \ + +71 ( +CI_IPTIME_BUCKETMASK + << ( +CI_IPTIME_BUCKETBITS +*2))) + + ) + +72  + #WHEEL0_MASK + ( +WHEEL1_MASK + + \ + +73 ( +CI_IPTIME_BUCKETMASK + << ( +CI_IPTIME_BUCKETBITS +*1))) + + ) + +76 #ide +__KERNEL__ + + +78  + $ci__tim_e__ul +( +ci_tif + * +ni +) + +80 +ci__tim_e +* +ts + = + `IPTIMER_STATE +( +ni +); + +82 +ni +-> +ci__time_tick2ms + = + +83 ()(1u<< +ts +-> +ci__time_c2tick +)/(()ts-> +khz +); + +84 + } +} + +89 #ifde +__KERNEL__ + + +91  + $shi_f_gn +( +ci_ut32 + +G +,  +khz +) + +93  +tmp +; + +94  +sh +; + +110 if +G + < 1000 ) { + +111 +tmp + = ( +khz +/1000)* +G +; + +113 +tmp + = +khz +*( +G +/1000); + +117 +sh + = 0; + +118  +tmp + >(1u << +sh +) ) { + +119 +sh +++; + +120 if( +sh + = +CI_IP_TIME_MAX_FRCSHIFT +) ; + +122  +sh +; + +123 + } +} + +127  + $ci__tim_e_ +( +ci_tif +* +tif +,  +u_khz +) + +129 +ci__tim_e +* +ts + = + `IPTIMER_STATE +( +tif +); + +130  +i +; + +133 +ts +-> +khz + = +u_khz +; + +134 +ts +-> +ci__time_c2tick + = + `shi_f_gn +( +CI_IP_TIME_APP_GRANULARITY +, is-> +khz +); + +135 +ts +-> +ci__time_c2us + = + `shi_f_gn +(1, is-> +khz +); + +136 + `ci__time_l_sync +( +ts +); + +137 +ts +-> +sched_ticks + = + `ci__time_now +( +tif +); + +140 + `ci_t_tim_ +( +tif +); + +142 + `ci_ni_di_ +( +tif +, & +ts +-> +fe_li +, + +143 + `oo_r_to_ +( +tif +, & +ts +-> +fe_li +), + +147  +i +=0; i < +CI_IPTIME_WHEELSIZE +; i++) + +148 + `ci_ni_di_ +( +tif +, & +ts +-> +wy +[ +i +], + +149 + `oo_r_to_ +( +tif +, & +ts +-> +wy +[ +i +]), + +151 + } +} + +156  + $__ci__tim_t +( +ci_tif + * +tif +, +ci__tim + * +ts +, +ci_time_t + +t +) + +158 +ci_ni_di_t +* +buck +; + +159  +w +; + +160 +ci_time_t + +ime + = + `IPTIMER_STATE +( +tif +)-> +sched_ticks +; + +162 #i + `defed +( +_WIN32 +&& !defed( +NDEBUG +) + +163 if! + `TIME_GT +( +t +, +ime +) ) + +164 + `ci_log +("%s: Bugz5428 : %#u/%x !> %u/%#x", +__FUNCTION__ +, +t +,, +ime +, stime); + +166 + `ci_as +( + `TIME_GT +( +t +, +ime +)); + +168 +ts +-> +time + = +t +; + +176 i(( +ime + & +WHEEL0_MASK +=( +t + & WHEEL0_MASK)) + +177 +w + = 0; + +179 i(( +ime + & +WHEEL1_MASK +=( +t + & WHEEL1_MASK)) + +180 +w + = 1; + +182 i(( +ime + & +WHEEL2_MASK +=( +t + & WHEEL2_MASK)) + +183 +w + = 2; + +185 +w + = 3; + +187 +buck + = + `BUCKET +( +tif +, +w +, +t +); + +189 + `LOG_ITV +( + `log +("%s: delta=0x%x (t=0x%x-s=0x%x), w=0x%x, b=0x%x", + +190 +__FUNCTION__ +, + +191 +ts +-> +time +- +ime +,s->time, stime, + +192 +w +, + `BUCKETNO +(w, +ts +-> +time +))); + +200 + `ci_ni_di_push_ +( +tif +, +buck +, & +ts +-> +lk +); + +202 + `ci_as +( + `ci__tim_is_lk_vid +( +tif +, +ts +)); + +203 + `DETAILED_CHECK_TIMERS +( +tif +); + +204 + } +} + +210  + $ci__tim_sdewhl +( +ci_tif +* +tif +,  +who +, + +211 +ci_time_t + +ime +) + +213 +ci__tim +* +ts +; + +214 +ci_ni_di_t +* +buck +; + +215 +oo_p + +curid +, +buckid +; + +217 + `ci_as +( +who + > 0 && wh< +CI_IPTIME_WHEELS +); + +219 + `ci_as +( +ime + & (()(-1<< ( +CI_IPTIME_BUCKETBITS +* +who +))) == stime ); + +222 +buck + = + `BUCKET +( +tif +, +who +, +ime +); + +223 +buckid + = + `ci_ni_di_lk_addr +( +tif +, & +buck +-> +l +); + +224 +curid + = +buck +-> +l +. +xt +; + +226 + `LOG_ITV +( + `log +( +LN_FMT + "cascading wheel=%u sched_ticks=0x%x bucket=%i", + +227 + `LN_PRI_ARGS +( +tif +), +who +, +ime +, + `BUCKETNO +(wheelno, stime))); + +230 + `ci_ni_di_ +( +tif +, +buck +, + +231 + `ci_ni_di_lk_addr +( +tif +, & +buck +-> +l +), "timw"); + +233  ! + `OO_P_EQ +( +curid +, +buckid +) ) { + +234 +ts + = + `ADDR2TIMER +( +tif +, +curid +); + +237 +curid + = +ts +-> +lk +. +xt +; + +239 #ide +NDEBUG + + +242 i( +who + == 1) + +243 + `ci_as +( +ime + & +WHEEL0_MASK +=( +ts +-> +time + & WHEEL0_MASK) ); + +245 i( +who + == 2) + +246 + `ci_as +( +ime + & +WHEEL1_MASK +=( +ts +-> +time + & WHEEL1_MASK) ); + +249 + `ci_as +( +who + == 3); + +250 + `ci_as +( +ime + & +WHEEL2_MASK +=( +ts +-> +time + & WHEEL2_MASK) ); + +256 +buck + = + `BUCKET +( +tif +, +who +-1, +ts +-> +time +); + +264 + `ci_ni_di_push_ +( +tif +, +buck +, & +ts +-> +lk +); + +265 + `ci_as +( + `ci__tim_is_lk_vid +( +tif +, +ts +)); + +267 + } +} + +270  + $ci__tim_doback +( +ci_tif + * +tif +, +ci__tim +* +ts +) + +272 + `ci_as + + `TIME_LE +( +ts +-> +time +, + `ci__time_now +( +tif +)) ); + +273 + `ci_as + +ts +-> +time + = + `IPTIMER_STATE +( +tif +)-> +sched_ticks + ); + +275  +ts +-> + +){ + +276  +CI_IP_TIMER_TCP_RTO +: + +277 + `CHECK_TS +( +tif +, + `SP_TO_TCP +ґif, +ts +-> +m1 +)); + +278 + `ci_t_timeout_o +( +tif +, + `SP_TO_TCP +ґif, +ts +-> +m1 +)); + +280  +CI_IP_TIMER_TCP_DELACK +: + +281 + `CHECK_TS +( +tif +, + `SP_TO_TCP +ґif, +ts +-> +m1 +)); + +282 + `ci_t_timeout_dack +( +tif +, + `SP_TO_TCP +ґif, +ts +-> +m1 +)); + +284  +CI_IP_TIMER_TCP_ZWIN +: + +285 + `CHECK_TS +( +tif +, + `SP_TO_TCP +ґif, +ts +-> +m1 +)); + +286 + `ci_t_timeout_zw +( +tif +, + `SP_TO_TCP +ґif, +ts +-> +m1 +)); + +288  +CI_IP_TIMER_TCP_KALIVE +: + +289 + `CHECK_TS +( +tif +, + `SP_TO_TCP +ґif, +ts +-> +m1 +)); + +290 + `ci_t_timeout_kive +( +tif +, + `SP_TO_TCP +ґif, +ts +-> +m1 +)); + +292  +CI_IP_TIMER_TCP_LISTEN +: + +293 + `ci_t_timeout_li +( +tif +, + `SP_TO_TCP_LISTEN +ґif, +ts +-> +m1 +)); + +295  +CI_IP_TIMER_TCP_CORK +: + +296 + `ci_t_timeout_ck +( +tif +, + `SP_TO_TCP +ґif, +ts +-> +m1 +)); + +298  +CI_IP_TIMER_NETIF_TIMEOUT +: + +299 + `ci_tif_timeout_e +( +tif +); + +301  +CI_IP_TIMER_PMTU_DISCOVER +: + +302 + `ci_pmtu_timeout_pmtu +( +tif +, + `SP_TO_TCP +ґif, +ts +-> +m1 +)); + +304 #i +CI_CFG_TAIL_DROP_PROBE + + +305  +CI_IP_TIMER_TCP_TAIL_DROP +: + +306 + `ci_t_timeout_dr +( +tif +, + `SP_TO_TCP +ґif, +ts +-> +m1 +)); + +309 #i +CI_CFG_TCP_SOCK_STATS + + +310  +CI_IP_TIMER_TCP_STATS +: + +311 + `ci_t_s_ai +( +tif +, + `SP_TO_TCP +ґif, +ts +-> +m1 +), + +312 +CI_IP_STATS_FLUSH +, + +313 +CI_IP_STATS_OUTPUT_NONE +, +NULL +, NULL ); + +316 #i +CI_CFG_SUPPORT_STATS_COLLECTION + + +317  +CI_IP_TIMER_NETIF_STATS +: + +318 + `ci_tif_s_ai +( +tif +, +CI_IP_STATS_FLUSH +, + +319 +CI_IP_STATS_OUTPUT_NONE +, +NULL +, NULL ); + +322 #i +CI_CFG_IP_TIMER_DEBUG + + +323  +CI_IP_TIMER_DEBUG_HOOK +: + +324 + `ci__tim_debug_ +( +tif +, +ts +-> +lk +. +addr +,s-> +m1 +); + +328 + `LOG_U +( + `log + +LPF + "unknownimer callback code:%xaram1:%d", + +329 +ts +-> + +, + `OO_SP_FMT +s-> +m1 +))); + +330 + `CI_DEBUG +( + `ci___ +()); + +332 + } +} + +335  + $ci__tim_pl +( +ci_tif + * +tif +) { + +336 +ci__tim_e +* +ts + = + `IPTIMER_STATE +( +tif +); + +337 +ci_time_t +* +ime + = & +ts +-> +sched_ticks +; + +338 +ci__tim +* +ts +; + +339 +ci_time_t + +ime +; + +340 +ci_ni_di_lk +* +lk +; + +345 +ime + = + `ci__time_now +( +tif +); + +347 + `ci_as + + `TIME_GE +( +ime +, * +ime +) ); + +350 + `ci_as + + `ci_ni_di_is_vid +( +tif +, & +ts +-> +fe_li +. +l +) ); + +351 + `ci_as + + `ci_ni_di_is_emy +( +tif +, & +ts +-> +fe_li +)); + +353  + `TIME_LT +(* +ime +, +ime +) ) { + +355 + `DETAILED_CHECK_TIMERS +( +tif +); + +358 (* +ime +)++; + +361 if( + `BUCKETNO +(0, * +ime +) == 0) { + +362 if( + `BUCKETNO +(1, * +ime +) == 0) { + +363 if( + `BUCKETNO +(2, * +ime +) == 0) { + +364 + `ci__tim_sdewhl +( +tif +, 3, * +ime +); + +366 + `ci__tim_sdewhl +( +tif +, 2, * +ime +); + +368 + `ci__tim_sdewhl +( +tif +, 1, * +ime +); + +379 + `ci_as + + `ci_ni_di_is_vid +( +tif +, & +ts +-> +fe_li +. +l +)); + +380 + `ci_as + + `ci_ni_di_is_emy +( +tif +, & +ts +-> +fe_li +)); + +383 + `ci_ni_di_home + +tif +, + +384 & +ts +-> +fe_li +, + +385 & +ts +-> +wy +[ + `BUCKETNO +(0, * +ime +)] ); + +386 + `DETAILED_CHECK_TIMERS +( +tif +); + +388  ( +lk + = + `ci_ni_di_y_p +( +tif +, & +ts +-> +fe_li +)) ) { + +390 +ts + = + `LINK2TIMER +( +lk +); + +392 + `ci_as_equ +( +ts +-> +time +, * +ime +); + +395 + `ci_ni_di_lf_lk +( +tif +, & +ts +-> +lk +); + +398 + `ci__tim_doback +( +tif +, +ts +); + +400 + `ci_as + + `ci_ni_di_is_vid +( +tif +, & +ts +-> +fe_li +. +l +) ); + +401 + `ci_as + + `ci_ni_di_is_emy +( +tif +, & +ts +-> +fe_li +)); + +403 + `DETAILED_CHECK_TIMERS +( +tif +); + +406 + `ci_as + + `ci_ni_di_is_vid +( +tif +, & +ts +-> +fe_li +. +l +) ); + +407 + `ci_as + + `ci_ni_di_is_emy +( +tif +, & +ts +-> +fe_li +)); + +408 + } +} + +411 #ide +NDEBUG + + +413  + $ci__tim_e_as_vid +( +ci_tif +* +ni +, cڡ * +fe +,  +le +) + +415 +ci__tim_e +* +ts +; + +416 +ci__tim +* +ts +; + +417 +ci_ni_di_t +* +buck +; + +418 +ci_ni_di_lk +* +l +; + +419 +ci_time_t + +ime +, +whl_ba +, +max_time +, +m_time +; + +420  +a1 +, +a2 +, +a3 +, +w +, +b +, +b_shi +; + +426  +whl_mask +[ +CI_IPTIME_WHEELS +] = + +427 { +WHEEL0_MASK +, +WHEEL1_MASK +, +WHEEL2_MASK +, 0 }; + +429 +ts + = + `IPTIMER_STATE +( +ni +); + +430 +ime + = +ts +-> +sched_ticks +; + +433  +w +=0; w < +CI_IPTIME_WHEELS +; w++) { + +436 +whl_ba + = +ime + & +whl_mask +[ +w +]; + +438  +b +=0; b < +CI_IPTIME_BUCKETS +; b++) { + +441 +b_shi + = +CI_IPTIME_BUCKETBITS +* +w +; + +442 +m_time + = +whl_ba + + ( +b + << +b_shi +); + +443 +max_time + = +m_time + + (1 << +b_shi +); + +445 +buck + = & +ts +-> +wy +[ +w +* +CI_IPTIME_BUCKETS + + +b +]; + +448 i + `ci_ni_di_t +( +ni +, +buck += + `ci_ni_di_d +(ni, bucket) ) { + +449 + `ci_as + + `ci_ni_di_is_emy +( +ni +, +buck +) ); + +453 +a3 + = + `TIME_GT +( +m_time +, +ime +|| + `ci_ni_di_is_emy +( +ni +, +buck +); + +456  +l + = + `ci_ni_di_t +( +ni +, +buck +); + +457 +l + ! + `ci_ni_di_d +( +ni +, +buck +); + +458 + `ci_ni_di_ +( +ni +, +l +) ) { + +460 + `ci_ni_di_lk_as_vid +( +ni +, +l +); + +463 +ts + = + `LINK2TIMER +( +l +); + +466 +a1 + = + `TIME_GT +( +ts +-> +time +, +ime +); + +468 +a2 + = + `TIME_LT +( +ts +-> +time +, +max_time +&& + `TIME_GE +s->time, +m_time +); + +471 i(! +a1 + || ! +a2 + || ! +a3 +) { + +472 + `ci_log +("%s: [w=0x%x/b=0x%x] stime=0x%x", +__FUNCTION__ +, +w +, +b +, +ime +); + +473 + `ci_log +(" -->=0x%x, m=0x%x, max=0x%x", +ts +-> +time +, +m_time +, +max_time +); + +474 + `ci_log +(" [%le=%d]", +fe +, +le +); + +477 + `ci_as +( +a1 + && +a2 + && +a3 +); + +481 + } +} + +485 #ifde +DUMP_TIMER_SUPPORT + + +487 + $ci__tim_dump +( +ci__tim +* +ts +) + +489 * +tim_me +; + +490  +unknown_tim +[20]; + +492  +ts +-> + +) { + +494 #unde +MAKECASE + + +495  + #MAKECASE +( +id +, +me +id: +tim_me + =ame; ; + + ) + +497 + `MAKECASE +( +CI_IP_TIMER_TCP_RTO +, "rto") + +498 + `MAKECASE +( +CI_IP_TIMER_TCP_DELACK +, "delack") + +499 + `MAKECASE +( +CI_IP_TIMER_TCP_ZWIN +, "zwin") + +500 + `MAKECASE +( +CI_IP_TIMER_TCP_KALIVE +, "kalive") + +501 + `MAKECASE +( +CI_IP_TIMER_TCP_LISTEN +, "listen") + +502 + `MAKECASE +( +CI_IP_TIMER_TCP_CORK +, "cork") + +503 + `MAKECASE +( +CI_IP_TIMER_NETIF_TIMEOUT +, "netif") + +504 + `MAKECASE +( +CI_IP_TIMER_PMTU_DISCOVER +, "pmtu") + +505 #i +CI_CFG_SUPPORT_STATS_COLLECTION + + +506 + `MAKECASE +( +CI_IP_TIMER_TCP_STATS +, "tcp-stats") + +507 + `MAKECASE +( +CI_IP_TIMER_NETIF_STATS +, "ni-stats") + +509 #i +CI_CFG_TAIL_DROP_PROBE + + +510 + `MAKECASE +( +CI_IP_TIMER_TCP_TAIL_DROP +, "taildrop") + +512 #i +CI_CFG_IP_TIMER_DEBUG + + +513 + `MAKECASE +( +CI_IP_TIMER_DEBUG_HOOK +, "debug") + +516 + `rtf +( +unknown_tim +, "unk=%d", +ts +-> + +); + +517 +tim_me + = +unknown_tim +; + +519 #unde +MAKECASE + + +521  +tim_me +; + +522 + } +} + +525  + $ci__tim_e_dump +( +ci_tif +* +ni +) + +527 +ci__tim_e +* +ts +; + +528 +ci__tim +* +ts +; + +529 +ci_ni_di_t +* +buck +; + +530 +ci_ni_di_lk +* +l +; + +531 +ci_time_t + +ime +, +whl_ba +, +max_time +, +m_time +; + +532  +w +, +b +, +b_shi +; + +538  +whl_mask +[ +CI_IPTIME_WHEELS +] = + +539 { +WHEEL0_MASK +, +WHEEL1_MASK +, +WHEEL2_MASK +, 0 }; + +541 +ts + = + `IPTIMER_STATE +( +ni +); + +542 +ime + = +ts +-> +sched_ticks +; + +544 + `ci_log +("%s:imi0x%x", +__FUNCTION__ +, +ime +); + +546  +w +=0; w < +CI_IPTIME_WHEELS +; w++) { + +549 +whl_ba + = +ime + & +whl_mask +[ +w +]; + +551  +b +=0; b < +CI_IPTIME_BUCKETS +; b++) { + +554 +b_shi + = +CI_IPTIME_BUCKETBITS +* +w +; + +555 +m_time + = +whl_ba + + ( +b + << +b_shi +); + +556 +max_time + = +m_time + + (1 << +b_shi +); + +558 +buck + = & +ts +-> +wy +[ +w +* +CI_IPTIME_BUCKETS + + +b +]; + +561 i + `TIME_LE +( +m_time +, +ime +&& ! + `ci_ni_di_is_emy +( +ni +, +buck +) ) + +562 + `ci_log +("w:%d, b:%d, [0x%x->0x%x] - bucket should bempty", + +563 +w +, +b +, +m_time +, +max_time +); + +566  +l + = + `ci_ni_di_t +( +ni +, +buck +); + +567 +l + ! + `ci_ni_di_d +( +ni +, +buck +); + +568 + `ci_ni_di_ +( +ni +, +l +) ) { + +571 +ts + = + `LINK2TIMER +( +l +); + +573 + `ci_log +("s = 0x%x %s w:%d, b:%d, [0x%x->0x%x]", + +574 +ts +-> +time +, + `ci__tim_dump +s), +w +, +b +, +m_time +, +max_time +); + +575 i + `TIME_LE +( +ts +-> +time +, +ime +) ) + +576 + `ci_log +(" ERROR:imer before currentime"); + +577 i!( + `TIME_LT +( +ts +-> +time +, +max_time +&& + `TIME_GE +s->time, +m_time +)) ) + +578 + `ci_log +(" ERROR:imer in wrong bucket"); + +582 + `ci_log +("----------------------"); + +583 + } +} + + @netif.c + +10  + ~"_.h +" + +12  + #LPF + "NETIF " + + ) + +14 #i +CI_CFG_DETAILED_CHECKS + + +15 * + $CI_NETIF_PTR +( +ci_tif +* +ni +, +oo_p + +off +) + +17 + `ASSERT_VALID_NETIF_ADDR +( +ni +, +off +, 1); + +18  + `__CI_NETIF_PTR +( +ni +, +off +); + +19 + } +} + +30 +ci_le +  + $ci_tif_timeout_t_tim +( +ci_tif +* +ni +, +ci_time_t + +ev_time +) + +32 +ci_time_t + +time + = 0; + +33  +i +, +found + = 0; + +35  +i + = 0; i < +OO_TIMEOUT_Q_MAX +; i++ ) { + +36 +ci_t_e +* +ts +; + +37 if + `ci_ni_di_is_emy +( +ni +, &ni-> +e +-> +timeout_q +[ +i +]) ) + +39 +ts + = + `TCP_STATE_FROM_LINK +( + `ci_ni_di_hd +( +ni +, &ni-> +e +-> +timeout_q +[ +i +])); + +40 if + `TIME_LE +( +ts +-> +t_ϡ_ +, +ev_time +) ) + +42 if! +found + || + `TIME_LT +( +ts +-> +t_ϡ_ +, +time +) ) { + +43 +found + = 1; + +44 +time + = +ts +-> +t_ϡ_ +; + +50 if! +found + ) + +51 + `ci__tim_r +( +ni +, &ni-> +e +-> +timeout_tid +); + +52 if + `ci__tim_ndg +( +ni +, &ni-> +e +-> +timeout_tid +) ) + +53 + `ci__tim_modify +( +ni +, &ni-> +e +-> +timeout_tid +, +time +); + +55 + `ci__tim_t +( +ni +, &ni-> +e +-> +timeout_tid +, +time +); + +56 + } +} + +60 +ci_le +  + $ci_tif_timeout_add +( +ci_tif +* +ni +, +ci_t_e +* +ts +,  +idx +) + +62  +is_f +; + +63 +ci_ni_di_t +* +my_li + = & +ni +-> +e +-> +timeout_q +[ +idx +]; + +64 +ci_ni_di_t +* +h_li +; + +65 +ci_t_e +* +h_ts +; + +67 + `ci_as + + `ci_ni_di_is_ +(& +ts +-> +timeout_q_lk +) ); + +69 +is_f + = + `ci_ni_di_is_emy +( +ni +, +my_li +); + +70 + `ci_ni_di_push_ +( +ni +, +my_li +, & +ts +-> +timeout_q_lk +); + +73 if! +is_f + ) + +76 +h_li + = & +ni +-> +e +-> +timeout_q +[1- +idx +]; + +77 if + `ci_ni_di_is_emy +( +ni +, +h_li +) ) { + +78 + `ci__tim_t +( +ni +, &ni-> +e +-> +timeout_tid +, +ts +-> +t_ϡ_ +); + +82 +h_ts + = + `TCP_STATE_FROM_LINK +( + `ci_ni_di_hd +( +ni +, +h_li +)); + +83 if + `TIME_LT +( +ts +-> +t_ϡ_ +, +h_ts +->t_last_sent) ) + +84 + `ci__tim_modify +( +ni +, &ni-> +e +-> +timeout_tid +, +ts +-> +t_ϡ_ +); + +86 + `ci__tim_modify +( +ni +, &ni-> +e +-> +timeout_tid +, +h_ts +-> +t_ϡ_ +); + +87 + } +} + +90  + $ci_tif_timeout_move +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +92  +is_f +, +idx +; + +94 + `ci_as +( +ts +-> +s +. +b +. +e + = +CI_TCP_TIME_WAIT +) || + +95 + `ci_t_is_timeout_ph +( +ts +)); + +96 + `ci_as +! + `ci_ni_di_is_ +(& +ts +-> +timeout_q_lk +) ); + +98 if +ts +-> +s +. +b +. +e + = +CI_TCP_TIME_WAIT + ) + +99 +idx + = +OO_TIMEOUT_Q_TIMEWAIT +; + +101 +idx + = +OO_TIMEOUT_Q_FINWAIT +; + +102 +is_f + = + `OO_P_EQ + + `ci_ni_di_lk_addr +( +ni +, & +ts +-> +timeout_q_lk +), + +103 + `ci_ni_di_lk_addr +( +ni +, + `ci_ni_di_hd +(ni, + +104 & +ni +-> +e +-> +timeout_q +[ +idx +])) ); + +107 + `ci_ni_di_move +( +ni +, & +ts +-> +timeout_q_lk +); + +108 + `ci_ni_di_mk_ +(& +ts +-> +timeout_q_lk +); + +111 if! +is_f + ) + +114 + `ci_tif_timeout_t_tim +( +ni +, +ts +-> +t_ϡ_ +); + +115 + } +} + +118  + $ci_tif_timeout_ave +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +120 + `ci_as +( +tif +); + +121 + `ci_as +( +ts +); + +122 + `ci_as +( +ts +-> +s +. +b +. +e + = +CI_TCP_TIME_WAIT +) || + +123 + `ci_t_is_timeout_ph +( +ts +) ); + +125 #ide +NDEBUG + + +126 i( +ts +-> +s +. +b +. +e + = +CI_TCP_TIME_WAIT +) + +127 + `LOG_TC +( + `log +( +LPF + "%d TIME_WAIT->CLOSED (2MSLxped)", + `S_FMT +( +ts +))); + +129 + `LOG_TC +( + `log +( +LPF + "%d Drݚg ORPHANed %s", + `S_FMT +( +ts +), + `e_r +(ts))); + +134 + `ci_t_dr +( +tif +, +ts +, 0); + +135 + } +} + +141  + $ci_tif_timeout_ +( +ci_tif +* +ni +) + +143  +i +; + +144  +ed + = 0; + +146 + `ci_as +( +ni +); + +147 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +148 + `ci_as +( + `OO_SP_IS_NULL +( +ni +-> +e +-> +_s_hd +)); + +150  +i + = 0; i < +OO_TIMEOUT_Q_MAX +; i++ ) { + +151 +ci_ni_di_t +* +li + = & +ni +-> +e +-> +timeout_q +[ +i +]; + +152 +ci_ni_di_lk +* +l +; + +153 +oo_p + +xt +; + +155  +l + = + `ci_ni_di_t +( +ni +, +li +); ! + `ci_ni_di_d +(ni,ist); + +156 +l + = (* + `CI_NETIF_PTR +( +ni +, +xt +) ) { + +157 +ci_t_e +* +ts + = + `TCP_STATE_FROM_LINK +( +l +); + +158 +xt + = +l +->next; + +160 #i +CI_CFG_FD_CACHING + + +161 if +ts +-> +s +. +b +. +sb_aags + & ( +CI_SB_AFLAG_ORPHAN + | +CI_SB_AFLAG_IN_CACHE +) ) { + +163 if +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_ORPHAN + ) { + +165 + `LOG_NV +( + `log +( +LPF + "Rpg %d from %s", + `S_FMT +( +ts +), + `e_r +(ts))); + +166 + `ci_tif_timeout_ave +( +ni +, +ts +); + +167 + `CITP_STATS_NETIF +(++ +ni +-> +e +-> +s +. +timewa_ +); + +168 if + `OO_SP_NOT_NULL +( +ni +-> +e +-> +_s_hd +) ) + +173 +ed + = 1; + +178 if! +ed + ) + +179 + `LOG_U +( + `log +( +LPF + "No more connectionsoeap from TIME_WAIT/FIN_WAIT2")); + +180 + } +} + +184 + $ci_tif_timeout_e +( +ci_tif +* +ni +) + +186  +i +; + +188 + `LOG_NV +( + `log +( +LPF + "timeoutim,ow=0x%x", + `ci__time_now +( +ni +))); + +192  +i + = 0; i < +OO_TIMEOUT_Q_MAX +; i++ ) { + +193 +ci_ni_di_lk +* +k +; + +194 +ci_t_e +* +ts +; + +195 +ci_ni_di_t +* +li + = & +ni +-> +e +-> +timeout_q +[ +i +]; + +197  + `ci_ni_di_n_emy +( +ni +, +li +) ) { + +198 +k + = + `ci_ni_di_hd +( +ni +, +li +); + +199 +ts + = + `TCP_STATE_FROM_LINK +( +k +); + +200 + `ci_as +( +ts +-> +s +. +b +. +e + = +CI_TCP_TIME_WAIT +) || + +201 + `ci_t_is_timeout_ph +( +ts +) ); + +203 if + `TIME_GT +( +ts +-> +t_ϡ_ +, + `ci__time_now +( +ni +)) ) + +208 + `ci_tif_timeout_ave +( +ni +, +ts +); + +211 + } +} + +225  + $ci_tif_timeout_t +( +ci_tif + * +ni +, +ci_t_e + * +ts +) + +227  +is_tw + = ( +ts +-> +s +. +b +. +e + = +CI_TCP_TIME_WAIT +); + +228 + `ci_as +( +ts +); + +229 + `ci_as + +is_tw + || + `ci_t_is_timeout_ph +( +ts +)); + +232 + `ci_tif_timeout_move +( +ni +, +ts +); + +234 +ts +-> +t_ϡ_ + = + `ci__time_now +( +ni +) + + +235 +is_tw + ? + +236 + `NI_CONF +( +ni +). +tcڡ_2m_time + : NI_CONFi). +tcڡ_f_timeout + ); + +238 + `ci_tif_timeout_add +( + +239 +ni +, +ts +, + +240 +is_tw + ? +OO_TIMEOUT_Q_TIMEWAIT + : +OO_TIMEOUT_Q_FINWAIT +); + +241 + } +} + +248  + $ci_tif_timewa_r +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +250 + `ci_as +( +ts +); + +257 + `ci_as +( + `ci_t_ndq_is_emy +( +ts +)); + +258 + `ci_as +( + `ci__queue_is_emy +(& +ts +-> +s +)); + +259 + `ci_as +( + `ci__queue_is_emy +(& +ts +-> +rob +)); + +262 + `ci_as +( +ts +-> +s +. +b +. +e + ! +CI_TCP_TIME_WAIT +); + +264 i + `ci_t_is_timeout_ph +( +ts +) ) { + +265 + `ci_tif_timeout_move +( +ni +, +ts +); + +267 + `ci_as + + `ci_ni_di_is_ +(& +ts +-> +timeout_q_lk +) ); + +269 + `ci_t__tims +( +ni +, +ts +); + +272 +ts +-> +t_ϡ_ + = + `ci__time_now +( +ni ++ + `NI_CONF +i). +tcڡ_2m_time +; + +274 + `ci_tif_timeout_add +( +ni +, +ts +, +OO_TIMEOUT_Q_TIMEWAIT +); + +275 + } +} + +278  + $ci_tif_timewa_y_to__fr +( +ci_tif +* +ni +) + +280  +i +; + +281  +found + = 0; + +283 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +285  +i + = 0; i < +OO_TIMEOUT_Q_MAX +; i++ ) { + +286 +ci_ni_di_t +* +li + = & +ni +-> +e +-> +timeout_q +[ +i +]; + +287 +ci_ni_di_lk +* +l +; + +288 +oo_p + +xt +; + +290  +l + = + `ci_ni_di_t +( +ni +, +li +); ! + `ci_ni_di_d +(ni,ist); + +291 +l + = (* + `CI_NETIF_PTR +( +ni +, +xt +) ) { + +292 +ci_t_e +* +ts + = + `TCP_STATE_FROM_LINK +( +l +); + +293 +xt + = +l +->next; + +295 if +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_FILTER + ) { + +298 + `ci_as +( +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_ORPHAN +) || + +299 +ts +-> +s +. +b +. +e + = +CI_TCP_TIME_WAIT + ); + +301 + `ci_tif_timeout_ave +( +ni +, +ts +); + +302 + `CITP_STATS_NETIF +(++ +ni +-> +e +-> +s +. +timewa__fr +); + +310 if +i + = +OO_TIMEOUT_Q_FINWAIT + ) + +312 +found + = 1; + +315 if +found + ) + +319 + } +} + +329  + $ci_tif_f_timeout_r +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +332 #i +CI_CFG_FD_CACHING + + +333 + `ci_as +( +ts +-> +s +. +b +. +sb_aags + & ( +CI_SB_AFLAG_ORPHAN +| +CI_SB_AFLAG_IN_CACHE +)); + +335 + `ci_as +( +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_ORPHAN +); + +338 + `ci_as +( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_TIMEOUT_ORPHAN +); + +348 #i +CI_CFG_FD_CACHING + + +349 if + `ci_ni_di_is_ +(& +ts +-> +timeout_q_lk +) ) { + +351 + `ci_as +( + `ci_ni_di_is_ +(& +ts +-> +timeout_q_lk +)); + +353 + `LOG_TC +( + `log +( +LPF + "%s: %d %s", +__FUNCTION__ +, + `S_FMT +( +ts +), + `e_r +(ts))); + +355 +ts +-> +t_ϡ_ + = + `ci__time_now +( +ni ++ + `NI_CONF +i). +tcڡ_f_timeout +; + +356 + `ci_tif_timeout_add +( +ni +, +ts +, +OO_TIMEOUT_Q_FINWAIT +); + +357 #i +CI_CFG_FD_CACHING + + +360 + } +} + +363  + $ci_tif_y_to__udp_cv_q +( +ci_tif +* +ni +, + +364 +ci_udp_cv_q +* +cv_q +, + +365 * +add_to__li +) + +367  +d_n +; + +368 +ci_ut32 + +ed_b4 + = +cv_q +-> +pkts_ed +; + +369 + `ci_udp_cv_q_ +( +ni +, +cv_q +); + +370 +d_n + = +cv_q +-> +pkts_ed + - +ed_b4 +; + +371 if +cv_q +-> +pkts_ed + !cv_q-> +pkts_added + ) + +372 ++(* +add_to__li +); + +373  +d_n +; + +374 + } +} + +377  + $ci_tif_y_to_ +( +ci_tif +* +ni +,  +__d_n +) + +381 +ci_ni_di_lk +* +k +; + +382 +ci_ni_di_lk +* +ϡ +; + +383 +cp_waab_obj +* +wo +; + +384  +d_n + = 0; + +385  +add_to__li +; + +386  +_hd + = +ni +-> +cks +-> +ts_n + =ni->cks-> +ts_max + + +387 || +ni +-> +e +-> +mem_essu +; + +389 if + `ci_ni_di_is_emy +( +ni +, &ni-> +e +-> +_li +) ) + +396 +__d_n + <<= 1u; + +398 +k + = + `ci_ni_di_t +( +ni +, &ni-> +e +-> +_li +); + +399 +ϡ + = + `ci_ni_di_t_ϡ +( +ni +, &ni-> +e +-> +_li +); + +402 +add_to__li + = 0; + +404 +wo + = + `CI_CONTAINER +( +cp_waab_obj +, +sock +. +_lk +, +k +); + +405 +k + = ( +ci_ni_di_lk +* + `CI_NETIF_PTR +( +ni +,nk-> +xt +); + +406 + `ci_ni_di_move_ +( +ni +, & +wo +-> +sock +. +_lk +); + +408 if +wo +-> +waab +. +e + & +CI_TCP_STATE_TCP_CONN + ) { + +409 +ci_t_e +* +ts + = & +wo +-> +t +; + +410 +ci_t32 + +q_num_b4 + = +ts +-> +cv1 +. +num +; + +411 + `ci_t_rx__rxq_bufs +( +ni +, +ts +); + +413 +d_n + + +q_num_b4 + - +ts +-> +cv1 +. +num +; + +414 +d_n + + + `ci_tif_y_to__udp_cv_q +( +ni +, & +ts +-> +timeamp_q +, + +415 & +add_to__li +); + +418 if +_hd + && +ts +-> +cv1 +. +num + == 1 && + +419 + `ci_sock_ylock +( +ni +, & +ts +-> +s +. +b +) ) { + +420 +q_num_b4 + = +ts +-> +cv1 +. +num +; + +421 + `ci_t_rx__rxq_bufs_socklocked +( +ni +, +ts +); + +422 +d_n + + +q_num_b4 + - +ts +-> +cv1 +. +num +; + +423 + `ci_sock_uock +( +ni +, & +ts +-> +s +. +b +); + +425 if +ts +-> +cv1 +. +num + > 1 || +add_to__li +) + +426 + `ci_ni_di_put +( +ni +, &ni-> +e +-> +_li +, & +ts +-> +s +. +_lk +); + +428 if +wo +-> +waab +. +e + = +CI_TCP_STATE_UDP + ) { + +429 +ci_udp_e +* +us + = & +wo +-> +udp +; + +430 +d_n + + + `ci_tif_y_to__udp_cv_q +( +ni +, & +us +-> +cv_q +, + +431 & +add_to__li +); + +432 +d_n + + + `ci_tif_y_to__udp_cv_q +( +ni +, & +us +-> +timeamp_q +, + +433 & +add_to__li +); + +435 if +add_to__li + ) + +436 + `ci_ni_di_put +( +ni +, &ni-> +e +-> +_li +, & +us +-> +s +. +_lk +); + +438 }  +d_n + < +__d_n + && & +wo +-> +sock +. +_lk + ! +ϡ + ); + +440 if +d_n + < ( +__d_n + >> 1) ) { + +443 +d_n + + + `ci_tif_pkt_y_to_ +( +ni +, 0, +__d_n + - freed_n); + +444 if +d_n + < ( +__d_n + >> 1&& +_hd + ) { + +445 +d_n + + + `ci_tif_pkt_y_to_ +( +ni +, 1, + +446 +__d_n + - +d_n +); + +450 + `CITP_STATS_NETIF_ADD +( +ni +, +pkts_ed +, +d_n +); + +451 + } +} + +454  + $ci_tif_rxq_low__cv +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +, + +455  +bys_d +) + +465  +tf_i +; + +466 if +bys_d + <= 0 || + +467 ( +ni +-> +e +-> +rxq_low + -( +bys_d + / 1500 + 1)) > 0 ) + +469 if! + `ci_tif_ylock +( +ni +) ) { + +471 +ni +-> +e +-> +rxq_low + = 1; + +478 +ni +-> +e +-> +rxq_low + = 0; + +484 if +s +-> +b +. +e + = +CI_TCP_STATE_UDP + ) { + +485 + `ci_udp_cv_q_ +( +ni +, & + `SOCK_TO_UDP +( +s +)-> +cv_q +); + +486 + `ci_udp_cv_q_ +( +ni +, & + `SOCK_TO_UDP +( +s +)-> +timeamp_q +); + +488 if +s +-> +b +. +e + & +CI_TCP_STATE_TCP_CONN + ) { + +489 + `ci_t_rx__rxq_bufs +( +ni +, + `SOCK_TO_TCP +( +s +)); + +490 + `ci_udp_cv_q_ +( +ni +, & + `SOCK_TO_TCP +( +s +)-> +timeamp_q +); + +493 if +ni +-> +e +-> +mem_essu + & +OO_MEM_PRESSURE_CRITICAL + ) + +497 if + `ci_tif_mem_essu_y_ex +( +ni +) ) + +498 + `CITP_STATS_NETIF_INC +( +ni +, +memy_essu_ex_cv +); + +500 + `OO_STACK_FOR_EACH_INTF_I +( +ni +, +tf_i +) + +501 if + `ci_tif_rx_vi_a +( +ni +, + `ci_tif_rx_vi +i, +tf_i +)) + +502 > +CI_CFG_RX_DESC_BATCH + ) + +503 + `ci_tif_rx_po +( +ni +, +tf_i +); + +504 + `CITP_STATS_NETIF_INC +( +ni +, +rx_fl_cv +); + +505 + `ci_tif_uock +( +ni +); + +506 + } +} + +509  + $ci_tif_mem_essu_pkt_po_fl +( +ci_tif +* +ni +) + +511 +ci__pkt_fmt +* +pkt +; + +512  +tf_i +, +n + = 0; + +513 + `OO_STACK_FOR_EACH_INTF_I +( +ni +, +tf_i +) + +514 +n + +(2* +CI_CFG_RX_DESC_BATCH +); + +515  +ni +-> +e +-> +mem_essu_pkt_po_n + < +n + && + +516 ( +pkt + = + `ci_tif_pkt_loc +( +ni +)! +NULL + ) { + +517 +pkt +-> +ags + | +CI_PKT_FLAG_RX +; + +518 ++ +ni +-> +e +-> +n_rx_pkts +; + +519 ++ +ni +-> +e +-> +mem_essu_pkt_po_n +; + +520 +pkt +-> +fcou + = 0; + +521 +pkt +-> +xt + = +ni +-> +e +-> +mem_essu_pkt_po +; + +522 +ni +-> +e +-> +mem_essu_pkt_po + = + `OO_PKT_P +( +pkt +); + +524 + } +} + +527  + $ci_tif_mem_essu_pkt_po_u +( +ci_tif +* +ni +) + +530 +ci__pkt_fmt +* +pkt +; + +531 #ifde +__KERNEL__ + + +532  +is_locked + = 1; + +534  ! + `OO_PP_IS_NULL +( +ni +-> +e +-> +mem_essu_pkt_po +) ) { + +535 +pkt + = + `PKT +( +ni +,i-> +e +-> +mem_essu_pkt_po +); + +536 +ni +-> +e +-> +mem_essu_pkt_po + = +pkt +-> +xt +; + +537 -- +ni +-> +e +-> +mem_essu_pkt_po_n +; + +538 + `ci_as_equ +( +pkt +-> +fcou +, 0); + +539 + `ci_as +( +pkt +-> +ags + & +CI_PKT_FLAG_RX +); + +540 + `ci_tif_pkt_ +( +ni +, +pkt + + `CI_KERNEL_ARG +(& +is_locked +)); + +542 + } +} + +545  + $ci_tif_mem_essu_r_il +( +ci_tif +* +ni +,  +tf_i +) + +547 if +ni +-> +e +-> +mem_essu + & +OO_MEM_PRESSURE_CRITICAL + ) + +550 + `CITP_STATS_NETIF_INC +( +ni +, +memy_essu_r +); + +551 +ni +-> +e +-> +mem_essu + | +OO_MEM_PRESSURE_CRITICAL +; + +552 +ni +-> +e +-> +rxq_lim + = 2* +CI_CFG_RX_DESC_BATCH +; + +553 + `ci_tif_mem_essu_pkt_po_u +( +ni +); + +554 if + `ci_tif_rx_vi_a +( +ni +, + `ci_tif_rx_vi +i, +tf_i +)) >= + +555 +CI_CFG_RX_DESC_BATCH + ) + +556 + `ci_tif_rx_po +( +ni +, +tf_i +); + +557 + } +} + +560  + $ci_tif_mem_essu_ex_il +( +ci_tif +* +ni +) + +562 + `ci_as +( + `OO_PP_IS_NULL +( +ni +-> +e +-> +mem_essu_pkt_po +)); + +563 + `ci_tif_mem_essu_pkt_po_fl +( +ni +); + +564 +ni +-> +e +-> +rxq_lim + = + `NI_OPTS +(ni).rxq_limit; + +565 +ni +-> +e +-> +mem_essu + &~ +OO_MEM_PRESSURE_CRITICAL +; + +566 + } +} + +569  + $ci_tif_mem_essu_y_ex +( +ci_tif +* +ni +) + +576  +tf_i +, +pkts_eded + = 0; + +577 +ci__pkt_fmt +* +pkt +; + +579 + `OO_STACK_FOR_EACH_INTF_I +( +ni +, +tf_i +) { + +580 +ef_vi +* +vi + = + `ci_tif_rx_vi +( +ni +, +tf_i +); + +581 +pkts_eded + + + `NI_OPTS +( +ni +). +rxq_lim + - + `ef_vi_ive_fl_v +( +vi +); + +584 if + `NI_OPTS +( +ni +). +max_rx_cks + -i-> +e +-> +n_rx_pkts + < +pkts_eded + || + +585 +ni +-> +cks +-> +n_ + < +pkts_eded + ) { + +590 + `ci_tif_y_to_ +( +ni +, +pkts_eded +); + +592 if + `NI_OPTS +( +ni +). +max_rx_cks + -i-> +e +-> +n_rx_pkts + < +pkts_eded + ) + +601  +ni +-> +cks +-> +n_ + < +pkts_eded + ) { + +602 if( +pkt + = + `ci_tif_pkt_loc_nb +( +ni +)= +NULL + ) + +604 -- +ni +-> +e +-> +n_async_pkts +; + +605 + `CITP_STATS_NETIF_INC +( +ni +, +pkt_nb_l +); + +606 +pkt +-> +ags + &~ +CI_PKT_FLAG_NONB_POOL +; + +607 + `ci_tif_pkt_a_1f +( +ni +, +pkt +); + +611 + `ci_tif_mem_essu_ex_il +( +ni +); + +613 + } +} + +620  + $__ci_tif_rx_po +( +ci_tif +* +ni +, +ef_vi +* +vi +,  +tf_i +, + +621  +buft_id +,  +max +) + +623 +ci__pkt_fmt +* +pkt +; + +624  +i +; + +625  +poed + = 0; + +627 + `ci_as_ge +( +max +, +CI_CFG_RX_DESC_BATCH +); + +628 + `ci_as_ge +( +ni +-> +cks +-> +t +[ +buft_id +]. +n_ +, +max +); + +631  +i + = 0; i < +CI_CFG_RX_DESC_BATCH +; ++i ) { + +636 + `ci_as +( + `OO_PP_NOT_NULL +( +ni +-> +cks +-> +t +[ +buft_id +]. + +)); + +637 +pkt + = + `PKT +( +ni +,i-> +cks +-> +t +[ +buft_id +]. + +); + +638 + `ci_as +( + `OO_PP_EQ +( +ni +-> +cks +-> +t +[ +buft_id +]. + +, + `OO_PKT_P +( +pkt +))); + +639 +ni +-> +cks +-> +t +[ +buft_id +]. + + = +pkt +-> +xt +; + +640 +pkt +-> +fcou + = 1; + +641 +pkt +-> +ags + | +CI_PKT_FLAG_RX +; + +642 +pkt +-> +tf_i + = intf_i; + +643 +pkt +-> +pkt_t_off + = + `ef_vi_ive_efix_n +( +vi +); + +644 + `ef_vi_ive_ +( +vi +, +pkt +-> +dma_addr +[pkt-> +tf_i +], + `OO_PKT_ID +(pkt)); + +645 #ifde +__powpc__ + + +657  +off +; + +658  +off + = 0; of< +pkt +-> +buf_n +; of+ +EF_VI_DMA_ALIGN + ) + +659 + `ci_ush +( +pkt +-> +dma_t + + +off +); + +668 +ni +-> +cks +-> +t +[ +buft_id +]. +n_ + - +CI_CFG_RX_DESC_BATCH +; + +669 +ni +-> +cks +-> +n_ + - +CI_CFG_RX_DESC_BATCH +; + +670 +ni +-> +e +-> +n_rx_pkts + + +CI_CFG_RX_DESC_BATCH +; + +671 + `ef_vi_ive_push +( +vi +); + +672 +poed + + +CI_CFG_RX_DESC_BATCH +; + +673 }  +max + - +poed + > +CI_CFG_RX_DESC_BATCH + ); + +675  +poed +; + +676 + } +} + +679  + #low_thsh +( +ni +(i)-> +e +-> +rxq_lim + / 2) + + ) + +682  + $ci_tif_rx_po +( +ci_tif +* +tif +,  +tf_i +) + +692 +ef_vi +* +vi + = + `ci_tif_rx_vi +( +tif +, +tf_i +); + +693 +ci__pkt_fmt +* +pkt +; + +694  +max_n_to_po +, +rx_lowed +, +n_to_po +; + +695  +buft_id + = + `NI_PKT_SET +( +tif +); + +696  +ask_f_me_cks + = 0; + +698 + `ci_as +( + `ci_tif_is_locked +( +tif +)); + +699 + `ci_as +( + `ci_tif_rx_vi_a +( +tif +, +vi +> +CI_CFG_RX_DESC_BATCH +); + +701 +max_n_to_po + = + `ci_tif_rx_vi_a +( +tif +, +vi +); + +702 +rx_lowed + = + `NI_OPTS +( +tif +). +max_rx_cks + -if-> +e +-> +n_rx_pkts +; + +703 if +max_n_to_po + > +rx_lowed + ) + +704  +rx_limed +; + +705 +n_rx_limed +: + +707 + `ci_as_ge +( +max_n_to_po +, +CI_CFG_RX_DESC_BATCH +); + +710 if +tif +-> +cks +-> +t +[ +buft_id +]. +n_ + < +CI_CFG_RX_DESC_BATCH + ) + +711  +fd_w_buft +; + +713 +good_buft +: + +715 +n_to_po + = + `CI_MIN +( +max_n_to_po +, +tif +-> +cks +-> +t +[ +buft_id +]. +n_ +); + +716 +max_n_to_po + - + `__ci_tif_rx_po +( +tif +, +vi +, +tf_i +, + +717 +buft_id +, +n_to_po +); + +718 + `ci_as_ge +( +max_n_to_po +, 0); + +720 if +max_n_to_po + < +CI_CFG_RX_DESC_BATCH + ) { + +721 if +buft_id + ! +tif +-> +cks +-> +id + ) { + +722 + `ci_tif_pkt_t_chge +( +tif +, +buft_id +, + +723 +ask_f_me_cks +); + +725 + `CHECK_FREEPKTS +( +tif +); + +729 +fd_w_buft +: + +730 +buft_id + = + `ci_tif_pktt_be +( +tif +); + +731 if +buft_id + == -1 || + +732 +tif +-> +cks +-> +t +[ +buft_id +]. +n_ + < +CI_CFG_RX_DESC_BATCH + ) + +733  +n_ough_pkts +; + +734 +ask_f_me_cks + = + `ci_tif_pkt_t_is_undfd +( +tif +, + +735 +buft_id +); + +740 +rx_limed +: + +742 if +rx_lowed + < 0 ) + +743 +rx_lowed + = 0; + +745 if + `ef_vi_ive_fl_v +( +vi ++ +rx_lowed + < + `low_thsh +( +tif +) ) { + +746 + `CITP_STATS_NETIF_INC +( +tif +, +_rx_limed +); + +747 + `ci_tif_y_to_ +( +tif +, +max_n_to_po + - +rx_lowed +); + +748 +rx_lowed + = + `NI_OPTS +( +tif +). +max_rx_cks + -if-> +e +-> +n_rx_pkts +; + +749 if +rx_lowed + < 0 ) + +750 +rx_lowed + = 0; + +751 +max_n_to_po + = + `CI_MIN +(max_n_to_po, +rx_lowed +); + +752 if + `ef_vi_ive_fl_v +( +vi ++ +max_n_to_po + < + `low_thsh +( +tif +) ) + +754 +tif +-> +e +-> +rxq_low + = + `ci_tif_rx_vi_a +ґif, +vi +- +max_n_to_po +; + +755 if +max_n_to_po + > +CI_CFG_RX_DESC_BATCH + ) + +756  +n_rx_limed +; + +758 if +tif +-> +e +-> +mem_essu + & +OO_MEM_PRESSURE_CRITICAL + ) { + +767 +rx_lowed + = +CI_CFG_RX_DESC_BATCH +; + +768 +max_n_to_po + = + `ci_tif_rx_vi_a +( +tif +, +vi +); + +770 +max_n_to_po + = + `CI_MIN +(max_n_to_po, +rx_lowed +); + +771 if( + `CI_LIKELY + +max_n_to_po + > +CI_CFG_RX_DESC_BATCH + )) + +772  +n_rx_limed +; + +773 + `CITP_STATS_NETIF_INC +( +tif +, +fl_rx_limed +); + +774 if + `ef_vi_ive_fl_v +( +vi +< +CI_CFG_RX_DESC_BATCH + ) + +775 + `ci_tif_mem_essu_r_il +( +tif +, +tf_i +); + +778 +n_ough_pkts +: + +784 +ask_f_me_cks + = 1; + +787  ( +pkt + = + `ci_tif_pkt_loc_nb +( +tif +)! +NULL + ) { + +788 -- +tif +-> +e +-> +n_async_pkts +; + +789 + `CITP_STATS_NETIF_INC +( +tif +, +pkt_nb_l +); + +790 +pkt +-> +ags + &~ +CI_PKT_FLAG_NONB_POOL +; + +791 +buft_id + = + `PKT_SET_ID +( +pkt +); + +792 + `ci_tif_pkt_a_1f +( +tif +, +pkt +); + +793 if +tif +-> +cks +-> +t +[ +buft_id +]. +n_ + > +CI_CFG_RX_DESC_BATCH + ) + +794  +good_buft +; + +798 if +tif +-> +cks +-> +ts_n + cks-> +ts_max + && + +799 + `ci_t_hr_me_bufs +( +tif +) == 0 ) { + +800 +buft_id + = +tif +-> +cks +-> +ts_n + - 1; + +801 + `ci_as_equ +( +tif +-> +cks +-> +t +[ +buft_id +]. +n_ +, + +802 1 << +CI_CFG_PKTS_PER_SET_S +); + +803 +ask_f_me_cks + = 0; + +804  +good_buft +; + +807 if + `ef_vi_ive_fl_v +( +vi +< + `low_thsh +( +tif +) ) { + +808 + `CITP_STATS_NETIF_INC +( +tif +, +_buf_limed +); + +809 + `ci_tif_y_to_ +( +tif +, +max_n_to_po +); + +810 +max_n_to_po + = + `CI_MIN +(max_n_to_po, +tif +-> +cks +-> +n_ +); + +811 +buft_id + = + `ci_tif_pktt_be +( +tif +); + +812 if +buft_id + != -1 && + +813 +tif +-> +cks +-> +t +[ +buft_id +]. +n_ + > +CI_CFG_RX_DESC_BATCH + ) + +814  +good_buft +; + +816 +tif +-> +e +-> +rxq_low + = + `ci_tif_rx_vi_a +ґif, +vi +); + +819 + `CITP_STATS_NETIF_INC +( +tif +, +fl_buf_limed +); + +820 if + `ef_vi_ive_fl_v +( +vi +< +CI_CFG_RX_DESC_BATCH + ) + +821 + `ci_tif_mem_essu_r_il +( +tif +, +tf_i +); + +822 + } +} + +825  + $cp_waab_deed_wk +( +ci_tif +* +ni +, +cp_waab +* +w +) + +827 +cp_waab_obj +* +wo + = + `CI_CONTAINER +(cp_waab_obj, +waab +, +w +); + +829 if +wo +-> +waab +. +e + & +CI_TCP_STATE_TCP + ) + +830 + `ci_t_rfm_deed_sock_wk +( +ni +, & +wo +-> +t +); + +831 #i +CI_CFG_UDP + + +832 if +wo +-> +waab +. +e + = +CI_TCP_STATE_UDP + ) + +833 + `ci_udp_rfm_deed_sock_wk +( +ni +, & +wo +-> +udp +); + +838 + `ci_log +("%s: uxed stu%f sock [%d:%d]", +__func__ +, + +839 + `ci_t_e_r +( +wo +-> +waab +. +e +), + `NI_ID +( +ni +), +w +-> +bufid +); + +841 + } +} + +844  + $ci_tif_lock__der_wk +( +ci_tif +* +ni +, +cp_waab +* +w +) + +846 #i +CI_CFG_FD_CACHING + && ! + `defed +( +NDEBUG +) + +849 if( +w +-> +e + & +CI_TCP_STATE_TCP +&& !(w->= +CI_TCP_LISTEN +) ) + +850 + `ci_as +(! + `ci_t_is_ched +(& + `CI_CONTAINER +( +cp_waab_obj +, + +851 +waab +, +w +)-> +t +)); + +856 + `ci_as +(!( +w +-> +sb_aags + & +CI_SB_AFLAG_ORPHAN +)); + +858 if +ni +-> +e +-> +der_wk_cou + > + `NI_OPTS +i). +der_wk_lim + ) { + +859  +rc + = + `ci_tif_lock +( +ni +); + +860 if +rc + == 0 ) { + +861 + `CITP_STATS_NETIF_INC +( +ni +, +der_wk_limed +); + +862 + `cp_waab_deed_wk +( +ni +, +w +); + +871 if + `ci_b__d_t +(& +w +-> +sb_aags +, +CI_SB_AFLAG_DEFERRED_BIT +) ) { + +876 ++ +ni +-> +e +-> +der_wk_cou +; + +881 +ci_ut64 + +w_v +, +v + = +ni +-> +e +-> +lock +.lock; + +882 if +v + & +CI_EPLOCK_UNLOCKED + ) { + +883 if + `ci_tif_ylock +( +ni +) ) { + +884 + `ci_b_r +(& +w +-> +sb_aags +, +CI_SB_AFLAG_DEFERRED_BIT +); + +885 + `cp_waab_deed_wk +( +ni +, +w +); + +890 + `ci_as +( +w +-> +xt_id + = +CI_ILL_END +); + +891 +w +-> +xt_id + = +v + & +CI_EPLOCK_NETIF_SOCKET_LIST +; + +892 +w_v + = ( +v + & ~ +CI_EPLOCK_NETIF_SOCKET_LIST +| ( + `W_ID +( +w +) + 1); + +893 if + `ci_s64u_suced +(& +ni +-> +e +-> +lock +.lock, +v +, +w_v +) ) { + +894 ++ +ni +-> +e +-> +der_wk_cou +; + +897 + `CI_DEBUG +( +w +-> +xt_id + = +CI_ILL_END +); + +900 + } +} + +903  + $ci_tif_rfm_deed_sock_wk +( +ci_tif +* +ni +, + +904  +sock_id +) + +906 +cp_waab +* +w +; + +907 +oo_ + +sockp +; + +909 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +912 + `ci_as +( +sock_id + > 0); + +913 -- +sock_id +; + +914 +sockp + = + `OO_SP_FROM_INT +( +ni +, +sock_id +); + +915 +w + = + `SP_TO_WAITABLE +( +ni +, +sockp +); + +916 +sock_id + = +w +-> +xt_id +; + +917 + `CI_DEBUG +( +w +-> +xt_id + = +CI_ILL_END +); + +918 + `ci_b_r +(& +w +-> +sb_aags +, +CI_SB_AFLAG_DEFERRED_BIT +); + +919 + `CITP_STATS_NETIF +(++ +ni +-> +e +-> +s +. +deed_wk +); + +921 + `cp_waab_deed_wk +( +ni +, +w +); + +923  +sock_id + > 0 ); + +924 + } +} + +927  + $ci_tif_purge_deed_sock_li +( +ci_tif +* +ni +) + +929 +ci_ut64 + +l +; + +931 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +933  ( +l + = +ni +-> +e +-> +lock +.lock& +CI_EPLOCK_NETIF_SOCKET_LIST + ) + +934 if + `ci_s64u_suced +(& +ni +-> +e +-> +lock +.lock, +l +, + +935 +l + &~ +CI_EPLOCK_NETIF_SOCKET_LIST +) ) + +936 + `ci_tif_rfm_deed_sock_wk +( +ni +, + +937 +l + & +CI_EPLOCK_NETIF_SOCKET_LIST +); + +939  +l +; + +940 + } +} + +942  + $ci_tif_mge_omic_cous +( +ci_tif +* +ni +) + +944 +ci_t32 + +v +; + +945  + #mge +( +ni +, +fld +) \ + +947 +v + = +ni +-> +e +-> +omic_ +## +fld +; \ + +948 }  + `ci_s32_ +(& +ni +-> +e +-> +omic_ +## +fld +, +v +, 0) );\ + +949 +ni +-> +e +-> +fld + + +v +; + + ) + +951 + `mge +( +ni +, +n_rx_pkts +); + +952 + `mge +( +ni +, +n_async_pkts +); + +953 #unde +mge + + +954 + } +} + +956 #ifde +__KERNEL__ + + +957  + #KERNEL_DL_CONTEXT_DECL + ,  +_dl_cڋxt + + + ) + +958  + #KERNEL_DL_CONTEXT + , +_dl_cڋxt + + + ) + +960  + #KERNEL_DL_CONTEXT_DECL + + + ) + +961  + #KERNEL_DL_CONTEXT + + + ) + +964  + $ci_tif_uock_ow +( +ci_tif +* +ni + +KERNEL_DL_CONTEXT_DECL +) + +966 #ide +__KERNEL__ + + +972 +ci_ut64 + +l + = +ni +-> +e +-> +lock +.lock; + +973  +tf_i +; + +974 +ci_ut64 + +a_uock_ags +; + +976 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +978 if +l + & +CI_EPLOCK_NETIF_IS_PKT_WAITER + ) + +979 if + `ci_tif_pkt_tx_n_loc_now +( +ni +) ) { + +980 + `ef_lock_r_ags +(& +ni +-> +e +-> +lock +, +CI_EPLOCK_NETIF_IS_PKT_WAITER +); + +981 + `ef_lock_hd_t_ag +(& +ni +-> +e +-> +lock +, +CI_EPLOCK_NETIF_PKT_WAKE +); + +982 +l + = +ni +-> +e +-> +lock +.lock; + +983 + `CITP_STATS_NETIF_INC +( +ni +, +uock_ow_pkt_wa +); + +986 if +l + & +CI_EPLOCK_NETIF_SOCKET_LIST + ) { + +987 + `CITP_STATS_NETIF_INC +( +ni +, +uock_ow_sock_li +); + +988 +l + = + `ci_tif_purge_deed_sock_li +( +ni +); + +990 + `ci_as +(! ( +l + & +CI_EPLOCK_NETIF_SOCKET_LIST +)); + +992 +ni +-> +e +-> +der_wk_cou + = 0; + +994 if +l + & +CI_EPLOCK_NETIF_NEED_POLL + ) { + +995 + `CITP_STATS_NETIF +(++ +ni +-> +e +-> +s +. +deed_pls +); + +996 + `ef_lock_r_ags +(& +ni +-> +e +-> +lock +, +CI_EPLOCK_NETIF_NEED_POLL +); + +997 + `ci_tif_pl +( +ni +); + +998 +l + = +ni +-> +e +-> +lock +.lock; + +1001 if +l + & +CI_EPLOCK_NETIF_MERGE_ATOMIC_COUNTERS + ) { + +1002 + `ef_lock_r_ags +(& +ni +-> +e +-> +lock +, + +1003 +CI_EPLOCK_NETIF_MERGE_ATOMIC_COUNTERS +); + +1004 + `ci_tif_mge_omic_cous +( +ni +); + +1005 +l + = +ni +-> +e +-> +lock +.lock; + +1011 +a_uock_ags + = +l +; + +1012 if +a_uock_ags + & +CI_EPLOCK_NETIF_NEED_PRIME + ) + +1013 + `ef_lock_r_ags +(& +ni +-> +e +-> +lock +, +CI_EPLOCK_NETIF_NEED_PRIME +); + +1020 if!( +l + & ( +CI_EPLOCK_NETIF_UNLOCK_FLAGS + | + +1021 +CI_EPLOCK_NETIF_SOCKET_LIST + | + +1022 +CI_EPLOCK_FL_NEED_WAKE +)) ) { + +1023 if + `ci_s64u_suced +(& +ni +-> +e +-> +lock +.lock, + +1024 +l +, (&~ +CI_EPLOCK_LOCKED +| +CI_EPLOCK_UNLOCKED +) ) { + +1026 if +a_uock_ags + & +CI_EPLOCK_NETIF_NEED_PRIME + ) { + +1027 + `CITP_STATS_NETIF_INC +( +ni +, +uock_ow_ed_ime +); + +1028 + `ci_as +( + `NI_OPTS +( +ni +). +t_driv +); + +1033 + `OO_STACK_FOR_EACH_INTF_I +( +ni +, +tf_i +) + +1034 + `ef_evtq_ime +(& +ni +-> +nic_hw +[ +tf_i +]. +vi +); + +1045 if +a_uock_ags + & +CI_EPLOCK_NETIF_NEED_PRIME + ) + +1046 + `ef_lock_hd_t_ag +(& +ni +-> +e +-> +lock +, +CI_EPLOCK_NETIF_NEED_PRIME +); + +1051  +rc +; + +1053 #ide +__KERNEL__ + + +1054 + `ci_as +( +ni +-> +e +-> +lock +.lock & +CI_EPLOCK_LOCKED +); + +1055 + `ci_as +(~ +ni +-> +e +-> +lock +.lock & +CI_EPLOCK_UNLOCKED +); + +1056 + `CITP_STATS_NETIF_INC +( +ni +, +uock_ow_sys +); + +1057 +rc + = + `oo_sour_ +( + `ci_tif_g_driv_hd +( +ni +), + +1058 +OO_IOC_EPLOCK_WAKE +, +NULL +); + +1060 +rc + = + `eb_lock_uock_d_wake +( +ni +, +_dl_cڋxt +); + +1063 if +rc + < 0 ) + `LOG_NV +( + `ci_log +("%s:c=%d", +__FUNCTION__ +,c)); + +1065 + } +} + +1068  + $ci_tif_uock +( +ci_tif +* +ni +) + +1070 #ifde +__KERNEL__ + + +1071  +_dl_cڋxt + = +ni +-> +ags + & +CI_NETIF_FLAG_IN_DL_CONTEXT +; + +1073 +ni +-> +ags + &~ +CI_NETIF_FLAG_IN_DL_CONTEXT +; + +1076 + `ci_as_equ +( +ni +-> +e +-> +_pl +, 0); + +1077 if( + `CI_LIKELY + +ni +-> +e +-> +lock +.lock = +CI_EPLOCK_LOCKED + && + +1078 + `ci_s64u_suced +(& +ni +-> +e +-> +lock +.lock, + +1079 +CI_EPLOCK_LOCKED +, +CI_EPLOCK_UNLOCKED +) )) + +1081 + `CITP_STATS_NETIF_INC +( +ni +, +uock_ow +); + +1082 + `ci_tif_uock_ow +( +ni + +KERNEL_DL_CONTEXT +); + +1083 + } +} + +1086  + $ci_tif_r_deed +( +ci_tif +* +ni +,  +r_ag +, + +1087 cڡ * +Δ +) + +1089 if +ni +-> +r_ags + & +r_ag + ) + +1091 + `ci_log +("%s: ERROR: [%d]untimerror %x detected in %s()", + +1092 +__FUNCTION__ +, + `NI_ID +( +ni +), +r_ag +, +Δ +); + +1093 + `ci_log +("%s: ERROR: [%d]ܠdeed: %x %x " +CI_NETIF_ERRORS_FMT +, + +1094 +__FUNCTION__ +, + `NI_ID +( +ni +),i-> +r_ags +,i-> +e +->error_flags, + +1095 + `CI_NETIF_ERRORS_PRI_ARG +( +ni +-> +r_ags + |i-> +e +->error_flags)); + +1096 +ni +-> +r_ags + | +r_ag +; + +1097 +ni +-> +e +-> +r_ags + |=i->error_flags; + +1098 + } +} + +1101 #ide +__KERNEL__ + + +1102  + $ci_tif_g_ady_li +( +ci_tif +* +ni +) + +1104  +i + = 0; + +1107 + `ci_tif_lock +( +ni +); + +1108  +i +++ < +CI_CFG_N_READY_LISTS + ) { + +1109 if!(( +ni +-> +e +-> +ady_lis__u + >> +i +) & 1) ) { + +1110 +ni +-> +e +-> +ady_lis__u + |1 << +i +; + +1114 + `ci_tif_uock +( +ni +); + +1116  +i + < +CI_CFG_N_READY_LISTS + ? i : 0; + +1117 + } +} + +1121  + $ci_tif_put_ady_li +( +ci_tif +* +ni +,  +id +) + +1123 +ci_ni_di_lk +* +k +; + +1124 +cp_waab +* +w +; + +1126 + `ci_as +( +ni +-> +e +-> +ady_lis__u + & (1 << +id +)); + +1127 + `ci_as_qu +( +id +, 0); + +1129 if + `ci_tif_lock +( +ni +) != 0 ) { + +1130 + `ci_log +("l: Lkgdyi [%d:%d]", + `NI_ID +( +ni +), +id +); + +1133  + `ci_ni_di_n_emy +( +ni +, &ni-> +e +-> +ady_lis +[ +id +]) ) { + +1134 +k + = + `ci_ni_di_p +( +ni +, &ni-> +e +-> +ady_lis +[ +id +]); + +1135 +w + = + `CI_CONTAINER +( +cp_waab +, +ady_lk +, +k +); + +1137 + `ci_ni_di_lf_lk +( +ni +, +k +); + +1138 +w +-> +ady_li_id + = 0; + +1140 +ni +-> +e +-> +ady_lis__u + &~(1 << +id +); + +1141 + `ci_tif_uock +( +ni +); + +1142 + } +} + +1145 #ide +__KERNEL__ + + +1146  + $ci_tif_w_nd +( +ci_tif +* +ni +,  +tf_i +, + +1147 cڡ +ci_iovec + * +iov +,  +iovn +) + +1149 +ci__pkt_fmt +* +pkt +; + +1150 +ci_ut8 +* +p +; + +1151  +i +; + +1153 + `ci_tif_lock +( +ni +); + +1154 +pkt + = + `ci_tif_pkt_loc +( +ni +); + +1155 if +pkt + = +NULL + ) + +1156  - +ENOBUFS +; + +1158 +pkt +-> +tf_i + = intf_i; + +1159 if +tf_i + < 0 || if_> +CI_CFG_MAX_INTERFACES + ) + +1160  - +ENETDOWN +; + +1162 +pkt +-> +pkt_t_off + = 0; + +1163 +pkt +-> +buf_n + = 0; + +1164 +p + = +pkt +-> +dma_t +; + +1165  +i + = 0; i < +iovn +; i++ ) { + +1166 if +p + + + `CI_IOVEC_LEN +( +iov +- +pkt +-> +dma_t + > + +1167 +CI_CFG_PKT_BUF_SIZE + - ( +pkt +) ) { + +1168 + `ci_tif_pkt_a +( +ni +, +pkt +); + +1169 + `ci_tif_uock +( +ni +); + +1170  - +EMSGSIZE +; + +1173 + `memy +( +p +, + `CI_IOVEC_BASE +( +iov +), + `CI_IOVEC_LEN +(iov)); + +1174 +p + + + `CI_IOVEC_LEN +( +iov +); + +1175 +pkt +-> +buf_n + + + `CI_IOVEC_LEN +( +iov +); + +1176 +iov +++; + +1179 +pkt +-> +y_n + =kt-> +buf_n +; + +1180 + `ci_tif_pkt_hd +( +ni +, +pkt +); + +1181 + `ci_tif_nd +( +ni +, +pkt +); + +1182 + `ci_tif_pkt_a +( +ni +, +pkt +); + +1184 + `ci_tif_uock +( +ni +); + +1186 + } +} + +1205  + $__ci_tif_aive_wd_low_u +( +ci_tif +* +ni +, +ci_aive_wd +* +aw +, + +1206  +ddr +,  +ddr +, + +1207  +t +) + +1209 if + `ci__time_now +( +ni +> +aw +-> +expy + ) + +1212  ( +aw +-> +ϡ_ddr + ! +ddr +|| (aw-> +ϡ_ddr + ! +ddr +) || + +1213 ( +aw +-> +ϡ_t + ! +t +); + +1214 + } +} + +1217  +oo_ + + $__ci_tif_aive_wd_g +( +ci_tif +* +ni +,  +ddr +, + +1218  +ddr +,  +t +, + +1219 +ci_ut16 +* +pt_out +, + +1220 +ci_ut32 +* +ev_q_out +) + +1222 +ci_aive_wd +* +aw +; + +1223 +ci_ut16 + +t +; + +1224  +rc +; + +1226 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +1228 * +ev_q_out + = 0; + +1230 +ci_ni_di_lk +* +lk + = +NULL +; + +1231 +ci_ni_di_lk +* + + = + `ci_ni_di_ +( +ni +, + +1232 & +ni +-> +e +-> +aive_wd_po +); + +1238 if + `ci_ni_di_is_emy +( +ni +, &ni-> +e +-> +aive_wd_po +) ) + +1239  +OO_SP_NULL +; + +1241  +lk + ! + + ) { + +1242 +lk + = + `ci_ni_di_p +( +ni +, &ni-> +e +-> +aive_wd_po +); + +1243 + `ci_ni_di_push_ +( +ni +, &ni-> +e +-> +aive_wd_po +, +lk +); + +1245 +aw + = + `CI_CONTAINER +( +ci_aive_wd +, +po_lk +, +lk +); + +1247 +t + = + `sock_t_be16 +(& +aw +-> +s +); + +1248 +rc + = + `ci_tif_fr_lookup +( +ni +, +ddr +, +t +, +ddr +, +t +, + +1249 + `sock_oc +(& +aw +-> +s +)); + +1251 if +rc + >= 0 ) { + +1252 +ci_sock_cmn +* +s + = + `ID_TO_SOCK +( +ni +,i-> +fr_b +-> +b +[ +rc +]. +id +); + +1253 if +s +-> +b +. +e + = +CI_TCP_TIME_WAIT + ) { + +1258 +ci_t_e +* +ts + = + `SOCK_TO_TCP +( +s +); + +1259 + `CITP_STATS_NETIF_INC +( +ni +, +t_shed_lol_pts_ud_tw +); + +1260 * +ev_q_out + = +ts +-> +d_nxt +; + +1261 + `ci_tif_timeout_ave +( +ni +, +ts +); + +1262 * +pt_out + = +t +; + +1263  + `SC_SP +(& +aw +-> +s +); + +1270 if +rc + =- +ENOENT + && + +1271 + `__ci_tif_aive_wd_low_u +( +ni +, +aw +, +ddr +, +ddr +, +t +) ) { + +1272 * +pt_out + = +t +; + +1273  + `SC_SP +(& +aw +-> +s +); + +1277  +OO_SP_NULL +; + +1278 + } +} + +1281 +oo_ + + $ci_tif_aive_wd_g +( +ci_tif +* +ni +,  +ddr +, + +1282  +ddr +,  +t +, + +1283 +ci_ut16 +* +pt_out +, +ci_ut32 +* +ev_q_out +) + +1285 +oo_ + +aive_wd +; + +1287 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +1289 if + `NI_OPTS +( +ni +). +t_shed_lol_pts + == 0 ) + +1290  +OO_SP_NULL +; + +1292 +aive_wd + = + `__ci_tif_aive_wd_g +( +ni +, +ddr +, +ddr +, +t +, + +1293 +pt_out +, +ev_q_out +); + +1296 if +aive_wd + = +OO_SP_NULL + && + +1297 +ni +-> +e +-> +aive_wd_n + < + `NI_OPTS +i). +t_shed_lol_pts_max + ) { + +1298 + `LOG_TC +( + `ci_log +( +FN_FMT + "Didn't getctive wild on firstry, getting more", + +1299 + `FN_PRI_ARGS +( +ni +))); + +1300 + `CITP_STATS_NETIF_INC +( +ni +, +t_shed_lol_pts_grow +); + +1301 + `ci_t_hr_loc_aive_wd +( +ni +); + +1302 +aive_wd + = + `__ci_tif_aive_wd_g +( +ni +, +ddr +, +ddr +, +t +, + +1303 +pt_out +, +ev_q_out +); + +1306 if +aive_wd + ! +OO_SP_NULL + ) { + +1307 + `CITP_STATS_NETIF_INC +( +ni +, +t_shed_lol_pts_ud +); + +1308 + `LOG_TC +( + `ci_log +( +FN_FMT + "Lookupctive wild for %s:0 %s:%u FOUND -port %u", + +1309 + `FN_PRI_ARGS +( +ni +), + `_addr_r +( +ddr +), ip_addr_r( +ddr +), + +1310 + `hts +( +t +), hts(* +pt_out +))); + +1313 + `CITP_STATS_NETIF_INC +( +ni +, +t_shed_lol_pts_exhaued +); + +1314 + `LOG_TC +( + `ci_log +( +FN_FMT + "Lookupctive wild for %s:0 %s:%u NOT AVAILABLE", + +1315 + `FN_PRI_ARGS +( +ni +), + `_addr_r +( +ddr +), ip_addr_r( +ddr +), + +1316 + `hts +( +t +))); + +1318  +aive_wd +; + +1319 + } +} + +1325  + $ci_tif_aive_wd_sh_od +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +) + +1327  +rc +; + +1328 +oo_ + +id +; + +1329 +ci_aive_wd +* +aw +; + +1331 +rc + = + `ci_tif_fr_lookup +( +ni +, + `sock_ddr_be32 +( +s +), + `sock_t_be16 +(s), + +1332 0, 0, + `sock_oc +( +s +)); + +1334 if +rc + >= 0 ) { + +1335 +id + = + `CI_NETIF_FILTER_ID_TO_SOCK_ID +( +ni +, +rc +); + +1336 +aw + = + `SP_TO_ACTIVE_WILD +( +ni +, +id +); + +1337 + `ci_as +( +aw +-> +s +. +b +. +e + = +CI_TCP_STATE_ACTIVE_WILD +); + +1338 +aw +-> +expy + = + `ci__time_now +( +ni ++ + `NI_CONF +i). +tcڡ_2m_time +; + +1339 +aw +-> +ϡ_ddr + = + `sock_ddr_be32 +( +s +); + +1340 +aw +-> +ϡ_ddr + = + `sock_ddr_be32 +( +s +); + +1341 +aw +-> +ϡ_t + = + `sock_t_be16 +( +s +); + +1343 + } +} + + @netif_debug.c + +2 ** < +L5_PRIVATE + + gL5_SOURCE +> + +3 ** + gCyright +: ( +c + +Lev + 5 +Nwks + +Limed +. + +4 ** +Auth +: +djr + + +5 ** +Sed +: 2005/02/08 + +6 ** +Desti +: +Vidi + +d + +debug + +s +  +tifs +. + +7 ** + +11  + ~"_.h +" + +12  + ~"uk_tf_v.h +" + +13  + ~ + +14  + ~ + +15 #ifde +_WIN32 + + +16  + ~ + +24 #ide +NDEBUG + + +26  + $ci_tif_e_as_vid +( +ci_tif +* +ni +, + +27 cڡ * +fe +,  +le +) + +29 +ci_tif_e +* +nis + = +ni +-> +e +; + +30 +cp_waab +* +w +; + +31 +ci_t_e +* +ts +; + +32  +tf_i +, +n +; + +33 +ci_ni_di_lk +* +k +; + +34 +ci_time_t + +ϡ_time +; + +35 +oo_pkt_p + + +, +ϡ_ +; + +36 +oo_ + +sockp +; + +37 +oo_p + +a +; + +39 + `vify +( +nis +); + +42 + `OO_STACK_FOR_EACH_INTF_I +( +ni +, +tf_i +) { + +43 +oo_pktq +* +dmaq + = & +nis +-> +nic +[ +tf_i +].dmaq; + +44 if + `OO_PP_NOT_NULL +( +dmaq +-> +hd +) ) { + +45 + `vify + + `IS_VALID_PKT_ID +( +ni +, +dmaq +-> +hd +) ); + +46 + `vify + + `IS_VALID_PKT_ID +( +ni +, +dmaq +-> + +) ); + +47 + `vify + + `OO_PP_IS_NULL +( + `PKT +( +ni +, +dmaq +-> + +)-> +tif +. +tx +. +dmaq_xt +) ); + +48 +n + = 0; + +49  +ϡ_ + = + + = +dmaq +-> +hd +; + `OO_PP_NOT_NULL +(pp); ) { + +50 ++ +n +; + +51 +ϡ_ + = + +; + +52 + + = + `PKT +( +ni +,p)-> +tif +. +tx +. +dmaq_xt +; + +54 + `vify +( + `OO_PP_EQ +( +ϡ_ +, +dmaq +-> + +)); + +55 + `vify +( +dmaq +-> +num + = +n +); + +58 + `vify +( +dmaq +-> +num + == 0); + +61 + `vify +( +ni +-> +fr_b +-> +b_size_mask + > 0u); + +69  +n + = 0; < +OO_TIMEOUT_Q_MAX +;++ ) { + +70 +ϡ_time + = 0; + +72  +a + = +nis +-> +timeout_q +[ +n +]. +l +. +xt +; + +73 ! + `OO_P_EQ +( +a +, + `ci_ni_di_lk_addr +( +ni +, + +74 & +nis +-> +timeout_q +[ +n +]. +l +)); ) { + +75 +ts + = + `TCP_STATE_FROM_LINK +(( +ci_ni_di_lk +* + `CI_NETIF_PTR +( +ni +, +a +)); + +76 + `vify +( + `IS_VALID_SOCK_P +( +ni +, + `S_SP +( +ts +))); + +77 if +n + = +OO_TIMEOUT_Q_TIMEWAIT + ) + +78 + `vify +( +ts +-> +s +. +b +. +e + = +CI_TCP_TIME_WAIT +) ); + +80 + `vify + + `ci_t_is_timeout_ph +( +ts +) ); + +81 i(! +ϡ_time +ϡ_tim +ts +-> +t_ϡ_ +; + +82 + `vify + + `TIME_LE +( +ϡ_time +, +ts +-> +t_ϡ_ +) ); + +83 +ϡ_time + = +ts +-> +t_ϡ_ +; + +84 + `vify +( + `ci__tim_ndg +( +ni +, & +nis +-> +timeout_tid +)); + +85 +a + = +ts +-> +timeout_q_lk +. +xt +; + +90  +id +; + +91 + `vify +( +nis +-> +n__bufs + < + `NI_OPTS +( +ni +). +max__bufs +); + +92  +id + = 0; id < +nis +-> +n__bufs +; ++id ) { + +93 +w + = + `ID_TO_WAITABLE +( +ni +, +id +); + +94 + `vify +( +w +); + +95 + `vify +( + `W_ID +( +w += +id +); + +100  +sockp + = +nis +-> +_s_hd +; + `OO_SP_NOT_NULL +(sockp); ) { + +101 + `vify +( + `IS_VALID_SOCK_P +( +ni +, +sockp +)); + +102 +w + = + `SP_TO_WAITABLE +( +ni +, +sockp +); + +103 + `vify +( +w +); + +104 + `vify +( + `OO_SP_EQ +( + `W_SP +( +w +), +sockp +)); + +105 + `vify +( +w +-> +e + = +CI_TCP_STATE_FREE +); + +106 +sockp + = +w +-> +wt_xt +; + +109  +k + = + `ci_ni_di_t +( +ni +, &ni-> +e +-> +po_pl_li +); + +110 +k + ! + `ci_ni_di_d +( +ni +, &ni-> +e +-> +po_pl_li +); ) { + +111 +w + = + `CI_CONTAINER +( +cp_waab +, +po_pl_lk +, +k +); + +113 if +w + = + `CI_CONTAINER +( +cp_waab +, +po_pl_lk +, + +114 ( +ci_ni_di_lk +* + `CI_NETIF_PTR +( +ni +, +k +-> +xt +)) ) { + +115 + `ci_log +("**** POST POLL LOOP DETECTED ****" ); + +116 + `ci_log +("i:%pnk:%p .next:%xtr:%p", + +117 +ni +, +k +, + `OO_P_FMT +nk-> +xt +), + `CI_NETIF_PTR +(ni,nk->next)); + +119 + `ci_log +("ist_start:%p _end:%p", + +120 + `ci_ni_di_t +( +ni +, &ni-> +e +-> +po_pl_li +), + +121 + `ci_ni_di_d +( +ni +, &ni-> +e +-> +po_pl_li +)); + +123 + `ci_log +(" %d s=%#x", + `W_FMT +( +w +), w-> +e +); + +125 + `ci_log +(" .wk_nd:%xost_poll_link.prev:%x .next:%x", + +126 ( +w +-> +wake_que +, + `OO_P_FMT +(w-> +po_pl_lk +. +ev +), + +127 + `OO_P_FMT +( +w +-> +po_pl_lk +. +xt +)); + +128 + `ci_as +(0); + +130 +k + = ( +ci_ni_di_lk +* + `CI_NETIF_PTR +( +ni +,nk-> +xt +); + +133 #i +CI_CFG_FULL_IP_ID_HANDLING + + +134 + `ci_id_as_vid +( +ni +, +fe +, +le +); + +137 + `ci__tim_e_as_vid +( +ni +, +fe +, +le +); + +138 + } +} + +141  + $ci_tif_as_vid +( +ci_tif +* +ni +, cڡ * +fe +,  +le +) + +143 + `vify +( +ni +); + +144 #ide +__KERNEL__ + + +145 + `CI_MAGIC_CHECK +( +ni +, +NETIF_MAGIC +); + +147 + `ci_tif_e_as_vid +( +ni +, +fe +, +le +); + +148 + } +} + +151  + $ci_tif_vify_pkts +( +ci_tif + * +ni +, cڡ * +fe +,  +le +) + +153 +ci__pkt_fmt + * +pkt +; + +154  +c1 +, +c2 +, +i +; + +156  +c1 + = 0, +i + = 0; i < +ni +-> +cks +-> +ts_n +; i++ ) { + +157 + `vify + + `OO_PP_NOT_NULL +( +ni +-> +cks +-> +t +[ +i +]. + +) == + +158 ( +ni +-> +cks +-> +t +[ +i +]. +n_ + > 0) ); + +159 + `vify +( +ni +-> +cks +-> +t +[ +i +]. +n_ + >= 0); + +160 +c1 + + +ni +-> +cks +-> +t +[ +i +]. +n_ +; + +162 if +ni +-> +cks +-> +t +[ +i +]. +n_ + > 0 ) { + +163 +c2 + = 1; + +165 +pkt + = + `PKT +( +ni +,i-> +cks +-> +t +[ +i +]. + +); + +166  + `OO_PP_NOT_NULL +( +pkt +-> +xt +) ) { + +167 + `vify +( +pkt +-> +fcou + == 0); + +168 + `vify +( +pkt +-> +n_bufrs + == 1); + +169 + `vify +(( +pkt +-> +ags + & ~ +CI_PKT_FLAG_NONB_POOL +) == 0); + +170 + `vify +( + `OO_PP_IS_NULL +( +pkt +-> +ag_xt +)); + +172 +pkt + = + `PKT +( +ni +,kt-> +xt +); + +173 ++ +c2 +; + +175 + `vify +( +c2 + = +ni +-> +cks +-> +t +[ +i +]. +n_ +); + +178 + } +} + +183  + $__ci_as_vid_pkt +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +, + +184 cڡ * +fe +,  +le +) + +186 + `_ci_as_gt +( +pkt +-> +fcou +, 0, +fe +, +le +); + +187 + `_ci_as_gt +( +pkt +-> +n_bufrs +, 0, +fe +, +le +); + +188 + `_ci_as_ +( +pkt +-> +n_bufrs +, +CI_IP_PKT_SEGMENTS_MAX +, +fe +, +le +); + +193 + `_ci_as_im +(( +pkt +-> +n_bufrs + > 1), + `OO_PP_NOT_NULL +kt-> +ag_xt +), + +194 +fe +, +le +); + +199 + `_ci_as_im +(( +pkt +-> +n_bufrs + == 1), + +200 + `OO_PP_IS_NULL +( +pkt +-> +ag_xt +||kt->ag_x=pkt-> +xt +, + +201 +fe +, +le +); + +202 + `_ci_as_im +( + `OO_PP_IS_NULL +( +pkt +-> +ag_xt +),kt-> +n_bufrs + == 1, + +203 +fe +, +le +); + +204 + } +} + +207  + $ci_as_vid_pkt +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +, + +208 +ci_boޗn_t + +ni_locked +, + +209 cڡ * +fe +,  +le +) + +211 + `_ci_as +( +pkt +, +fe +, +le +); + +212 + `ASSERT_VALID_PKT_ID +( +ni +, + `OO_PKT_P +( +pkt +)); + +213 + `_ci_as_equ +( +pkt +, + `__PKT +( +ni +, + `OO_PKT_P +kt)), +fe +, +le +); + +215 if +ni_locked + ) { + +216 + `_ci_as +( + `ci_tif_is_locked +( +ni +), +fe +, +le +); + +217 + `__ci_as_vid_pkt +( +ni +, +pkt +, +fe +, +le +); + +219 + } +} + +226 #i(! +defed +( +__KERNEL__ +)|| defed( +CI_CFG_BUILD_DUMP_CODE_IN_KERNEL +) + +228  + $ci_tif_dump_socks +( +ci_tif +* +ni +) + +230 + `ci_tif_dump_socks_to_logg +( +ni +, +ci_log_dump_ +, +NULL +); + +231 + } +} + +233  + $ci_tif_dump_socks_to_logg +( +ci_tif +* +ni +, +oo_dump_log__t + +logg +, + +234 * +log_g +) + +236 +ci_tif_e +* +ns + = +ni +-> +e +; + +237  +id +; + +239  +id + = 0; id < +ns +-> +n__bufs +; ++id ) { + +240 +cp_waab_obj +* +wo + = + `ID_TO_WAITABLE_OBJ +( +ni +, +id +); + +241 if +wo +-> +waab +. +e + ! +CI_TCP_STATE_FREE + ) { + +242 + `cp_waab_dump_to_logg +( +ni +, & +wo +-> +waab +, "", +logg +, +log_g +); + +243 + `logg +( +log_g +, + +247 + } +} + +250  + $ci_tif_t_socks +( +ci_tif +* +ni +) + +252 +ci_tif_e +* +ns + = +ni +-> +e +; + +253  +id +; + +255  +id + = 0; id < +ns +-> +n__bufs +; ++id ) { + +256 +cp_waab_obj +* +wo + = + `ID_TO_WAITABLE_OBJ +( +ni +, +id +); + +257 if +wo +-> +waab +. +e + ! +CI_TCP_STATE_FREE + && + +258 +wo +-> +waab +. +e + ! +CI_TCP_CLOSED + && + +259 + `CI_TCP_STATE_IS_SOCKET +( +wo +-> +waab +. +e +) ) { + +260 + `cp_waab_t +(& +wo +-> +waab +); + +263 + } +} + +266  + $ci_tif_dump_pkt_summy +( +ci_tif +* +ni +, +oo_dump_log__t + +logg +, + +267 * +log_g +) + +269  +tf_i +, +rx_rg + = 0, +tx_rg + = 0, +tx_oow + = 0, +ud +, +rx_queued +, +i +; + +270 +ci_tif_e +* +ns + = +ni +-> +e +; + +272 + `logg +( +log_g +, "kt_sets:kt_size=%d set_size=%d max=%dlloc=%d", + +273 +CI_CFG_PKT_BUF_SIZE +, +PKTS_PER_SET +, +ni +-> +cks +-> +ts_max +, + +274 +ni +-> +cks +-> +ts_n +); + +276  +i + = 0; i < +ni +-> +cks +-> +ts_n +; i++ ) { + +277 + `logg +( +log_g +, "kt_t[%d]: fe=%d%s", +i +, +ni +-> +cks +-> +t +[i]. +n_ +, + +278 +i + = +ni +-> +cks +-> +id + ? " current" : ""); + +281 +rx_rg + = 0; + +282 +tx_rg + = 0; + +283 + `OO_STACK_FOR_EACH_INTF_I +( +ni +, +tf_i +) { + +284 +rx_rg + + + `ef_vi_ive_fl_v +( + `ci_tif_rx_vi +( +ni +, +tf_i +)); + +285 +tx_rg + + + `ef_vi_sm_fl_v +(& +ni +-> +nic_hw +[ +tf_i +]. +vi +); + +286 +tx_oow + + +ns +-> +nic +[ +tf_i +]. +dmaq +. +num +; + +288 +ud + = +ni +-> +cks +-> +n_pkts_lod + -i->cks-> +n_ + - +ns +-> +n_async_pkts +; + +289 +rx_queued + = +ns +-> +n_rx_pkts + - +rx_rg + -s-> +mem_essu_pkt_po_n +; + +291 + `logg +( +log_g +, "kt_bufs: max=%dlloc=%d free=%dsync=%d%s", + +292 +ni +-> +cks +-> +ts_max + * +PKTS_PER_SET +, + +293 +ni +-> +cks +-> +n_pkts_lod +,i->cks-> +n_ +, +ns +-> +n_async_pkts +, + +294 ( +ns +-> +mem_essu + & +OO_MEM_PRESSURE_CRITICAL +) ? " CRITICAL": + +295 ( +ns +-> +mem_essu + ? " LOW":"")); + +296 + `logg +( +log_g +, "kt_bufs:x=%dx_ring=%dx_queued=%dressure_pool=%d", + +297 +ns +-> +n_rx_pkts +, +rx_rg +, +rx_queued +,s-> +mem_essu_pkt_po_n +); + +298 + `logg +( +log_g +, "kt_bufs:x=%dx_ring=%dx_oflow=%d", + +299 ( +ud + - +ns +-> +n_rx_pkts + -s-> +n_lopkts +), +tx_rg +, +tx_oow +); + +300 + `logg +( +log_g +, "kt_bufs: in_loback=%d in_sock=%d", +ns +-> +n_lopkts +, + +301 +ud + - +ns +-> +n_rx_pkts + -s-> +n_lopkts + - +tx_rg + - +tx_oow +); + +302 + } +} + +307  + #MAX_NO_DIFF_ALLOCS + 32 + + ) + +310  + mags +; + +312  + mno_bufrs +; + +313 } + tci_bufr_loc_fo_t +; + +316  + $ci_tif_pkt_dump_l +( +ci_tif +* +ni +) + +318 +ci_tif_e +* +ns + = +ni +-> +e +; + +319  +i +, +j +, +n_zo_fs + = 0; + +320 +ci_bufr_loc_fo_t + * +loc +; + +322 #ifde +__unix__ + + +323 + `log +("%s: id=%d " + `CI_DEBUG +("uid=%did=%d"), +__FUNCTION__ +, + `NI_ID +( +ni +) + +324 + `CI_DEBUG_ARG +(( +ns +-> +uid +CI_DEBUG_ARG((ns-> +pid +)); + +326 + `log +("%s: id=%d " + `CI_DEBUG +("uid=%did=%d"), +__FUNCTION__ +, + `NI_ID +( +ni +) + +327 + `CI_DEBUG_ARG +(0) CI_DEBUG_ARG(0)); + +330 + `ci_tif_dump_pkt_summy +( +ni +, +ci_log_dump_ +, +NULL +); + +332 +loc + = + `CI_ALLOC_ARRAY +( +ci_bufr_loc_fo_t +, +MAX_NO_DIFF_ALLOCS +); + +333 if +loc + = +NULL + ) { + +334 + `ci_log +("%s: ERROR: couldهo memy", +__FUNCTION__ +); + +337 + `CI_ZERO_ARRAY +( +loc +, +MAX_NO_DIFF_ALLOCS +); + +339  +i + = 0; i < +ni +-> +cks +-> +n_pkts_lod +; i++ ) { + +340 +ci__pkt_fmt +* +pkt +; + +341 +oo_pkt_p + + +; + +342 + `OO_PP_INIT +( +ni +, + +, +i +); + +343 +pkt + = + `PKT +( +ni +, + +); + +344 if +pkt +-> +fcou + == 0 ) { + +345 ++ +n_zo_fs +; + +348  +j + = 0; j < +MAX_NO_DIFF_ALLOCS +; j++ ) + +349 if +loc +[ +j +]. +ags + = +pkt +->flags ) { + +350 +loc +[ +j +]. +no_bufrs +++; + +353 if +loc +[ +j +]. +no_bufrs + == 0 ) { + +354 +loc +[ +j +]. +ags + = +pkt +->flags; + +355 +loc +[ +j +]. +no_bufrs + = 1; + +359  +j + = 0; j < +MAX_NO_DIFF_ALLOCS +; j++ ) + +360 if +loc +[ +j +]. +no_bufrs + ) + +361 + `log +(" %3d: 0x%x " +CI_PKT_FLAGS_FMT +, +loc +[ +j +]. +no_bufrs +, + +362 +loc +[ +j +]. +ags +, + `__CI_PKT_FLAGS_PRI_ARG +(alloc[j].flags)); + +363 + `ci_ +( +loc +); + +365 + `log +("_zero_refs=%d_freepkts=%dstimated_free_nonb=%d", + +366 +n_zo_fs +, +ni +-> +cks +-> +id +,_zero_refs -i->packets->id); + +372  +no_nb +=0, +xt +; + +373 +ci__pkt_fmt +* +nb_pkt +; + +374 +oo_pkt_p + + +; + +376 +xt + = +ns +-> +nb_pkt_po + & 0xffffffff; + +377  +xt + != 0xffffffff ) { + +378 + `OO_PP_INIT +( +ni +, + +, +xt +); + +379 +nb_pkt + = + `PKT +( +ni +, + +); + +380 +no_nb +++; + +381 +xt + = + `OO_PP_ID +( +nb_pkt +->next); + +383 + `log +(" fe_nb=%db_pkt_po=%" +CI_PRIx64 +, +no_nb +, +ns +-> +nb_pkt_po +); + +385 + } +} + +388  + $cp_waab_f_wake +( +ci_tif +* +ni +, +cp_waab +* +sb +) + +390  +rc + = +sb +-> +wake_que + != 0; + +391 + `log +("%s: %d:%d ", +__FUNCTION__ +, + `NI_ID +( +ni +), + `W_FMT +( +sb +)); + +392 + `ci_b_t +(& +sb +-> +wake_que +, +CI_SB_FLAG_WAKE_RX_B +); + +393 + `ci_b_t +(& +sb +-> +wake_que +, +CI_SB_FLAG_WAKE_TX_B +); + +394 + `cp_waab_wake_n__pl +( +ni +, +sb +, +CI_SB_FLAG_WAKE_RX +| +CI_SB_FLAG_WAKE_TX +); + +395  +rc +; + +396 + } +} + +399  + $ci_tif_f_wake +( +ci_tif +* +ni +,  +evye +) + +401 +ci_tif_e +* +ns + = +ni +-> +e +; + +402  +id +; + +403  +rc + = 0; + +407  +id + = 0; id < +ns +-> +n__bufs +; ++id ) { + +408 +cp_waab +* +w + = + `ID_TO_WAITABLE +( +ni +, +id +); + +410 if +w +-> +e + ! +CI_TCP_STATE_FREE + ) { + +412 if +evye + || +w +-> +wake_que + ) + +413 +rc + + + `cp_waab_f_wake +( +ni +, +w +); + +417  +rc +; + +418 + } +} + +421  + $ci_tif_pkt_dump +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +,  +is_cv +,  +dump +) + +423 if +pkt + = +NULL + ) { + +424 + `ci_log +("%s: ERROR: NULL", +__FUNCTION__ +); + +427 + `ci_log +("%s: id=%d fgs=%x " +CI_PKT_FLAGS_FMT +, + +428 +__FUNCTION__ +, + `OO_PKT_FMT +( +pkt +),kt-> +ags +, + `CI_PKT_FLAGS_PRI_ARG +(pkt)); + +430  + `oo_h_ty_g +( +pkt +) ) { + +431  +CI_ETHERTYPE_IP +: + +432  + `oo__hdr +( +pkt +)-> +_oc + ) { + +433  +IPPROTO_TCP +: + +434 + `ci_t_pkt_dump +( +ni +, +pkt +, +is_cv +, +dump +); + +437 + `log +("%s:kt=%d unsupported ip_protocol=%d", + +438 +__FUNCTION__ +, + `OO_PKT_FMT +( +pkt +), ( + `oo__hdr +kt)-> +_oc +); + +443 + `log +("%s:kt=%d unsu܋dthty=%x", +__FUNCTION__ +, + `OO_PKT_FMT +( +pkt +), + +444 ( + `CI_BSWAP_BE16 +( + `oo_h_ty_g +( +pkt +))); + +447 + } +} + +450  + $ci_tif_pkt_li_dump +( +ci_tif +* +ni +, +oo_pkt_p + +hd +,  +is_cv +,  +dump +) + +452 +ci__pkt_fmt +* +pkt +; + +453 +oo_pkt_p + +pkt_id +; + +455  +pkt_id + = +hd +; + `OO_PP_NOT_NULL +kt_id);kt_id = +pkt +-> +xt + ) { + +456 if! + `IS_VALID_PKT_ID +( +ni +, +pkt_id +) ) { + +457 + `log +(" invidkt_id=%d", + `OO_PP_FMT +( +pkt_id +)); + +461 +pkt + = + `PKT +( +ni +, +pkt_id +); + +462 + `ci_tif_pkt_dump +( +ni +, +pkt +, +is_cv +, +dump +); + +464 + } +} + +467  + $ci_tif_pkt_queue_dump +( +ci_tif +* +ni +, +ci__pkt_queue +* +q +, + +468  +is_cv +,  +dump +) + +470 + `log +("%s: hd=%da=%d=%d", +__FUNCTION__ +, + +471 + `OO_PP_FMT +( +q +-> +hd +), OO_PP_FMT(q-> + +), q-> +num +); + +472 + `ci_tif_pkt_li_dump +( +ni +, +q +-> +hd +, +is_cv +, +dump +); + +473 + } +} + +476  + $ci_tif_dump_dmaq +( +ci_tif +* +ni +,  +dump +) + +478  +tf_i +; + +479 + `OO_STACK_FOR_EACH_INTF_I +( +ni +, +tf_i +) { + +480 +ci_tif_e_nic_t +* +nic + = & +ni +-> +e +->nic[ +tf_i +]; + +481 + `log +("%s: hd=%da=%dum=%d", +__FUNCTION__ +, + +482 + `OO_PP_FMT +( +nic +-> +dmaq +. +hd +), OO_PP_FMTic->dmaq. + +),ic->dmaq. +num +); + +486 + } +} + +489  + $ci_tif_dump_timeoutq +( +ci_tif +* +ni +) + +491 +ci_tif_e +* +nis + = +ni +-> +e +; + +492 +ci_t_e + * +ts +; + +493 +oo_p + +a +; + +494  +i +; + +496 if + `ci__tim_ndg +( +ni +, & +nis +-> +timeout_tid +) ) { + +497  +diff + = +nis +-> +timeout_tid +. +time + - + `ci_t_time_now +( +ni +); + +498 + `log +("timeout due in %umS", + +499 + `ci__time_ticks2ms +( +ni +, +diff +)); + +501  +i + = 0; i < +OO_TIMEOUT_Q_MAX +; i++ ) { + +502 if +i + = +OO_TIMEOUT_Q_TIMEWAIT + ) + +503 + `log +("TIME-WAIT queue"); + +505 + `log +("FIN-WAIT queue"); + +506  +a + = +nis +-> +timeout_q +[ +i +]. +l +. +xt +; + +507 ! + `OO_P_EQ +( +a +, + `ci_ni_di_lk_addr +( +ni +, & +nis +-> +timeout_q +[ +i +]. +l +)); ) { + +508 +ts + = + `TCP_STATE_FROM_LINK +(( +ci_ni_di_lk +* + `CI_NETIF_PTR +( +ni +, +a +)); + +509 if +i + = +OO_TIMEOUT_Q_TIMEWAIT + ) + +510 + `log +(" %d:=0x%08x", + `S_FMT +( +ts +),s-> +t_ϡ_ +); + +512 + `log +(" %d:=0x%08x %s", + `S_FMT +( +ts +),s-> +t_ϡ_ +, + `e_r +(ts)); + +513 +a + = +ts +-> +timeout_q_lk +. +xt +; + +516 + } +} + +519  + $ci_tif_dump__li +( +ci_tif +* +ni +,  +vbo +) + +521 +ci_ni_di_lk +* +k +; + +522 +ci_sock_cmn +* +s +; + +524 + `ci_log +("%s: sck=%d", +__FUNCTION__ +, + `NI_ID +( +ni +)); + +525  +k + = + `ci_ni_di_t +( +ni +, &ni-> +e +-> +_li +); + +526 +k + ! + `ci_ni_di_d +( +ni +, &ni-> +e +-> +_li +); + +527 +k + = ( +ci_ni_di_lk +* + `CI_NETIF_PTR +( +ni +,nk-> +xt +) ) { + +528 +s + = + `CI_CONTAINER +( +ci_sock_cmn +, +_lk +, +k +); + +529 if +vbo + ) + +530 + `cp_waab_dump +( +ni +, & +s +-> +b +, ""); + +532 + `ci_log +(" " +NS_FMT +, + `NS_PRI_ARGS +( +ni +, +s +)); + +534 + } +} + +537  + $ci_tif_dump_exa +( +ci_tif +* +ni +) + +539 +ci_tif_e +* +ns + = +ni +-> +e +; + +540  +hp2i +[ +CPLANE_MAX_REGISTER_INTERFACES + * 10]; + +541  +i2hp +[ +CI_CFG_MAX_INTERFACES + * 10]; + +542  +i +, +off +; + +544  +i + = 0, +off + = 0; i < +CPLANE_MAX_REGISTER_INTERFACES +; ++i ) + +545 +off + + + `rtf +( +hp2i ++off, "%s%d", +i +?",":"", ( +ns +-> +hwpt_to_tf_i +[i]); + +546  +i + = 0, +off + = 0; i < +CI_CFG_MAX_INTERFACES +; ++i ) + +547 +off + + + `rtf +( +i2hp ++off, "%s%d", +i +?",":"", ( +ns +-> +tf_i_to_hwpt +[i]); + +549 + `log +("%s: sck=%d", +__FUNCTION__ +, + `NI_ID +( +ni +)); + +550 + `log +(" in_poll=%dost_poll_list_empty=%doll_did_wake=%d", + +551 +ns +-> +_pl +, + `ci_ni_di_is_emy +( +ni +, &ns-> +po_pl_li +), + +552 +ns +-> +pl_did_wake +); + +553 + `log +("x_defrag_head=%dx_defrag_tail=%d", + +554 + `OO_PP_FMT +( +ns +-> +rx_deag_hd +), OO_PP_FMTs-> +rx_deag_ +)); + +555 + `log +("x_may_alloc=%d can=%donb_pool=%d send_may_poll=%d is_spinner=%d,%d", + +556 + `ci_tif_pkt_tx_may_loc +( +ni +), + `ci_tif_pkt_tx_n_loc_now +(ni), + +557 + `ci_tif_pkt_nb_po_n_emy +( +ni +), +ns +-> +nd_may_pl +, + +558 ( +ns +-> +is_r +,s-> +n_rs +); + +559 + `log +(" hwpt_to_tf_i=%tf_i_to_hwpt=%s", +hp2i +, +i2hp +); + +560 + `log +(" uk_tf_v=%s", +OO_UK_INTF_VER +); + +561 + `log +(" deed cou %d/%d", +ns +-> +der_wk_cou +, + `NI_OPTS +( +ni +). +der_wk_lim +); + +562 + `log +("umaodes: creation=%doad=%d", + +563 +ns +-> +ti_numa_node +,s-> +ld_numa_node +); + +564 + `log +("umaode masks:acketlloc=%x socklloc=%x interrupt=%x", + +565 +ns +-> +ck_loc_numa_nodes +,s-> +sock_loc_numa_nodes +, + +566 +ns +-> +u_numa_nodes +); + +567 + } +} + +570  + $ci_tif_dump_vi +( +ci_tif +* +ni +,  +tf_i +, +oo_dump_log__t + +logg +, + +571 * +log_g +) + +573 +ci_tif_e_nic_t +* +nic + = & +ni +-> +e +->nic[ +tf_i +]; + +574 +ef_vi +* +vi + = & +ni +-> +nic_hw +[ +tf_i +].vi; + +576 if +tf_i + < 0 || if_> +CI_CFG_MAX_INTERFACES + || + +577 ! + `em_nic_t_ad +(& +ni +-> +nic_t +, +tf_i +) ) { + +578 + `logg +( +log_g +, "%s: stack=%d intf=%d ***BAD***", + +579 +__FUNCTION__ +, + `NI_ID +( +ni +), +tf_i +); + +583 + `logg +( +log_g +, "%s: sck=%d if=%d dev=%hw=%d%c%d", +__FUNCTION__ +, + +584 + `NI_ID +( +ni +), +tf_i +, +nic +-> +pci_dev +, (nic-> +vi_ch +, + +585 +nic +-> +vi_v +, (nic-> +vi_visi +); + +586 + `logg +( +log_g +, " vi=%dd_owner=%d channel=%d%s oo_vi_flags=%x", + +587 + `ef_vi_ +( +vi +), +nic +-> +pd_owr +, (nic-> +vi_chl +, + +588 +ni +-> +e +-> +dump_tf +[ +tf_i +] ? "cpdump" : "", + +589 +nic +-> +oo_vi_ags +); + +590 + `logg +( +log_g +, "vq: cap=%d current=%x is_32_evs=%d is_ev=%d", + +591 + `ef_evtq_cy +( +vi +), ( + `ef_evtq_cut +(vi), + +592 + `ef_evtq_has_my_evts +( +vi +, 32), + `ef_evtq_has_evt +(vi)); + +593 + `logg +( +log_g +, "xq: cap=%dim=%d spc=%devel=%dotal_desc=%d", + +594 + `ef_vi_ive_cy +( +vi +), +ni +-> +e +-> +rxq_lim +, + +595 + `ci_tif_rx_vi_a +( +ni +, +vi +), + `ef_vi_ive_fl_v +(vi), + +596 +vi +-> +_e +-> +rxq +. +moved +); + +597 + `logg +( +log_g +, "xq: cap=%dim=%d spc=%devel=%dkts=%d oflow_pkts=%d", + +598 + `ef_vi_sm_cy +( +vi +),f_vi_transmit_capacity(vi), + +599 + `ef_vi_sm_a +( +vi +), + `ef_vi_sm_fl_v +(vi), + +600 +nic +-> +tx_dmaq__q + -ic-> +tx_dmaq_de_q + -ic-> +dmaq +. +num +, + +601 +nic +-> +dmaq +. +num +); + +602 + `logg +( +log_g +, "xq:io_buf_size=%dot_pkts=%d bytes=%d", + +603 #i +CI_CFG_PIO + + +604 +nic +-> +pio_io_n +, + +608 +nic +-> +tx_dmaq_de_q +,ic-> +tx_bys_added + -ic-> +tx_bys_moved +); + +609 + `logg +( +log_g +, " clk: %s%s", + +610 ( +nic +-> +ϡ_sync_ags + & +EF_VI_SYNC_FLAG_CLOCK_SET +) ? "SET " : "", + +611 ( +nic +-> +ϡ_sync_ags + & +EF_VI_SYNC_FLAG_CLOCK_IN_SYNC +) ? "SYNC" : ""); + +612 if +nic +-> +nic_r_ags + ) + +613 + `logg +( +log_g +, " ERRORS: " +CI_NETIF_NIC_ERRORS_FMT +, + +614 + `CI_NETIF_NIC_ERRORS_PRI_ARG +( +nic +-> +nic_r_ags +)); + +616 #ide +__KERNEL__ + + +617 #i +CI_CFG_SEPARATE_UDP_RXQ + + +618 if + `NI_OPTS +( +ni +). +_udp_rxq + ) { + +619 +vi + = & +ni +-> +nic_hw +[ +tf_i +]. +udp_rxq_vi +; + +620 + `logg +( +log_g +, " vi=%d", + `ef_vi_ +( +vi +)); + +621 + `logg +( +log_g +, "vq: cap=%d current=%x is_32_evs=%d is_ev=%d", + +622 + `ef_evtq_cy +( +vi +), ( + `ef_evtq_cut +(vi), + +623 + `ef_evtq_has_my_evts +( +vi +, 32), + `ef_evtq_has_evt +(vi)); + +624 + `logg +( +log_g +, "xq: cap=%dim=%d spc=%devel=%dotal_desc=%d", + +625 + `ef_vi_ive_cy +( +vi +), +ni +-> +e +-> +rxq_lim +, + +626 + `ci_tif_rx_vi_a +( +ni +, +vi +), + `ef_vi_ive_fl_v +(vi), + +627 +vi +-> +_e +-> +rxq +. +moved +); + +631 + } +} + +633  + $ci_tif_dump +( +ci_tif +* +ni +) + +635 + `ci_tif_dump_to_logg +( +ni +, +ci_log_dump_ +, +NULL +); + +636 + } +} + +638  + $ci_tif_dump_to_logg +( +ci_tif +* +ni +, +oo_dump_log__t + +logg +, + +639 * +log_g +) + +641 +ci_tif_e +* +ns + = +ni +-> +e +; + +642 #ifde +__KERNEL__ + + +644  +ci__tim_e + +s +; + +646 +ci__tim_e + +s +; + +648 +ci_ut64 + +tmp +; + +649  +diff +; + +650  +tf_i +; + +652 + `logg +( +log_g +, "%s: sck=%dame=%s", +__FUNCTION__ +, + `NI_ID +( +ni +), + +653 +ni +-> +e +-> +me +); + +654 + `logg +( +log_g +, " v=%uid=%did=%ds_ags=%x %%s", +ONLOAD_VERSION + + +655 #ifde +__unix__ + + +656 , ( +ns +-> +uid +, (ns-> +pid + + +658 + `CI_DEBUG_ARG +( 0 ) CI_DEBUG_ARG( 0 ) + +660 , +ns +-> +ags + + +661 , ( +ns +-> +ags + & +CI_NETIF_FLAG_ONLOAD_UNSUPPORTED +) + +663 #i +CI_CFG_FD_CACHING + + +664 , ( +ns +-> +ags + & +CI_NETIF_FLAG_SOCKCACHE_FORKED +) + +671 +tmp + = +ni +-> +e +-> +lock +.lock; + +672 + `logg +( +log_g +, "ock=%x " +CI_NETIF_LOCK_FMT +"ics=%xrimed=%x", + +673 () +tmp +, + +674 + `CI_NETIF_LOCK_PRI_ARG +( +tmp +), +ni +-> +nic_t +. +nics +, +ns +-> +evq_imed +); + +675 #ifde +__KERNEL__ + + +678 +t_hr_sour_t +* +s + = + `tif2t_hr_sour +( +ni +); + +679 + `logg +( +log_g +, "ef=%drusted_lock=0x%x k_ref=0x%x " + +681 + `oo_omic_ad +(& +s +-> +f_cou +), + +682 +s +-> +ued_lock +,rs-> +k_f_cou +,rs-> +n__osg_fs +); + +686 + `logg +( +log_g +, " sock_bufs: max=%u_allocated=%u", + +687 + `NI_OPTS +( +ni +). +max__bufs +, +ns +-> +n__bufs +); + +689 + `logg +( +log_g +, "ux_bufs: max=%ullocated=%u free=%u", + +690 + `NI_OPTS +( +ni +). +t_syecv_max + * 2,i-> +e +-> +n_aux_bufs +, + +691 +ns +-> +n__aux_bufs +); + +692 + `ci_tif_dump_pkt_summy +( +ni +, +logg +, +log_g +); + +694 #ifde +_WIN32 + + +695 + `logg +( +log_g +, " signal_q=[%d,%d] completion_q=%d", + +696 +ns +-> +async_sigl_q +. +hd +,s->async_sigl_q. + +, + +697 +ns +-> +async_comi_q +); + +700 +s + = * + `IPTIMER_STATE +( +ni +); + +701 + `ci__time_sync +(& +s +); + +702 +diff + = +s +. +ci__time__ticks + - + `ci__time_now +( +ni +); + +703 +diff + = + `ci__time_ticks2ms +( +ni +, diff); + +705 + `logg +( +log_g +, "ime:etif=%xoll=%xow=%x (diff=%ld.%03ldsec)%s", + +706 ( + `ci__time_now +( +ni +), + +707 ( + `IPTIMER_STATE +( +ni +)-> +sched_ticks +, + +708 ( +s +. +ci__time__ticks +, +diff + / 1000, diff % 1000, + +709 +diff + > 5000 ? " !! STUCK !!":""); + +711 if +ns +-> +r_ags + ) + +712 + `logg +( +log_g +, " ERRORS: " +CI_NETIF_ERRORS_FMT +, + +713 + `CI_NETIF_ERRORS_PRI_ARG +( +ns +-> +r_ags +)); + +714 if +ni +-> +e +-> +dump_wre_i + !ni->e-> +dump_ad_i + ) + +715 + `logg +( +log_g +, "cpdump: %d/%dackets in queue", + +716 ( +ci_ut8 +)( +ni +-> +e +-> +dump_wre_i + -i->e-> +dump_ad_i +), + +717 +CI_CFG_DUMPQUEUE_LEN +); + +719 #i +CI_CFG_FD_CACHING + + +720 + `logg +( +log_g +, "ctive cache: hit=%dvail=%d cache=%sending=%s", + +721 +ns +-> +s +. +aiveche_h +, + +722 *( +ci_ut32 +*) + `CI_NETIF_PTR +( +ni +, +ns +-> +aive_che +. +ava_ack +), + +723 + `ci_ni_di_is_emy +( +ni +, & +ns +-> +aive_che +. +che +) ? "EMPTY":"yes", + +724 + `ci_ni_di_is_emy +( +ni +, & +ns +-> +aive_che +. +ndg +) ? "EMPTY":"yes"); + +728 + `OO_STACK_FOR_EACH_INTF_I +( +ni +, +tf_i +) + +729 + `ci_tif_dump_vi +( +ni +, +tf_i +, +logg +, +log_g +); + +730 + } +} + +734  + $ci_tif_bad_hwpt +( +ci_tif +* +ni +, +ci_hwpt_id_t + +hwpt +) + +737  + +; + +738 if! + + ) { + +739 + + = 1; + +740 + `ci_log +( +FN_FMT + "ERROR: bad hwpt=%d", + `FN_PRI_ARGS +( +ni +), ( +hwpt +); + +741 + `ci_backa +(); + +744 + } +} + + @netif_event.c + +14  + ~"_.h +" + +15  + ~"tif_tx.h +" + +16  + ~"t_rx.h +" + +17  + ~ + +18  + ~ + +19  + ~ + +20  + ~ + +22 #ifde +__KERNEL__ + + +23  + ~ + +25  + ~ + +28  + #SAMPLE +( +n +) + + ) + +30  + #LPF + "tif: " + + ) + +33  + soo_rx_e + { + +35 +ci__pkt_fmt +* + mrx_pkt +; + +37 +ci__pkt_fmt +* + mag_pkt +; + +41  + mag_bys +; + +45  + $ci__csum_cܻ +( +ci_4_hdr +* + +,  +max__n +) + +47  +csum +; + +48  +_n +; + +50 if +max__n + < + `CI_IP4_IHL +( + +) ) + +52 +_n + = + `CI_BSWAP_BE16 +( + +-> +_t_n_be16 +); + +53 if +max__n + < +_n + ) + +56 +csum + = + `ci__csum_l +(0, + +, + `CI_IP4_IHL +(ip)); + +57 +csum + = + `ci__hdr_csum_fish +(csum); + +58  +csum + == 0; + +59 + } +} + +62  + $ci_t_csum_cܻ +( +ci__pkt_fmt +* +pkt +,  +_yn +) + +64 +ci_4_pudo_hdr + +ph +; + +65 +ci_t_hdr +* +t +; + +66  +csum +; + +67  +t_hn +; + +69 +t + = + `PKT_TCP_HDR +( +pkt +); + +70 +t_hn + = + `CI_TCP_HDR_LEN +( +t +); + +72 if +t_hn + < ( +ci_t_hdr +) ) + +74 if +_yn + < +t_hn + ) + +77 +ph +. +_ddr_be32 + = + `oo__hdr +( +pkt +)->ip_saddr_be32; + +78 +ph +. +_daddr_be32 + = + `oo__hdr +( +pkt +)->ip_daddr_be32; + +79 +ph +. +zo + = 0; + +80 +ph +. +_oc + = +IPPROTO_TCP +; + +81 +ph +. +ngth_be16 + = + `CI_BSWAP_BE16 +(( +ci_ut16 + +_yn +); + +83 +csum + = + `ci__csum_l +(0, & +ph +, (ph)); + +84 +csum + = + `ci__csum_l +(csum, +t +, +_yn +); + +85 +csum + = + `ci__hdr_csum_fish +(csum); + +86  +csum + == 0; + +87 + } +} + +90  + $ci_r_rx_vn +( +ci__pkt_fmt +* +pkt +) + +92 +ut16_t +* +p_h_ty +; + +94 + `ci_as_qu +(( +ci_ut8 + +pkt +-> +pkt_t_off +, 0xff); + +95 + `ci_as_equ +( +pkt +-> +pkt_h_yld_off +, 0xff); + +97 +p_h_ty + = &( + `oo_h_hdr +( +pkt +)-> +h_ty +); + +98 if* +p_h_ty + ! +CI_ETHERTYPE_8021Q + ) { + +99 +pkt +-> +pkt_h_yld_off + =kt-> +pkt_t_off + + +ETH_HLEN +; + +100 +pkt +-> +vn + = 0; + +103 +pkt +-> +pkt_h_yld_off + =kt-> +pkt_t_off + + +ETH_HLEN + + +ETH_VLAN_HLEN +; + +104 +pkt +-> +vn + = + `CI_BSWAP_BE16 +( +p_h_ty +[1]) & 0xfff; + +106 + } +} + +109  + $hd_rx_pkt +( +ci_tif +* +tif +,  +ci_tif_pl_e +* +ps +, + +110 +ci__pkt_fmt +* +pkt +) + +117  +n_ +, +_yn +, +_t_n +; + +118 +ci_4_hdr + * + +; + +120 + `ci_as_qu +( +pkt +-> +pkt_h_yld_off +, 0xff); + +122 + + = + `oo__hdr +( +pkt +); + +123 + `LOG_NR +( + `log +( +LPF + "RX id=%dth_ty=0x%04x ip_o=0x%x", + `OO_PKT_FMT +( +pkt +), + +124 ( + `CI_BSWAP_BE16 +( + `oo_h_ty_g +( +pkt +)), + +125 ( + +-> +_oc +)); + +126 + `LOG_AR +( + `ci_y_pkt +( + `PKT_START +( +pkt +),kt-> +y_n +)); + +128 #i +CI_CFG_RANDOM_DROP + && ! + `defed +( +__KERNEL__ +) + +129 if + `CI_UNLIKELY +( + `nd +(< + `NI_OPTS +( +tif +). +rx_dr_ + +dr +; + +134 if( + `CI_LIKELY +1 || + `oo_h_ty_g +( +pkt += +CI_ETHERTYPE_IP + )) { + +135 + `CI_IPV4_STATS_INC_IN_RECVS + +tif + ); + +138 +_t_n + = + `CI_BSWAP_BE16 +( + +-> +_t_n_be16 +); + +140 + `LOG_DR +( + `ci_hex_dump +( +ci_log_ +, + `PKT_START +( +pkt +), + +141 + `_pkt_dump_n +( +_t_n +), 0)); + +143 if + `oo_tdump_check +( +tif +, +pkt +,kt-> +tf_i +) ) + +144 + `oo_tdump_dump_pkt +( +tif +, +pkt +); + +148 +n_ + = (( + +-> +_ihl_vsi +- + `CI_IP4_IHL_VERSION +((*ip))) | + +149 ( +_t_n + > +pkt +-> +y_n + - + `oo_h_hdr_size +(pkt))); + +161 if + `CI_LIKELY +( +n_ + == 0) ) { + +162 * +yld + = (* + + + ( +ci_4_hdr +); + +163 +ci_tif_e_nic_t +* +n + = & +tif +-> +e +-> +nic +[ +pkt +-> +tf_i +]; + +164  +timeec + +amp +; + +166 +_yn + = ( +_t_n + - ( +ci_4_hdr +); + +171 if +n +-> +oo_vi_ags + & +OO_VI_FLAGS_RX_HW_TS_EN + ) { + +172  +sync_ags +; + +173  +rc + = +ef_vi_ive_g_timeamp_wh_sync_ags + + +174 (& +tif +-> +nic_hw +[ +pkt +-> +tf_i +]. +vi +, + +175 + `PKT_START +( +pkt +- +n +-> +rx_efix_n +, & +amp +, & +sync_ags +); + +176 if +rc + == 0 ) { + +177  +tsf + = ( + `NI_OPTS +( +tif +). +timeampg_ptg + & + +178 +CITP_TIMESTAMPING_RECORDING_FLAG_CHECK_SYNC +) ? + +179 +EF_VI_SYNC_FLAG_CLOCK_IN_SYNC + : + +180 +EF_VI_SYNC_FLAG_CLOCK_SET +; + +181 +amp +. +tv_nc + = + +182 ( +amp +. +tv_nc + & ~ +CI_IP_PKT_HW_STAMP_FLAG_IN_SYNC +) | + +183 (( +sync_ags + & +tsf +? +CI_IP_PKT_HW_STAMP_FLAG_IN_SYNC + : 0); + +184 +n +-> +ϡ_rx_timeamp +. +tv_c + = +amp +.tv_sec; + +185 +n +-> +ϡ_rx_timeamp +. +tv_nc + = +amp +.tv_nsec; + +186 +n +-> +ϡ_sync_ags + = +sync_ags +; + +188 + `LOG_NR +( + `log +( +LPF + "RX id=%dimestamp: %lu.%09lu sync %d", + +189 + `OO_PKT_FMT +( +pkt +), +amp +. +tv_c +, smp. +tv_nc +, +sync_ags +)); + +191 + `LOG_NR +( + `log +( +LPF + "RX id=%d missgimeamp", + `OO_PKT_FMT +( +pkt +))); + +192 +amp +. +tv_c + = 0; + +196 +amp +. +tv_c + = 0; + +202 if + +-> +_oc + = +IPPROTO_TCP + ) { + +203 +pkt +-> +pf +. +t_rx +. +rx_hw_amp +. +tv_c + = +amp +.tv_sec; + +204 +pkt +-> +pf +. +t_rx +. +rx_hw_amp +. +tv_nc + = +amp +.tv_nsec; + +205 + `ci_t_hd_rx +( +tif +, +ps +, +pkt +, ( +ci_t_hdr +* +yld +, +_yn +); + +206 + `CI_IPV4_STATS_INC_IN_DELIVERS + +tif + ); + +209 #i +CI_CFG_UDP + + +210 if( + `CI_LIKELY + + +-> +_oc + = +IPPROTO_UDP + )) { + +211 +pkt +-> +pf +. +udp +. +rx_hw_amp +. +tv_c + = +amp +.tv_sec; + +212 +pkt +-> +pf +. +udp +. +rx_hw_amp +. +tv_nc + = +amp +.tv_nsec; + +213 + `ci_udp_hd_rx +( +tif +, +pkt +, ( +ci_udp_hdr +* +yld +, +_yn +); + +214 + `CI_IPV4_STATS_INC_IN_DELIVERS + +tif + ); + +219 + `LOG_U +( + `log +( +LPF + "IGNORE IProc=%d", ( + +-> +_oc +)); + +224 + `LOG_U +( + `log +( +LPF + "[%d] IP HARD " + +226 +PKT_DBG_FMT +, + +227 +tif +-> +e +-> +ack_id +, + +228 ( + +-> +_ihl_vsi +, ( + `CI_IP4_IHL +(ip), + +229 ( + +-> +_ag_off_be16 +, + +230 +_t_n +, +pkt +-> +y_n +, + `PKT_DBG_ARGS +(pkt))); + +231 + `LOG_DU +( + `ci_hex_dump +( +ci_log_ +, + `PKT_START +( +pkt +), 64, 0)); + +232 + `ci_tif_pkt_a_rx_1f +( +tif +, +pkt +); + +236 + `LOG_U +( + `log +( +LPF + "UNEXPECTEDth_ty=%04x" +PKT_DBG_FMT +, + +237 ( + `CI_BSWAP_BE16 +( + `oo_h_ty_g +( +pkt +)), + +238 + `PKT_DBG_ARGS +( +pkt +)); + +239 + `ci_hex_dump +( +ci_log_ +, + `PKT_START +( +pkt +), 64, 0)); + +240 + `ci_tif_pkt_a_rx_1f +( +tif +, +pkt +); + +243 #i +CI_CFG_RANDOM_DROP + && ! + `defed +( +__ci_driv__ +) + +244 +dr +: + +245 + `LOG_NR +( + `log +( +LPF + "DROP")); + +246 + `LOG_DR +( + `ci_hex_dump +( +ci_log_ +, +pkt +, 40, 0)); + +247 + `ci_tif_pkt_a_rx_1f +( +tif +, +pkt +); + +250 + } +} + +260  + $hd_rx_s_ϡ_ag +( +ci_tif +* +ni +,  +oo_rx_e +* +s +, + +261 +ci__pkt_fmt +* +pkt +) + +263 +oo_pkt_p + +xt_p +; + +266 + `ci_as_gt +( +pkt +-> +buf_n +, 0); + +267 + `ci_as +( + `OO_PP_IS_NULL +( +pkt +-> +ag_xt +)); + +269 +pkt +-> +n_bufrs + = 1; + +271 +xt_p + = +s +-> +ag_pkt +-> +ag_xt +; + +272 +s +-> +ag_pkt +-> +ag_xt + = + `OO_PKT_P +( +pkt +); + +273 +s +-> +ag_pkt +-> +n_bufrs + = +pkt +->n_buffers + 1; + +274 if + `OO_PP_IS_NULL +( +xt_p +) ) + +276 +pkt + = +s +-> +ag_pkt +; + +277 +s +-> +ag_pkt + = + `PKT +( +ni +, +xt_p +); + +279 +s +-> +rx_pkt + = s-> +ag_pkt +; + +280 +s +-> +rx_pkt +-> +y_n + = s-> +ag_bys +; + +281 +s +-> +ag_pkt + = +NULL +; + +282 + `ASSERT_VALID_PKT +( +ni +, +s +-> +rx_pkt +); + +283 + } +} + +291  + $hd_rx_s +( +ci_tif +* +ni +,  +oo_rx_e +* +s +, + +292 +ci__pkt_fmt +* +pkt +,  +ame_bys +, + +293  +ags +) + +295 +s +-> +rx_pkt + = +NULL +; + +297 if +ags + & +EF_EVENT_FLAG_SOP + ) { + +299 + `ci_as +( +s +-> +ag_pkt + = +NULL +); + +300 + `ci_as_ +( +ame_bys +, + +301 (( +CI_CFG_PKT_BUF_SIZE + - + +302 + `CI_MEMBER_OFFSET +( +ci__pkt_fmt +, +dma_t +))); + +303 +s +-> +ag_pkt + = +pkt +; + +304 +pkt +-> +buf_n + = +s +-> +ag_bys + = +ame_bys +; + +305 + `oo_offbuf_ +(& +pkt +-> +buf +, + `PKT_START +kt), +s +-> +ag_bys +); + +308 + `ci_as +( +s +-> +ag_pkt + ! +NULL +); + +309 + `ci_as_gt +( +s +-> +ag_bys +, 0); + +310 + `ci_as_gt +( +ame_bys +, +s +-> +ag_bys +); + +311 +pkt +-> +buf_n + = +ame_bys + - +s +-> +ag_bys +; + +312 + `oo_offbuf_ +(& +pkt +-> +buf +,kt-> +dma_t +,kt-> +buf_n +); + +313 +s +-> +ag_bys + = +ame_bys +; + +314 + `CI_DEBUG +( +pkt +-> +y_n + = -1); + +315 if +ags + & +EF_EVENT_FLAG_CONT + ) { + +317 +pkt +-> +ag_xt + = + `OO_PKT_P +( +s +-> +ag_pkt +); + +318 +s +-> +ag_pkt + = +pkt +; + +322 + `hd_rx_s_ϡ_ag +( +ni +, +s +, +pkt +); + +325 + } +} + +335  + $hd_rx_s_mge +( +ci_tif +* +ni +,  +oo_rx_e +* +s +, + +336 +ci__pkt_fmt +* +pkt +,  +efix_bys +, + +337  +pkt_bys +,  +ags +) + +339  +fu_bufr + = +CI_CFG_PKT_BUF_SIZE + - + +340 + `CI_MEMBER_OFFSET +( +ci__pkt_fmt +, +dma_t +); + +342 +s +-> +rx_pkt + = +NULL +; + +343 if +ags + & +EF_EVENT_FLAG_SOP + ) { + +345 + `ci_as +( +s +-> +ag_pkt + = +NULL +); + +346 + `ci_as_gt +( +pkt_bys +, +fu_bufr + - +efix_bys +); + +349 +pkt +-> +buf_n + = +fu_bufr + - +efix_bys +; + +350 + `oo_offbuf_ +(& +pkt +-> +buf +, + `PKT_START +kt),kt-> +buf_n +); + +351 +s +-> +ag_pkt + = +pkt +; + +352 +s +-> +ag_bys + = +pkt_bys +; + +355 + `ci_as +( +s +-> +ag_pkt + ! +NULL +); + +356 + `ci_as_gt +( +pkt_bys +, +fu_bufr + - +efix_bys +); + +358 if +ags + & +EF_EVENT_FLAG_CONT + ) { + +361 +pkt +-> +buf_n + = +fu_bufr +; + +362 + `oo_offbuf_ +(& +pkt +-> +buf +,kt-> +dma_t +,kt-> +buf_n +); + +363 + `CI_DEBUG +( +pkt +-> +y_n + = -1); + +365 +pkt +-> +ag_xt + = + `OO_PKT_P +( +s +-> +ag_pkt +); + +366 +s +-> +ag_pkt + = +pkt +; + +373 +pkt +-> +buf_n + = ( +s +-> +ag_bys + + +efix_bys +% +fu_bufr +; + +374 + `oo_offbuf_ +(& +pkt +-> +buf +,kt-> +dma_t +,kt-> +buf_n +); + +375 + `CI_DEBUG +( +pkt +-> +y_n + = -1); + +377 + `hd_rx_s_ϡ_ag +( +ni +, +s +, +pkt +); + +380 + } +} + +383  + $hd_rx_csum_bad +( +ci_tif +* +ni +,  +ci_tif_pl_e +* +ps +, + +384 +ci__pkt_fmt +* +pkt +,  +ame_n +) + +386 +ci_4_hdr + * + +; + +387  +_yn +; + +388  +_n +; + +390 + `ci_r_rx_vn +( +pkt +); + +395 + `ci_as_equ +( + `oo_h_ty_g +( +pkt +), +CI_ETHERTYPE_IP +); + +397 +pkt +-> +y_n + = +ame_n +; + +398 + `oo_offbuf_ +(& +pkt +-> +buf +, + `PKT_START +kt),kt-> +y_n +); + +399 if +pkt +-> +y_n + <= + +400 ( +ci_t_hdr ++ ( +ci_4_hdr ++ + `oo_h_hdr_size +( +pkt +) ) { + +401 + `CI_IPV4_STATS_INC_IN_HDR_ERRS +( +ni +); + +402 + `LOG_U +( + `log +( +FN_FMT + "BAD frame_len=%d", + +403 + `FN_PRI_ARGS +( +ni +), +pkt +-> +y_n +)); + +404  +dr +; + +407 + + = + `oo__hdr +( +pkt +); + +408 +_n + = + `CI_BSWAP_BE16 +( + +-> +_t_n_be16 +); + +409 +_yn + = +_n + - ( +ci_4_hdr +); + +410 if +pkt +-> +y_n + < + `oo_h_hdr_size +kt+ +_n + || + +411 +_yn + < ( +ci_t_hdr +) ) { + +412 + `CI_IPV4_STATS_INC_IN_HDR_ERRS +( +ni +); + +413 + `LOG_U +( + `log +( +FN_FMT + "BAD ip_len=%d frame_len=%d", + +414 + `FN_PRI_ARGS +( +ni +), +_n +, +pkt +-> +y_n +)); + +415  +dr +; + +418 if! + `ci__csum_cܻ +( + +, +pkt +-> +y_n + - + `oo_h_hdr_size +(pkt)) ) { + +419 + `CI_IPV4_STATS_INC_IN_HDR_ERRS +( +ni +); + +420 + `LOG_U +( + `log +( +FN_FMT + "IP BAD CHECKSUM", + `FN_PRI_ARGS +( +ni +))); + +421  +dr +; + +425 if + +-> +_oc + = +IPPROTO_TCP + ) { + +426 if + `ci_t_csum_cܻ +( +pkt +, +_yn +) ) { + +427 + `hd_rx_pkt +( +ni +, +ps +, +pkt +); + +431 + `LOG_U +( + `log +( +FN_FMT + "BAD TCP CHECKSUM %04x " +PKT_DBG_FMT +, + `FN_PRI_ARGS +( +ni +), + +432 ( + `PKT_TCP_HDR +( +pkt +)-> +t_check_be16 +, + +433 + `PKT_DBG_ARGS +( +pkt +))); + +434  +dr +; + +437 #i +CI_CFG_UDP + + +438 if + +-> +_oc + = +IPPROTO_UDP + ) { + +439 +ci_udp_hdr +* +udp + = + `PKT_UDP_HDR +( +pkt +); + +440 +pkt +-> +pf +. +udp +. +y_n + = + `CI_BSWAP_BE16 +(udp-> +udp_n_be16 +); + +441 if + `ci_udp_csum_cܻ +( +pkt +, +udp +) ) { + +442 + `hd_rx_pkt +( +ni +, +ps +, +pkt +); + +446 + `CI_UDP_STATS_INC_IN_ERRS +( +ni +); + +447 + `LOG_U +( + `log +( +FN_FMT + "BAD UDP CHECKSUM %04x", + `FN_PRI_ARGS +( +ni +), + +448 ( +udp +-> +udp_check_be16 +)); + +449  +dr +; + +454 +dr +: + +455 + `LOG_DU +( + `ci_hex_dump +( +ci_log_ +, + `PKT_START +( +pkt +), +ame_n +, 0)); + +456 + `LOG_NR +( + `log +( +LPF + "DROP")); + +457 + `LOG_DR +( + `ci_hex_dump +( +ci_log_ +, +pkt +, 40, 0)); + +459 + } +} + +462  + $hd_rx_no_desc_unc +( +ci_tif +* +ni +, + +463  +ci_tif_pl_e +* +ps +, + +464  +tf_i +, + +465  +oo_rx_e +* +s +, +ef_evt + +ev +) + +467 + `LOG_U +( + `log +( +LPF + "[%d] i%d RX_NO_DESC_TRUNC " +EF_EVENT_FMT +, + +468 + `NI_ID +( +ni +), +tf_i +, + `EF_EVENT_PRI_ARG +( +ev +))); + +470 if +s +-> +rx_pkt + ! +NULL + ) { + +471 + `ci_r_rx_vn +( +s +-> +rx_pkt +); + +472 + `hd_rx_pkt +( +ni +, +ps +, +s +-> +rx_pkt +); + +473 +s +-> +rx_pkt + = +NULL +; + +475 + `ci_as +( +s +-> +ag_pkt + ! +NULL +); + +476 if +s +-> +ag_pkt + ! +NULL + ) { + +477 + `ci_tif_pkt_a_rx_1f +( +ni +, +s +-> +ag_pkt +); + +478 +s +-> +ag_pkt + = +NULL +; + +480 + } +} + +483  + $hd_rx_disrd +( +ci_tif +* +ni +,  +ci_tif_pl_e +* +ps +, + +484  +tf_i +,  +oo_rx_e +* +s +, +ef_evt + +ev +) + +486  +disrd_ty + = + `EF_EVENT_RX_DISCARD_TYPE +( +ev +), +is_ag +; + +487 +ci__pkt_fmt +* +pkt +; + +488 +oo_pkt_p + + +; + +489  +hdd + = 0; + +490  +ame_n +; + +492 + `LOG_U +( + `log +( +LPF + "[%d] i%d RX_DISCARD %d " +EF_EVENT_FMT +, + +493 + `NI_ID +( +ni +), +tf_i +, + +494 ( +disrd_ty +, + `EF_EVENT_PRI_ARG +( +ev +))); + +496 if +s +-> +rx_pkt + ! +NULL + ) { + +497 + `ci_r_rx_vn +( +s +-> +rx_pkt +); + +498 + `hd_rx_pkt +( +ni +, +ps +, +s +-> +rx_pkt +); + +499 +s +-> +rx_pkt + = +NULL +; + +508 if( +is_ag + = ( +s +-> +ag_pkt + ! +NULL +)) ) { + +509 + `ci_tif_pkt_a_rx_1f +( +ni +, +s +-> +ag_pkt +); + +510 +s +-> +ag_pkt + = +NULL +; + +513 + `OO_PP_INIT +( +ni +, + +, + `EF_EVENT_RX_DISCARD_RQ_ID +( +ev +)); + +514 +pkt + = + `PKT_CHK +( +ni +, + +); + +516 +ame_n + = + `EF_EVENT_RX_DISCARD_BYTES +( +ev +) - + +517 +ni +-> +nic_hw +[ +tf_i +]. +vi +. +rx_efix_n +; + +519 if + `EF_EVENT_RX_DISCARD_TYPE +( +ev += +EF_EVENT_RX_DISCARD_CSUM_BAD + && + +520 ! +is_ag + ) + +521 +hdd + = + `hd_rx_csum_bad +( +ni +, +ps +, +pkt +, +ame_n +); + +523  +disrd_ty + ) { + +524  +EF_EVENT_RX_DISCARD_CSUM_BAD +: + +525 + `CITP_STATS_NETIF_INC +( +ni +, +rx_disrd_csum_bad +); + +527  +EF_EVENT_RX_DISCARD_MCAST_MISMATCH +: + +528 + `CITP_STATS_NETIF_INC +( +ni +, +rx_disrd_m_mismch +); + +530  +EF_EVENT_RX_DISCARD_CRC_BAD +: + +531 + `CITP_STATS_NETIF_INC +( +ni +, +rx_disrd_c_bad +); + +533  +EF_EVENT_RX_DISCARD_TRUNC +: + +534 + `CITP_STATS_NETIF_INC +( +ni +, +rx_disrd_unc +); + +536  +EF_EVENT_RX_DISCARD_RIGHTS +: + +537 + `CITP_STATS_NETIF_INC +( +ni +, +rx_disrd_rights +); + +539  +EF_EVENT_RX_DISCARD_OTHER +: + +540 + `CITP_STATS_NETIF_INC +( +ni +, +rx_disrd_h +); + +544 if! +hdd + ) { + +546 if( +disrd_ty + = +EF_EVENT_RX_DISCARD_CSUM_BAD + || + +547 +disrd_ty + = +EF_EVENT_RX_DISCARD_MCAST_MISMATCH + || + +548 +disrd_ty + = +EF_EVENT_RX_DISCARD_CRC_BAD + || + +549 +disrd_ty + = +EF_EVENT_RX_DISCARD_TRUNC + || + +550 +disrd_ty + = +EF_EVENT_RX_DISCARD_OTHER +) && + +551 + `oo_tdump_check +( +ni +, +pkt +,kt-> +tf_i +) ) { + +552 +pkt +-> +y_n + = +ame_n +; + +553 + `oo_tdump_dump_pkt +( +ni +, +pkt +); + +556 + `ci_tif_pkt_a_rx_1f +( +ni +, +pkt +); + +558 + } +} + +561  + $ci_sock_put___li +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +) + +563 + `ci_ni_di_move +( +ni +, & +s +-> +_lk +); + +564 + `ci_ni_di_put +( +ni +, &ni-> +e +-> +_li +, & +s +-> +_lk +); + +565 +s +-> +b +. +sb_ags + &~ +CI_SB_FLAG_RX_DELIVERED +; + +566 + } +} + +569  + $oss_po_pl_li +( +ci_tif +* +ni +) + +571 +ci_ni_di_lk +* +k +; + +572  +i +, +ed_wake + = 0; + +573 +cp_waab +* +sb +; + +574  +lis_ed_wake + = 0; + +576 ( +i +; + +578  +i + = 0, +k + = + `ci_ni_di_t +( +ni +, &ni-> +e +-> +po_pl_li +); + +579 +k + ! + `ci_ni_di_d +( +ni +, &ni-> +e +-> +po_pl_li +); ) { + +581 #ifde +__KERNEL__ + + +582 if( + `CI_UNLIKELY + +i +++ > +ni +-> +_tbl_n + )) { + +583 + `ci_tif_r_deed +( +ni +, +CI_NETIF_ERROR_POST_POLL_LIST +, +__FUNCTION__ +); + +588 +sb + = + `CI_CONTAINER +( +cp_waab +, +po_pl_lk +, +k +); + +589 +k + = ( +ci_ni_di_lk +* + `CI_NETIF_PTR +( +ni +,nk-> +xt +); + +591 if +sb +-> +sb_ags + & +CI_SB_FLAG_TCP_POST_POLL + ) + +592 + `ci_t_rx_po_pl +( +ni +, + `CI_CONTAINER +( +ci_t_e +, +s +. +b +, +sb +)); + +593 if +sb +-> +sb_ags + & +CI_SB_FLAG_RX_DELIVERED + ) + +594 + `ci_sock_put___li +( +ni +, + `CI_CONTAINER +( +ci_sock_cmn +, +b +, +sb +)); + +596 if +sb +-> +sb_ags + ) { + +597 if +sb +-> +sb_ags + & +CI_SB_FLAG_WAKE_RX + ) + +598 ++ +sb +-> +p_q +. +rw +. +rx +; + +599 if +sb +-> +sb_ags + & +CI_SB_FLAG_WAKE_TX + ) + +600 ++ +sb +-> +p_q +. +rw +. +tx +; + +601 + `ci_mb +(); + +603 +lis_ed_wake + |1 << +sb +-> +ady_li_id +; + +604 if! ( +sb +-> +sb_ags + & sb-> +wake_que +) ) { + +605 +sb +-> +sb_ags + = 0; + +608 #ifde +__KERNEL__ + + +611 if!(( +ni +-> +ags + & +CI_NETIF_FLAG_IN_DL_CONTEXT +) && + +612 + `oo_avoid_wakeup_om_dl +()) ) { + +613 + `cp_waab_wakeup +( +ni +, +sb +); + +627 +ed_wake + = 1; + +632 + `ci_ni_di_move_ +( +ni +, & +sb +-> +po_pl_lk +); + +635 + `CHECK_NI +( +ni +); + +637 #ide +__KERNEL__ + + +642 if +ed_wake + == 0 ) { + +643  +i + = 1; i < +CI_CFG_N_READY_LISTS +; i++ ) { + +644 if( +lis_ed_wake + & (1 << +i +)) && + +645 ( +ni +-> +e +-> +ady_li_ags +[ +i +] & +CI_NI_READY_LIST_FLAG_WAKE +) ) { + +646 +ed_wake + = 1; + +653 if +ed_wake + ) + +654 + `ef_lock_hd_t_ag +(& +ni +-> +e +-> +lock +, +CI_EPLOCK_NETIF_NEED_WAKE +); + +657 + `ci_as_equ +( +lis_ed_wake + & ~((1 << ( +CI_CFG_N_READY_LISTS + + 1))-1), 0); + +659 #ifde +__KERNEL__ + + +664  +i + = 1; i < +CI_CFG_N_READY_LISTS +; i++ ) + +665 if( +lis_ed_wake + & (1 << +i +)) && + +666 ( +ni +-> +e +-> +ady_li_ags +[ +i +] & +CI_NI_READY_LIST_FLAG_WAKE +) ) + +667 + `eb_t_hr_ady_li_wakeup +( + `tif2t_hr_sour +( +ni +), +i +); + +669 + } +} + +672 #i +CI_CFG_UDP + + +674 #ifde +_WIN32 + + +675  + #UDP_CAN_FREE +( +us +((us)-> +tx_cou + == 0 && \ + +676 + `ci__queue_is_emy +(&( +us +)-> +async_tx_q +)) + + ) + +678  + #UDP_CAN_FREE +( +us +((us)-> +tx_cou + =0) + + ) + +681  + #CI_NETIF_TX_VI +( +ni +, +nic_i +, +b +(&i)-> +nic_hw +[nic_i]. +vi +) + + ) + +682  + #CI_NETIF_RX_VI +( +ni +, +nic_i +, +b +(&i)-> +nic_hw +[nic_i]. +vi +) + + ) + +685  + $ci_tif_tx_pkt_come_udp +( +ci_tif +* +tif +, + +686  +ci_tif_pl_e +* +ps +, + +687 +ci__pkt_fmt +* +pkt +) + +689 +ci_udp_e +* +us +; + +690 +oo_pkt_p + +ag_xt +; + +691  +n_bufrs + = +pkt +->n_buffers; + +693 + `ci_as +( + `oo__hdr +( +pkt +)-> +_oc + = +IPPROTO_UDP +); + +695 +us + = + `SP_TO_UDP +( +tif +, +pkt +-> +pf +. +udp +. +tx_sock_id +); + +697 + `ci_udp_dec_tx_cou +( +us +, +pkt +); + +699 if + `ci_udp_tx_advti_a +( +us +) ) { + +700 if! ( +us +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_ORPHAN +) ) { + +703 + `ci_udp_wake_possibly_n__pl +( +tif +, +us +, +CI_SB_FLAG_WAKE_TX +); + +704 + `ci_tif_put__po_pl +( +tif +, & +us +-> +s +. +b +); + +706 if + `UDP_CAN_FREE +( +us +) ) { + +707 + `ci_ni_di_move_ +( +tif +, & +us +-> +s +. +b +. +po_pl_lk +); + +708 + `ci_udp_e_ +( +tif +, +us +); + +715 if +pkt +-> +ags + & +CI_PKT_FLAG_TX_TIMESTAMPED + && + +716 + `ci_udp_timeamp_q_queue +( +tif +, +us +, +pkt +) == 0 ) + +721 +ag_xt + = +pkt +->frag_next; + +723 if! + `ci_tif_pkt_a__pl +( +tif +, +pkt +, +ps +) ) { + +730 if + `OO_PP_IS_NULL +( +ag_xt +) ) + +732 +pkt + = + `PKT_CHK +( +tif +, +ag_xt +); + +734 if +n_bufrs + == 1 ) + +735 +n_bufrs + = +pkt +->n_buffers; + +737 +n_bufrs +--; + +739 + } +} + +744 +ci_le +  + $__ci_tif_tx_pkt_come +( +ci_tif +* +ni +, + +745  +ci_tif_pl_e +* +ps +, + +746 +ci__pkt_fmt +* +pkt +, +ef_evt +* +ev +) + +748 +ci_tif_e_nic_t +* +nic + = & +ni +-> +e +->nic[ +pkt +-> +tf_i +]; + +750 + `ci_as +( +pkt +-> +ags + & +CI_PKT_FLAG_TX_PENDING +); + +751 +nic +-> +tx_bys_moved + + + `TX_PKT_LEN +( +pkt +); + +752 + `ci_as +((( +nic +-> +tx_bys_added + -ic-> +tx_bys_moved +) >=0); + +753 #i +CI_CFG_PIO + + +754 if +pkt +-> +pio_addr + >= 0 ) { + +755 + `ci_pio_buddy_ +( +ni +, & +nic +-> +pio_buddy +, +pkt +-> +pio_addr +,kt-> +pio_d +); + +756 +pkt +-> +pio_addr + = -1; + +759 if +pkt +-> +ags + & +CI_PKT_FLAG_TX_TIMESTAMPED + ) { + +760 if +ev + ! +NULL + && + `EF_EVENT_TYPE +(*ev= +EF_EVENT_TYPE_TX_WITH_TIMESTAMP + ) { + +761  +t_tsf + = (( + `NI_OPTS +( +ni +). +timeampg_ptg +) & + +762 +CITP_TIMESTAMPING_RECORDING_FLAG_CHECK_SYNC +) ? + +763 +EF_VI_SYNC_FLAG_CLOCK_IN_SYNC + : + +764 +EF_VI_SYNC_FLAG_CLOCK_SET +; + +765  +pkt_tsf + = + `EF_EVENT_TX_WITH_TIMESTAMP_SYNC_FLAGS +(* +ev +); + +767 +pkt +-> +tx_hw_amp +. +tv_c + = + `EF_EVENT_TX_WITH_TIMESTAMP_SEC +(* +ev +); + +768 +pkt +-> +tx_hw_amp +. +tv_nc + = + +769 ( + `EF_EVENT_TX_WITH_TIMESTAMP_NSEC +(* +ev +) & + +770 (~ +CI_IP_PKT_HW_STAMP_FLAG_IN_SYNC +)) | + +771 (( +pkt_tsf + & +t_tsf +) ? + +772 +CI_IP_PKT_HW_STAMP_FLAG_IN_SYNC + : 0); + +776 if + `CI_NETIF_TX_VI +( +ni +, +pkt +-> +tf_i +, +ev +-> +tx_timeamp +. +q_id +)-> +vi_ags + & + +777 +EF_VI_TX_TIMESTAMPS + ) { + +778 + `ci_log +("ERROR: TXimestampequested, buton-timestamped " + +781 +pkt +-> +ags + &~ +CI_PKT_FLAG_TX_TIMESTAMPED +; + +787 +pkt +-> +ags + &=~ +CI_PKT_FLAG_TX_PENDING +; + +788 #i +CI_CFG_UDP + + +789 if +pkt +-> +ags + & +CI_PKT_FLAG_UDP + ) + +790 + `ci_tif_tx_pkt_come_udp +( +ni +, +ps +, +pkt +); + +793 + `ci_tif_pkt_a +( +ni +, +pkt +); + +795 + } +} + +798  + $ci_tif_tx_pkt_come +( +ci_tif +* +ni +,  +ci_tif_pl_e +* +ps +, + +799 +ci__pkt_fmt +* +pkt +) + +801 + `__ci_tif_tx_pkt_come +( +ni +, +ps +, +pkt +, +NULL +); + +802 + } +} + +806  + $ci_tif_pl_evq +( +ci_tif +* +ni +,  +ci_tif_pl_e +* +ps +, + +807  +tf_i +) + +809  +oo_rx_e + +s +; + +810 +ef_vi +* +evq + = & +ni +-> +nic_hw +[ +tf_i +]. +vi +; + +811  +tٮ_evs + = 0; + +812 +ci__pkt_fmt +* +pkt +; + +813 +ef_evt + * +ev + = +ni +-> +evts +; + +814  +i +, +n_evs +; + +815 +oo_pkt_p + + +; + +817 +s +. +ag_pkt + = +NULL +; + +818 +s +. +ag_bys + = 0; + +820 if + `OO_PP_NOT_NULL +( +ni +-> +e +-> +nic +[ +tf_i +]. +rx_ags +) ) { + +821 +pkt + = + `PKT_CHK +( +ni +,i-> +e +-> +nic +[ +tf_i +]. +rx_ags +); + +822 +ni +-> +e +-> +nic +[ +tf_i +]. +rx_ags + = +OO_PP_NULL +; + +823 +s +. +ag_pkt + = +pkt +; + +824 +s +. +ag_bys + = +pkt +-> +y_n +; + +825 + `CI_DEBUG +( +pkt +-> +y_n + = -1); + +829 +n_evs + = + `ef_evtq_pl +( +evq +, +ev +, ( +ni +-> +evts +) / (ev[0])); + +830 if +n_evs + == 0 ) + +833 +s +. +rx_pkt + = +NULL +; + +834  +i + = 0; i < +n_evs +; ++i ) { + +836 if + `EF_EVENT_TYPE +( +ev +[ +i +]= +EF_EVENT_TYPE_RX + ) { + +837 + `CITP_STATS_NETIF_INC +( +ni +, +rx_evs +); + +838 + `OO_PP_INIT +( +ni +, + +, + `EF_EVENT_RX_RQ_ID +( +ev +[ +i +])); + +839 +pkt + = + `PKT_CHK +( +ni +, + +); + +840 + `ci_etch +( +pkt +-> +dma_t +); + +841 + `ci_etch +( +pkt +); + +842 + `ci_as_equ +( +pkt +-> +tf_i +, intf_i); + +843 if +s +. +rx_pkt + ! +NULL + ) { + +844 + `ci_r_rx_vn +( +s +. +rx_pkt +); + +845 + `hd_rx_pkt +( +ni +, +ps +, +s +. +rx_pkt +); + +847 if( +ev +[ +i +]. +rx +. +ags + & ( +EF_EVENT_FLAG_SOP + | +EF_EVENT_FLAG_CONT +)) + +848 = +EF_EVENT_FLAG_SOP + ) { + +850 +pkt +-> +y_n + = + `EF_EVENT_RX_BYTES +( +ev +[ +i +]- +evq +-> +rx_efix_n +; + +851 + `oo_offbuf_ +(& +pkt +-> +buf +, + `PKT_START +kt),kt-> +y_n +); + +852 +s +. +rx_pkt + = +pkt +; + +855 + `hd_rx_s +( +ni +, & +s +, +pkt +, + +856 + `EF_EVENT_RX_BYTES +( +ev +[ +i +]- +evq +-> +rx_efix_n +, + +857 +ev +[ +i +]. +rx +. +ags +); + +861 if( + `CI_LIKELY + + `EF_EVENT_TYPE +( +ev +[ +i +]= +EF_EVENT_TYPE_TX + )) { + +862 +ef_que_id + * +ids + = +ni +-> +tx_evts +; + +863  +n_ids +, +j +; + +864 +ef_vi +* +vi + = + `CI_NETIF_TX_VI +( +ni +, +tf_i +, +ev +[ +i +]. +tx +. +q_id +); + +865 + `CITP_STATS_NETIF_INC +( +ni +, +tx_evs +); + +866 +n_ids + = + `ef_vi_sm_unbund +( +vi +, & +ev +[ +i +], +ids +); + +867 + `ci_as_ge +( +n_ids +, 0); + +868 + `ci_as_ +( +n_ids +, ( +ni +-> +tx_evts +/ ( +ids +[0])); + +869  +j + = 0; j < +n_ids +; ++j ) { + +870 + `OO_PP_INIT +( +ni +, + +, +ids +[ +j +]); + +871 +pkt + = + `PKT_CHK +( +ni +, + +); + +872 ++ +ni +-> +e +-> +nic +[ +tf_i +]. +tx_dmaq_de_q +; + +873 + `__ci_tif_tx_pkt_come +( +ni +, +ps +, +pkt +, & +ev +[ +i +]); + +877 if + `EF_EVENT_TYPE +( +ev +[ +i +]= +EF_EVENT_TYPE_RX_MULTI + ) { + +878 +ef_que_id + * +ids + = +ni +-> +rx_evts +; + +879  +n_ids +, +j +; + +880 +ut16_t + +n +; + +881 +ef_vi +* +vi + = + `CI_NETIF_RX_VI +( +ni +, +tf_i +, +ev +[ +i +]. +rx +. +q_id +); + +882 + `CITP_STATS_NETIF_INC +( +ni +, +rx_evs +); + +883 +n_ids + = + `ef_vi_ive_unbund +( +vi +, & +ev +[ +i +], +ids +); + +884 + `ci_as_ge +( +n_ids +, 0); + +885 + `ci_as_ +( +n_ids +, ( +ni +-> +rx_evts +/ ( +ids +[0])); + +886  +j + = 0; j < +n_ids +; ++j ) { + +887 + `OO_PP_INIT +( +ni +, + +, +ids +[ +j +]); + +888 +pkt + = + `PKT_CHK +( +ni +, + +); + +889 + `ci_etch +( +pkt +-> +dma_t +); + +890 + `ci_etch +( +pkt +); + +891 + `ci_as_equ +( +pkt +-> +tf_i +, intf_i); + +892 if +s +. +rx_pkt + ! +NULL + ) { + +893 + `ci_r_rx_vn +( +s +. +rx_pkt +); + +894 + `hd_rx_pkt +( +ni +, +ps +, +s +. +rx_pkt +); + +896 + `ef_vi_ive_g_bys +( +vi +, +pkt +-> +dma_t +, & +n +); + +897 if( +ev +[ +i +]. +rx_mui +. +ags + & ( +EF_EVENT_FLAG_SOP + | +EF_EVENT_FLAG_CONT +)) + +898 = +EF_EVENT_FLAG_SOP + ) { + +900 +pkt +-> +y_n + = +n +; + +901 + `oo_offbuf_ +(& +pkt +-> +buf +, + `PKT_START +kt),kt-> +y_n +); + +902 +s +. +rx_pkt + = +pkt +; + +905 + `hd_rx_s_mge +( +ni +, & +s +, +pkt +, +evq +-> +rx_efix_n +, +n +, + +906 +ev +[ +i +]. +rx_mui +. +ags +); + +911 if + `EF_EVENT_TYPE +( +ev +[ +i +]= +EF_EVENT_TYPE_TX_WITH_TIMESTAMP + ) { + +912 + `CITP_STATS_NETIF_INC +( +ni +, +tx_evs +); + +913 + `OO_PP_INIT +( +ni +, + +, +ev +[ +i +]. +tx_timeamp +. +rq_id +); + +914 +pkt + = + `PKT_CHK +( +ni +, + +); + +915 ++ +ni +-> +e +-> +nic +[ +tf_i +]. +tx_dmaq_de_q +; + +916 + `__ci_tif_tx_pkt_come +( +ni +, +ps +, +pkt +, & +ev +[ +i +]); + +919 if + `EF_EVENT_TYPE +( +ev +[ +i +]= +EF_EVENT_TYPE_RX_NO_DESC_TRUNC + ) { + +920 + `hd_rx_no_desc_unc +( +ni +, +ps +, +tf_i +, & +s +, +ev +[ +i +]); + +923 if + `EF_EVENT_TYPE +( +ev +[ +i +]= +EF_EVENT_TYPE_RX_DISCARD + ) { + +924 + `hd_rx_disrd +( +ni +, +ps +, +tf_i +, & +s +, +ev +[ +i +]); + +927 if + `EF_EVENT_TYPE +( +ev +[ +i +]= +EF_EVENT_TYPE_TX_ERROR + ) { + +928 + `LOG_U +( + `log +( +LPF + "[%d] i%d TX_ERROR %d " +EF_EVENT_FMT +, + +929 + `NI_ID +( +ni +), +tf_i +, + +930 ( + `EF_EVENT_TX_ERROR_TYPE +( +ev +[ +i +]), + +931 + `EF_EVENT_PRI_ARG +( +ev +[ +i +]))); + +932 + `CITP_STATS_NETIF_INC +( +ni +, +tx_r_evts +); + +935 if + `EF_EVENT_TYPE +( +ev +[ +i +]= +EF_EVENT_TYPE_OFLOW + ) { + +936 + `LOG_E +( + `log +( +LPF + "***** EVENT QUEUE OVERFLOW *****")); + +943 + `ci_as + + `EF_EVENT_TYPE +( +ev +[ +i +]! +EF_EVENT_TYPE_RX + ); + +944 + `LOG_E +( + `log +( +LPF + "***** UNKNOWN EVENT " +EF_EVENT_FMT +" (abstractedype:%d)" + +946 + `EF_EVENT_PRI_ARG +( +ev +[ +i +]), + `EF_EVENT_TYPE +(ev[i]))); + +950 #ide +NDEBUG + + +952 +ef_vi +* +vi + = + `CI_NETIF_TX_VI +( +ni +, +tf_i +, +ev +[ +i +]. +tx_timeamp +. +q_id +); + +953 + `ci_as_equiv +(( + `ef_vi_sm_fl_v +( +vi +) == 0 && + +954 +ni +-> +e +-> +nic +[ +tf_i +]. +dmaq +. +num + == 0), + +955 ( +ni +-> +e +-> +nic +[ +tf_i +]. +tx_dmaq__q + == + +956 +ni +-> +e +-> +nic +[ +tf_i +]. +tx_dmaq_de_q +)); + +960 if +s +. +rx_pkt + ! +NULL + ) { + +961 + `ci_r_rx_vn +( +s +. +rx_pkt +); + +962 + `hd_rx_pkt +( +ni +, +ps +, +s +. +rx_pkt +); + +965 +tٮ_evs + + +n_evs +; + +966 }  +tٮ_evs + < + `NI_OPTS +( +ni +). +evs_r_pl + ); + +968 if +s +. +ag_pkt + ! +NULL + ) { + +969 +s +. +ag_pkt +-> +y_n + = s. +ag_bys +; + +970 +ni +-> +e +-> +nic +[ +tf_i +]. +rx_ags + = + `OO_PKT_P +( +s +. +ag_pkt +); + +973  +tٮ_evs +; + +974 + } +} + +977  + $ci_tif_tx_ogss +( +ci_tif +* +ni +,  +tf_i +) + +979 +ci_tif_e_nic_t +* +nic + = & +ni +-> +e +->nic[ +tf_i +]; + +980 +ci_t_e +* +ts +; + +982 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +983 + `ci_as +( + `ci_ni_di_n_emy +( +ni +, & +nic +-> +tx_ady_li +)); + +985 if +nic +-> +tx_bys_added + -ic-> +tx_bys_moved + > + `NI_OPTS +( +ni +). +txq_t + ) + +989 +ts + = + `CI_CONTAINER +( +ci_t_e +, +tx_ady_lk +, + +990 + `ci_ni_di_hd +( +ni +, & +nic +-> +tx_ady_li +)); + +991 + `LOG_TT +( + `ci_log +( +FNT_FMT +, + `FNT_PRI_ARGS +( +ni +, +ts +))); + +992 + `ci_t_tx_adv +( +ts +, +ni +); + +993 if + `ci_ni_di_is_emy +( +ni +, & +nic +-> +tx_ady_li +) ) + +995 }  +nic +-> +tx_bys_added + -ic-> +tx_bys_moved + + +996 < + `NI_OPTS +( +ni +). +txq_lim + ); + +997 + } +} + +1000  + $ci_tif_pl_tf +( +ci_tif +* +ni +,  +tf_i +,  +max_evs +) + +1002  +ci_tif_pl_e + +ps +; + +1003  +tٮ_evs + = 0; + +1004  +rc +; + +1006 #i + `defed +( +__KERNEL__ +|| ! defed( +NDEBUG +) + +1007 if! + `ci_tif_may_pl__kl +( +ni +, +tf_i +) ) + +1011 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +1012 +ps +. +tx_pkt__li_ + = &ps. +tx_pkt__li +; + +1013 +ps +. +tx_pkt__li_n + = 0; + +1016 +rc + = + `ci_tif_pl_evq +( +ni +, & +ps +, +tf_i +); + +1017 if +rc + > 0 ) { + +1018 +tٮ_evs + + +rc +; + +1019 + `oss_po_pl_li +( +ni +); + +1023 }  +tٮ_evs + < +max_evs + ); + +1025 if +ps +. +tx_pkt__li_n + ) + +1026 + `ci_tif_pl__pkts +( +ni +, & +ps +); + +1031 if + `ci_tif_rx_vi_a +( +ni +, + `ci_tif_rx_vi +i, +tf_i +)) + +1032 > +CI_CFG_RX_DESC_BATCH + ) + +1033 + `ci_tif_rx_po +( +ni +, +tf_i +); + +1035 if + `ci_ni_di_n_emy +( +ni +, &ni-> +e +-> +nic +[ +tf_i +]. +tx_ady_li +) ) + +1036 + `ci_tif_tx_ogss +( +ni +, +tf_i +); + +1037 if + `ci_tif_dmaq_n_emy +( +ni +, +tf_i +) ) + +1038 + `ci_tif_dmaq_shove1 +( +ni +, +tf_i +); + +1040 #ifde +__KERNEL__ + + +1043 if + `tif2t_hr_sour +( +ni +)-> +k_f_cou + & +TCP_HELPER_K_RC_DEAD + ) { + +1044 if +ni +-> +e +-> +nic +[ +tf_i +]. +tx_dmaq__q + == + +1045 +ni +-> +e +-> +nic +[ +tf_i +]. +tx_dmaq_de_q + ) + +1046 + `come +(& + `tif2t_hr_sour +( +ni +)-> +come +); + +1048 + `t_hr_que_wakeup_nic +( + `tif2t_hr_sour +( +ni +), +tf_i +); + +1052  +tٮ_evs +; + +1053 + } +} + +1056  + $ci_tif_pl_tf_ +( +ci_tif +* +ni +,  +tf_i +, +ci_ut64 + +now_c +) + +1058  +ci_tif_pl_e + +ps +; + +1059  +rc +; + +1061 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +1062 + `ci_as +( +ni +-> +e +-> +_pl + == 0); + +1064 if( + `CI_LIKELY + +ni +-> +e +-> +pl_wk_outdg + == 0 )) { + +1065 + `ci__time_upde +( + `IPTIMER_STATE +( +ni +), +now_c +); + +1066 +ps +. +tx_pkt__li_ + = &ps. +tx_pkt__li +; + +1067 +ps +. +tx_pkt__li_n + = 0; + +1068 ++ +ni +-> +e +-> +_pl +; + +1069 if( +rc + = + `ci_tif_pl_evq +( +ni +, & +ps +, +tf_i +)) ) { + +1070 + `oss_po_pl_li +( +ni +); + +1071 +ni +-> +e +-> +pl_wk_outdg + = 1; + +1073 -- +ni +-> +e +-> +_pl +; + +1074 if +ps +. +tx_pkt__li_n + ) + +1075 + `ci_tif_pl__pkts +( +ni +, & +ps +); + +1076  +rc +; + +1082  + `ci_tif_pl_n +( +ni +, + `NI_OPTS +i). +evs_r_pl +); + +1083 + } +} + +1086  + $ci_tif_loback_pkts_nd +( +ci_tif +* +ni +) + +1088 +ci__pkt_fmt +* +pkt +; + +1089 +oo_pkt_p + +nd_li + = +OO_PP_ID_NULL +; + +1090 +ci_4_hdr +* + +; + +1091 #ifde +__KERNEL__ + + +1092  +i + = 0; + +1095 + `CI_BUILD_ASSERT +( + +1096 + `CI_MEMBER_OFFSET +( +ci__pkt_fmt_efix +, +t_tx +. +lo +. +rx_sock +) == + +1097 + `CI_MEMBER_OFFSET +( +ci__pkt_fmt_efix +, +t_rx +. +lo +. +rx_sock +) ); + +1098 + `CI_BUILD_ASSERT +( + +1099 + `CI_MEMBER_OFFSET +( +ci__pkt_fmt_efix +, +t_tx +. +lo +. +tx_sock +) == + +1100 + `CI_MEMBER_OFFSET +( +ci__pkt_fmt_efix +, +t_rx +. +lo +. +tx_sock +) ); + +1102  + `OO_PP_NOT_NULL +( +ni +-> +e +-> +lopkts +) ) { + +1103 #ifde +__KERNEL__ + + +1104 if( + `CI_UNLIKELY + +i +++ > +ni +-> +pkt_ts_n + * +PKTS_PER_SET + )) { + +1105 + `ci_tif_r_deed +( +ni +, +CI_NETIF_ERROR_LOOP_PKTS_LIST +, +__FUNCTION__ +); + +1109 +pkt + = + `PKT_CHK +( +ni +,i-> +e +-> +lopkts +); + +1110 +ni +-> +e +-> +lopkts + = +pkt +-> +xt +; + +1111 +pkt +-> +xt + = +nd_li +; + +1112 +nd_li + = + `OO_PKT_ID +( +pkt +); + +1115  + `OO_PP_NOT_NULL +( +nd_li +) ) { + +1116 +pkt + = + `PKT_CHK +( +ni +, +nd_li +); + +1117 +nd_li + = +pkt +-> +xt +; + +1118 +ni +-> +e +-> +n_lopkts +--; + +1120 + `LOG_NR +( + `ci_log +( +N_FMT + "loback RXk%d: %d->%d", + `N_PRI_ARGS +( +ni +), + +1121 + `OO_PKT_FMT +( +pkt +), + +1122 + `OO_SP_FMT +( +pkt +-> +pf +. +t_tx +. +lo +. +tx_sock +), + +1123 + `OO_SP_FMT +( +pkt +-> +pf +. +t_tx +. +lo +. +rx_sock +))); + +1125 + + = + `oo__hdr +( +pkt +); + +1126 + `oo_offbuf_ +(& +pkt +-> +buf +, + `PKT_START +kt),kt-> +buf_n +); + +1127 +pkt +-> +tf_i + = +OO_INTF_I_LOOPBACK +; + +1128 +pkt +-> +ags + & +CI_PKT_FLAG_NONB_POOL +; + +1129 if + `oo_tdump_check +( +ni +, +pkt +, +OO_INTF_I_LOOPBACK +) ) + +1130 + `oo_tdump_dump_pkt +( +ni +, +pkt +); + +1131 +pkt +-> +xt + = +OO_PP_NULL +; + +1132 + `ci_t_hd_rx +( +ni +, +NULL +, +pkt +, ( +ci_t_hdr +*)( + + + 1), + +1133 + `CI_BSWAP_BE16 +( + +-> +_t_n_be16 +- ( +ci_4_hdr +)); + +1135 + } +} + +1138  + $ci_tif_pl_n +( +ci_tif +* +tif +,  +max_evs +) + +1140  +tf_i +, +n_evs_hdd + = 0; + +1142 #i + `defed +( +__KERNEL__ +|| ! defed( +NDEBUG +) + +1143 if +tif +-> +r_ags + ) + +1147 + `ci_as +( + `ci_tif_is_locked +( +tif +)); + +1148 + `CHECK_NI +( +tif +); + +1150 #ifde +__KERNEL__ + + +1151 + `CITP_STATS_NETIF_INC +( +tif +, +k_pls +); + +1153 + `CITP_STATS_NETIF_INC +( +tif +, +u_pls +); + +1156 + `ci__time_sync +( + `IPTIMER_STATE +( +tif +)); + +1158 #i +CI_CFG_HW_TIMER + + +1159 if + `ci_tif_ed_tim_ime +( +tif +, + `IPTIMER_STATE +ґif)-> +c +) ) { + +1160 if + `NI_OPTS +( +tif +). +tim_uc + != 0 ) + +1161 + `OO_STACK_FOR_EACH_INTF_I +( +tif +, +tf_i +) + +1162 + `ef_evtq_tim_ime +(& +tif +-> +nic_hw +[ +tf_i +]. +vi +, + +1163 + `NI_OPTS +( +tif +). +tim_uc +); + +1164 +tif +-> +e +-> +evq_ϡ_ime + = + `IPTIMER_STATE +ґif)-> +c +; + +1168 + `ci_as +( +tif +-> +e +-> +_pl + == 0); + +1169 ++ +tif +-> +e +-> +_pl +; + +1170 + `OO_STACK_FOR_EACH_INTF_I +( +tif +, +tf_i +) { + +1171  +n + = + `ci_tif_pl_tf +( +tif +, +tf_i +, +max_evs +); + +1172 + `ci_as +( +n + >= 0); + +1173 +n_evs_hdd + + +n +; + +1176  + `OO_PP_NOT_NULL +( +tif +-> +e +-> +lopkts +) ) { + +1177 + `ci_tif_loback_pkts_nd +( +tif +); + +1178 + `oss_po_pl_li +( +tif +); + +1180 + `ci_as_equ +( +tif +-> +e +-> +n_lopkts +, 0); + +1181 -- +tif +-> +e +-> +_pl +; + +1185 + `ci__tim_pl +( +tif +); + +1188 + `ci_as +( + `OO_PP_IS_NULL +( +tif +-> +e +-> +lopkts +)); + +1190 if( + `CI_LIKELY + +tif +-> +e +-> +rxq_low + <= 1 )) + +1191 +tif +-> +e +-> +mem_essu + &~ +OO_MEM_PRESSURE_LOW +; + +1193 +tif +-> +e +-> +mem_essu + | +OO_MEM_PRESSURE_LOW +; + +1196 if( + `CI_UNLIKELY + +tif +-> +e +-> +mem_essu + & +OO_MEM_PRESSURE_CRITICAL + )) + +1197 if + `ci_tif_mem_essu_y_ex +( +tif +) ) + +1198 + `CITP_STATS_NETIF_INC +( +tif +, +memy_essu_ex_pl +); + +1200 +tif +-> +e +-> +pl_wk_outdg + = 0; + +1203  +n_evs_hdd +; + +1204 + } +} + + @netif_init.c + +10  + #_GNU_SOURCE + + + ) + +12  + ~"_.h +" + +13  + ~"uk_tf_v.h +" + +14  + ~ + +15  + ~ + +16  + ~ + +18 #ide +__KERNEL__ + + +19  + ~ + +20  + ~"_i_vsi.h +" + +21  + ~ + +22  + ~ + +23 #i +CI_CFG_PKTS_AS_HUGE_PAGES + + +24  + ~ + +26 #ifde +ONLOAD_OFE + + +27  + ~"o/ld.h +" + +31 #ifde +NDEBUG + + +32  + #IS_DEBUG + 0 + + ) + +34  + #IS_DEBUG + 1 + + ) + +38 #ifde +__KERNEL__ + + +39 cڡ * + goo_uk_tf_v + = +OO_UK_INTF_VER +; + +53 #ifde +__KERNEL__ + + +55  + #as_zo +( +x + + `ci_as_equ +((x), 0) + + ) + +57  + $ci_tif_e_ +( +ci_tif +* +ni +,  +u_khz +, cڡ * +me +) + +59 +ci_tif_e_nic_t +* + +; + +60 +ci_tif_e +* +nis + = +ni +-> +e +; + +61  +nic_i +; + +62  +i +; + +64 +nis +-> +ts + = +ni +->opts; + +67 + `OO_STACK_FOR_EACH_INTF_I +( +ni +, +nic_i +) { + +68 + + = & +nis +-> +nic +[ +nic_i +]; + +69 + `oo_pktq_ +(& + +-> +dmaq +); + +70 + `as_zo +( + +-> +tx_bys_added +); + +71 + `as_zo +( + +-> +tx_bys_moved +); + +72 + `as_zo +( + +-> +tx_dmaq__q +); + +73 + `as_zo +( + +-> +tx_dmaq__q_ϡ_pl +); + +74 + `as_zo +( + +-> +tx_dmaq_de_q +); + +75 + `ci_ni_di_ +( +ni +, & + +-> +tx_ady_li +, + +76 + `oo_r_to_ +( +ni +, & + +-> +tx_ady_li +), "txrd"); + +77 + +-> +rx_ags + = +OO_PP_NULL +; + +81 + `as_zo +( +ni +-> +cks +-> +n_ +); + +82 + `as_zo +( +nis +-> +n_rx_pkts +); + +83 + `as_zo +( +nis +-> +rxq_low +); + +84 + `as_zo +( +nis +-> +mem_essu +); + +85 +nis +-> +mem_essu_pkt_po + = +OO_PP_NULL +; + +86 + `as_zo +( +nis +-> +mem_essu_pkt_po_n +); + +87 +nis +-> +lopkts + = +OO_PP_NULL +; + +88 +nis +-> +n_lopkts + = 0; + +91 + `as_zo +( +nis +-> +n_async_pkts +); + +92 +nis +-> +nb_pkt_po + = +CI_ILL_END +; + +102 + `ci_tif_fr_ +( +ni +-> +fr_b +, + +103 + `ci_log2_ +( + `NI_OPTS +( +ni +). +max__bufs +) + 1); + +105 + `ci_ni_di_ +( +ni +, & +nis +-> +timeout_q +[ +OO_TIMEOUT_Q_TIMEWAIT +], + +106 + `oo_r_to_ +( +ni +, & +nis +-> +timeout_q +[ +OO_TIMEOUT_Q_TIMEWAIT +]), + +108 + `ci_ni_di_ +( +ni +, & +nis +-> +timeout_q +[ +OO_TIMEOUT_Q_FINWAIT +], + +109 + `oo_r_to_ +( +ni +, & +nis +-> +timeout_q +[ +OO_TIMEOUT_Q_FINWAIT +]), + +111 + `ci__tim_ +( +ni +, & +nis +-> +timeout_tid +, + +112 + `oo_r_to_ +( +ni +, & +nis +-> +timeout_tid +), + +115 +nis +-> +timeout_tid +. +m1 + = +OO_SP_NULL +; + +116 +nis +-> +timeout_tid +. + + = +CI_IP_TIMER_NETIF_TIMEOUT +; + +118 #i +CI_CFG_SUPPORT_STATS_COLLECTION + + +119 + `ci__tim_ +( +ni +, & +nis +-> +s_tid +, + +120 + `oo_r_to_ +( +ni +, & +nis +-> +s_tid +), + +122 +nis +-> +s_tid +. +m1 + = +OO_SP_NULL +; + +123 +nis +-> +s_tid +. + + = +CI_IP_TIMER_NETIF_STATS +; + +125 + `ci__s_r +(& +nis +-> +s_sh +); + +126 + `ci__s_r +(& +nis +-> +s_cumutive +); + +129 + `ci_ni_di_ +( +ni +, & +nis +-> +_li +, + +130 + `oo_r_to_ +( +ni +, & +nis +-> +_li +), + +133 +nis +-> +_s_hd + = +OO_SP_NULL +; + +134 +nis +-> +deed__s_hd + = +CI_ILL_END +; + +135 + `as_zo +( +nis +-> +n__bufs +); + +136 +nis +-> +max__bufs + = + `NI_OPTS +( +ni +).max_ep_bufs; + +138 + `as_zo +( +ni +-> +cks +-> +ts_n +); + +139 +ni +-> +cks +-> +ts_max + =i-> +pkt_ts_max +; + +142 +nis +-> +rx_deag_hd + = +OO_PP_NULL +; + +143 +nis +-> +rx_deag_ + = +OO_PP_NULL +; + +145 + `as_zo +( +nis +-> +nd_may_pl +); + +147 + `y +( +nis +-> +me +,ame, +CI_CFG_STACK_NAME_LEN +); + +148 +nis +-> +me +[ +CI_CFG_STACK_NAME_LEN +] = '\0'; + +150 + `as_zo +( +nis +-> +_pl +); + +151 + `ci_ni_di_ +( +ni +, & +nis +-> +po_pl_li +, + +152 + `oo_r_to_ +( +ni +, & +nis +-> +po_pl_li +), + +155 +nis +-> +sock__cyes + = + +156 + `__oo_uc_to_cyes64 +( +u_khz +, + `NI_OPTS +( +ni +). +_uc +); + +157 +nis +-> +buzz_cyes + = + +158 + `__oo_uc_to_cyes64 +( +u_khz +, + `NI_OPTS +( +ni +). +buzz_uc +); + +159 +nis +-> +tim_ime_cyes + = + +160 + `__oo_uc_to_cyes64 +( +u_khz +, + `NI_OPTS +( +ni +). +tim_ime_uc +); + +162 + `ci__tim_e_ +( +ni +, +u_khz +); + +163 +nis +-> +ϡ__pl_c + = + `IPTIMER_STATE +( +ni +)-> +c +; + +164 +nis +-> +ϡ_p_c + = + `IPTIMER_STATE +( +ni +)-> +c +; + +166 + `oo_timesync_upde +( +eb_t_driv +. +timesync +); + +168 + `as_zo +( +nis +-> +der_wk_cou +); + +170 #ifde +_WIN32 + + +171 +nis +-> +async_sigl_q +. +hd + = +CI_ILL_END +; + +172 +nis +-> +async_comi_q + = +CI_ILL_END +; + +175 #i +CI_CFG_TCPDUMP + + +176 +nis +-> +dump_ad_i + = 0; + +177 +nis +-> +dump_wre_i + = 0; + +178 + `memt +( +nis +-> +dump_tf +, 0, (nis->dump_intf)); + +181 +nis +-> +uid + = +ni +->uid; + +182 +nis +-> +pid + = +cut +-> +tgid +; + +184 #i +CI_CFG_FD_CACHING + + +185 +nis +-> +ssive_che_ava_ack + =is-> +ts +. +sock_che_max +; + +189 +nis +-> +max_mss + = 0; + +191 if +nis +-> +ts +. +t_syncooks + ) + +192 + `g_ndom_bys +(& +nis +-> +hash_ +, (nis->hash_salt)); + +194 +nis +-> +ady_lis__u + = 1; + +195  +i + = 0; i < +CI_CFG_N_READY_LISTS +; i++ ) { + +196 + `ci_ni_di_ +( +ni +, & +nis +-> +ady_lis +[ +i +], + +197 + `oo_r_to_ +( +ni +, & +nis +-> +ady_lis +[ +i +]), + +199 +nis +-> +ady_li_ags +[ +i +] = 0; + +202 + `ci_ni_di_ +( +ni +, & +nis +-> +aive_wd_po +, + +203 + `oo_r_to_ +( +ni +, & +nis +-> +aive_wd_po +), + +205 +nis +-> +aive_wd_n + = 0; + +206 +nis +-> +ck_loc_numa_nodes + = 0; + +207 +nis +-> +sock_loc_numa_nodes + = 0; + +208 +nis +-> +u_numa_nodes + = 0; + +209 +nis +-> +ti_numa_node + = + `numa_node_id +(); + +210 +nis +-> +ld_numa_node + = +eb_t_driv +.load_numa_node; + +212 #i +CI_CFG_FD_CACHING + + +213 + `ci_ni_di_ +( +ni +, & +nis +-> +aive_che +. +che +, + +214 + `oo_r_to_ +( +ni +, & +nis +-> +aive_che +. +che +), "ach"); + +215 + `ci_ni_di_ +( +ni +, & +nis +-> +aive_che +. +ndg +, + +216 + `oo_r_to_ +( +ni +, & +nis +-> +aive_che +. +ndg +), "apd"); + +217 + `ci_ni_di_ +( +ni +, & +nis +-> +aive_che +. +fd_es +, + +218 + `oo_r_to_ +( +ni +, & +nis +-> +aive_che +. +fd_es +), "afd"); + +219 +nis +-> +aive_che +. +ava_ack + = + `oo_r_to_ +( +ni +, + +220 & +nis +-> +aive_che_ava_ack +); + +221 +nis +-> +aive_che_ava_ack + =is-> +ts +. +sock_che_max +; + +223 + } +} + +228  + gcp_ack_ms_ed + = 0; + +229  +ci_ut32 + + gcp_t_dbuf_m +, + gcp_t_dbuf_def +, + gcp_t_dbuf_max +; + +230  +ci_ut32 + + gcp_t_rcvbuf_m +, + gcp_t_rcvbuf_def +, + gcp_t_rcvbuf_max +; + +231  +ci_ut32 + + gcp_udp_dbuf_max +, + gcp_udp_dbuf_def +; + +232  +ci_ut32 + + gcp_udp_rcvbuf_max +, + gcp_udp_rcvbuf_def +; + +233  +ci_ut32 + + gcp_t_backlog_max +, + gcp_t_adv_w_s_max +; + +234  +ci_ut32 + + gcp_f_timeout +; + +235  +ci_ut32 + + gcp_sm_thshd +, + gcp_sm_thshd_ph +, + +236 + gcp_sm_thshd_syn +, + gcp_sm_thshd_syck +; + +237  +ci_ut32 + + gcp_klive_obes +, + gcp_klive_time +; + +238  +ci_ut32 + + gcp_klive_tvl +; + +239  +ci_ut32 + + gcp_t_ck +, + gcp_t_timeamps +, + gcp_t_wdow_slg +; + +240  +ci_ut32 + + gcp_t_dck +; + +243 + $ci_tup_ack_ms_deu +() + +245 +cp_t_dbuf_m + = +CI_CFG_TCP_SNDBUF_MIN +; + +246 +cp_t_dbuf_def + = +CI_CFG_TCP_SNDBUF_DEFAULT +; + +247 +cp_t_dbuf_max + = +CI_CFG_TCP_SNDBUF_MAX +; + +248 +cp_t_rcvbuf_m + = +CI_CFG_TCP_RCVBUF_MIN +; + +249 +cp_t_rcvbuf_def + = +CI_CFG_TCP_RCVBUF_DEFAULT +; + +250 +cp_t_rcvbuf_max + = +CI_CFG_TCP_RCVBUF_MAX +; + +251 +cp_udp_dbuf_max + = +CI_CFG_UDP_SNDBUF_MAX +; + +252 +cp_udp_dbuf_def + = +CI_CFG_UDP_SNDBUF_DEFAULT +; + +253 +cp_udp_rcvbuf_max + = +CI_CFG_UDP_RCVBUF_MAX +; + +254 +cp_udp_rcvbuf_def + = +CI_CFG_UDP_RCVBUF_DEFAULT +; + +255 +cp_t_backlog_max + = +CI_TCP_LISTENQ_MAX +; + +256 +cp_t_adv_w_s_max + = +CI_TCP_WSCL_MAX +; + +257 +cp_f_timeout + = +CI_CFG_TCP_FIN_TIMEOUT +; + +258 +cp_sm_thshd + = +CI_TCP_RETRANSMIT_THRESHOLD +; + +259 +cp_sm_thshd_ph + = +CI_TCP_RETRANSMIT_THRESHOLD_ORPHAN +; + +260 +cp_sm_thshd_syn + = +CI_TCP_RETRANSMIT_THRESHOLD_SYN +; + +261 +cp_sm_thshd_syck + = +CI_TCP_RETRANSMIT_THRESHOLD_SYN +; + +262 +cp_klive_obes + = +CI_TCP_KEEPALIVE_PROBES +; + +263 +cp_klive_time + = +CI_TCP_TCONST_KEEPALIVE_TIME +; + +264 +cp_klive_tvl + = +CI_TCP_TCONST_KEEPALIVE_INTVL +; + +265 +cp_t_ck + = +CI_CFG_TCP_SACK +; + +266 +cp_t_timeamps + = +CI_CFG_TCP_TSO +; + +267 +cp_t_wdow_slg + = +CI_TCP_WSCL_DEFAULT +; + +268 +cp_t_dck + = +CI_CFG_TCP_DSACK +; + +270 + } +} + +272 #ide +__KERNEL__ + + +273  + $y_g_hp_sz +(cڡ * +le +, * +hp_sz +) + +280  +n +; + +281 if + `ssnf +( +le +, "Hugagesize: %u kB", & +n +) != 1) + +283 * +hp_sz + = +n +; + +285 + } +} + +287  + $check_hp +( +ci_tif_cfig_ts +* +ts +){ + +288 +FILE +* +f +; + +289  +buf +[80]; + +290  +hp_sz +; + +292 +hp_sz +=0; + +293 +f += + `fݒ +("/proc/meminfo", "r"); + +294 if! +f + ) { + +295 + `CONFIG_LOG +( +ts +, +CONFIG_WARNINGS +, "%s failedo open /proc/meminfo with " + +296 "r %d. Diblg hugagsut", +__FUNCTION__ +, +o +); + +301 if! + `fgs +( +buf +, (buf), +f +) ) { + +302 + `fo +( +f +); + +303 + `CONFIG_LOG +( +ts +, +CONFIG_WARNINGS +, "EIO Error: %s failedo " + +305 "sut", +__FUNCTION__ +); + +308 if + `y_g_hp_sz +( +buf +, & +hp_sz +) ) ; + +311 + `fo +( +f +); + +313 if( +hp_sz + != 2048) && (hp_sz != 4096) ){ + +314 + `CONFIG_LOG +( +ts +, +CONFIG_WARNINGS +, "Kernel hugepage size %u kB" + +315 "in su܋d. Diblg hugagsut", +hp_sz +); + +316 +ts +-> +huge_ges +=0; + +321 + } +} + +326 #ifde +__lux__ + + +327 #ide +__KERNEL__ + + +329 +ci_le +  + $ci_sysl_g_vues +(* +th +, +ci_ut32 + * +t +,  +n +, + +330  +qut +) + +332  +me +[ +CI_CFG_PROC_PATH_LEN_MAX + + + ` +( +CI_CFG_PROC_PATH +)]; + +333  +buf +[ +CI_CFG_PROC_LINE_LEN_MAX +]; + +334  +bu +; + +335 * +p + = +buf +; + +336  +fd +; + +337  +i + = 0; + +339 + `ry +( +me +, +CI_CFG_PROC_PATH +); + +340 + `y +( +me + + + ` +( +CI_CFG_PROC_PATH +), +th +, +CI_CFG_PROC_PATH_LEN_MAX +); + +341 +fd + = + `ci_sys_ݒ +( +me +, +O_RDONLY +); + +342 i( +fd + < 0) { + +343 #ide +NDEBUG + + +345 if! +qut + ) + +346 + `ci_log +("%s: faedݒ %s", +__FUNCTION__ +, +me +); + +348  +fd +; + +350 +bu + = + `ci_sys_ad +( +fd +, +buf +, (buf)); + +351 + `ci_sys_o +( +fd +); + +352 +buf +[ +bu + - 1] = '\0'; + +353  +i + = 0; i < +n + && + `ssnf +( +p +, "%u", & +t +[i]) > 0; ++i ) { + +354  +buf + + +bu + > +p + &&[0] != '\t' ) + +355 +p +++; + +356 +p +++; + +358 if +i + < +n + ) { + +359 + `ci_log +("%s: faedطr %s: %s", +__FUNCTION__ +, +me +, +buf +); + +363 + } +} + +371 + $ci_tup_ack_ms +() + +373 +ci_ut32 + +t +[3]; + +379 i( +cp_ack_ms_ed +) + +383 + `ci_tup_ack_ms_deu +(); + +386 i( + `ci_sysl_g_vues +("t/v4/_fwd", +t +, 1, 1) != 0) + +391 if + `ci_sysl_g_vues +("t/v4/t_wmem", +t +, 3, 0) != 0 ) + +393 +cp_t_dbuf_m + = +CI_CFG_TCP_SNDBUF_MIN +; + +394 +cp_t_dbuf_def + = +t +[1]; + +395 +cp_t_dbuf_max + = +t +[2]; + +396 if + `ci_sysl_g_vues +("t/v4/t_rmem", +t +, 3, 0) != 0 ) + +398 +cp_t_rcvbuf_m + = +CI_CFG_TCP_RCVBUF_MIN +; + +399 +cp_t_rcvbuf_def + = +t +[1]; + +400 +cp_t_rcvbuf_max + = +t +[2]; + +401 if + `ci_sysl_g_vues +("t/ce/wmem_max", +t +, 1, 0) != 0 ) + +403 +cp_udp_dbuf_max + = +t +[0]; + +404 if + `ci_sysl_g_vues +("t/ce/wmem_deu", +t +, 1, 0) != 0 ) + +406 +cp_udp_dbuf_def + = +t +[0]; + +407 if + `ci_sysl_g_vues +("t/ce/rmem_max", +t +, 1, 0) != 0 ) + +409 +cp_udp_rcvbuf_max + = +t +[0]; + +410 if + `ci_sysl_g_vues +("t/ce/rmem_deu", +t +, 1, 0) != 0 ) + +412 +cp_udp_rcvbuf_def + = +t +[0]; + +414 i( + `ci_sysl_g_vues +("t/v4/t_max_syn_backlog", +t +, 1, 0) != 0) + +416 +cp_t_backlog_max + = +t +[0]; + +419 i( + `ci_sysl_g_vues +("t/v4/t_adv_w_s", +t +, 1, 0) != 0) + +421 +cp_t_adv_w_s_max + = + `CI_MIN +( +CI_TCP_WSCL_MAX +, 3 * +t +[0]); + +424 i( + `ci_sysl_g_vues +("t/v4/t_f_timeout", +t +, 1, 0) != 0) + +426 +cp_f_timeout + = +t +[0]; + +429 i( + `ci_sysl_g_vues +("t/v4/t_s2", +t +, 1, 0) != 0) + +431 +cp_sm_thshd + = +t +[0]; + +432 i( + `ci_sysl_g_vues +("t/v4/t_ph_s", +t +, 1, 0) != 0) + +437 if +t +[0] > 0 ) + +438 +cp_sm_thshd_ph + = +t +[0]; + +439 i( + `ci_sysl_g_vues +("t/v4/t_syn_s", +t +, 1, 0) != 0) + +441 +cp_sm_thshd_syn + = +t +[0]; + +442 i( + `ci_sysl_g_vues +("t/v4/t_syck_s", +t +, 1, 0) != 0) + +444 +cp_sm_thshd_syck + = +t +[0]; + +447 i( + `ci_sysl_g_vues +("t/v4/t_klive_obes", +t +, 1, 0) != 0) + +449 +cp_klive_obes + = +t +[0]; + +451 i( + `ci_sysl_g_vues +("t/v4/t_klive_time", +t +, 1, 0) != 0) + +453 +cp_klive_time + = +t +[0] * 1000; + +454 i( + `ci_sysl_g_vues +("t/v4/t_klive_tvl", +t +, 1, 0) != 0) + +456 +cp_klive_tvl + = +t +[0] * 1000; + +459 i( + `ci_sysl_g_vues +("t/v4/t_ck", +t +, 1, 0) != 0) + +461 +cp_t_ck + = +t +[0]; + +462 i( + `ci_sysl_g_vues +("t/v4/t_timeamps", +t +, 1, 0) != 0) + +464 +cp_t_timeamps + = +t +[0]; + +465 i( + `ci_sysl_g_vues +("t/v4/t_wdow_slg", +t +, 1, 0) != 0) + +467 +cp_t_wdow_slg + = +t +[0]; + +469 i( + `ci_sysl_g_vues +("t/v4/t_dck", +t +, 1, 0) != 0) + +471 +cp_t_dck + = +t +[0]; + +473 +cp_ack_ms_ed + = 1; + +475 + } +} + +480 + $ci_tup_ack_ms +() + +486 + `ci_tup_ack_ms_deu +(); + +487 +cp_ack_ms_ed + = 0; + +489 + } +} + +494 #ifde +__sun__ + + +496 + $ci_tup_ack_ms +() + +502 +cp_ack_ms_ed + = 0; + +504 + } +} + +507  + $ci_tif_cfig_ts_deus +( +ci_tif_cfig_ts +* +ts +) + +509 #unde +CI_CFG_OPTFILE_VERSION + + +510 #unde +CI_CFG_OPTGROUP + + +511 #unde +CI_CFG_OPT + + +512  + #CI_CFG_OPT +( +v +, +me +, +ty +, +doc +, +ty_modifid +, +group +, \ + +513 , +mimum +, +maximum +, +ei +) \ + +514 +ts +-> +me + = ; + + ) + +516  + ~ + +519 + `ci_tup_ack_ms +(); + +520 i( +cp_ack_ms_ed +) { + +521 +ts +-> +t_dbuf_m + = +cp_t_dbuf_m +; + +522 +ts +-> +t_dbuf_def + = +cp_t_dbuf_def +; + +523 +ts +-> +t_dbuf_max + = +cp_t_dbuf_max +; + +524 +ts +-> +t_rcvbuf_m + = +cp_t_rcvbuf_m +; + +525 +ts +-> +t_rcvbuf_def + = +cp_t_rcvbuf_def +; + +526 +ts +-> +t_rcvbuf_max + = +cp_t_rcvbuf_max +; + +528 +ts +-> +udp_dbuf_max + = +cp_udp_dbuf_max +; + +529 +ts +-> +udp_dbuf_def + = +cp_udp_dbuf_def +; + +530 +ts +-> +udp_rcvbuf_max + = +cp_udp_rcvbuf_max +; + +531 +ts +-> +udp_rcvbuf_def + = +cp_udp_rcvbuf_def +; + +533 +ts +-> +t_backlog_max + = +cp_t_backlog_max +; + +534 +ts +-> +t_syecv_max + = +cp_t_backlog_max + * + +535 +CI_CFG_ASSUME_LISTEN_SOCKS +; + +536 +ts +-> +t_adv_w_s_max + = +cp_t_adv_w_s_max +; + +537 +ts +-> +f_timeout + = +cp_f_timeout +; + +539 +ts +-> +sm_thshd + = +cp_sm_thshd +; + +540 +ts +-> +sm_thshd_ph + = +cp_sm_thshd_ph +; + +541 +ts +-> +sm_thshd_syn + = +cp_sm_thshd_syn +; + +542 +ts +-> +sm_thshd_syck + = +cp_sm_thshd_syck +; + +544 +ts +-> +klive_obes + = +cp_klive_obes +; + +545 +ts +-> +klive_time + = +cp_klive_time +; + +546 +ts +-> +klive_tvl + = +cp_klive_tvl +; + +548 +ts +-> +syn_ts + = ( +cp_t_ck + ? +CI_TCPT_FLAG_SACK + : 0) | + +549 ( +cp_t_timeamps + ? +CI_TCPT_FLAG_TSO + : 0) | + +550 ( +cp_t_wdow_slg + ? +CI_TCPT_FLAG_WSCL + : 0); + +551 +ts +-> +u_dck + = +cp_t_dck +; + +552 +ts +-> +ed + = +CI_TRUE +; + +554 + } +} + +556  + $ci_tif_cfig_ts_ngecheck +( +ci_tif_cfig_ts +* +ts +) + +558 +ci_ut64 + +MIN +; + +559 +ci_ut64 + +MAX +; + +560 +ci_t64 + +SMIN +; + +561 +ci_t64 + +SMAX +; + +562  +_tbs +; + +563  +_bwidth +; + +566 () +MIN +; () +MAX +; () +SMIN +; () +SMAX +; + +567 () +_tbs +; () +_bwidth +; + +569 #unde +CI_CFG_OPTFILE_VERSION + + +570 #unde +CI_CFG_OPTGROUP + + +571 #unde +CI_CFG_OPT + + +573  + #_CI_CFG_BITVAL + +_tbs + + + ) + +574  + #_CI_CFG_BITVAL1 + 1 + + ) + +575  + #_CI_CFG_BITVAL2 + 2 + + ) + +576  + #_CI_CFG_BITVAL3 + 3 + + ) + +577  + #_CI_CFG_BITVAL4 + 4 + + ) + +578  + #_CI_CFG_BITVAL8 + 8 + + ) + +579  + #_CI_CFG_BITVAL16 + 16 + + ) + +580  + #_CI_CFG_BITVALA8 + +_CI_CFG_BITVAL + + + ) + +582 #unde +MIN + + +583 #unde +MAX + + +584 #unde +SMIN + + +585 #unde +SMAX + + +587  + #CI_CFG_REDRESS +( +t +, +v +݈v; + + ) + +588  + #CI_CFG_MSG + "ERROR" + + ) + +590  + #CI_CFG_OPT +( +v +, +me +, +ty +, +doc +, +bs +, +group +, , +mimum +, +maximum +, +es +) \ + +591 { +ty + +_v + = +ts +-> +me +; \ + +592 +ty + +_max +; \ + +593 +ty + +_m +; \ + +594 +_tbs +=( +ty +)*8; \ + +595 +_bwidth += +_CI_CFG_BITVAL +## +bs +; \ + +596 +MIN + = 0; \ + +597 +MAX + = ((1u<<( +_bwidth +-1))<<1) - 1ull; \ + +598 +SMAX + = +MAX + >> 1; +SMIN + = -SMAX-1; \ + +599 +_max + = ( +ty +)( +maximum +); \ + +600 +_m + = ( +ty +)( +mimum +); \ + +601 i( +_v + > +_max +) { \ + +602 + `ci_log +("cfig: " +CI_CFG_MSG +" - option " #name \ + +603 " (%" +CI_PRIu64 +")argerhan maximum " #maximum" (%"CI_PRIu64")", \ + +604 ( +ci_ut64 +) +_v +, (ci_ut64 +_max +); \ + +605 + `CI_CFG_REDRESS +( +ts +-> +me +, +_max +); \ + +607 i( +_v + < +_m +) { \ + +608 + `ci_log +("cfig: " +CI_CFG_MSG +" - option " #name \ + +609 " (%" +CI_PRIu64 +") smallerhan minimum " #minimum, \ + +610 ( +ci_ut64 +) +_v +); \ + +611 + `CI_CFG_REDRESS +( +ts +-> +me +, +_m +); \ + +613 } + + ) + +615  + ~ + +616 + } +} + +619 #ide +__KERNEL__ + + +621  + srg_to_bmask + { + +622  + mb_dex +; + +623 cڡ *cڡ + mb_r +; + +632  + $cvt_rg_to_bmask +(cڡ * +r +, + +633 cڡ  +rg_to_bmask +* +ts +, + +634  +ts_n +, +ci_ut32 +* +bmask_out +) + +636  +n +, +i +, +t_found +, +ge +; + +638 if! +r + ) + +643  * +r + == ',' ) + +644 ++ +r +; + +645 +n + = + `rchul +( +r +, ',') - str; + +646 if +n + == 0 ) + +650 if* +r + == '-' ) { + +651 +ge + = 1; + +652 ++ +r +; + +653 -- +n +; + +656 +ge + = 0; + +660 +t_found + = 0; + +661  +i + = 0; i < +ts_n +; ++i ) + +662 if! + `cmp +( +r +, +ts +[ +i +]. +b_r +, +n +) ) { + +663 if +ge + ) + +664 * +bmask_out + &~(1 << +ts +[ +i +]. +b_dex +); + +666 * +bmask_out + |1 << +ts +[ +i +]. +b_dex +; + +667 ++ +t_found +; + +670 if! +t_found + ) { + +671  +buf +[128]; + +672 + `y +( +buf +, +r +, +n +); + +673 +buf +[ +n +] = '\0'; + +674 + `ci_log +("Invid oi deed: %s", +buf +); + +676 +r + + +n +; + +678 + } +} + +681  + $ci_tif_cfig_ts_gv_ef_log +( +ci_tif_cfig_ts +* +ts +) + +683  +rg_to_bmask + +tis +[ +EF_LOG_MAX +] = { + +684 { +EF_LOG_BANNER +, "banner"}, + +685 { +EF_LOG_RESOURCE_WARNINGS +, "resource_warnings"}, + +686 { +EF_LOG_CONN_DROP +, "conn_drop"}, + +687 { +EF_LOG_CONFIG_WARNINGS +, "config_warnings"}, + +688 { +EF_LOG_USAGE_WARNINGS +, "usage_warnings"}, + +691 + `cvt_rg_to_bmask +( + `gv +("EF_LOG"), +tis +, +EF_LOG_MAX +, + +692 & +ts +-> +log_gy +); + +693 + } +} + +697 +ci_tif_cfig_ts_gv_ef_sb_frs +( +ci_tif_cfig_ts +* +ts +); + +700  + $ci_tif_cfig_ts_gv +( +ci_tif_cfig_ts +* +ts +) + +702 cڡ * +s +; + +705 + `ci_tif_cfig_ts_gv_ef_log +( +ts +); + +712 if( +s + = + `gv +("EF_POLL_USEC")) ) { + +713 +ts +-> +_uc + = + `oi +( +s +); + +714 if +ts +-> +_uc + != 0 ) { + +716 +ts +-> +buzz_uc + = + `CI_MIN +(ts-> +_uc +, 100); + +718 +ts +-> +t_driv + = 0; + +723 +ts +-> +sock_lock_buzz + = 1; + +724 +ts +-> +ack_lock_buzz + = 1; + +725 +ts +-> +ul__ + = 1; + +726 +ts +-> +ul_pl_ + = 1; + +727 #i +CI_CFG_USERSPACE_EPOLL + + +728 +ts +-> +ul_l_ + = 1; + +730 #i +CI_CFG_UDP + + +731 +ts +-> +udp_cv_ + = 1; + +732 +ts +-> +udp_nd_ + = 1; + +734 +ts +-> +t_cv_ + = 1; + +735 +ts +-> +t_nd_ + = 1; + +737 +ts +-> +t_ac_ + = 1; + +738 +ts +-> +t_c_ + = 1; + +740 +ts +-> +pkt_wa_ + = 1; + +743 if( +s + = + `gv +("EF_SPIN_USEC")) ) { + +744 +ts +-> +_uc + = + `oi +( +s +); + +746 if +ts +-> +_uc + != 0 ) + +747 +ts +-> +t_driv + = 0; + +750 if( +s + = + `gv +("EF_INT_DRIVEN")) ) + +751 +ts +-> +t_driv + = + `oi +( +s +); + +752 if +ts +-> +t_driv + ) + +754 +ts +-> +tim_uc + = 0; + +755 if( +s + = + `gv +("EF_HELPER_USEC")) ) { + +756 +ts +-> +tim_uc + = + `oi +( +s +); + +757 if +ts +-> +tim_uc + != 0 ) + +759 +ts +-> +tim_ime_uc + = os-> +tim_uc + / 2; + +761 if( +s + = + `gv +("EF_HELPER_PRIME_USEC")) ) + +762 +ts +-> +tim_ime_uc + = + `oi +( +s +); + +764 if( +s + = + `gv +("EF_BUZZ_USEC")) ) { + +765 +ts +-> +buzz_uc + = + `oi +( +s +); + +766 if +ts +-> +buzz_uc + != 0 ) { + +767 +ts +-> +sock_lock_buzz + = 1; + +768 +ts +-> +ack_lock_buzz + = 1; + +771 if( +s + = + `gv +("EF_SOCK_LOCK_BUZZ")) ) + +772 +ts +-> +sock_lock_buzz + = + `oi +( +s +); + +773 if( +s + = + `gv +("EF_STACK_LOCK_BUZZ")) ) + +774 +ts +-> +ack_lock_buzz + = + `oi +( +s +); + +775 if( +s + = + `gv +("EF_SO_BUSY_POLL_SPIN")) ) + +776 +ts +-> +so_busy_pl_ + = + `oi +( +s +); + +782 #i +CI_CFG_POISON_BUFS + + +783 if( +s + = + `gv +("EF_POISON") +ts +-> +pois_rx_buf + = + `oi +(s); + +785 #i +CI_CFG_RANDOM_DROP + + +786 if( +s + = + `gv +("EF_RX_DROP_RATE")) ) { + +787  +r + = + `oi +( +s +); + +788 if +r + ) +ts +-> +rx_dr_ + = +RAND_MAX + /; + +791 if( +s + = + `gv +("EF_URG_RFC")) ) + +792 +ts +-> +urg_rfc + = + `oi +( +s +); + +793 #i +CI_CFG_UDP + + +794 if( +s + = + `gv +("EF_MCAST_RECV")) ) + +795 +ts +-> +m_cv + = + `oi +( +s +); + +796 if( +s + = + `gv +("EF_FORCE_SEND_MULTICAST")) ) + +797 +ts +-> +f_nd_mui + = + `oi +( +s +); + +798 if( +s + = + `gv +("EF_MCAST_SEND")) ) + +799 +ts +-> +m_nd + = + `oi +( +s +); + +800 if( +s + = + `gv +("EF_MULTICAST_LOOP_OFF")) ) { + +801 +ts +-> +mui_lo_off + = + `oi +( +s +); + +802  +ts +-> +mui_lo_off + ) { + +804 +ts +-> +m_nd + = +CITP_MCAST_SEND_FLAG_LOCAL +; + +807 +ts +-> +m_nd + = 0; + +811 if( +s + = + `gv +("EF_MCAST_RECV_HW_LOOP")) ) + +812 +ts +-> +m_cv_hw_lo + = + `oi +( +s +); + +814 if( +s + = + `gv +("EF_EVS_PER_POLL")) ) + +815 +ts +-> +evs_r_pl + = + `oi +( +s +); + +816 if( +s + = + `gv +("EF_TCP_TCONST_MSL")) ) + +817 +ts +-> +m_cds + = + `oi +( +s +); + +818 if( +s + = + `gv +("EF_TCP_FIN_TIMEOUT")) ) + +819 +ts +-> +f_timeout + = + `oi +( +s +); + +820 if( +s + = + `gv +("EF_TCP_ADV_WIN_SCALE_MAX")) ) + +821 +ts +-> +t_adv_w_s_max + = + `oi +( +s +); + +823 if( +s + = + `gv +("EF_TCP_SYN_OPTS")) ) { + +824  +v +; + +825 + `ci_vify +( + `ssnf +( +s +, "%x", & +v +) == 1); + +826 +ts +-> +syn_ts + = +v +; + +829 i( +s + = + `gv +("EF_MAX_PACKETS")) ) { + +830  +max_cks_rq + = + `oi +( +s +); + +831 +ts +-> +max_cks + = ( +max_cks_rq + + +PKTS_PER_SET + - 1) & + +832 ~( +PKTS_PER_SET + - 1); + +833 if +ts +-> +max_cks + ! +max_cks_rq + ) + +836 +ts +-> +max_rx_cks + = os-> +max_cks + * 3 / 4; + +837 +ts +-> +max_tx_cks + = os-> +max_cks + * 3 / 4; + +839 i( +s + = + `gv +("EF_MAX_RX_PACKETS")) ) { + +840 +ts +-> +max_rx_cks + = + `oi +( +s +); + +841 if +ts +-> +max_rx_cks + > os-> +max_cks + ) + +842 +ts +-> +max_rx_cks + = os-> +max_cks +; + +844 i( +s + = + `gv +("EF_MAX_TX_PACKETS")) ) { + +845 +ts +-> +max_tx_cks + = + `oi +( +s +); + +846 if +ts +-> +max_tx_cks + > os-> +max_cks + ) + +847 +ts +-> +max_tx_cks + = os-> +max_cks +; + +849 i( +s + = + `gv +("EF_RXQ_MIN")) ) + +850 +ts +-> +rxq_m + = + `oi +( +s +); + +851 i( +s + = + `gv +("EF_MIN_FREE_PACKETS")) ) + +852 +ts +-> +m__cks + = + `oi +( +s +); + +853 if( +s + = + `gv +("EF_PREFAULT_PACKETS")) ) + +854 +ts +-> +eu_cks + = + `oi +( +s +); + +855 #i +CI_CFG_PIO + + +856 i( +s + = + `gv +("EF_PIO")) ) + +857 +ts +-> +pio + = + `oi +( +s +); + +859 i( +s + = + `gv +("EF_MAX_ENDPOINTS")) ) + +860 +ts +-> +max__bufs + = + `oi +( +s +); + +861 i( +s + = + `gv +("EF_SHARE_WITH")) ) + +862 +ts +-> +she_wh + = + `oi +( +s +); + +863 #i +CI_CFG_PKTS_AS_HUGE_PAGES + + +864 if! + `check_hp +( +ts +) ){ + +865 if( +s + = + `gv +("EF_USE_HUGE_PAGES")) ) { + +866 +ts +-> +huge_ges + = + `oi +( +s +); + +868 if +ts +-> +huge_ges + !0 && os-> +she_wh + != 0 ) { + +869 + `CONFIG_LOG +( +ts +, +CONFIG_WARNINGS +, "Turning hugeages off becausehe " + +871 +ts +-> +huge_ges + = 0; + +875 i( +s + = + `gv +("EF_COMPOUND_PAGES_MODE")) ) + +876 +ts +-> +compound_ges + = + `oi +( +s +); + +877 i( +s + = + `gv +("EF_SYNC_CPLANE_AT_CREATE")) ) { + +878 +ts +-> +sync_ + = + `oi +( +s +); + +880 i( +s + = + `gv +("EF_RXQ_SIZE")) ) + +881 +ts +-> +rxq_size + = + `oi +( +s +); + +882 i( +s + = + `gv +("EF_RXQ_LIMIT")) ) + +883 +ts +-> +rxq_lim + = + `oi +( +s +); + +884 i( +s + = + `gv +("EF_TXQ_SIZE")) ) + +885 +ts +-> +txq_size + = + `oi +( +s +); + +886 i( +s + = + `gv +("EF_TXQ_LIMIT")) ) + +887 +ts +-> +txq_lim + = + `oi +( +s +); + +888 i( +s + = + `gv +("EF_SEND_POLL_THRESH")) ) + +889 +ts +-> +nd_pl_thsh + = + `oi +( +s +); + +890 i( +s + = + `gv +("EF_SEND_POLL_MAX_EVS")) ) + +891 +ts +-> +nd_pl_max_evts + = + `oi +( +s +); + +892 i( +s + = + `gv +("EF_DEFER_WORK_LIMIT")) ) + +893 +ts +-> +der_wk_lim + = + `oi +( +s +); + +894 #i +CI_CFG_UDP + + +895 if( +s + = + `gv +("EF_UDP_SEND_UNLOCK_THRESH")) ) + +896 +ts +-> +udp_nd_uock_thsh + = + `oi +( +s +); + +897 if( +s + = + `gv +("EF_UDP_PORT_HANDOVER_MIN")) ) + +898 +ts +-> +udp_pt_hdov_m + = + `oi +( +s +); + +899 if( +s + = + `gv +("EF_UDP_PORT_HANDOVER_MAX")) ) + +900 +ts +-> +udp_pt_hdov_max + = + `oi +( +s +); + +901 if( +s + = + `gv +("EF_UDP_PORT_HANDOVER2_MIN")) ) + +902 +ts +-> +udp_pt_hdov2_m + = + `oi +( +s +); + +903 if( +s + = + `gv +("EF_UDP_PORT_HANDOVER2_MAX")) ) + +904 +ts +-> +udp_pt_hdov2_max + = + `oi +( +s +); + +905 if( +s + = + `gv +("EF_UDP_PORT_HANDOVER3_MIN")) ) + +906 +ts +-> +udp_pt_hdov3_m + = + `oi +( +s +); + +907 if( +s + = + `gv +("EF_UDP_PORT_HANDOVER3_MAX")) ) + +908 +ts +-> +udp_pt_hdov3_max + = + `oi +( +s +); + +910 i( +s + = + `gv +("EF_DELACK_THRESH")) ) + +911 +ts +-> +dack_thsh + = + `oi +( +s +); + +912 #i +CI_CFG_DYNAMIC_ACK_RATE + + +913 i( +s + = + `gv +("EF_DYNAMIC_ACK_THRESH")) ) + +914 +ts +-> +dyck_thsh + = + `oi +( +s +); + +918 +ts +-> +dyck_thsh + = + `CI_MAX +(ts->dyck_thsh, os-> +dack_thsh +); + +920 #i +CI_CFG_FD_CACHING + + +921 i( +s + = + `gv +("EF_SOCKET_CACHE_MAX")) ) + +922 +ts +-> +sock_che_max + = + `oi +( +s +); + +923 i( +s + = + `gv +("EF_PER_SOCKET_CACHE_MAX")) ) + +924 +ts +-> +r_sock_che_max + = + `oi +( +s +); + +925 if +ts +-> +r_sock_che_max + <= 0 ) + +926 +ts +-> +r_sock_che_max + = os-> +sock_che_max +; + +929 #i +CI_CFG_PORT_STRIPING + + +931 i( +s + = + `gv +("EF_STRIPE_NETMASK")) ) { + +932  +a1 +, +a2 +, +a3 +, +a4 +; + +933 + `ssnf +( +s +, "%d.%d.%d.%d", & +a1 +, & +a2 +, & +a3 +, & +a4 +); + +934 +ts +-> +re_tmask_be32 + = ( +a1 + << 24| ( +a2 + << 16| ( +a3 + << 8| +a4 +; + +935 +ts +-> +re_tmask_be32 + = + `CI_BSWAP_BE32 +(opts->stripe_netmask_be32); + +937 i( +s + = + `gv +("EF_STRIPE_DUPACK_THRESH")) ) { + +938 +ts +-> +re_duck_thshd + = + `oi +( +s +); + +939 +ts +-> +re_duck_thshd + = + +940 + `CI_MAX +( +ts +-> +re_duck_thshd +, +CI_CFG_TCP_DUPACK_THRESH_BASE +); + +941 +ts +-> +re_duck_thshd + = + +942 + `CI_MIN +( +ts +-> +re_duck_thshd +, +CI_CFG_TCP_DUPACK_THRESH_MAX +); + +944 if( +s + = + `gv +("EF_STRIPE_TCP_OPT")) ) + +945 +ts +-> +re_t_t + = + `oi +( +s +); + +947 if( +s + = + `gv +("EF_TX_PUSH")) ) + +948 +ts +-> +tx_push + = + `oi +( +s +); + +949 if +ts +-> +tx_push + && ( +s + = + `gv +("EF_TX_PUSH_THRESHOLD")) ) + +950 +ts +-> +tx_push_thsh + = + `oi +( +s +); + +951 if( +s + = + `gv +("EF_PACKET_BUFFER_MODE")) ) + +952 +ts +-> +ck_bufr_mode + = + `oi +( +s +); + +953 if( +s + = + `gv +("EF_TCP_RST_DELAYED_CONN")) ) + +954 +ts +-> +r_dayed_cn + = + `oi +( +s +); + +955 if( +s + = + `gv +("EF_TCP_SNDBUF_MODE")) ) + +956 +ts +-> +t_dbuf_mode + = + `oi +( +s +); + +957 if( +s + = + `gv +("EF_TCP_SEND_NONBLOCK_NO_PACKETS_MODE")) ) + +958 +ts +-> +t_nblock_no_pkts_mode + = + `oi +( +s +); + +959 if( +s + = + `gv +("EF_TCP_RCVBUF_STRICT")) ) + +960 +ts +-> +t_rcvbuf_ri + = + `oi +( +s +); + +961 if( +s + = + `gv +("EF_TCP_RCVBUF_MODE")) ) + +962 +ts +-> +t_rcvbuf_mode + = + `oi +( +s +); + +963 if( +s + = + `gv +("EF_TCP_LISTEN_REPLIES_BACK")) ) + +964 +ts +-> +t_li_s_back + = + `oi +( +s +); + +965 if( +s + = + `gv +("EF_POLL_ON_DEMAND")) ) + +966 +ts +-> +pl__demd + = + `oi +( +s +); + +967 if( +s + = + `gv +("EF_INT_REPRIME")) ) + +968 +ts +-> +t_ime + = + `oi +( +s +); + +969 if( +s + = + `gv +("EF_IRQ_MODERATION")) ) + +970 +ts +-> +q_uc + = + `oi +( +s +); + +971 if( +s + = + `gv +("EF_NONAGLE_INFLIGHT_MAX")) ) + +972 +ts +-> +nag_ight_max + = + `oi +( +s +); + +973 if( +s + = + `gv +("EF_FORCE_TCP_NODELAY")) ) + +974 +ts +-> +t_f_noday + = + `oi +( +s +); + +975 if( +s + = + `gv +("EF_IRQ_CORE")) ) + +976 +ts +-> +q_ce + = + `oi +( +s +); + +977 if( +s + = + `gv +("EF_IRQ_CHANNEL")) ) + +978 +ts +-> +q_chl + = + `oi +( +s +); + +979 if( +s + = + `gv +("EF_TCP_LISTEN_HANDOVER")) ) + +980 +ts +-> +t_li_hdov + = + `oi +( +s +); + +981 if( +s + = + `gv +("EF_TCP_CONNECT_HANDOVER")) ) + +982 +ts +-> +t_c_hdov + = + `oi +( +s +); + +983 if( +s + = + `gv +("EF_UDP_CONNECT_HANDOVER")) ) + +984 +ts +-> +udp_c_hdov + = + `oi +( +s +); + +985 #i +CI_CFG_UDP_SEND_UNLOCK_OPT + + +986 if( +s + = + `gv +("EF_UDP_SEND_UNLOCKED")) ) + +987 +ts +-> +udp_nd_uocked + = + `oi +( +s +); + +989 if( +s + = + `gv +("EF_UDP_SEND_NONBLOCK_NO_PACKETS_MODE")) ) + +990 +ts +-> +udp_nblock_no_pkts_mode + = + `oi +( +s +); + +991 if( +s + = + `gv +("EF_UNCONFINE_SYN")) ) + +992 +ts +-> +uncfe_syn + = + `oi +( +s +) != 0; + +993 if( +s + = + `gv +("EF_BINDTODEVICE_HANDOVER")) ) + +994 +ts +-> +bdtodevi_hdov + = + `oi +( +s +) != 0; + +995 if( +s + = + `gv +("EF_MCAST_JOIN_BINDTODEVICE")) ) + +996 +ts +-> +m_jo_bdtodevi + = + `oi +( +s +) != 0; + +997 #i +CI_CFG_RATE_PACING + + +998 if( +s + = + `gv +("EF_TX_QOS_CLASS")) ) { + +999 +ts +-> +tx_qos_ass + = + `oi +( +s +) != 0; + +1000 +ts +-> +tx_m_g_ + = -1; + +1003 if( +s + = + `gv +("EF_MCAST_JOIN_HANDOVER")) ) + +1004 +ts +-> +m_jo_hdov + = + `oi +( +s +); + +1006 if( +s + = + `gv +("EF_TCP_SERVER_LOOPBACK")) ) + +1007 +ts +-> +t_rv_loback + = + `oi +( +s +); + +1008 if( +s + = + `gv +("EF_TCP_CLIENT_LOOPBACK")) ) + +1009 +ts +-> +t__loback + = + `oi +( +s +); + +1011 if +ts +-> +t_rv_loback + = +CITP_TCP_LOOPBACK_OFF + && + +1012 +ts +-> +t__loback + = +CITP_TCP_LOOPBACK_SAMESTACK + ) + +1013 +ts +-> +t__loback + = +CITP_TCP_LOOPBACK_OFF +; + +1015 if( +s + = + `gv +("EF_TCP_RX_CHECKS")) ) { + +1016  +v +; + +1017 + `ci_vify +( + `ssnf +( +s +, "%x", & +v +) == 1); + +1018 +ts +-> +t_rx_checks + = +v +; + +1019 if( +s + = + `gv +("EF_TCP_RX_LOG_FLAGS")) ) { + +1020 + `ci_vify +( + `ssnf +( +s +, "%x", & +v +) == 1); + +1021 +ts +-> +t_rx_log_ags + = +v +; + +1024 if( +s + = + `gv +("EF_SELECT_SPIN")) ) + +1025 +ts +-> +ul__ + = + `oi +( +s +); + +1026 if( +s + = + `gv +("EF_POLL_SPIN")) ) + +1027 +ts +-> +ul_pl_ + = + `oi +( +s +); + +1028 #i +CI_CFG_USERSPACE_EPOLL + + +1029 if( +s + = + `gv +("EF_EPOLL_SPIN")) ) + +1030 +ts +-> +ul_l_ + = + `oi +( +s +); + +1032 #i +CI_CFG_UDP + + +1033 if( +s + = + `gv +("EF_UDP_RECV_SPIN")) ) + +1034 +ts +-> +udp_cv_ + = + `oi +( +s +); + +1035 if( +s + = + `gv +("EF_UDP_SEND_SPIN")) ) + +1036 +ts +-> +udp_nd_ + = + `oi +( +s +); + +1038 if( +s + = + `gv +("EF_TCP_RECV_SPIN")) ) + +1039 +ts +-> +t_cv_ + = + `oi +( +s +); + +1040 if( +s + = + `gv +("EF_TCP_SEND_SPIN")) ) + +1041 +ts +-> +t_nd_ + = + `oi +( +s +); + +1042 if( +s + = + `gv +("EF_TCP_ACCEPT_SPIN")) ) + +1043 +ts +-> +t_ac_ + = + `oi +( +s +); + +1044 if( +s + = + `gv +("EF_TCP_CONNECT_SPIN")) ) + +1045 +ts +-> +t_c_ + = + `oi +( +s +); + +1046 if( +s + = + `gv +("EF_PKT_WAIT_SPIN")) ) + +1047 +ts +-> +pkt_wa_ + = + `oi +( +s +); + +1048 #i +CI_CFG_USERSPACE_PIPE + + +1049 if( +s + = + `gv +("EF_PIPE_RECV_SPIN")) ) + +1050 +ts +-> +pe_cv_ + = + `oi +( +s +); + +1051 if( +s + = + `gv +("EF_PIPE_SEND_SPIN")) ) + +1052 +ts +-> +pe_nd_ + = + `oi +( +s +); + +1053 if( +s + = + `gv +("EF_PIPE_SIZE")) ) + +1054 +ts +-> +pe_size + = + `oi +( +s +); + +1057 if( +s + = + `gv +("EF_ACCEPTQ_MIN_BACKLOG")) ) + +1058 +ts +-> +acq_m_backlog + = + `oi +( +s +); + +1060 i( +s + = + `gv +("EF_TCP_SNDBUF")) ) + +1061 +ts +-> +t_dbuf_ur + = + `oi +( +s +); + +1062 i( +s + = + `gv +("EF_TCP_RCVBUF")) ) + +1063 +ts +-> +t_rcvbuf_ur + = + `oi +( +s +); + +1064 i( +s + = + `gv +("EF_UDP_SNDBUF")) ) + +1065 +ts +-> +udp_dbuf_ur + = + `oi +( +s +); + +1066 i( +s + = + `gv +("EF_UDP_RCVBUF")) ) + +1067 +ts +-> +udp_rcvbuf_ur + = + `oi +( +s +); + +1069 if( +s + = + `gv +("EF_TCP_SNDBUF_ESTABLISHED_DEFAULT")) ) + +1070 +ts +-> +t_dbuf_e_def + = + `oi +( +s +); + +1071 if( +s + = + `gv +("EF_TCP_RCVBUF_ESTABLISHED_DEFAULT")) ) + +1072 +ts +-> +t_rcvbuf_e_def + = + `oi +( +s +); + +1074 if +ts +-> +t_dbuf_ur + != 0 ) { + +1075 +ts +-> +t_dbuf_m + = os-> +t_dbuf_max + = os-> +t_dbuf_ur +; + +1076 +ts +-> +t_dbuf_def + = + `oo_adju_SO_XBUF +(ts-> +t_dbuf_ur +); + +1078 if +ts +-> +t_rcvbuf_ur + != 0 ) { + +1079 +ts +-> +t_rcvbuf_m + = os-> +t_rcvbuf_max + = os-> +t_rcvbuf_ur +; + +1080 +ts +-> +t_rcvbuf_def + = + `oo_adju_SO_XBUF +(ts-> +t_rcvbuf_ur +); + +1082 if +ts +-> +udp_dbuf_ur + != 0 ) { + +1083 +ts +-> +udp_dbuf_m + = os-> +udp_dbuf_max + = os-> +udp_dbuf_ur +; + +1084 +ts +-> +udp_dbuf_def + = + `oo_adju_SO_XBUF +(ts-> +udp_dbuf_ur +); + +1086 if +ts +-> +udp_rcvbuf_ur + != 0 ) { + +1087 +ts +-> +udp_rcvbuf_m + = os-> +udp_rcvbuf_max + = os-> +udp_rcvbuf_ur +; + +1088 +ts +-> +udp_rcvbuf_def + = + `oo_adju_SO_XBUF +(ts-> +udp_rcvbuf_ur +); + +1091 i( +s + = + `gv +("EF_RETRANSMIT_THRESHOLD_SYNACK")) ) + +1092 +ts +-> +sm_thshd_syck + = + `oi +( +s +); + +1094 i( +s + = + `gv +("EF_RETRANSMIT_THRESHOLD_SYN")) ) + +1095 +ts +-> +sm_thshd_syn + = + `oi +( +s +); + +1097 i( +s + = + `gv +("EF_RETRANSMIT_THRESHOLD")) ) + +1098 +ts +-> +sm_thshd + = + `oi +( +s +); + +1100 i( +s + = + `gv +("EF_TCP_BACKLOG_MAX")) ) { + +1101 +ts +-> +t_backlog_max + = + `oi +( +s +); + +1102 i + `gv +("EF_TCP_SYNRECV_MAX"= +NULL + ) { + +1103 +ts +-> +t_syecv_max + = os-> +t_backlog_max + * + +1104 +CI_CFG_ASSUME_LISTEN_SOCKS +; + +1107 i( +s + = + `gv +("EF_TCP_SYNRECV_MAX")) ) { + +1108 +ts +-> +t_syecv_max + = + `oi +( +s +); + +1114 if +ts +-> +t_syecv_max + * 4 > os-> +max__bufs + * 7 ) { + +1115 + `CONFIG_LOG +( +ts +, +CONFIG_WARNINGS +, "%s: EF_TCP_SYNRECV_MAX=%dnd " + +1117 +ts +-> +t_syecv_max + * 2 > os-> +max__bufs + * 7 ? + +1119 +ts +-> +t_syecv_max +, os-> +max__bufs +); + +1120 if + `gv +("EF_TCP_SYNRECV_MAX"= +NULL + ) { + +1121 + `CONFIG_LOG +( +ts +, +CONFIG_WARNINGS +, "EF_TCP_SYNRECV_MAX is seto %d " + +1124 +ts +-> +t_syecv_max +, + +1125 + `gv +("EF_TCP_BACKLOG_MAX"= +NULL + ? + +1128 +CI_CFG_ASSUME_LISTEN_SOCKS +); + +1130 + `CONFIG_LOG +( +ts +, +CONFIG_WARNINGS +, "Too fewndpointsequested: ~4 " + +1134 i( +s + = + `gv +("EF_TCP_INITIAL_CWND")) ) + +1135 +ts +-> +l_cwnd + = + `oi +( +s +); + +1136 i( +s + = + `gv +("EF_TCP_LOSS_MIN_CWND")) ) + +1137 +ts +-> +loss_m_cwnd + = + `oi +( +s +); + +1138 #i +CI_CFG_TCP_FASTSTART + + +1139 i( +s + = + `gv +("EF_TCP_FASTSTART_INIT")) ) + +1140 +ts +-> +t_硡t_ + = + `oi +( +s +); + +1141 i( +s + = + `gv +("EF_TCP_FASTSTART_IDLE")) ) + +1142 +ts +-> +t_硡t_id + = + `oi +( +s +); + +1143 i( +s + = + `gv +("EF_TCP_FASTSTART_LOSS")) ) + +1144 +ts +-> +t_硡t_loss + = + `oi +( +s +); + +1147 i( +s + = + `gv +("EF_RFC_RTO_INITIAL"))) + +1148 +ts +-> +o_l + = + `oi +( +s +); + +1149 i( +s + = + `gv +("EF_RFC_RTO_MIN"))) + +1150 +ts +-> +o_m + = + `oi +( +s +); + +1151 i( +s + = + `gv +("EF_RFC_RTO_MAX"))) + +1152 +ts +-> +o_max + = + `oi +( +s +); + +1153 #ide +NDEBUG + + +1154 if( +s + = + `gv +("EF_TCP_MAX_SEQERR_MSGS"))) + +1155 +ts +-> +t_max_qr_msg + = + `oi +( +s +); + +1157 #i +CI_CFG_BURST_CONTROL + + +1158 i( +s + = + `gv +("EF_BURST_CONTROL_LIMIT"))) + +1159 +ts +-> +bur_cڌ_lim + = + `oi +( +s +); + +1161 #i +CI_CFG_RATE_PACING + + +1162 i( +s + = + `gv +("EF_TX_MIN_IPG_CNTL")) ) + +1163 +ts +-> +tx_m_g_ + = + `oi +( +s +); + +1165 #i +CI_CFG_CONG_AVOID_NOTIFIED + + +1166 i( +s + = + `gv +("EF_CONG_NOTIFY_THRESH"))) + +1167 +ts +-> +cg_nify_thsh + = + `oi +( +s +); + +1169 #i +CI_CFG_TAIL_DROP_PROBE + + +1170 i( +s + = + `gv +("EF_TAIL_DROP_PROBE"))) + +1171 +ts +-> +_dr_obe + = + `oi +( +s +); + +1173 #i +CI_CFG_CONG_AVOID_SCALE_BACK + + +1174 i( +s + = + `gv +("EF_CONG_AVOID_SCALE_BACK"))) + +1175 +ts +-> +cg_avoid_s_back + = + `oi +( +s +); + +1179 i( +CITP_OPTS +. +ac_f_h_nblock +) + +1180 +ts +-> +ac_h_nblock + = 1; + +1182 i( +s + = + `gv +("EF_FREE_PACKETS_LOW_WATERMARK")) ) + +1183 +ts +-> +_cks_low + = + `oi +( +s +); + +1184 if +ts +-> +_cks_low + == 0 ) + +1185 +ts +-> +_cks_low + = os-> +rxq_size + / 2; + +1187 #i +CI_CFG_PIO + + +1188 if +ts +-> +pio + == 0 ) + +1190 +ts +-> +pio_thsh + = 0; + +1191 i( +s + = + `gv +("EF_PIO_THRESHOLD")) ) + +1192 +ts +-> +pio_thsh + = + `oi +( +s +); + +1195 if( +s + = + `gv +("EF_RX_TIMESTAMPING")) ) + +1196 +ts +-> +rx_timeampg + = + `oi +( +s +); + +1198 if( +s + = + `gv +("EF_TX_TIMESTAMPING")) ) + +1199 +ts +-> +tx_timeampg + = + `oi +( +s +); + +1201 if( +s + = + `gv +("EF_TIMESTAMPING_REPORTING")) ) + +1202 +ts +-> +timeampg_ptg + = + `oi +( +s +); + +1204 if( +s + = + `gv +("EF_TCP_SYNCOOKIES")) ) + +1205 +ts +-> +t_syncooks + = + `oi +( +s +); + +1207 if( +s + = + `gv +("EF_CLUSTER_IGNORE")) ) + +1208 +ts +-> +u_igne + = + `oi +( +s +); + +1210 #ifde +ONLOAD_OFE + + +1211 if( +s + = + `gv +("EF_OFE_ENGINE_SIZE")) ) + +1212 +ts +-> +o_size + = + `oi +( +s +); + +1214 #i +CI_CFG_SEPARATE_UDP_RXQ + + +1215 if( +s + = + `gv +("EF_SEPARATE_UDP_RXQ")) ) + +1216 +ts +-> +_udp_rxq + = + `oi +( +s +); + +1219 if( +s + = + `gv +("EF_TCP_SHARED_LOCAL_PORTS")) ) + +1220 +ts +-> +t_shed_lol_pts + = + `oi +( +s +); + +1221 if( +s + = + `gv +("EF_TCP_SHARED_LOCAL_PORTS_MAX")) ) + +1222 +ts +-> +t_shed_lol_pts_max + = + `oi +( +s +); + +1224 if( +s + = + `gv +("EF_HIGH_THROUGHPUT_MODE")) ) + +1225 +ts +-> +rx_mge_mode + = + `oi +( +s +); + +1227 + `ci_tif_cfig_ts_gv_ef_sb_frs +( +ts +); + +1228 + } +} + +1232 + $ci_tif_cfig_ts_gv_ef_sb_frs +( +ci_tif_cfig_ts +* +ts +) + +1234 cڡ * +s +; + +1237 if( +s + = + `gv +("EF_SCALABLE_FILTERS")) ) { + +1238  +iame +[ +IFNAMSIZ +] = {}; + +1239 cڡ * +mode +; + +1241 +mode + = + `rchr +( +s +, '='); + +1242 + `y +( +iame +, +s +, + `CI_MIN +( +mode + - s, (ifname) - 1)); + +1243 +ts +-> +sb_fr_ifdex + = + `if_modex +( +iame +); + +1246 if +ts +-> +sb_fr_ifdex + > 0 ) { + +1250 if +mode + = +NULL + ) + +1251 +mode + = + `gv +("EF_SCALABLE_FILTERS_MODE"); + +1253 ++ +mode +; + +1256 if +mode + && *mode ) { + +1257  +mode_vue + = +CITP_SCALABLE_MODE_NONE +; + +1258  +mode_t + = 0; + +1259 ru {cڡ * +me +;  +mode +;} +modes +[] = { + +1260 {"t_aive", +CITP_SCALABLE_MODE_TPROXY_ACTIVE +}, + +1261 {"ssive", +CITP_SCALABLE_MODE_PASSIVE +}, + +1262 {"rss", +CITP_SCALABLE_MODE_RSS +}, + +1264  * +mode + ) { + +1265 cڡ * +mode_d + = + `rchul +( +mode +, ':'); + +1266  +n + = +mode_d + - +mode +; + +1267  +i +; + +1268  +i + = 0; i < ( +modes +) / (*modes); ++i ) + +1269 if + `cmp +( +modes +[ +i +]. +me +, +mode +, +n +) == 0 && + +1270 +modes +[ +i +]. +me +[ +n +] == 0 ) { + +1271 +mode_vue + | +modes +[ +i +]. +mode +; + +1272 +mode_t + |= 3; + +1275 if! ( +mode_t + & 1) ) { + +1276 + `CONFIG_LOG +( +ts +, +CONFIG_WARNINGS +, "config: Errorarsing " + +1278 "fmode", +mode +); + +1279 +ts +-> +sb_fr_mode + = +CITP_SCALABLE_MODE_NONE +; + +1280 +mode_t + = 0; + +1283 +mode + = +mode_d +; + +1284 if* +mode + ) + +1285 ++ +mode +; + +1286 +mode_t + &= ~1; + +1289 if +mode_t + ) { + +1290  +modes_su܋d +[] = { + +1291 +CITP_SCALABLE_MODE_TPROXY_ACTIVE +, + +1292 +CITP_SCALABLE_MODE_PASSIVE +, + +1293 +CITP_SCALABLE_MODE_TPROXY_ACTIVE + | +CITP_SCALABLE_MODE_PASSIVE +, + +1294 +CITP_SCALABLE_MODE_TPROXY_ACTIVE + | +CITP_SCALABLE_MODE_RSS +}; + +1295  +n_modes + = ( +modes_su܋d +)/(*modes_supported); + +1296  + + = 1; + +1297  +i +; + +1299 +ts +-> +sb_fr_mode + = +mode_vue +; + +1301  +i + = 0; i < +n_modes +; ++i) { + +1302 if +ts +-> +sb_fr_mode + = +modes_su܋d +[ +i +] ) { + +1303 + + = 0; + +1307 if + + ) { + +1308 + `CONFIG_LOG +( +ts +, +CONFIG_WARNINGS +, "config: Unsupported scalable " + +1310 +ts +-> +sb_fr_mode + = +CITP_SCALABLE_MODE_NONE +; + +1314 +ts +-> +sb_fr_mode + = +CITP_SCALABLE_MODE_NONE +; + +1320 i +ts +-> +sb_fr_mode + < 0 ) { + +1321 +ts +-> +sb_fr_mode + = os-> +sb_fr_ifdex + > 0 ? + +1322 ( +CITP_SCALABLE_MODE_TPROXY_ACTIVE + | + +1323 +CITP_SCALABLE_MODE_PASSIVE +) : + +1324 +CITP_SCALABLE_MODE_NONE +; + +1329 + `CONFIG_LOG +( +ts +, +CONFIG_WARNINGS +, "config: Couldot determine ifindex " + +1330 "omam'%s', diblg sb fmode.", +iame +); + +1331 +ts +-> +sb_fr_mode + = +CITP_SCALABLE_MODE_NONE +; + +1334 if +ts +-> +sb_fr_mode + ! +CITP_SCALABLE_MODE_NONE + ) { + +1335 if( +s + = + `gv +("EF_SCALABLE_FILTERS_ENABLE")) ) + +1336 +ts +-> +sb_fr_ab + = + `oi +( +s +); + +1338 +ts +-> +sb_fr_ab + = +CITP_SCALABLE_FILTERS_ENABLE +; + +1341 +ts +-> +sb_fr_ab + = +CITP_SCALABLE_FILTERS_DISABLE +; + +1345 if( +s + = + `gv +("EF_SCALABLE_FILTERS_ENABLE")) ) + +1346 + `CONFIG_LOG +( +ts +, +CONFIG_WARNINGS +, "config: EF_SCALABLE_FILTERS_ENABLE " + +1348 +ts +-> +sb_fr_ab + = +CITP_SCALABLE_FILTERS_DISABLE +; + +1350 + } +} + +1356  + $ci_tif_cfig_ts_dump +( +ci_tif_cfig_ts +* +ts +) + +1358 cڡ +ci_tif_cfig_ts + +deus + = { + +1359 #unde +CI_CFG_OPTFILE_VERSION + + +1360 #unde +CI_CFG_OPT + + +1361 #unde +CI_CFG_OPTGROUP + + +1363  + #CI_CFG_OPTFILE_VERSION +( +vsi +) + + ) + +1364  + #CI_CFG_OPTGROUP +( +group +, +gy +, +exi +) + + ) + +1365  + #CI_CFG_OPT +( +v +, +me +, +ty +, +doc +, +bs +, +group +, , +m +, +max +, +ei +) \ + +1366 , + + ) + +1368  + ~ + +1371 #unde +CI_CFG_OPTFILE_VERSION + + +1372 #unde +CI_CFG_OPT + + +1373 #unde +CI_CFG_OPTGROUP + + +1375  + #ci_ut32_fmt + "%u" + + ) + +1376  + #ci_ut16_fmt + "%u" + + ) + +1377  + #ci_t32_fmt + "%d" + + ) + +1378  + #ci_t16_fmt + "%d" + + ) + +1379  + #ci_time_t_fmt + "%u" + + ) + +1381  + #CI_CFG_OPTFILE_VERSION +( +vsi +) + + ) + +1382  + #CI_CFG_OPTGROUP +( +group +, +gy +, +exi +) + + ) + +1383  + #CI_CFG_OPT +( +v +, +me +, +ty +, +doc +, +bs +, +group +, , +m +, +max +, +ei +) \ + +1384 if + ` +( +v +) != 0 ) { \ + +1385 if +ts +-> +me + = +deus +.name ) \ + +1386 + `ci_log +("%30s: " +ty +## +_fmt +, +v +, +ts +-> +me +); \ + +1388 + `ci_log +("%30s: " +ty +## +_fmt + " (deu: "y##_fmt")", +v +, \ + +1389 +ts +-> +me +, +deus +.name); \ + +1390 } + + ) + +1392 + `ci_log +(" NDEBUG: %d", ! +IS_DEBUG +); + +1393  + ~ + +1394 + } +} + +1404  + $tif_t_hr_bud2 +( +ci_tif +* +ni +) + +1406 +ni +-> +fr_b + = + +1407 ( +ci_tif_fr_b +*((* +ni +-> +e + +i->e-> +b_ofs +); + +1408 +ni +-> +cks + = ( +oo_pktbuf_mag +*((*ni-> +e + +i->e-> +buf_ofs +); + +1409 + } +} + +1412 #ide +__KERNEL__ + + +1414  + $tif_t_hr_munm +( +ci_tif +* +ni +) + +1416  +rc +; + +1418 if +ni +-> +timesync + ! +NULL + ) { + +1419 +rc + = + `oo_sour_munm +( + `ci_tif_g_driv_hd +( +ni +), + +1420 +ni +-> +timesync +,i-> +e +-> +timesync_bys +); + +1421 if +rc + < 0 ) + `LOG_NV +( + `ci_log +("%s: munmimesyn%d", +__FUNCTION__ +,c)); + +1426  +id +; + +1429  +id + = 0; id < +ni +-> +cks +-> +ts_n +; id++ ) { + +1430 if + `PKT_BUFSET_U_MMAPPED +( +ni +, +id +) ) { + +1431 #i +CI_CFG_PKTS_AS_HUGE_PAGES + + +1432 if +ni +-> +cks +-> +t +[ +id +]. +shm_id + >= 0 ) + +1433 +rc + = + `shmdt +( +ni +-> +pkt_bufs +[ +id +]); + +1437 +rc + = + `oo_sour_munm +( + `ci_tif_g_driv_hd +( +ni +), + +1438 +ni +-> +pkt_bufs +[ +id +], + +1439 +CI_CFG_PKT_BUF_SIZE + * +PKTS_PER_SET +); + +1441 if +rc + < 0 ) + +1442 + `LOG_NV +( + `ci_log +("%s: munmack%d", +__FUNCTION__ +, +rc +)); + +1447 #ifde +ONLOAD_OFE + + +1448 if +ni +-> +o + ! +NULL + ) { + +1449 +rc + = + `oo_sour_munm +( + `ci_tif_g_driv_hd +( +ni +), + +1450 +ni +-> +o +, + `NI_OPTS +i). +o_size +); + +1451 if +rc + < 0 ) + `LOG_NV +( + `ci_log +("%s: munm OFE %d", +__FUNCTION__ +,c)); + +1455 if +ni +-> +buf_r + ! +NULL + ) { + +1456 +rc + = + `oo_sour_munm +( + `ci_tif_g_driv_hd +( +ni +), + +1457 +ni +-> +buf_r +,i-> +e +-> +buf_mm_bys +); + +1458 if +rc + < 0 ) + `LOG_NV +( + `ci_log +("%s: munm buf%d", +__FUNCTION__ +,c)); + +1461 #i +CI_CFG_PIO + + +1462 if +ni +-> +pio_bys_md + !0 &&i-> +pio_r + ! +NULL + ) { + +1463 +rc + = + `oo_sour_munm +( + `ci_tif_g_driv_hd +( +ni +), + +1464 +ni +-> +pio_r +,i-> +pio_bys_md +); + +1465 if +rc + < 0 ) + `LOG_NV +( + `ci_log +("%s: munmi%d", +__FUNCTION__ +,c)); + +1469 if +ni +-> +io_r + ! +NULL + ) { + +1470 +rc + = + `oo_sour_munm +( + `ci_tif_g_driv_hd +( +ni +), + +1471 +ni +-> +io_r +,i-> +e +-> +io_mm_bys +); + +1472 if +rc + < 0 ) + `LOG_NV +( + `ci_log +("%s: munm i%d", +__FUNCTION__ +,c)); + +1475 +rc + = + `oo_sour_munm +( + `ci_tif_g_driv_hd +( +ni +), + +1476 +ni +-> +e +,i-> +mm_bys +); + +1477 +ni +-> +e + = +NULL +; + +1478 if +rc + < 0 ) + `LOG_NV +( + `ci_log +("%s: munm shed s %d", +__FUNCTION__ +,c)); + +1479 + } +} + +1482  + $tif_t_hr_mm +( +ci_tif +* +ni +) + +1484 +ci_tif_e +* +ns + = +ni +-> +e +; + +1485 * +p +; + +1486  +rc +; + +1489 +ni +-> +timesync + = +NULL +; + +1490 +ni +-> +io_r + = +NULL +; + +1491 #i +CI_CFG_PIO + + +1492 +ni +-> +pio_r + = +NULL +; + +1493 +ni +-> +pio_bys_md + = 0; + +1495 +ni +-> +buf_r + = +NULL +; + +1496 +ni +-> +cks + = +NULL +; + +1497 #ifde +ONLOAD_OFE + + +1498 +ni +-> +o + = +NULL +; + +1499 +ni +-> +o_chl + = +NULL +; + +1505 if +ns +-> +timesync_bys + != 0 ) { + +1506 +rc + = + `oo_sour_mm +( + `ci_tif_g_driv_hd +( +ni +), + +1507 +OO_MMAP_TYPE_NETIF +, + +1508 +CI_NETIF_MMAP_ID_TIMESYNC +, +ns +-> +timesync_bys +, + +1509 +OO_MMAP_FLAG_READONLY +, & +p +); + +1510 if +rc + < 0 ) { + +1511 + `LOG_NV +( + `ci_log +("%s: oo_sour_mmimesyn%d", +__FUNCTION__ +, +rc +)); + +1512  +1 +; + +1514 +ni +-> +timesync + = +p +; + +1521 if +ns +-> +io_mm_bys + != 0 ) { + +1522 +rc + = + `oo_sour_mm +( + `ci_tif_g_driv_hd +( +ni +), + +1523 +OO_MMAP_TYPE_NETIF +, + +1524 +CI_NETIF_MMAP_ID_IO +, +ns +-> +io_mm_bys +, + +1525 +OO_MMAP_FLAG_DEFAULT +, & +p +); + +1526 if +rc + < 0 ) { + +1527 + `LOG_NV +( + `ci_log +("%s: oo_sour_mm i%d", +__FUNCTION__ +, +rc +)); + +1528  +1 +; + +1530 +ni +-> +io_r + = (* +p +; + +1533 #i +CI_CFG_PIO + + +1537 if +ns +-> +pio_mm_bys + != 0 ) { + +1538 +rc + = + `oo_sour_mm +( + `ci_tif_g_driv_hd +( +ni +), + +1539 +OO_MMAP_TYPE_NETIF +, + +1540 +CI_NETIF_MMAP_ID_PIO +, +ns +-> +pio_mm_bys +, + +1541 +OO_MMAP_FLAG_DEFAULT +, & +p +); + +1542 if +rc + < 0 ) { + +1543 + `LOG_NV +( + `ci_log +("%s: oo_sour_mmi%d", +__FUNCTION__ +, +rc +)); + +1544  +2 +; + +1546 +ni +-> +pio_r + = ( +ut8_t +* +p +; + +1549 +ni +-> +pio_bys_md + = +ns +-> +pio_mm_bys +; + +1556 if +ns +-> +buf_mm_bys + != 0 ) { + +1557 +rc + = + `oo_sour_mm +( + `ci_tif_g_driv_hd +( +ni +), + +1558 +OO_MMAP_TYPE_NETIF +, + +1559 +CI_NETIF_MMAP_ID_IOBUFS +, +ns +-> +buf_mm_bys +, + +1560 +OO_MMAP_FLAG_DEFAULT +, & +p +); + +1561 if +rc + < 0 ) { + +1562 + `LOG_NV +( + `ci_log +("%s: oo_sour_mm iobuf%d", +__FUNCTION__ +, +rc +)); + +1563  +2 +; + +1565 +ni +-> +buf_r + = (* +p +; + +1568 #ifde +ONLOAD_OFE + + +1572 if + `NI_OPTS +( +ni +). +o_size + != 0 ) { + +1573  +o_s_uge + + +; + +1574 +o_us + +c +; + +1576 +rc + = + `oo_sour_mm +( + `ci_tif_g_driv_hd +( +ni +), + +1577 +OO_MMAP_TYPE_NETIF +, + +1578 +CI_NETIF_MMAP_ID_OFE_RO +, + `NI_OPTS +( +ni +). +o_size +, + +1579 +OO_MMAP_FLAG_READONLY +, & +p +); + +1580 if +rc + < 0 ) { + +1581 + `LOG_NV +( + `ci_log +("%s: oo_sour_mm OFEng%d", +__FUNCTION__ +, +rc +)); + +1582  +2 +; + +1584 +ni +-> +o + = +p +; + +1589 +c + = + `o_s_rw_mem +( +p +, & + +); + +1590 if +c + = +OFE_OK + && + +. +max + != 0 ) { + +1591 +p + = (* + + `NI_OPTS +( +ni +). +o_size + - + +. +max +; + +1592 +rc + = + `oo_sour_mm +( + `ci_tif_g_driv_hd +( +ni +), + +1593 +OO_MMAP_TYPE_NETIF +, + +1594 +CI_NETIF_MMAP_ID_OFE_RW +, + +. +max +, + +1595 +OO_MMAP_FLAG_FIXED +, & +p +); + +1596 if +rc + < 0 ) { + +1597 + `LOG_NV +( + `ci_log +("%s: oo_resource_mmapw-part of OFEngine %d", + +1598 +__FUNCTION__ +, +rc +)); + +1599  +2 +; + +1607 +2 +: + +1608 + `tif_t_hr_munm +( +ni +); + +1609 +1 +: + +1610  +rc +; + +1611 + } +} + +1614  + $_ef_vi +( +ci_tif +* +ni +,  +nic_i +,  +vi_e_offt +, + +1615  +vi_io_offt +, * +vi_mem_offt +, + +1616 +ef_vi +* +vi +,  +vi_ +,  +evq_bys +, + +1617  +txq_size +, +ef_vi_s +* +vi_s +) + +1619 +ef_vi_e +* +e + = (*((* +ni +->+ +vi_e_offt +); + +1620 +ci_tif_e_nic_t +* +n + = &( +ni +-> +e +-> +nic +[ +nic_i +]); + +1621 +ut32_t +* +ids + = (*( +e + + 1); + +1622  +vi_b_off + = +vi_ + * 8192; + +1624 + `ef_vi_ +( +vi +, + `ef_vi_ch_om_efhw_ch +( +n +-> +vi_ch +),-> +vi_v +, + +1625 +n +-> +vi_visi +,-> +vi_ags +, +e +); + +1626 + `ef_vi__out_ags +( +vi +, +n +-> +vi_out_ags +); + +1627 +vi_io_offt + + +vi_b_off + & ( +CI_PAGE_SIZE + - 1); + +1628 + `ef_vi__io +( +vi +, +ni +-> +io_r + + +vi_io_offt +); + +1629 + `ef_vi__tim +( +vi +, +n +-> +tim_qutum_ns +); + +1630 + `ef_vi__evq +( +vi +, +evq_bys + / 8, +ni +-> +buf_r + + * +vi_mem_offt +); + +1631 * +vi_mem_offt + +( +evq_bys + + +CI_PAGE_SIZE + - 1& +CI_PAGE_MASK +; + +1632 + `ef_vi__rxq +( +vi +, +n +-> +vi_rxq_size +, +ni +-> +buf_r + + * +vi_mem_offt +, +ids +, + +1633 +n +-> +rx_efix_n +); + +1634 * +vi_mem_offt + +( + `ef_vi_rx_rg_bys +( +vi ++ +CI_PAGE_SIZE +-1& +CI_PAGE_MASK +; + +1635 +ids + + +n +-> +vi_rxq_size +; + +1636 + `ef_vi__txq +( +vi +, +txq_size +, +ni +-> +buf_r + + * +vi_mem_offt +, +ids +); + +1637 +vi +-> +vi_i + = +vi_ +; + +1638 + `ef_vi__rx_timeampg +( +vi +, +n +-> +rx_ts_cܻi +); + +1639 + `ef_vi__tx_timeampg +( +vi +, +n +-> +tx_ts_cܻi +); + +1640 * +vi_mem_offt + +( + `ef_vi_tx_rg_bys +( +vi ++ +CI_PAGE_SIZE +-1& +CI_PAGE_MASK +; + +1641 + `ef_vi_add_queue +( +vi +, vi); + +1642 + `ef_vi_t_s_buf +( +vi +, +vi_s +); + +1643 + } +} + +1646  + $tif_t_hr_bud +( +ci_tif +* +ni +) + +1653 +ci_tif_e +* +ns + = +ni +-> +e +; + +1654  +rc +, +nic_i +, +size +; + +1655  +vi_io_offt +, +vi_mem_offt +, +vi_e_offt +; + +1656  +vi_e_bys +; + +1657 #i +CI_CFG_SEPARATE_UDP_RXQ + + +1658  +udp_rxq_vi_e_bys + = 0; + +1660 #i +CI_CFG_PIO + + +1661  +pio_io_offt +, +pio_buf_offt + = 0, +vi_b_off +; + +1667 +rc + = + `tif_t_hr_mm +( +ni +); + +1668 if +rc + < 0 ) c; + +1678 +vi_io_offt + = 0; + +1679 #i +CI_CFG_PIO + + +1680 +pio_io_offt + = 0; + +1682 +vi_mem_offt + = 0; + +1683 +vi_e_offt + = (* +ni +-> +e +); + +1685 + `OO_STACK_FOR_EACH_INTF_I +( +ni +, +nic_i +) { + +1686 +ci_tif_e_nic_t +* +n + = & +ns +-> +nic +[ +nic_i +]; + +1688 + `LOG_NV +( + `ci_log +("%s:i->io_ptr=%p io_offset=%d mem_offset=%d " + +1689 "e_offt=%d", +__FUNCTION__ +, +ni +-> +io_r +, + +1690 +vi_io_offt +, +vi_mem_offt +, +vi_e_offt +)); + +1692 + `ci_as +(( +vi_mem_offt + & ( +CI_PAGE_SIZE + - 1)) == 0); + +1694 +rc + = + `ef_vi_ch_om_efhw_ch +( +n +-> +vi_ch +); + +1695 + `CI_TEST +( +rc + >= 0); + +1697 + `_ef_vi +( +ni +, +nic_i +, +vi_e_offt +, +vi_io_offt +, & +vi_mem_offt +, + +1698 & +ni +-> +nic_hw +[ +nic_i +]. +vi +, +n +-> +vi_ +,-> +vi_evq_bys +, + +1699 +n +-> +vi_txq_size +, & +ni +-> +e +-> +vi_s +); + +1700 +vi_e_bys + = + `ef_vi_lc_e_bys +( +n +-> +vi_rxq_size +, + +1701 +n +-> +vi_txq_size +); + +1702 +vi_e_offt + + +vi_e_bys +; + +1703 +vi_io_offt + + +n +-> +vi_io_mm_bys +; + +1705 #i +CI_CFG_SEPARATE_UDP_RXQ + + +1706 if + `NI_OPTS +( +ni +). +_udp_rxq + ) { + +1707 + `_ef_vi +( +ni +, +nic_i +, +vi_e_offt +, +vi_io_offt +, & +vi_mem_offt +, + +1708 & +ni +-> +nic_hw +[ +nic_i +]. +udp_rxq_vi +, +n +-> +udp_rxq_vi_ +, + +1709 +n +-> +udp_rxq_vi_evq_bys +, 0, & +ni +-> +e +-> +udp_rxq_vi_s +); + +1711 +udp_rxq_vi_e_bys + = + `ef_vi_lc_e_bys +( +n +-> +vi_rxq_size +, 0); + +1712 +vi_e_offt + + +udp_rxq_vi_e_bys +; + +1713 +vi_io_offt + + +n +-> +vi_io_mm_bys +; + +1715 + `ci_as +( +vi_e_bys + + +udp_rxq_vi_e_bys + = +ns +->vi_state_bytes); + +1717 + `ci_as +( +vi_e_bys + = +ns +->vi_state_bytes); + +1720 if + `NI_OPTS +( +ni +). +tx_push + ) + +1721 + `ef_vi_t_tx_push_thshd +(& +ni +-> +nic_hw +[ +nic_i +]. +vi +, + +1722 + `NI_OPTS +( +ni +). +tx_push_thsh +); + +1724 #i +CI_CFG_PIO + + +1725 if + `NI_OPTS +( +ni +). +pio + && + +1726 ( +ns +-> +nic +[ +nic_i +]. +oo_vi_ags + & +OO_VI_FLAGS_PIO_EN +) ) { + +1728 + `ci_as +( +n +-> +pio_io_mm_bys + != 0); + +1730 + `ci_as_ +( +pio_io_offt +, +ns +-> +pio_mm_bys +); + +1732 + `ci_as_ +( +n +-> +pio_io_n +,-> +pio_io_mm_bys +); + +1736 +ni +-> +nic_hw +[ +nic_i +]. +pio +. +pio_bufr + = ( +ut8_t +*) +ns + +s-> +pio_bufs_ofs + + + +1737 +pio_buf_offt +; + +1738 +pio_buf_offt + + +n +-> +pio_io_n +; + +1740 +vi_b_off + = +n +-> +vi_ + * 8192; + +1741 +ni +-> +nic_hw +[ +nic_i +]. +pio +. +pio_io + =i-> +pio_r + + +pio_io_offt +; + +1742 +ni +-> +nic_hw +[ +nic_i +]. +pio +. +pio_io + +( +vi_b_off + + 4096& ( +CI_PAGE_SIZE + - 1); + +1743 +ni +-> +nic_hw +[ +nic_i +]. +pio +. +pio_n + = +n +-> +pio_io_n +; + +1744 +ni +-> +nic_hw +[ +nic_i +]. +vi +. +lked_pio + = &ni->nic_hw[nic_i]. +pio +; + +1745 +pio_io_offt + + +n +-> +pio_io_mm_bys +; + +1751 + `ci__tim_e__ul +( +ni +); + +1754 + `tif_t_hr_bud2 +( +ni +); + +1755 +ni +-> +pkt_bufs + = + `CI_ALLOC_ARRAY +(*,i-> +cks +-> +ts_max +); + +1756 + `CI_ZERO_ARRAY +( +ni +-> +pkt_bufs +,i-> +cks +-> +ts_max +); + +1762 +size + = +ns +-> +b_ofs + -s-> +buf_ofs + - ( +oo_pktbuf_mag +); + +1764 if +ns +-> +buf_ofs + !( +ci_tif_e +) + + +1765 +ns +-> +vi_e_bys + * + `oo_ack_tf_max +( +ni +) || + +1766 +size + % ( +oo_pktbuf_t +) != 0 || + +1767 +ni +-> +cks +-> +ts_max + < 1 || + +1768 +size + / ( +oo_pktbuf_t +< +ni +-> +cks +-> +ts_max + ) { + +1773 + `ci_log +("ERROR: data structureayout mismatch between kernelnd " + +1775 + `ci_log +("ns->buf_ofs=%d !%zd + %d * %d", +ns +-> +buf_ofs +, + +1776 ( +ci_tif_e +), +ns +-> +vi_e_bys +, + `oo_ack_tf_max +( +ni +)); + +1777 + `ci_log +("oo_pktbuf_set=%zd, size=%d, sets_max=%d", + +1778 ( +oo_pktbuf_t +), +size +, +ni +-> +cks +-> +ts_max +); + +1779 + `ci_log +("a: %d !0", +size + % ( +oo_pktbuf_t +) != 0); + +1780 + `ci_log +("b: 1 <%zd <%d ", +size + / ( +oo_pktbuf_t +), + +1781 +ni +-> +cks +-> +ts_max +); + +1782  - +EINVAL +; + +1786 + } +} + +1792 #ide +__KERNEL__ + + +1795 + $tif_t_hr_e +( +ci_tif +* +ni +,  +tif_mm_bys +) + +1797 * +p +; + +1798  +rc +; + +1800 +rc + = + `oo_sour_mm +( + `ci_tif_g_driv_hd +( +ni +), + +1801 +OO_MMAP_TYPE_NETIF +, + +1802 +CI_NETIF_MMAP_ID_STATE +, +tif_mm_bys +, + +1803 +OO_MMAP_FLAG_DEFAULT +, & +p +); + +1804 if +rc + < 0 ) { + +1805 + `LOG_NV +( + `ci_log +("tif_t_hr_e: oo_sour_mm %d", +rc +)); + +1806  +rc +; + +1808 +ni +-> +e + = ( +ci_tif_e +* +p +; + +1809 +ni +-> +mm_bys + = +tif_mm_bys +; + +1811 +rc + = + `tif_t_hr_bud +( +ni +); + +1812 if +rc + < 0 ) { + +1813 + `ci_log +("%s:if_t_hr_bud %d", +__FUNCTION__ +, +rc +); + +1814 + `oo_sour_munm +( + `ci_tif_g_driv_hd +( +ni +), + +1815 +ni +-> +e +, +tif_mm_bys +); + +1816  +rc +; + +1819  +rc +; + +1820 + } +} + +1825 +ci_le +  + $tif_t_hr_ +( +ci_tif +* +ni +) + +1827 #ifde +__KERNEL__ + + +1828 + `eb_thr_a +( + `tif2t_hr_sour +( +ni +)); + +1830 if +ni +-> +e + ! +NULL + ) + +1831 + `tif_t_hr_munm +( +ni +); + +1833 + } +} + +1836  + $_sour_loc +( +ci_sour_ld_loc_t +* + +, + +1837 cڡ +ci_tif_cfig_ts +* +ts +, + +1838  +ags +, cڡ * +me +, + +1839 +ci_fixed_dest_t + +_hd +) + +1841 + `memt +( + +, 0, (*ra)); + +1842 + `CI_USER_PTR_SET +( + +-> +_ts +, +ts +); + +1843 + +-> +_ags + = ( +ci_ut16 + +ags +; + +1847 + `y +( + +-> +_vsi +, +ONLOAD_VERSION +, (ra->in_version)); + +1848 + `y +( + +-> +_uk_tf_v +, +OO_UK_INTF_VER +, (ra->in_uk_intf_ver)); + +1849 #ide +__KERNEL__ + + +1850 if +ags + & +CI_NETIF_FLAG_DO_ALLOCATE_SCALABLE_FILTERS_RSS + ) { + +1851 + +-> +_u_size + = +CITP_OPTS +. +u_size +; + +1852 + +-> +_u_t + = +CITP_OPTS +. +u_t_t +; + +1853 + `y +( + +-> +_me +, +CITP_OPTS +. +u_me +, +CI_CFG_STACK_NAME_LEN +); + +1857 if +me + ! +NULL + ) + +1858 + `y +( + +-> +_me +, +me +, +CI_CFG_STACK_NAME_LEN +); + +1859 + +-> +_hd + = cplane_handle; + +1860 + } +} + +1863 #ide +__KERNEL__ + + +1865 #ifde +ONLOAD_OFE + + +1867 + $o_tup +( +ef_driv_hd + +fd +, +ci_tif +* +ni +, cڡ * +o_cfig_fe +) + +1869  +o_s_uge + + +; + +1870 +o_us + +c +; + +1871  +le +[200]; + +1872 +FILE +* +f +; + +1873  +rc +; + +1875 if +o_cfig_fe + ! +NULL + ) { + +1876 if( +f + = + `fݒ +( +o_cfig_fe +, "r")= +NULL + ) { + +1877 + `ci_log +("[%s] ERROR: failedo open filterngine configuration file " + +1878 "'%s': %s", +ni +-> +e +-> +ty_me +, +o_cfig_fe +, + +1879 + ` +( +o +)); + +1882  + `fgs +( +le +, ֚e), +f +! +NULL + ) { + +1883 +oo_o_cfig_t + + +; + +1884 + +. +n + = + ` +( +le +); + +1885 + `CI_USER_PTR_SET +( + +. +r +, +le +); + +1886 +rc + = + `oo_sour_ +( +fd +, +OO_IOC_OFE_CONFIG +, & + +); + +1887 if +rc + != 0 ) { + +1888 + `ci_log +("[%s]rror in filterngine config file '%s': %s", + +1889 +ni +-> +e +-> +ty_me +, +o_cfig_fe +, +le +); + +1890 if + `o_ge_g_ϡ_r +( +ni +-> +o +! +NULL + ) { + +1891 + `ci_log +("OFE ERROR: %s", + `o_ge_g_ϡ_r +( +ni +-> +o +)); + +1894  +r +[ +CI_LOG_MAX_LINE +]; + +1895 + `oo_sour_ +( +fd +, +OO_IOC_OFE_GET_LAST_ERROR +, +r +); + +1896 +r +[ +CI_LOG_MAX_LINE +-1] = '\0'; + +1897 + `ci_log +("OFE ERROR: %s", +r +); + +1902 + `oo_sour_ +( +fd +, +OO_IOC_OFE_CONFIG_DONE +, +NULL +); + +1905 +ni +-> +o_chl + = + `mloc +( + `o_chl_bys +i-> +o +)); + +1906 +c + = + `o_chl_ +( +ni +-> +o_chl +,i-> +o +, 0); + +1907 if +c + ! +OFE_OK + ) { + +1908 + `ci_log +("[%s] ERROR: o_chl_ faed: %s", +ni +-> +e +-> +ty_me +, + +1909 + `o_ge_g_ϡ_r +( +ni +-> +o +)); + +1915 +c + = + `o_s_rw_mem +( +ni +-> +o +, & + +); + +1916 if +c + = +OFE_OK + && + +. +max + != 0 ) { + +1917 * +p + = (* +ni +-> +o + + + `NI_OPTS +i). +o_size + - + +. +max +; + +1918 +rc + = + `oo_sour_mm +( + `ci_tif_g_driv_hd +( +ni +), + +1919 +OO_MMAP_TYPE_NETIF +, + +1920 +CI_NETIF_MMAP_ID_OFE_RW +, + +. +max +, + +1921 +OO_MMAP_FLAG_FIXED +, & +p +); + +1922 if +rc + != 0 ) { + +1923 + `ci_log +("[%s] failedoemapead-writeart of Onload Filter Engine", + +1924 +ni +-> +e +-> +ty_me +); + +1928 + } +} + +1932 + $tif_t_hr_loc_u +( +ef_driv_hd + +fd +, +ci_tif +* +ni +, + +1933 cڡ +ci_tif_cfig_ts +* +ts +,  +ags +, + +1934 cڡ * +ack_me +) + +1936 +ci_sour_ld_loc_t + + +; + +1937  +rc +; + +1938 +ci_tif_e +* +ns +; + +1939 * +p +; + +1944 + `_sour_loc +(& + +, +ts +, +ags +, +ack_me +, +ni +-> + +-> +fd +); + +1946 +rc + = + `oo_sour_loc +( +fd +, & + +); + +1947 if +rc + < 0 ) { + +1948  +rc + ) { + +1949 - +ELIBACC +: { + +1950  + +; + +1951 if! + + ) { + +1952 + + = 1; + +1953 + `ci_log +("ERROR: Driver/Library version mismatch detected."); + +1954 + `ci_log +("Thispplication willot beccelerated."); + +1955 + `ci_log +("HINT: Mostikely youeedoeloadhe sfcnd onload " + +1960 - +EEXIST +: + +1967 - +ENODEV +: + +1968 + `LOG_E +( + `ci_log +("%s: ENODEV.\n" + +1973 +__FUNCTION__ +)); + +1976 + `LOG_E +( + `ci_log +("%s: ERROR: Failedollocate stack (rc=%d)\n" + +1979 +__FUNCTION__ +, +rc +)); + +1982  +rc +; + +1988 +ni +-> +nic_t + = + +. +out_nic_t +; + +1989 + `LOG_NC +( + `ci_log +("%s:i%" +EFRM_NIC_SET_FMT +, +__FUNCTION__ +, + +1990 + `em_nic_t_i_g +(& +ni +-> +nic_t +))); + +1991 +ni +-> +mm_bys + = + +. +out_tif_mm_bys +; + +1996 +rc + = + `oo_sour_mm +( +fd +, +OO_MMAP_TYPE_NETIF +, +CI_NETIF_MMAP_ID_STATE +, + +1997 + +. +out_tif_mm_bys +, +OO_MMAP_FLAG_DEFAULT +, & +p +); + +1998 if +rc + < 0 ) { + +1999 + `LOG_E +( + `ci_log +("%s: oo_sour_mm %d", +__FUNCTION__ +, +rc +)); + +2001  +rc +; + +2004 +ns + = +ni +-> +e + = ( +ci_tif_e +* +p +; + +2005 + `ci_as_equ +( + +. +out_tif_mm_bys +, +ns +-> +tif_mm_bys +); + +2010 if!!( +ns +-> +ags + & +CI_NETIF_FLAG_DEBUG +! + `CI_DEBUG +(1+)0 ) { + +2011 + `ci_log +("ERROR: Driver/Library debug build mismatch detected (%d,%d)", + +2012 !!( +ns +-> +ags + & +CI_NETIF_FLAG_DEBUG +), + `CI_DEBUG +(1+)0 ); + +2013 +rc + = - +ELIBACC +; + +2014  + +; + +2017 if +ns +-> +ags + & +CI_NETIF_FLAG_ONLOAD_UNSUPPORTED + ) { + +2018 + `ci_log +("*** Wng: u o" +ONLOAD_PRODUCT +" withhisdapter isikely"); + +2019 + `ci_log +("***o show suboptimalerformance forll cases otherhanhe"); + +2020 + `ci_log +("*** mostrivial benchmarks. Please see your Solarflare"); + +2021 + `ci_log +("***epresentative/resellero obtainn Onload-capable"); + +2022 + `ci_log +("***dapter."); + +2028 +rc + = + `tif_t_hr_bud +( +ni +); + +2029 if +rc + < 0 ) { + +2030 + `LOG_E +( + `ci_log +("%s:if_t_hr_bud faedc=%d", +__FUNCTION__ +, +rc +)); + +2031  + +; + +2034 #ifde +ONLOAD_OFE + + +2035 if +ni +-> +o + ! +NULL + ) + +2036 + `o_tup +( +fd +, +ni +, + `gv +("EF_OFE_CONFIG_FILE")); + +2041 + +: + +2042 + `tif_t_hr_ +( +ni +); + +2043  +rc +; + +2044 + } +} + +2049 + $tif_t_hr_loc_k +( +ci_tif +** +ni_out +, cڡ +ci_tif_cfig_ts +* +ts +, + +2050  +ags +,  +ifdis_n +) + +2052 +ci_sour_ld_loc_t + + +; + +2053 +t_hr_sour_t +* +s +; + +2054 +ci_tif +* +ni +; + +2055  +rc +; + +2057 + `_sour_loc +(& + +, +ts +, +ags +, +NULL +, -1); + +2058 +rc + = + `t_hr_loc_kl +(& + +, +ts +, +ifdis_n +, & +s +); + +2059 if +rc + < 0 ) { + +2060 + `ci_log +("%s:_hr_loc_kl(ed (%d)", +__FUNCTION__ +, +rc +); + +2061  +rc +; + +2064 +ni + = & +s +-> +tif +; + +2065 +ni +-> +nic_t + = + +. +out_nic_t +; + +2066 + `tif_t_hr_bud2 +( +ni +); + +2068 * +ni_out + = +ni +; + +2070 + } +} + +2082 #i! +defed +( +__KERNEL__ +&& defed( +_WIN32 +) + +2084  +DWORD + +WINAPI + + $ci_x_thad +( +LPVOID + +Pam +) + +2086 +ci_tif +* +ni + = (ci_tif* +Pam +; + +2087 +DWORD + +su +; + +2089 +su + = + `WaFSgObjeEx +( +ni +-> +d_x_thad +, +INFINITE +, +TRUE +); + +2090  +su + ! +WAIT_OBJECT_0 + ); + +2091 + `CloHd +( +ni +-> +d_x_thad +); + +2093 + } +} + +2096  + $mk_x_thad +( +ci_tif +* +ni +) + +2102 if( +ni +-> +d_x_thad + = + `CeEvt +( +NULL +, +TRUE +, +FALSE +, NULL)) == NULL ) { + +2103  +r + = + `GLaE +(); + +2104 + `ci_log +("Faedv%d", +r +); + +2105  - +r +; + +2107 +ni +-> +x_thad + = + `CeThad +( +NULL +,0, +ci_x_thad +,i, 0, NULL); + +2108 if +ni +-> +x_thad + = +NULL + ) { + +2109  +r + = + `GLaE +(); + +2110 + `ci_log +("Faedhad %d", +r +); + +2111  - +r +; + +2113 + `SThadPriܙy +( +ni +-> +x_thad +, +THREAD_PRIORITY_HIGHEST +); + +2114 + } +} + +2118  + $ci_tif_ny_checks +() + +2121 + `ci_as_ +(( +cp_waab_obj +), +CI_PAGE_SIZE +); + +2122 + `ci_as_equ +( +EP_BUF_SIZE + * +EP_BUF_PER_PAGE +, +CI_PAGE_SIZE +); + +2123 + `ci_as_ +(( +cp_waab_obj +), +EP_BUF_SIZE +); + +2124 + `ci_as_equ +((1u << +CI_SB_FLAG_WAKE_RX_B +), +CI_SB_FLAG_WAKE_RX +); + +2125 + `ci_as_equ +((1u << +CI_SB_FLAG_WAKE_TX_B +), +CI_SB_FLAG_WAKE_TX +); + +2126 + `ci_as_equ +(( +ci_ni_aux_mem +), +CI_AUX_MEM_SIZE +); + +2130 + `ci_as_equ + +CI_AUX_MEM_SIZE + * ( +AUX_PER_BUF + + 1), +EP_BUF_SIZE +); + +2132 #ide +NDEBUG + + +2134  +i + = + `CI_MEMBER_OFFSET +( +ci__ched_hdrs +, + +); + +2135  +e + = + `CI_MEMBER_OFFSET +( +ci__ched_hdrs +, +h_hd +); + +2136  +h + = + `CI_MEMBER_OFFSET +( +ci__ched_hdrs +, +hwpt +); + +2137 + `ci_as_equ +( +i + - +e +, +ETH_HLEN + + 4); + +2138 + `ci_as_equ +( +i + - +h +, +ETH_HLEN + + 4 + 2); + +2143 if( +cp_waab_obj +* 2 < +EP_BUF_SIZE + ) + +2144 + `ci_log +("%s: EP_BUF_SIZE=%dghesry (%d)", +__FUNCTION__ +, + +2145 (( +cp_waab_obj +), +EP_BUF_SIZE +); + +2146 + } +} + +2149  + $ci_tif_pkt_rve +( +ci_tif +* +ni +,  +n +, +oo_pkt_p +* +p_pkt_li +) + +2151 +ci__pkt_fmt +* +pkt +; + +2152  +i +; + +2154  +i + = 0; i < +n +; ++i ) { + +2155 if( +pkt + = + `ci_tif_pkt_loc +( +ni +)= +NULL + ) + +2157 * +p_pkt_li + = + `OO_PKT_P +( +pkt +); + +2158 +p_pkt_li + = & +pkt +-> +xt +; + +2160 * +p_pkt_li + = +OO_PP_NULL +; + +2161  +i +; + +2162 + } +} + +2165  + $ci_tif_pkt_rve_ +( +ci_tif +* +ni +, +oo_pkt_p + +pkt_li +,  +n +) + +2167 +ci__pkt_fmt +* +pkt +; + +2168  + `OO_PP_NOT_NULL +( +pkt_li +) ) { + +2169 + `CI_DEBUG +(-- +n +); + +2170 +pkt + = + `PKT_CHK +( +ni +, +pkt_li +); + +2171 +pkt_li + = +pkt +-> +xt +; + +2172 + `ci_tif_pkt_a +( +ni +, +pkt +); + +2175 + `ci_as_equ +( +n +, 0); + +2176 + `ci_as +( + `OO_PP_IS_NULL +( +pkt_li +)); + +2177 + } +} + +2180 #ide +__KERNEL__ + + +2182  + $ci_tif_pkt_eu +( +ci_tif +* +ni +) + +2194 +ci__pkt_fmt +* +pkt +; + +2195  +i +, +n +; + +2196  +rc + = 0; + +2198 if + `NI_OPTS +( +ni +). +eu_cks + ) { + +2199 +n + = +ni +-> +cks +-> +n_pkts_lod +; + +2200  +i + = 0; i < +n +; ++i ) { + +2201 +pkt + = + `PKT +( +ni +, +i +); + +2202 +rc + +*(vީ +ci_t32 +*)(& +pkt +-> +fcou +); + +2205  +rc +; + +2206 + } +} + +2209  + $ci_tif_pkt_eu_rve +( +ci_tif +* +ni +) + +2211 +oo_pkt_p + +pkt_li +; + +2212  +n +; + +2213  +au_max_cks + = +ni +-> +cks +-> +ts_max + * +PKTS_PER_SET +; + +2219  +rg_lod + = + `CI_MIN + + `NI_OPTS +( +ni +). +eu_cks +, + +2220 + `CI_MAX +( + `NI_OPTS +( +ni +). +max_cks +, + +2221 +au_max_cks +) ); + +2222  +ady_rved + = ( +ni +-> +cks +-> +n_pkts_lod + -i->cks-> +n_ +); + +2224 if! + `NI_OPTS +( +ni +). +eu_cks + ) + +2227 + `ci_tif_lock +( +ni +); + +2229 +n + = + `ci_tif_pkt_rve +( +ni +, +rg_lod + - +ady_rved +, & +pkt_li +); + +2230 if +ni +-> +cks +-> +n_pkts_lod + < +rg_lod + ) + +2231 + `LOG_E +( + `ci_log +("%s: Prefaulting onlyllocated %d of %d (reserved +%d)", + +2232 +__FUNCTION__ +, + +2233 +ni +-> +cks +-> +n_pkts_lod +, + +2234 +rg_lod +, + +2235 +n +)); + +2236 + `ci_tif_pkt_rve_ +( +ni +, +pkt_li +, +n +); + +2237 + `ci_tif_uock +( +ni +); + +2238 + } +} + +2241 #i +CI_CFG_PIO + && ! +CI_CFG_USE_PIO + + +2246  + $check_pio +( +ci_tif_cfig_ts +* +ts +) + +2248 if +ts +-> +pio + == 2 ) { + +2250 + `ci_log +("ERROR: PIOot supported onhis system"); + +2251  - +EINVAL +; + +2254 + } +} + +2258  + $ci_tif_u_eu +( +ci_tif +* +ni +) + +2260 + `ci_tif_pkt_eu_rve +( +ni +); + +2261 + `ci_tif_pkt_eu +( +ni +); + +2262 + } +} + +2264  + $ci_tif_ +( +ci_tif +* +ni +, +ef_driv_hd + +fd +) + +2266 +ni +-> +driv_hd + = +fd +; + +2267 + `CI_MAGIC_SET +( +ni +, +NETIF_MAGIC +); + +2268 +ni +-> +ags + = 0; + +2269 +ni +-> +r_ags + = 0; + +2271 +ni +-> + + = + `ci_g_hd +( +CPLANE_API_VERSION +, -1, +CITP_OPTS +. +fd_ba +); + +2272 if +ni +-> + + = +NULL + ) { + +2273 + `LOG_S +( + `ci_log +("%s: faedg cڌޅ hd", +__func__ +)); + +2274  - +EINVAL +; + +2278 + } +} + +2280  + $ci_tif_ +( +ci_tif +* +ni +, +ef_driv_hd + +fd +, cڡ * +ack_me +, + +2281  +ags +) + +2283 +ci_tif_cfig_ts +* +ts +; + +2284  +oo_r_thad +* +r_thad +; + +2285  +rc +; + +2287 +r_thad + = + `oo_r_thad_g +(); + +2288 +ts + = +r_thad +-> +thad_lol_tif_ts + ! +NULL +? + +2289 +r_thad +-> +thad_lol_tif_ts +: + +2290 & +ci_cfg_ts +. +tif_ts +; + +2292 + `ci_as +( +ni +); + +2293 + `ci_tif_ny_checks +(); + +2295 #i +CI_CFG_PIO + && ! +CI_CFG_USE_PIO + + +2296 +rc + = + `check_pio +( +ts +); + +2297 if +rc + < 0 ) c; + +2300 +rc + = + `ci_tif_ +( +ni +, +fd +); + +2301 if +rc + < 0 ) + +2302  +rc +; + +2307 if( +rc + = + `tif_t_hr_loc_u +( +fd +, +ni +, +ts +, +ags +, +ack_me +)) < 0 ) + +2308  +rc +; + +2310 + `ci_tif_pkt_eu_rve +( +ni +); + +2311 + `ci_tif_pkt_eu +( +ni +); + +2312 + `oo_omic_t +(& +ni +-> +f_cou +, 0); + +2314 + `NI_LOG +( +ni +, +BANNER +, + +2315 "Usg " +ONLOAD_PRODUCT +" " +ONLOAD_VERSION +" " +ONLOAD_COPYRIGHT +" [%s]", + +2316 +ni +-> +e +-> +ty_me +); + +2319 + } +} + +2323  + $ci_tif_t_rxq_lim +( +ci_tif +* +ni +) + +2325  +tf_i +, +n_tf +, +max_rg_pkts +, +fl_lim +; + +2326  +rc + = 0, +rxq_p + = 0; + +2332 +n_tf + = 0; + +2333 + `OO_STACK_FOR_EACH_INTF_I +( +ni +, +tf_i +) { + +2334 +ef_vi +* +vi + = + `ci_tif_rx_vi +( +ni +, +tf_i +); + +2335 +rxq_p + = + `ef_vi_ive_cy +( +vi +); + +2336 ++ +n_tf +; + +2343 +max_rg_pkts + = + `NI_OPTS +( +ni +). +max_rx_cks + * 4 / 5; + +2344 +fl_lim + = +rxq_p +; + +2345 if +fl_lim + * +n_tf + > +max_rg_pkts + ) + +2346 +fl_lim + = +max_rg_pkts + / +n_tf +; + +2347 if +fl_lim + < + `NI_OPTS +( +ni +). +rxq_lim + ) { + +2348 if +fl_lim + < +rxq_p + ) + +2349 + `LOG_W +( + `ci_log +("WARNING: " +N_FMT + "RXing filleveleduced from %do %d " + +2351 + `N_PRI_ARGS +( +ni +), + `NI_OPTS +i). +rxq_lim +, +fl_lim +, + +2352 +max_rg_pkts +, +rxq_p +, +n_tf +)); + +2353 +ni +-> +ts +. +rxq_lim + = +fl_lim +; + +2354 +ni +-> +e +-> +ts +. +rxq_lim + = +fl_lim +; + +2356 if +ni +-> +nic_n + == 0 ) { + +2358 + `NI_OPTS +( +ni +). +rxq_lim + = +CI_CFG_RX_DESC_BATCH +; + +2360 if + `NI_OPTS +( +ni +). +rxq_lim + < NI_OPTSi). +rxq_m + ) { + +2364 + `LOG_E +( + `ci_log +("ERROR: " +N_FMT + "rxq_limit=%d isoo small (rxq_min=%d)", + +2365 + `N_PRI_ARGS +( +ni +), + `NI_OPTS +i). +rxq_lim +, NI_OPTSi). +rxq_m +); + +2366 + `ci_log +("HINT: Usearger value for EF_RXQ_LIMIT or " + +2368 +rc + = - +ENOMEM +; + +2373 + `NI_OPTS +( +ni +). +rxq_lim + = 2 * +CI_CFG_RX_DESC_BATCH + + 1; + +2375 +ni +-> +e +-> +rxq_lim + = + `NI_OPTS +(ni).rxq_limit; + +2376  +rc +; + +2377 + } +} + +2380  + $__ci_tif__fl_rx_rgs +( +ci_tif +* +ni +) + +2385  +tf_i +, +rxq_lim + = +ni +-> +e +->rxq_limit; + +2386 + `OO_STACK_FOR_EACH_INTF_I +( +ni +, +tf_i +) { + +2387 + `ci_tif_rx_po +( +ni +, +tf_i +); + +2388 if + `ef_vi_ive_fl_v +( + `ci_tif_rx_vi +( +ni +, +tf_i +)< +rxq_lim + ) + +2389  - +ENOMEM +; + +2392 + } +} + +2395  + $ci_tif__fl_rx_rgs +( +ci_tif +* +ni +) + +2397 +oo_pkt_p + +pkt_li +; + +2398  +lim +, +rc +, +n +; + +2400 +rc + = + `ci_t_hr_me_bufs +( +ni +); + +2401 if +ni +-> +cks +-> +n_ + == 0 ) { + +2402 + `LOG_E +( + `ci_log +("%s: [%d] ERROR: failedollocate initialacket set: %d", + +2403 +__func__ +, + `NI_ID +( +ni +), +rc +)); + +2404  - +ENOMEM +; + +2406 +ni +-> +cks +-> +id + = 0; + +2408 + `ci_tif_mem_essu_pkt_po_fl +( +ni +); + +2409 if( +rc + = + `ci_tif_t_rxq_lim +( +ni +)) < 0 ) + +2410  +rc +; + +2413 +n + = + `ci_tif_pkt_rve +( +ni +, + `NI_OPTS +i). +m__cks +, & +pkt_li +); + +2414 if +n + < + `NI_OPTS +( +ni +). +m__cks + ) { + +2415 + `LOG_E +( + `ci_log +("%s: ERROR: Insufficientacket buffersvailable for " + +2416 "EF_MIN_FREE_PACKETS=%d", +__FUNCTION__ +, + +2417 + `NI_OPTS +( +ni +). +m__cks +)); + +2418  - +ENOMEM +; + +2425  +lim + = +CI_CFG_RX_DESC_BATCH +;im < + `NI_OPTS +( +ni +). +rxq_lim +; + +2426 +lim + + +CI_CFG_RX_DESC_BATCH + ) { + +2427 +ni +-> +e +-> +rxq_lim + = +lim +; + +2428 if( +rc + = + `__ci_tif__fl_rx_rgs +( +ni +)< 0 ||i-> +e +-> +rxq_low + ) { + +2429 +rc + = - +ENOMEM +; + +2430 if +lim + < + `NI_OPTS +( +ni +). +rxq_m + ) + +2431 + `LOG_E +( + `ci_log +("%s: ERROR: Insufficientacket bufferso fill RXings " + +2432 "xq_lim=%dxq_low=%dxq_m=%d)", +__FUNCTION__ +, + +2433 + `NI_OPTS +( +ni +). +rxq_lim +,i-> +e +-> +rxq_low +, + +2434 + `NI_OPTS +( +ni +). +rxq_m +)); + +2435 #i +CI_CFG_PKTS_AS_HUGE_PAGES + + +2436 if + `NI_OPTS +( +ni +). +huge_ges + = +OO_IOBUFSET_FLAG_HUGE_PAGE_FORCE + ) + +2437 + `LOG_E +( + `ci_log +("%s: ERROR: Failedollocate hugeageso fill RX " + +2438 "rgs", +__FUNCTION__ +)); + +2441 +rc + = 0; + +2446 + `ci_tif_pkt_rve_ +( +ni +, +pkt_li +, +n +); + +2447 +ni +-> +e +-> +rxq_lim + = + `NI_OPTS +(ni).rxq_limit; + +2449 #i +CI_CFG_PKTS_AS_HUGE_PAGES + + +2453 if + `NI_OPTS +( +ni +). +huge_ges + = +OO_IOBUFSET_FLAG_HUGE_PAGE_FORCE + ) + +2454 + `NI_OPTS +( +ni +). +huge_ges + = +OO_IOBUFSET_FLAG_HUGE_PAGE_TRY +; + +2456  +rc +; + +2457 + } +} + +2460  + $ci_tif_ +( +ci_tif +** +ni_out +, cڡ +ci_tif_cfig_ts +* +ts_ +, + +2461  +ags +) + +2463 +ci_tif_cfig_ts +* +ts +; + +2464 +ci_tif +* +ni +; + +2466 + `ci_as +( +ni_out +); + +2467 + `ci_tif_ny_checks +(); + +2469 +ni + = * +ni_out + = +NULL +; + +2471 if +ts_ + ) + +2472 +ts + = ( +ci_tif_cfig_ts +*) +ts_ +; + +2475 if( +ts + = + `ci_loc +((*ts))= +NULL + ) + +2476  - +ENOMEM +; + +2477 + `ci_tif_cfig_ts_deus +( +ts +); + +2484 + `CI_TRY_RET +( + `tif_t_hr_loc_k +(& +ni +, +ts +, +ags +, 0)); + +2487 + `ci_as_equ +( +ni +-> +_ofs +,i-> +e +->ep_ofs); + +2489 if! +ts_ + ) + +2490 + `ci_ +( +ts +); + +2492 +ni +-> +ags + | +CI_NETIF_FLAGS_IS_TRUSTED +; + +2494 * +ni_out + = +ni +; + +2496 + } +} + +2501  + $ci_tif_dt +( +ci_tif +* +ni +) + +2503 + `ci_as +( +ni +); + +2506 #i + `defed +( +_WIN32 +&& ! defed( +__KERNEL__ +) + +2508 + `SEvt +( +ni +-> +d_x_thad +); + +2510 +DWORD + +ExCode +; + +2511 i( + `GExCodeThad +( +ni +-> +x_thad +, & +ExCode +)) { + +2512 i( +ExCode + ! +STILL_ACTIVE +) + +2515  -() + `GLaE +(); + +2518 + `CloHd +( +ni +-> +x_thad +); + +2521 + `tif_t_hr_ +( +ni +); + +2524 + } +} + +2527 #ide +__KERNEL__ + + +2529  + $l_ack_by_id +( +ci_fd_t + + +,  +id +) + +2531 +ci_ut32 + +ack_id + = +id +; + +2532  + `oo_sour_ +( + +, +OO_IOC_INSTALL_STACK_BY_ID +, & +ack_id +); + +2533 + } +} + +2536  + $l_ack_by_me +( +ci_fd_t + +fd +, cڡ * +me +) + +2538  +oo__l_ack + + +; + +2540 + `y +( + +. +_me +, +me +, +CI_CFG_STACK_NAME_LEN +); + +2541  + `oo_sour_ +( +fd +, +OO_IOC_INSTALL_STACK +, & + +); + +2542 + } +} + +2546  + $ci_tif_e_id +( +ci_tif +* +ni +,  +thr_id +) + +2548 +ef_driv_hd + +fd +, +fd2 +; + +2549 +ci_ut32 + +m_size +; + +2550  +rc +; + +2552 + `ci_as +( +ni +); + +2554 + `LOG_NV +( + `ci_log +("%s: %u", +__FUNCTION__ +, +thr_id +)); + +2559 +rc + = + `ef_ld_driv_ݒ +(& +fd2 +, +OO_STACK_DEV +, 1); + +2560 if +rc + != 0 ) { + +2561  +rc +; + +2563 +rc + = + `l_ack_by_id +( +fd2 +, +thr_id +); + +2564 if +rc + != 0 ) { + +2565 + `CI_TRY +( + `ef_ld_driv_o +( +fd2 +)); + +2566  +rc +; + +2568 +fd + = + `ci_t_hr_ack_ch +( +fd2 +, & +ni +-> +nic_t +, & +m_size +); + +2569 if +fd + < 0 ) + +2570  +fd +; + +2571 + `CI_TRY +( + `ef_ld_driv_o +( +fd2 +)); + +2572  + `ci_tif_e +( +ni +, +fd +, +m_size +); + +2573 + } +} + +2576  + $ci_tif_e_me +( +ci_tif +* +ni +, cڡ * +me +) + +2578 +ef_driv_hd + +fd +, +fd2 +; + +2579 +ci_ut32 + +m_size +; + +2580  +rc +; + +2582 + `ci_as +( +ni +); + +2584 + `LOG_NV +( + `ci_log +("%s: %s", +__FUNCTION__ +, +me +)); + +2589 if( +rc + = + `ef_ld_driv_ݒ +(& +fd2 +, +OO_STACK_DEV +, 1)) < 0 ) + +2590  +1 +; + +2591 if( +rc + = + `l_ack_by_me +( +fd2 +, +me +)) < 0 ) + +2592  +2 +; + +2593 if( +rc + = +fd + = + `ci_t_hr_ack_ch +( +fd2 +, + +2594 & +ni +-> +nic_t +, & +m_size +)) < 0 ) + +2595  +3 +; + +2596 if( +rc + = + `ci_tif_e +( +ni +, +fd +, +m_size +)) < 0 ) + +2597  +4 +; + +2598 + `ef_ld_driv_o +( +fd2 +); + +2600 + `NI_LOG +( +ni +, +BANNER +, + +2601 "Shg " +ONLOAD_PRODUCT +" " +ONLOAD_VERSION +" " +ONLOAD_COPYRIGHT + " [%s]", + +2602 +ni +-> +e +-> +ty_me +); + +2606 +4 +: + +2607 + `ef_ld_driv_o +( +fd +); + +2608 +3 +: + +2609 +2 +: + +2610 + `ef_ld_driv_o +( +fd2 +); + +2611 +1 +: + +2612  +rc +; + +2613 + } +} + +2620  + $ci_tif_e +( +ci_tif +* +ni +, +ef_driv_hd + +fd +, + +2621  +tif_mm_bys +) + +2623  +rc + = 0; + +2624 + `ci_as +( +ni +); + +2626 + `LOG_NV +( + `ci_log +("%s: fd=%d", +__FUNCTION__ +, +fd +)); + +2629 () + `ci_tif_ +( +ni +, +fd +); + +2631 + `CI_TRY_RET +( + `tif_t_hr_e +( +ni +, +tif_mm_bys +)); + +2633 if +ni +-> + + = +NULL + ) { + +2634 +ci_fixed_dest_t + +fd +; + +2636 +rc + = + `oo_sour_ +( + `ci_tif_g_driv_hd +( +ni +), + +2637 +OO_IOC_GET_CPLANE_FD +, & +fd +); + +2638 if +rc + < 0 ) { + +2639 + `ci_log +("%s: faedػܐcڌޅ hd: %d", +__func__ +, +rc +); + +2640  + +; + +2643 +ni +-> + + = + `ci_g_hd +( +CPLANE_API_VERSION +, +fd +, +CITP_OPTS +. +fd_ba +); + +2644 if +ni +-> + + = +NULL + ) { + +2645 + `ci_log +("%s: faedػܐcڌޅ hd", +__func__ +); + +2646  + +; + +2651 +ni +-> +ags + | +CI_NETIF_FLAGS_DONT_USE_ANON +; + +2658  +rc +; + +2659 + +: + +2660 + `tif_t_hr_munm +( +ni +); + +2661  +rc +; + +2662 + } +} + + @netif_pkt.c + +11  + ~"_.h +" + +13 #i! +defed +( +__KERNEL__ +) + +14  + ~ + +15  + ~ + +17 +had_mux_t + + gcp_pkt_m_lock + = +PTHREAD_MUTEX_INITIALIZER +; + +19 +ci__pkt_fmt +* + $__ci_tif_pkt +( +ci_tif +* +ni +,  +id +) + +21  +rc +; + +22 +ci__pkt_fmt +* +pkt + = 0; + +23  +tid + = +id + >> +CI_CFG_PKTS_PER_SET_S +; + +24 * +p +; + +26 + `ci_as +( +id + != ()(-1)); + +28 + `had_mux_lock +(& +cp_pkt_m_lock +); + +30 if + `PKT_BUFSET_U_MMAPPED +( +ni +, +tid +) ) + +32  +g_pkt_out +; + +34 #i +CI_CFG_PKTS_AS_HUGE_PAGES + + +35 if +ni +-> +cks +-> +t +[ +tid +]. +shm_id + >= 0 ) { + +36 +p + = + `shm +( +ni +-> +cks +-> +t +[ +tid +]. +shm_id +, +NULL +, 0); + +37 if +p + == (*)-1) { + +38 if +o + = +EACCES + ) { + +39 + `ci_log +("Failedo mmapacket buffer for [%s] withrrno=EACCES.\n" + +44 +ni +-> +e +-> +ty_me +); + +47 + `ci_log +("%s: shm(0x%xed f܅k%d (%d)", +__FUNCTION__ +, + +48 +ni +-> +cks +-> +t +[ +tid +]. +shm_id +, sid, - +o +); + +50  +out +; + +56 +rc + = + `oo_sour_mm +( + `ci_tif_g_driv_hd +( +ni +), + +57 +OO_MMAP_TYPE_NETIF +, + +58 + `CI_NETIF_MMAP_ID_PKTSET +( +tid +), + +59 +CI_CFG_PKT_BUF_SIZE + * +PKTS_PER_SET +, + +60 +OO_MMAP_FLAG_DEFAULT +, + +61 & +p +); + +62 if +rc + < 0 ) { + +63 + `ci_log +("%s: oo_resource_mmap forkt set %d failed (%d)", + +64 +__FUNCTION__ +, +tid +, +rc +); + +65  +out +; + +68 + `ci_as +( +p +); + +69 +ni +-> +pkt_bufs +[ +tid +] = +p +; + +71 +g_pkt_out +: + +72 +pkt + = ( +ci__pkt_fmt +* + `__PKT_BUF +( +ni +, +id +); + +74 +out +: + +75 + `had_mux_uock +(& +cp_pkt_m_lock +); + +76 if + `CI_UNLIKELY +( +pkt + = +NULL +) ) + +77 + `ci_log +("Failedo mapackets! Crashing..."); + +78  +pkt +; + +79 + } +} + +84  + $ci_tif_pktt_be +( +ci_tif +* +ni +) + +86  +i +, +t + = -1, +n_ + = 0; + +88  +i + = 0; i < +ni +-> +cks +-> +ts_n +; i ++ ) { + +89 if +ni +-> +cks +-> +t +[ +i +]. +n_ + >_free ) { + +90 +n_ + = +ni +-> +cks +-> +t +[ +i +].n_free; + +91 +t + = +i +; + +94  +t +; + +95 + } +} + +98 +ci__pkt_fmt +* + $ci_tif_pkt_loc_ow +( +ci_tif +* +ni +,  +f_t_tx +,  +u_nb +) + +104 +ci__pkt_fmt +* +pkt +; + +105  +buft_id +; + +107 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +109 if +u_nb + || + +110 ( +ni +-> +cks +-> +n_ + == 0 && + +111 +ni +-> +cks +-> +ts_n + =ni->cks-> +ts_max +) ) + +112 if( +pkt + = + `ci_tif_pkt_loc_nb +( +ni +)! +NULL + ) { + +113 -- +ni +-> +e +-> +n_async_pkts +; + +114 + `CITP_STATS_NETIF_INC +( +ni +, +pkt_nb_l +); + +115 +pkt +-> +ags + &~ +CI_PKT_FLAG_NONB_POOL +; + +116  +pkt +; + +119 if +f_t_tx + ) + +120 if( + `CI_UNLIKELY +! + `ci_tif_pkt_tx_may_loc +( +ni +) )) + +121  +NULL +; + +123 + `ci_as_equ +( +ni +-> +cks +-> +id +, + `NI_PKT_SET +(ni)); + +124 + `ci_as_equ +( +ni +-> +cks +-> +t +[ + `NI_PKT_SET +i)]. +n_ +, 0); + +125 + `ci_as +( + `OO_PP_IS_NULL +( +ni +-> +cks +-> +t +[ + `NI_PKT_SET +i)]. + +)); + +126 +aga +: + +127 +buft_id + = + `ci_tif_pktt_be +( +ni +); + +128 if +buft_id + != -1 ) { + +129 + `ci_tif_pkt_t_chge +( +ni +, +buft_id +, + +130 + `ci_tif_pkt_t_is_undfd +( +ni +, +buft_id +)); + +131  + `ci_tif_pkt_g +( +ni +, +buft_id +); + +134  +ni +-> +cks +-> +ts_n + cks-> +ts_max + ) { + +135  +d_n_pkts + = +ni +-> +cks +-> +n_ +; + +136  +rc + = + `ci_t_hr_me_bufs +( +ni +); + +137 if +rc + != 0 ) + +139 + `CHECK_FREEPKTS +( +ni +); + +140 if +d_n_pkts + = +ni +-> +cks +-> +n_ + ) + +141 + `ci_as_equ +( +ni +-> +cks +-> +ts_n +,i->cks-> +ts_max +); + +142 if +ni +-> +cks +-> +n_ + > 0 ) + +146 if +ni +-> +cks +-> +n_ + == 0 ) + +147 + `ci_tif_y_to_ +( +ni +, 1); + +148 if +ni +-> +cks +-> +n_ + > 0 ) + +149  +aga +; + +151  +NULL +; + +152 + } +} + +155 +ci_le +  + $__ci_dbg_pois_hd +( +ci__pkt_fmt +* +pkt +, +ci_ut32 + +n +) + +157  +i +; + +158 +ci_ut32 +* +pkt_u32 + = (ci_ut32 *) + `oo_h_hdr +( +pkt +); + +159 +ci_ut32 + +_u32 + = + `CI_BSWAP_BE32 +( +n +); + +160 +ci_ut32 + +n + = ( +ETH_HLEN + + +ETH_VLAN_HLEN + + 2+ ( +ci_4_hdr +) + + +161 ( +ci_t_hdr +); + +162  +i + = 0; i < +n +/4; i++ ) +pkt_u32 +[i] = +_u32 +; + +163 + } +} + +166 #ifde +__KERNEL__ + + +167  + $ci_tif_t_mge_omic_ag +( +ci_tif +* +ni +) + +169 +ci_ut64 + +v +; + +170  + + = 1000; + +172 +v + = +ni +-> +e +-> +lock +.lock; + +173 if +v + & +CI_EPLOCK_NETIF_MERGE_ATOMIC_COUNTERS + ) + +175 if + `ef_lock_t_ags_if_locked +( + +176 & +ni +-> +e +-> +lock +, + +177 +CI_EPLOCK_NETIF_MERGE_ATOMIC_COUNTERS +) ) { + +180 if + `ci_tif_ylock +( +ni +) ) { + +181 + `ef_lock_hd_t_ag +(& +ni +-> +e +-> +lock +, + +182 +CI_EPLOCK_NETIF_MERGE_ATOMIC_COUNTERS +); + +183 + `ci_tif_uock +( +ni +); + +186 if + +-- == 0 ) { + +187 + `ci_log +("%s: [%d] failedo set MERGE_ATOMIC_COUNTERS flag, " + +189 "othOd sck", +__func__ +, + `NI_ID +( +ni +)); + +193 + } +} + +196  +ci_tif_pkt_ +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt + + +197 + $CI_KERNEL_ARG +(* +p_tif_is_locked +)) + +199 + `ci_as +( +pkt +-> +fcou + == 0); + +200 #ifde +__KERNEL__ + + +201 + `ci_as +( +p_tif_is_locked +); + +202 + `ci_as +(!* +p_tif_is_locked + || + `ci_tif_is_locked +( +ni +)); + +204 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +207 if + `OO_PP_NOT_NULL +( +pkt +-> +ag_xt +) ) { + +208 #ifde +__KERNEL__ + + +209 + `ci_tif_pkt_a_m +( +ni +, + `PKT_CHK +i, +pkt +-> +ag_xt +), + +210 +p_tif_is_locked +); + +212 + `ci_tif_pkt_a +( +ni +, + `PKT_CHK +i, +pkt +-> +ag_xt +)); + +214 +pkt +-> +ag_xt + = +OO_PP_NULL +; + +217 #ifde +__KERNEL__ + + +218 if + `CI_UNLIKELY +(! * +p_tif_is_locked +) && + +219 (~ +pkt +-> +ags + & +CI_PKT_FLAG_NONB_POOL +)) ) { + +223 if + `ci_tif_ylock +( +ni +) ) { + +224 * +p_tif_is_locked + = 1; + +229 +pkt +-> +ags + | +CI_PKT_FLAG_NONB_POOL +; + +234 if +pkt +-> +ags + & +CI_PKT_FLAG_RX + ) + +235 + `CI_NETIF_STATE_MOD +( +ni +, * +p_tif_is_locked +, +n_rx_pkts +, -); + +236 + `__ci_tif_pkt_n +( +pkt +); + +237 #i +CI_CFG_POISON_BUFS + + +238 if + `NI_OPTS +( +ni +). +pois_rx_buf + ) + +239 + `__ci_dbg_pois_hd +( +pkt +, 0xDECEA5ED); + +242 if +pkt +-> +ags + & +CI_PKT_FLAG_NONB_POOL + ) { + +243 + `ci_tif_pkt__nb_li +( +ni +, + `OO_PKT_P +( +pkt +),kt); + +244 + `CI_NETIF_STATE_MOD +( +ni +, * +p_tif_is_locked +, +n_async_pkts +, +); + +247 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +248 + `ci_tif_pkt_put +( +ni +, +pkt +); + +251 #ifde +__KERNEL__ + + +252 if + `CI_UNLIKELY +! * +p_tif_is_locked + ) ) { + +253 + `ci_tif_t_mge_omic_ag +( +ni +); + +256 + } +} + +259  + $ci_tif_pkt_y_to_ +( +ci_tif +* +ni +,  +dei +,  +__d_n +) + +261  +id +; + +262  +d + = 0; + +264 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +265 + `ci_as_ge +( +dei +, 0); + +266 + `ci_as_ +( +dei +, +CI_NETIF_PKT_TRY_TO_FREE_MAX_DESP +); + +272 + `ci_as +(& +ni +-> +e +-> +s +. +pkt_samb2 + - &ni->e->s. +pkt_samb0 + + +273 = +CI_NETIF_PKT_TRY_TO_FREE_MAX_DESP +); + +274 + `CITP_STATS_NETIF +(++(& +ni +-> +e +-> +s +. +pkt_samb0 +)[ +dei +]); + +276  +id + = 0; id < +ni +-> +e +-> +n__bufs +; ++id ) { + +277 +cp_waab_obj +* +wo + = + `ID_TO_WAITABLE_OBJ +( +ni +, +id +); + +278 if +wo +-> +waab +. +e + & +CI_TCP_STATE_TCP_CONN + ) + +279 +d + + + `ci_t_y_to__pkts +( +ni +, & +wo +-> +t +, +dei +); + +280 #i +CI_CFG_UDP + + +281 if +wo +-> +waab +. +e + = +CI_TCP_STATE_UDP + ) + +282 +d + + + `ci_udp_y_to__pkts +( +ni +, & +wo +-> +udp +, +dei +); + +284 if +d + > +__d_n + ) + +285  +d +; + +287  +d +; + +288 + } +} + +291  + $ci_tif_pkt_loc_block +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +, + +292 * +p_tif_locked +, + +293  +n_block +, + +294 +ci__pkt_fmt +** +p_pkt +) + +296  +was_locked + = * +p_tif_locked +; + +297 +ci__pkt_fmt +* +pkt +; + +298  +rc +; + +299 +ci_t_e +* +ts + = +NULL +; + +301 +aga +: + +302 if* +p_tif_locked + == 0 ) { + +303 if( +pkt + = + `ci_tif_pkt_loc_nb +( +ni +)) ) { + +304 * +p_pkt + = +pkt +; + +307 if! + `ci_tif_ylock +( +ni +) ) { + +308 +rc + = + `ci_tif_lock +( +ni +); + +309 if( + `CI_UNLIKELY + + `ci_tif_lock_was_ued +( +rc +) )) + +310  +rc +; + +311 + `CITP_STATS_NETIF_INC +( +ni +, +udp_nd_ni_lock_cڋnds + ); + +313 * +p_tif_locked + = 1; + +316 if +s +-> +b +. +e + & +CI_TCP_STATE_TCP_CONN + ) + +317 +ts + = + `SOCK_TO_TCP +( +s +); + +319 if( +pkt + = + `ci_tif_pkt_tx_t_loc +( +ni +, +ts +)) ) { + +320 ++ +ni +-> +e +-> +n_async_pkts +; + +321 if! +was_locked + ) { + +325 +pkt +-> +ags + = +CI_PKT_FLAG_NONB_POOL +; + +327 * +p_pkt + = +pkt +; + +331 if! +n_block + ) + +332  - +ENOBUFS +; + +334 * +p_tif_locked + = 0; + +335 +rc + = + `ci_tif_pkt_wa +( +ni +, +s +, +CI_SLEEP_NETIF_LOCKED +); + +336 if + `ci_tif_pkt_wa_was_ued +( +rc +) ) + +337  +rc +; + +338  +aga +; + +339 + } +} + + @netif_stats.c + +15  + ~"_.h +" + +18 #i +CI_CFG_SUPPORT_STATS_COLLECTION + + +27 +ci_le +  + +28 + $ci_tif_s_hd_tim +( +ci_tif +* +ni +, +ci_time_t + +timeout +) + +30 +ci__tim +* + +; + +31 + `ci_as + +ni + ); + +32 + + = & +ni +-> +e +-> +s_tid +; + +34 + `LOG_STATS + + `ci_log +"%s%p, %d)", +__FUNCTION__ +, +ni +, () +timeout +)); + +35 if + `ci__tim_ndg +( +ni +, + + ) ) { + +36 if +timeout + == 0 ) + +37 + `ci__tim_r +( +ni +, + + ); + +39 + `ci__tim_modify +( +ni +, + +, + `ci_t_time_now +i)+ +timeout +); + +41 if +timeout + != 0 ) + +42 + `ci__tim_t +( +ni +, + +, + `ci_t_time_now +i)+ +timeout +); + +44 + } +} + +49 + $ci_tif_s_ +( +ci_tif +* +ni +) + +51  +v +; + +53 + `ci_as + +ni + ); + +54 + `LOG_STATS + + `ci_log +("%s(%p)", +__FUNCTION__ +, +ni +)); + +56 +v + = +CI_TCONST_STATS +; + +58 + `NI_CONF +( +ni +). +tcڡ_s + = +v + ? + `ci_t_time_ms2ticks +(ni, val) : 0; + +60 + `LOG_STATS + + `ci_log +("Statistics: %uicks, %dmS ", + +61 + `NI_CONF +( +ni +). +tcڡ_s +, +v + )); + +63 + `ci__s_r +(& +ni +-> +e +-> +s_cumutive +); + +64 + `ci__s_r +(& +ni +-> +e +-> +s_sh +); + +67 if +v + ) + +68 + `ci_tif_s_ai + +ni +, +CI_IP_STATS_START +, + +69 +CI_IP_STATS_OUTPUT_DEFAULT +, +NULL +, NULL ); + +70 + } +} + +75 + $ci_tif_s_upde_tif + +ci_tif + * +ni +) + +77 i( +ni +-> +e +-> +s_cumutive +. +now + e-> +s_sh +.now) { + +78 +ni +-> +e +-> +s_cumutive +. +now + =i->e-> +s_sh +.now; + +80 + `LOG_STATS + + `ci_log +("Cummulative stats have biggerimestamphan snaphot") ); + +82 + `ci__s_upde +(& +ni +-> +e +-> +s_cumutive +, &ni->e-> +s_sh +); + +83 + `ci__s_r +(& +ni +-> +e +-> +s_sh +); + +84 + } +} + +86  + #__SS +( +tif +ґif)-> +e +-> +s_sh + + + ) + +87  + #__CU +( +tif +ґif)-> +e +-> +s_cumutive + + + ) + +89 #i +CI_CFG_SEND_STATS_TO_LOG + + +90  + #__TEXT_NETIF_COUNT_FMT + "%%u/%u" + + ) + +92  + #__TEXT_NETIF_COUNT_FMT + "%%u/%u\n" + + ) + +95  + #__TEXT_NETIF_COUNT +( +s +, +G +, +Fld +) \ + +96 + `__SS +( +tif +). +G +. +Fld +, \ + +97 + `__CU +( +tif +). +G +. +Fld + + + ) + +99 #i +CI_CFG_SEND_STATS_TO_LOG + + +100  + #__TEXT_NETIF_LOG + +ci_log + + + ) + +102  + #__TEXT_NETIF_LOG +( +x +...) \ + +103 i( +n + < +cou +) { \ + +104 +n + + + `tf +( +buf + +, +cou + -, +x +); \ + +105 } + + ) + +108  + #__TEXT_NETIF_COUNT_LOG +( +me +, +group +, +fld +) \ + +109 + `__TEXT_NETIF_LOG +( +__TEXT_NETIF_COUNT_FMT +, \ + +110 ( +me +), + `__TEXT_NETIF_COUNT +( +tif +, +group +, +fld +)) + + ) + +115 + $ci_tif_s_pt_xt +( +ci_tif + * +tif +, * +buf +,  +cou +) + +117 #i +CI_CFG_SEND_STATS_TO_LOG +==0 + +118  +n + = 0; + +120 i( +cou + <= 0) + +125 + `__TEXT_NETIF_COUNT_LOG +("In_cvs:", +v4 +, + +126 +_cvs +); + +127 + `__TEXT_NETIF_COUNT_LOG +("In_hdr_rs:", +v4 +, + +128 +_hdr_rs +); + +129 + `__TEXT_NETIF_COUNT_LOG +("In_addr_rs:", +v4 +, + +130 +_addr_rs +); + +131 + `__TEXT_NETIF_COUNT_LOG +("Fw_dgms:", +v4 +, + +132 +fw_dgms +); + +133 + `__TEXT_NETIF_COUNT_LOG +("In_unknown_os:", +v4 +, + +134 +_unknown_os +); + +135 + `__TEXT_NETIF_COUNT_LOG +("In_disrds:", +v4 +, + +136 +_disrds +); + +137 + `__TEXT_NETIF_COUNT_LOG +("In_divs:", +v4 +, + +138 +_divs +); + +139 + `__TEXT_NETIF_COUNT_LOG +("Out_ques:", +v4 +, + +140 +out_ques +); + +141 + `__TEXT_NETIF_COUNT_LOG +("Out_disrds:", +v4 +, + +142 +out_disrds +); + +143 + `__TEXT_NETIF_COUNT_LOG +("Out_no_rous:", +v4 +, + +144 +out_no_rous +); + +145 + `__TEXT_NETIF_COUNT_LOG +("Rsm_timeout:", +v4 +, + +146 +asm_timeout +); + +147 + `__TEXT_NETIF_COUNT_LOG +("Rsm_qds:", +v4 +, + +148 +asm_qds +); + +149 + `__TEXT_NETIF_COUNT_LOG +("Rsm_oks:", +v4 +, + +150 +asm_oks +); + +151 + `__TEXT_NETIF_COUNT_LOG +("Rsm_s:", +v4 +, + +152 +asm_s +); + +153 + `__TEXT_NETIF_COUNT_LOG +("Fg_oks:", +v4 +, + +154 +ag_oks +); + +155 + `__TEXT_NETIF_COUNT_LOG +("Fg_s:", +v4 +, + +156 +ag_s +); + +157 + `__TEXT_NETIF_COUNT_LOG +("Fg_s:", +v4 +, + +158 +ag_s +); + +161 + `__TEXT_NETIF_COUNT_LOG +("Icmp__msgs:", +icmp +, + +162 +icmp__msgs +); + +163 + `__TEXT_NETIF_COUNT_LOG +("Icmp__rs:", +icmp +, + +164 +icmp__rs +); + +165 + `__TEXT_NETIF_COUNT_LOG +("Icmp__de_uėchs:", +icmp +, + +166 +icmp__de_uėchs +); + +167 + `__TEXT_NETIF_COUNT_LOG +("Icmp__time_excds:", +icmp +, + +168 +icmp__time_excds +); + +169 + `__TEXT_NETIF_COUNT_LOG +("Icmp__rm_obs:", +icmp +, + +170 +icmp__rm_obs +); + +171 + `__TEXT_NETIF_COUNT_LOG +("Icmp__c_quchs:", +icmp +, + +172 +icmp__c_quchs +); + +173 + `__TEXT_NETIF_COUNT_LOG +("Icmp__des:", +icmp +, + +174 +icmp__des +); + +175 + `__TEXT_NETIF_COUNT_LOG +("Icmp__echos:", +icmp +, + +176 +icmp__echos +); + +177 + `__TEXT_NETIF_COUNT_LOG +("Icmp__echo_ps:", +icmp +, + +178 +icmp__echo_ps +); + +179 + `__TEXT_NETIF_COUNT_LOG +("Icmp__timeamps:", +icmp +, + +180 +icmp__timeamps +); + +181 + `__TEXT_NETIF_COUNT_LOG +("Icmp__timeamp_ps:", +icmp +, + +182 +icmp__timeamp_ps +); + +183 + `__TEXT_NETIF_COUNT_LOG +("Icmp__addr_masks:", +icmp +, + +184 +icmp__addr_masks +); + +185 + `__TEXT_NETIF_COUNT_LOG +("Icmp__addr_mask_ps:", +icmp +, + +186 +icmp__addr_mask_ps +); + +188 + `__TEXT_NETIF_COUNT_LOG +("Icmp_out_msgs:", +icmp +, + +189 +icmp_out_msgs +); + +190 + `__TEXT_NETIF_COUNT_LOG +("Icmp_out_rs:", +icmp +, + +191 +icmp_out_rs +); + +192 + `__TEXT_NETIF_COUNT_LOG +("Icmp_out_de_uėchs:", +icmp +, + +193 +icmp_out_de_uėchs +); + +194 + `__TEXT_NETIF_COUNT_LOG +("Icmp_out_time_excds:", +icmp +, + +195 +icmp_out_time_excds +); + +196 + `__TEXT_NETIF_COUNT_LOG +("Icmp_out_rm_obs:", +icmp +, + +197 +icmp_out_rm_obs +); + +198 + `__TEXT_NETIF_COUNT_LOG +("Icmp_out_c_quchs:", +icmp +, + +199 +icmp_out_c_quchs +); + +200 + `__TEXT_NETIF_COUNT_LOG +("Icmp_out_des:", +icmp +, + +201 +icmp_out_des +); + +202 + `__TEXT_NETIF_COUNT_LOG +("Icmp_out_echos:", +icmp +, + +203 +icmp_out_echos +); + +204 + `__TEXT_NETIF_COUNT_LOG +("Icmp_out_echo_ps:", +icmp +, + +205 +icmp_out_echo_ps +); + +206 + `__TEXT_NETIF_COUNT_LOG +("Icmp_out_timeamps:", +icmp +, + +207 +icmp_out_timeamps +); + +208 + `__TEXT_NETIF_COUNT_LOG +("Icmp_out_timeamp_ps:", +icmp +, + +209 +icmp_out_timeamp_ps +); + +210 + `__TEXT_NETIF_COUNT_LOG +("Icmp_out_addr_masks:", +icmp +, + +211 +icmp_out_addr_masks +); + +212 + `__TEXT_NETIF_COUNT_LOG +("Icmp_out_addr_mask_ps:", +icmp +, + +213 +icmp_out_addr_mask_ps +); + +216 + `__TEXT_NETIF_COUNT_LOG +("T_aive_ݒs:", +t +, + +217 +t_aive_ݒs +); + +218 + `__TEXT_NETIF_COUNT_LOG +("T_ssive_ݒs:", +t +, + +219 +t_ssive_ݒs +); + +220 + `__TEXT_NETIF_COUNT_LOG +("T_m_s:", +t +, + +221 +t_m_s +); + +222 + `__TEXT_NETIF_COUNT_LOG +("T_eab_ts:", +t +, + +223 +t_eab_ts +); + +224 + `__TEXT_NETIF_COUNT_LOG +("T_cu_eab:", +t +, + +225 +t_cu_eab +); + +226 + `__TEXT_NETIF_COUNT_LOG +("T__gs:", +t +, + +227 +t__gs +); + +228 + `__TEXT_NETIF_COUNT_LOG +("T_out_gs:", +t +, + +229 +t_out_gs +); + +230 + `__TEXT_NETIF_COUNT_LOG +("T__gs:", +t +, + +231 +t__gs +); + +232 + `__TEXT_NETIF_COUNT_LOG +("T__rs:", +t +, + +233 +t__rs +); + +234 + `__TEXT_NETIF_COUNT_LOG +("T_out_rs:", +t +, + +235 +t_out_rs +); + +237 + `__TEXT_NETIF_COUNT_LOG +("Udp__dgms:", +udp +, + +238 +udp__dgms +); + +239 + `__TEXT_NETIF_COUNT_LOG +("Udp_no_pts:", +udp +, + +240 +udp_no_pts +); + +241 + `__TEXT_NETIF_COUNT_LOG +("Udp__rs:", +udp +, + +242 +udp__rs +); + +243 + `__TEXT_NETIF_COUNT_LOG +("Udp_out_dgms:", +udp +, + +244 +udp_out_dgms +); + +246 + `__TEXT_NETIF_COUNT_LOG +("Syncooks_", +t_ext +, + +247 +syncooks_ +); + +248 + `__TEXT_NETIF_COUNT_LOG +("Syncooks_cv", +t_ext +, + +249 +syncooks_cv +); + +250 + `__TEXT_NETIF_COUNT_LOG +("Syncooks_ed", +t_ext +, + +251 +syncooks_ed +); + +252 + `__TEXT_NETIF_COUNT_LOG +("Embriic_rs", +t_ext +, + +253 +embriic_rs +); + +254 + `__TEXT_NETIF_COUNT_LOG +("Pru_ed", +t_ext +, + +255 +u_ed +); + +256 + `__TEXT_NETIF_COUNT_LOG +("Rcv_ud", +t_ext +, + +257 +rcv_ud +); + +258 + `__TEXT_NETIF_COUNT_LOG +("Ofo_ud", +t_ext +, + +259 +ofo_ud +); + +260 + `__TEXT_NETIF_COUNT_LOG +("Out_of_wdow_icmps", +t_ext +, + +261 +out_of_wdow_icmps +); + +262 + `__TEXT_NETIF_COUNT_LOG +("Lock_drݳd_icmps", +t_ext +, + +263 +lock_drݳd_icmps +); + +264 + `__TEXT_NETIF_COUNT_LOG +("A_fr", +t_ext +, + +265 +p_fr +); + +266 + `__TEXT_NETIF_COUNT_LOG +("Time_waed", +t_ext +, + +267 +time_waed +); + +268 + `__TEXT_NETIF_COUNT_LOG +("Time_wa_cyed", +t_ext +, + +269 +time_wa_cyed +); + +270 + `__TEXT_NETIF_COUNT_LOG +("Time_wa_kd", +t_ext +, + +271 +time_wa_kd +); + +272 + `__TEXT_NETIF_COUNT_LOG +("Paws_ssive_jeed", +t_ext +, + +273 +ws_ssive_jeed +); + +274 + `__TEXT_NETIF_COUNT_LOG +("Paws_aive_jeed", +t_ext +, + +275 +ws_aive_jeed +); + +276 + `__TEXT_NETIF_COUNT_LOG +("Paws_eab_jeed", +t_ext +, + +277 +ws_eab_jeed +); + +278 + `__TEXT_NETIF_COUNT_LOG +("Dayed_ack", +t_ext +, + +279 +dayed_ack +); + +280 + `__TEXT_NETIF_COUNT_LOG +("Dayed_ack_locked", +t_ext +, + +281 +dayed_ack_locked +); + +282 + `__TEXT_NETIF_COUNT_LOG +("Dayed_ack_lo", +t_ext +, + +283 +dayed_ack_lo +); + +284 + `__TEXT_NETIF_COUNT_LOG +("Li_ovows", +t_ext +, + +285 +li_ovows +); + +286 + `__TEXT_NETIF_COUNT_LOG +("Li_drs", +t_ext +, + +287 +li_drs +); + +288 + `__TEXT_NETIF_COUNT_LOG +("T_equeued", +t_ext +, + +289 +t_equeued +); + +290 + `__TEXT_NETIF_COUNT_LOG +("T_de_cy_om_backlog", +t_ext +, + +291 +t_de_cy_om_backlog +); + +292 + `__TEXT_NETIF_COUNT_LOG +("T_de_cy_om_equeue", +t_ext +, + +293 +t_de_cy_om_equeue +); + +294 + `__TEXT_NETIF_COUNT_LOG +("T_equeue_drݳd", +t_ext +, + +295 +t_equeue_drݳd +); + +296 + `__TEXT_NETIF_COUNT_LOG +("T_hp_hs", +t_ext +, + +297 +t_hp_hs +); + +298 + `__TEXT_NETIF_COUNT_LOG +("T_hp_hs_to_ur", +t_ext +, + +299 +t_hp_hs_to_ur +); + +300 + `__TEXT_NETIF_COUNT_LOG +("T_pu_acks", +t_ext +, + +301 +t_pu_acks +); + +302 + `__TEXT_NETIF_COUNT_LOG +("T_hp_acks", +t_ext +, + +303 +t_hp_acks +); + +304 + `__TEXT_NETIF_COUNT_LOG +("T_no_covy", +t_ext +, + +305 +t_no_covy +); + +306 + `__TEXT_NETIF_COUNT_LOG +("T_ck_covy", +t_ext +, + +307 +t_ck_covy +); + +308 + `__TEXT_NETIF_COUNT_LOG +("T_ck_gg", +t_ext +, + +309 +t_ck_gg +); + +310 + `__TEXT_NETIF_COUNT_LOG +("T_ck_d", +t_ext +, + +311 +t_ck_d +); + +312 + `__TEXT_NETIF_COUNT_LOG +("T_ck_d", +t_ext +, + +313 +t_ck_d +); + +314 + `__TEXT_NETIF_COUNT_LOG +("T_no_d", +t_ext +, + +315 +t_no_d +); + +316 + `__TEXT_NETIF_COUNT_LOG +("T_ts_d", +t_ext +, + +317 +t_ts_d +); + +318 + `__TEXT_NETIF_COUNT_LOG +("T_fu_undo", +t_ext +, + +319 +t_fu_undo +); + +320 + `__TEXT_NETIF_COUNT_LOG +("T_l_undo", +t_ext +, + +321 +t_l_undo +); + +322 + `__TEXT_NETIF_COUNT_LOG +("T_loss_undo", +t_ext +, + +323 +t_loss_undo +); + +324 + `__TEXT_NETIF_COUNT_LOG +("T_ck_undo", +t_ext +, + +325 +t_ck_undo +); + +326 + `__TEXT_NETIF_COUNT_LOG +("T_loss", +t_ext +, + +327 +t_loss +); + +328 + `__TEXT_NETIF_COUNT_LOG +("T_lo_sm", +t_ext +, + +329 +t_lo_sm +); + +330 + `__TEXT_NETIF_COUNT_LOG +("T_no_us", +t_ext +, + +331 +t_no_us +); + +332 + `__TEXT_NETIF_COUNT_LOG +("T_ck_us", +t_ext +, + +333 +t_ck_us +); + +334 + `__TEXT_NETIF_COUNT_LOG +("T_loss_us", +t_ext +, + +335 +t_loss_us +); + +336 + `__TEXT_NETIF_COUNT_LOG +("T_timeouts", +t_ext +, + +337 +t_timeouts +); + +338 + `__TEXT_NETIF_COUNT_LOG +("T_no_covy_", +t_ext +, + +339 +t_no_covy_ +); + +340 + `__TEXT_NETIF_COUNT_LOG +("T_ck_covy_", +t_ext +, + +341 +t_ck_covy_ +); + +342 + `__TEXT_NETIF_COUNT_LOG +("T__s", +t_ext +, + +343 +t__s +); + +344 + `__TEXT_NETIF_COUNT_LOG +("T_fwd_s", +t_ext +, + +345 +t_fwd_s +); + +346 + `__TEXT_NETIF_COUNT_LOG +("T_ow_t_s", +t_ext +, + +347 +t_ow_t_s +); + +348 + `__TEXT_NETIF_COUNT_LOG +("T_schedur_us", +t_ext +, + +349 +t_schedur_us +); + +350 + `__TEXT_NETIF_COUNT_LOG +("T_rcv_cpd", +t_ext +, + +351 +t_rcv_cpd +); + +352 + `__TEXT_NETIF_COUNT_LOG +("T_dck_d_", +t_ext +, + +353 +t_dck_d_ +); + +354 + `__TEXT_NETIF_COUNT_LOG +("T_dck_ofo_", +t_ext +, + +355 +t_dck_ofo_ +); + +356 + `__TEXT_NETIF_COUNT_LOG +("T_dck_cv", +t_ext +, + +357 +t_dck_cv +); + +358 + `__TEXT_NETIF_COUNT_LOG +("T_dck_ofo_cv", +t_ext +, + +359 +t_dck_ofo_cv +); + +360 + `__TEXT_NETIF_COUNT_LOG +("T_abt__syn", +t_ext +, + +361 +t_abt__syn +); + +362 + `__TEXT_NETIF_COUNT_LOG +("T_abt__da", +t_ext +, + +363 +t_abt__da +); + +364 + `__TEXT_NETIF_COUNT_LOG +("T_abt__o", +t_ext +, + +365 +t_abt__o +); + +366 + `__TEXT_NETIF_COUNT_LOG +("T_abt__memy", +t_ext +, + +367 +t_abt__memy +); + +368 + `__TEXT_NETIF_COUNT_LOG +("T_abt__timeout", +t_ext +, + +369 +t_abt__timeout +); + +370 + `__TEXT_NETIF_COUNT_LOG +("T_abt__lg", +t_ext +, + +371 +t_abt__lg +); + +372 + `__TEXT_NETIF_COUNT_LOG +("T_abt_ed", +t_ext +, + +373 +t_abt_ed +); + +374 + `__TEXT_NETIF_COUNT_LOG +("T_memy_essus", +t_ext +, + +375 +t_memy_essus +); + +377 #i +CI_CFG_SEND_STATS_TO_LOG +==0 + +378 i( +n + = +cou +) + +379 +n +--; + +381 +buf +[ +n +++] = '\0'; + +383  +n +; + +387 + } +} + +390  + #__XML_NETIF_DATASTART_FMT + \ + +393 " %u\n" + + ) + +395  + #__XML_NETIF_DATASTART +( + +) \ + +396 ( + +)-> +e +-> +s_sh +. +now +, ()->e-> +s_cumutive +. + ) +now + +398  + #__XML_NETIF_DATAEND_FMT + "\n" + + ) + +400  + #__XML_NETIF_COUNT_FMT + \ + +404 " \n" + + ) + +406  + #__XML_NETIF_COUNT +( +tif +, +group +, +fld +) \ + +407 + `__SS +( +tif +). +group +. +fld +, \ + +408 + `__CU +( +tif +). +group +. +fld + + + ) + +411  + #__XML_NETIF_RANGE_FMT + \ + +415 " \n" + + ) + +417  + #__XML_NETIF_RANGE +( +me +, +tif +, +group +, +fld +) (name), \ + +418 + `__SS +( +tif +). +group +. +au +. +fld +, \ + +419 + `__SS +( +tif +). +group +. +m +. +fld +, \ + +420 + `__SS +( +tif +). +group +. +max +. +fld +, \ + +421 + `__CU +( +tif +). +group +. +au +. +fld +, \ + +422 + `__CU +( +tif +). +group +. +m +. +fld +, \ + +423 + `__CU +( +tif +). +group +. +max +. +fld + + + ) + +425 #i +CI_CFG_SEND_STATS_TO_LOG + + +426  + #__XML_NETIF_LOG + +ci_log + + + ) + +428  + #__XML_NETIF_LOG +( +x +...) \ + +429 i( +n + < +cou +) { \ + +430 +n + + + `tf +( +buf + +, +cou + -, +x +); \ + +431 } + + ) + +434  + #__XML_NETIF_COUNT_LOG +( +me +, +group +, +fld +) \ + +435 + `__XML_NETIF_LOG + +__XML_NETIF_COUNT_FMT +, \ + +436 ( +me +), + `__XML_NETIF_COUNT +( +tif +, +group +, +fld +)) + + ) + +438  + #__XML_NETIF_RANGE_LOG +( +me +, +group +, +fld +) \ + +439 + `__XML_NETIF_LOG + +__XML_NETIF_RANGE_FMT +, \ + +440 ( +me +), + `__XML_NETIF_RANGE +( +tif +, +group +, +fld +)) + + ) + +445 + $ci_tif_s_pt_xml +( +ci_tif +* +tif +, * +buf +,  +cou +) + +447  +n + = 0; + +449 i( +cou + <= 0) + +452 + `__XML_NETIF_LOG + +__XML_NETIF_DATASTART_FMT +, + `__XML_NETIF_DATASTART +( +tif +)); + +455 + `__XML_NETIF_COUNT_LOG +("In_cvs:", +v4 +, + +456 +_cvs +); + +457 + `__XML_NETIF_COUNT_LOG +("In_hdr_rs:", +v4 +, + +458 +_hdr_rs +); + +459 + `__XML_NETIF_COUNT_LOG +("In_addr_rs:", +v4 +, + +460 +_addr_rs +); + +461 + `__XML_NETIF_COUNT_LOG +("Fw_dgms:", +v4 +, + +462 +fw_dgms +); + +463 + `__XML_NETIF_COUNT_LOG +("In_unknown_os:", +v4 +, + +464 +_unknown_os +); + +465 + `__XML_NETIF_COUNT_LOG +("In_disrds:", +v4 +, + +466 +_disrds +); + +467 + `__XML_NETIF_COUNT_LOG +("In_divs:", +v4 +, + +468 +_divs +); + +469 + `__XML_NETIF_COUNT_LOG +("Out_ques:", +v4 +, + +470 +out_ques +); + +471 + `__XML_NETIF_COUNT_LOG +("Out_disrds:", +v4 +, + +472 +out_disrds +); + +473 + `__XML_NETIF_COUNT_LOG +("Out_no_rous:", +v4 +, + +474 +out_no_rous +); + +475 + `__XML_NETIF_COUNT_LOG +("Rsm_timeout:", +v4 +, + +476 +asm_timeout +); + +477 + `__XML_NETIF_COUNT_LOG +("Rsm_qds:", +v4 +, + +478 +asm_qds +); + +479 + `__XML_NETIF_COUNT_LOG +("Rsm_oks:", +v4 +, + +480 +asm_oks +); + +481 + `__XML_NETIF_COUNT_LOG +("Rsm_s:", +v4 +, + +482 +asm_s +); + +483 + `__XML_NETIF_COUNT_LOG +("Fg_oks:", +v4 +, + +484 +ag_oks +); + +485 + `__XML_NETIF_COUNT_LOG +("Fg_s:", +v4 +, + +486 +ag_s +); + +487 + `__XML_NETIF_COUNT_LOG +("Fg_s:", +v4 +, + +488 +ag_s +); + +491 + `__XML_NETIF_COUNT_LOG +("Icmp__msgs:", +icmp +, + +492 +icmp__msgs +); + +493 + `__XML_NETIF_COUNT_LOG +("Icmp__rs:", +icmp +, + +494 +icmp__rs +); + +495 + `__XML_NETIF_COUNT_LOG +("Icmp__de_uėchs:", +icmp +, + +496 +icmp__de_uėchs +); + +497 + `__XML_NETIF_COUNT_LOG +("Icmp__time_excds:", +icmp +, + +498 +icmp__time_excds +); + +499 + `__XML_NETIF_COUNT_LOG +("Icmp__rm_obs:", +icmp +, + +500 +icmp__rm_obs +); + +501 + `__XML_NETIF_COUNT_LOG +("Icmp__c_quchs:", +icmp +, + +502 +icmp__c_quchs +); + +503 + `__XML_NETIF_COUNT_LOG +("Icmp__des:", +icmp +, + +504 +icmp__des +); + +505 + `__XML_NETIF_COUNT_LOG +("Icmp__echos:", +icmp +, + +506 +icmp__echos +); + +507 + `__XML_NETIF_COUNT_LOG +("Icmp__echo_ps:", +icmp +, + +508 +icmp__echo_ps +); + +509 + `__XML_NETIF_COUNT_LOG +("Icmp__timeamps:", +icmp +, + +510 +icmp__timeamps +); + +511 + `__XML_NETIF_COUNT_LOG +("Icmp__timeamp_ps:", +icmp +, + +512 +icmp__timeamp_ps +); + +513 + `__XML_NETIF_COUNT_LOG +("Icmp__addr_masks:", +icmp +, + +514 +icmp__addr_masks +); + +515 + `__XML_NETIF_COUNT_LOG +("Icmp__addr_mask_ps:", +icmp +, + +516 +icmp__addr_mask_ps +); + +518 + `__XML_NETIF_COUNT_LOG +("Icmp_out_msgs:", +icmp +, + +519 +icmp_out_msgs +); + +520 + `__XML_NETIF_COUNT_LOG +("Icmp_out_rs:", +icmp +, + +521 +icmp_out_rs +); + +522 + `__XML_NETIF_COUNT_LOG +("Icmp_out_de_uėchs:", +icmp +, + +523 +icmp_out_de_uėchs +); + +524 + `__XML_NETIF_COUNT_LOG +("Icmp_out_time_excds:", +icmp +, + +525 +icmp_out_time_excds +); + +526 + `__XML_NETIF_COUNT_LOG +("Icmp_out_rm_obs:", +icmp +, + +527 +icmp_out_rm_obs +); + +528 + `__XML_NETIF_COUNT_LOG +("Icmp_out_c_quchs:", +icmp +, + +529 +icmp_out_c_quchs +); + +530 + `__XML_NETIF_COUNT_LOG +("Icmp_out_des:", +icmp +, + +531 +icmp_out_des +); + +532 + `__XML_NETIF_COUNT_LOG +("Icmp_out_echos:", +icmp +, + +533 +icmp_out_echos +); + +534 + `__XML_NETIF_COUNT_LOG +("Icmp_out_echo_ps:", +icmp +, + +535 +icmp_out_echo_ps +); + +536 + `__XML_NETIF_COUNT_LOG +("Icmp_out_timeamps:", +icmp +, + +537 +icmp_out_timeamps +); + +538 + `__XML_NETIF_COUNT_LOG +("Icmp_out_timeamp_ps:", +icmp +, + +539 +icmp_out_timeamp_ps +); + +540 + `__XML_NETIF_COUNT_LOG +("Icmp_out_addr_masks:", +icmp +, + +541 +icmp_out_addr_masks +); + +542 + `__XML_NETIF_COUNT_LOG +("Icmp_out_addr_mask_ps:", +icmp +, + +543 +icmp_out_addr_mask_ps +); + +546 + `__XML_NETIF_COUNT_LOG +("T_aive_ݒs:", +t +, + +547 +t_aive_ݒs +); + +548 + `__XML_NETIF_COUNT_LOG +("T_ssive_ݒs:", +t +, + +549 +t_ssive_ݒs +); + +550 + `__XML_NETIF_COUNT_LOG +("T_m_s:", +t +, + +551 +t_m_s +); + +552 + `__XML_NETIF_COUNT_LOG +("T_eab_ts:", +t +, + +553 +t_eab_ts +); + +554 + `__XML_NETIF_COUNT_LOG +("T_cu_eab:", +t +, + +555 +t_eab_ts +); + +556 + `__XML_NETIF_COUNT_LOG +("T__gs:", +t +, + +557 +t__gs +); + +558 + `__XML_NETIF_COUNT_LOG +("T_out_gs:", +t +, + +559 +t_out_gs +); + +560 + `__XML_NETIF_COUNT_LOG +("T__gs:", +t +, + +561 +t__gs +); + +562 + `__XML_NETIF_COUNT_LOG +("T__rs:", +t +, + +563 +t__rs +); + +564 + `__XML_NETIF_COUNT_LOG +("T_out_rs:", +t +, + +565 +t_out_rs +); + +568 + `__XML_NETIF_COUNT_LOG +("Udp__dgms:", +udp +, + +569 +udp__dgms +); + +570 + `__XML_NETIF_COUNT_LOG +("Udp_no_pts:", +udp +, + +571 +udp_no_pts +); + +572 + `__XML_NETIF_COUNT_LOG +("Udp__rs:", +udp +, + +573 +udp__rs +); + +574 + `__XML_NETIF_COUNT_LOG +("Udp_out_dgms:", +udp +, + +575 +udp_out_dgms +); + +578 + `__XML_NETIF_COUNT_LOG +("Syncooks_", +t_ext +, + +579 +syncooks_ +); + +580 + `__XML_NETIF_COUNT_LOG +("Syncooks_cv", +t_ext +, + +581 +syncooks_cv +); + +582 + `__XML_NETIF_COUNT_LOG +("Syncooks_ed", +t_ext +, + +583 +syncooks_ed +); + +584 + `__XML_NETIF_COUNT_LOG +("Embriic_rs", +t_ext +, + +585 +embriic_rs +); + +586 + `__XML_NETIF_COUNT_LOG +("Pru_ed", +t_ext +, + +587 +u_ed +); + +588 + `__XML_NETIF_COUNT_LOG +("Rcv_ud", +t_ext +, + +589 +rcv_ud +); + +590 + `__XML_NETIF_COUNT_LOG +("Ofo_ud", +t_ext +, + +591 +ofo_ud +); + +592 + `__XML_NETIF_COUNT_LOG +("Out_of_wdow_icmps", +t_ext +, + +593 +out_of_wdow_icmps +); + +594 + `__XML_NETIF_COUNT_LOG +("Lock_drݳd_icmps", +t_ext +, + +595 +lock_drݳd_icmps +); + +596 + `__XML_NETIF_COUNT_LOG +("A_fr", +t_ext +, + +597 +p_fr +); + +598 + `__XML_NETIF_COUNT_LOG +("Time_waed", +t_ext +, + +599 +time_waed +); + +600 + `__XML_NETIF_COUNT_LOG +("Time_wa_cyed", +t_ext +, + +601 +time_wa_cyed +); + +602 + `__XML_NETIF_COUNT_LOG +("Time_wa_kd", +t_ext +, + +603 +time_wa_kd +); + +604 + `__XML_NETIF_COUNT_LOG +("Paws_ssive_jeed", +t_ext +, + +605 +ws_ssive_jeed +); + +606 + `__XML_NETIF_COUNT_LOG +("Paws_aive_jeed", +t_ext +, + +607 +ws_aive_jeed +); + +608 + `__XML_NETIF_COUNT_LOG +("Paws_eab_jeed", +t_ext +, + +609 +ws_eab_jeed +); + +610 + `__XML_NETIF_COUNT_LOG +("Dayed_ack", +t_ext +, + +611 +dayed_ack +); + +612 + `__XML_NETIF_COUNT_LOG +("Dayed_ack_locked", +t_ext +, + +613 +dayed_ack_locked +); + +614 + `__XML_NETIF_COUNT_LOG +("Dayed_ack_lo", +t_ext +, + +615 +dayed_ack_lo +); + +616 + `__XML_NETIF_COUNT_LOG +("Li_ovows", +t_ext +, + +617 +li_ovows +); + +618 + `__XML_NETIF_COUNT_LOG +("Li_drs", +t_ext +, + +619 +li_drs +); + +620 + `__XML_NETIF_COUNT_LOG +("T_equeued", +t_ext +, + +621 +t_equeued +); + +622 + `__XML_NETIF_COUNT_LOG +("T_de_cy_om_backlog", +t_ext +, + +623 +t_de_cy_om_backlog +); + +624 + `__XML_NETIF_COUNT_LOG +("T_de_cy_om_equeue", +t_ext +, + +625 +t_de_cy_om_equeue +); + +626 + `__XML_NETIF_COUNT_LOG +("T_equeue_drݳd", +t_ext +, + +627 +t_equeue_drݳd +); + +628 + `__XML_NETIF_COUNT_LOG +("T_hp_hs", +t_ext +, + +629 +t_hp_hs +); + +630 + `__XML_NETIF_COUNT_LOG +("T_hp_hs_to_ur", +t_ext +, + +631 +t_hp_hs_to_ur +); + +632 + `__XML_NETIF_COUNT_LOG +("T_pu_acks", +t_ext +, + +633 +t_pu_acks +); + +634 + `__XML_NETIF_COUNT_LOG +("T_hp_acks", +t_ext +, + +635 +t_hp_acks +); + +636 + `__XML_NETIF_COUNT_LOG +("T_no_covy", +t_ext +, + +637 +t_no_covy +); + +638 + `__XML_NETIF_COUNT_LOG +("T_ck_covy", +t_ext +, + +639 +t_ck_covy +); + +640 + `__XML_NETIF_COUNT_LOG +("T_ck_gg", +t_ext +, + +641 +t_ck_gg +); + +642 + `__XML_NETIF_COUNT_LOG +("T_ck_d", +t_ext +, + +643 +t_ck_d +); + +644 + `__XML_NETIF_COUNT_LOG +("T_ck_d", +t_ext +, + +645 +t_ck_d +); + +646 + `__XML_NETIF_COUNT_LOG +("T_no_d", +t_ext +, + +647 +t_no_d +); + +648 + `__XML_NETIF_COUNT_LOG +("T_ts_d", +t_ext +, + +649 +t_ts_d +); + +650 + `__XML_NETIF_COUNT_LOG +("T_fu_undo", +t_ext +, + +651 +t_fu_undo +); + +652 + `__XML_NETIF_COUNT_LOG +("T_l_undo", +t_ext +, + +653 +t_l_undo +); + +654 + `__XML_NETIF_COUNT_LOG +("T_loss_undo", +t_ext +, + +655 +t_loss_undo +); + +656 + `__XML_NETIF_COUNT_LOG +("T_ck_undo", +t_ext +, + +657 +t_ck_undo +); + +658 + `__XML_NETIF_COUNT_LOG +("T_loss", +t_ext +, + +659 +t_loss +); + +660 + `__XML_NETIF_COUNT_LOG +("T_lo_sm", +t_ext +, + +661 +t_lo_sm +); + +662 + `__XML_NETIF_COUNT_LOG +("T_no_us", +t_ext +, + +663 +t_no_us +); + +664 + `__XML_NETIF_COUNT_LOG +("T_ck_us", +t_ext +, + +665 +t_ck_us +); + +666 + `__XML_NETIF_COUNT_LOG +("T_loss_us", +t_ext +, + +667 +t_loss_us +); + +668 + `__XML_NETIF_COUNT_LOG +("T_timeouts", +t_ext +, + +669 +t_timeouts +); + +670 + `__XML_NETIF_COUNT_LOG +("T_no_covy_", +t_ext +, + +671 +t_no_covy_ +); + +672 + `__XML_NETIF_COUNT_LOG +("T_ck_covy_", +t_ext +, + +673 +t_ck_covy_ +); + +674 + `__XML_NETIF_COUNT_LOG +("T__s", +t_ext +, + +675 +t__s +); + +676 + `__XML_NETIF_COUNT_LOG +("T_fwd_s", +t_ext +, + +677 +t_fwd_s +); + +678 + `__XML_NETIF_COUNT_LOG +("T_ow_t_s", +t_ext +, + +679 +t_ow_t_s +); + +680 + `__XML_NETIF_COUNT_LOG +("T_schedur_us", +t_ext +, + +681 +t_schedur_us +); + +682 + `__XML_NETIF_COUNT_LOG +("T_rcv_cpd", +t_ext +, + +683 +t_rcv_cpd +); + +684 + `__XML_NETIF_COUNT_LOG +("T_dck_d_", +t_ext +, + +685 +t_dck_d_ +); + +686 + `__XML_NETIF_COUNT_LOG +("T_dck_ofo_", +t_ext +, + +687 +t_dck_ofo_ +); + +688 + `__XML_NETIF_COUNT_LOG +("T_dck_cv", +t_ext +, + +689 +t_dck_cv +); + +690 + `__XML_NETIF_COUNT_LOG +("T_dck_ofo_cv", +t_ext +, + +691 +t_dck_ofo_cv +); + +692 + `__XML_NETIF_COUNT_LOG +("T_abt__syn", +t_ext +, + +693 +t_abt__syn +); + +694 + `__XML_NETIF_COUNT_LOG +("T_abt__da", +t_ext +, + +695 +t_abt__da +); + +696 + `__XML_NETIF_COUNT_LOG +("T_abt__o", +t_ext +, + +697 +t_abt__o +); + +698 + `__XML_NETIF_COUNT_LOG +("T_abt__memy", +t_ext +, + +699 +t_abt__memy +); + +700 + `__XML_NETIF_COUNT_LOG +("T_abt__timeout", +t_ext +, + +701 +t_abt__timeout +); + +702 + `__XML_NETIF_COUNT_LOG +("T_abt__lg", +t_ext +, + +703 +t_abt__lg +); + +704 + `__XML_NETIF_COUNT_LOG +("T_abt_ed", +t_ext +, + +705 +t_abt_ed +); + +706 + `__XML_NETIF_COUNT_LOG +("T_memy_essus", +t_ext +, + +707 +t_memy_essus +); + +709 + `__XML_NETIF_LOG + +__XML_NETIF_DATAEND_FMT +); + +711 i( +n + = +cou +) + +712 +n +--; + +714 +buf +[ +n +++] = '\0'; + +716  +n +; + +717 + } +} + +720 + $ci_tif_s_pt + +ci_tif +* +ni +, +ci__s_ouut_fmt + +ty +, * +buf +,  +cou + ) + +722  +rc + = 0; + +724 + `ci_as + +ni + ); + +726  +ty + ) { + +727  +CI_IP_STATS_OUTPUT_NONE +: + +728 #i +CI_CFG_SEND_STATS_TO_LOG + + +729 +rc + = + `ci_tif_s_pt_xt +( +ni +, +NULL +, 0); + +731 +rc + = 0; + +734  +CI_IP_STATS_OUTPUT_TEXT +: + +735 +rc + = + `ci_tif_s_pt_xt +( +ni +, +buf +, +cou + ); + +737  +CI_IP_STATS_OUTPUT_XML +: + +738 +rc + = + `ci_tif_s_pt_xml +( +ni +, +buf +, +cou + ); + +741 +rc + = -1; + +744 + `ci_tif_s_upde_tif + +ni + ); + +745 + `ci__s_r +& +ni +-> +e +-> +s_sh + ); + +747  +rc +; + +748 + } +} + +762 + $ci_tif_s_ai +( +__NI_STRUCT__ + * +ni +, + +763 +ci__s_ai_ty + +ai +, + +764 +ci__s_ouut_fmt + +fmt +, + +765 * +da +, + +766 +sockn_t + * +size +) + +768 +ci_time_t + + +; + +770 + `ci_as +( +ni +); + +771 + `ci_as + + `IPTIMER_STATE +( +ni +) ); + +773 + `LOG_STATS + + `ci_log +"%s%p, %d, %d, %)", +__FUNCTION__ +, +ni +, + +774 +ai +, +fmt +, +da +)); + +777 + `ci__time_g +( + `IPTIMER_STATE +( +ni +), & + +); + +780 #ide +__KERNEL__ + + +781 +ni +-> +e +-> +s_sh +. +now + = + `ci__time_ticks2ms +i, + +); + +784  +ai +) { + +785  +CI_IP_STATS_START +: + +786 + `ci__s_r +& +ni +-> +e +-> +s_sh +); + +787 + `ci__s_r +& +ni +-> +e +-> +s_cumutive +); + +789 + + = + `NI_CONF +( +ni +). +tcڡ_s +; + +790 + `ci_tif_s_hd_tim + +ni +, + + ); + +793  +CI_IP_STATS_GET +: + +794 i(( +da + ! +NULL +&& ( +size + !NULL&& (*siz>2 * ( +ci__s +))){ + +796 +ci__s +* +ii + = (ci__s*) +da +; + +797 + `memy +& +ii +[0], & +ni +-> +e +-> +s_sh +, ( +ci__s +) ); + +798 + `memy +& +ii +[1], & +ni +-> +e +-> +s_cumutive +, ( +ci__s +)); + +799 * +size + = 2 * ( +ci__s +); + +803  +CI_IP_STATS_REPORT +: + +804 #i +CI_CFG_SEND_STATS_TO_LOG + + +805 + `ci_tif_s_pt +( +ni +,i-> +e +-> +s_fmt +, +NULL +, 0); + +807 i(( +da + ! +NULL +&& ( +size + != NULL)) { + +808 * +size + = + `ci_tif_s_pt +( +ni +,i-> +e +-> +s_fmt +, + +809 +da +, * +size +); + +814  +CI_IP_STATS_END +: + +815  +CI_IP_STATS_FLUSH +: + +816 + `ci_tif_s_upde_tif + +ni + ); + +819 + + = +ai + ! +CI_IP_STATS_END + ? + `NI_CONF +( +ni +). +tcڡ_s + : 0; + +820 + `ci_tif_s_hd_tim +( +ni +, + + ); + +826 + } +} + + @netif_table.c + +14  + ~"_.h +" + +17  + #LPF + "t_b: " + + ) + +18  + #LPFU + "udp_b: " + + ) + +21  + #TOMBSTONE + -1 + + ) + +22  + #EMPTY + -2 + + ) + +47 +ci_le +  + $t_hash3 +( +ci_tif_fr_b +* +tbl +, + +48  +ddr +,  +t +, + +49  +ddr +,  +t +, + +50  +oc +) { + +51  +h + = + `CI_BSWAP_BE32 +( +ddr +^ + `CI_BSWAP_LE32 +( +ddr +) ^ + +52 ( +t + << 16 | +t +^ +oc +; + +53 +h + ^= h >> 16; + +54 +h + ^= h >> 8; + +55  +h +; + +56 + } +} + +59 +ci_le +  + $t_hash1 +( +ci_tif_fr_b +* +tbl +, + +60  +ddr +,  +t +, + +61  +ddr +,  +t +, + +62  +oc +) { + +63  + `t_hash3 +( +tbl +, +ddr +, +t +, +ddr +, +t +, +oc +) & + +64 +tbl +-> +b_size_mask +; + +65 + } +} + +68 +ci_le +  + $t_hash2 +( +ci_tif_fr_b +* +tbl +, + +69  +ddr +,  +t +, + +70  +ddr +,  +t +, + +71  +oc +) { + +74  ( + `CI_BSWAP_LE32 +( +ddr + ^ +ddr +^ ( +t + << 16 | +t +^ +oc +) | 1u; + +75 + } +} + +78  + $ci_tif_fr_lookup +( +ci_tif +* +tif +,  +ddr +,  +t +, + +79  +ddr +,  +t +,  +oc +) + +81  +hash1 +, +hash2 + = 0; + +82 +ci_tif_fr_b +* +tbl +; + +83  +f +; + +85 + `ci_as +( +tif +); + +86 + `ci_as +( + `ci_tif_is_locked +( +tif +)); + +87 + `ci_as +( +tif +-> +fr_b +); + +89 +tbl + = +tif +-> +fr_b +; + +90 +hash1 + = + `t_hash1 +( +tbl +, +ddr +, +t +, +ddr +, +t +, +oc +); + +91 +f + = +hash1 +; + +93 + `LOG_NV +( + `log +("tbl_lookup: %s %s:%u->%s:%u hash=%u:%ut=%u", + +94 + `CI_IP_PROTOCOL_STR +( +oc +), + +95 + `_addr_r +( +ddr +), ( + `CI_BSWAP_BE16 +( +t +), + +96 + `_addr_r +( +ddr +), ( + `CI_BSWAP_BE16 +( +t +), + +97 +f +, + `t_hash2 +( +tbl +, +ddr +, +t +, +ddr +, +t +, +oc +), + +98 +hash1 +)); + +101  +id + = +tbl +-> +b +[ +hash1 +].id; + +102 if + `CI_LIKELY +( +id + >= 0) ) { + +103 +ci_sock_cmn +* +s + = + `ID_TO_SOCK +( +tif +, +id +); + +104 if(( +ddr + - +tbl +-> +b +[ +hash1 +].laddr) | + +105 ( +t + - + `sock_t_be16 +( +s +) ) | + +106 ( +ddr + - + `sock_ddr_be32 +( +s +) ) | + +107 ( +t + - + `sock_t_be16 +( +s +) ) | + +108 ( +oc + - + `sock_oc +( +s +) )) == 0 ) + +109  +hash1 +; + +111 if +id + = +EMPTY + ) ; + +114 if +hash1 + = +f + ) + +115 +hash2 + = + `t_hash2 +( +tbl +, +ddr +, +t +, +ddr +, +t +, +oc +); + +116 +hash1 + = (hash1 + +hash2 +& +tbl +-> +b_size_mask +; + +117 if +hash1 + = +f + ) { + +118 + `LOG_E +( + `ci_log +( +FN_FMT + "ERROR: LOOP %s:%u->%s:%u hash=%u:%u", + +119 + `FN_PRI_ARGS +( +tif +), + `_addr_r +( +ddr +), +t +, + +120 + `_addr_r +( +ddr +), +t +, +hash1 +, +hash2 +)); + +121  - +ELOOP +; + +125  - +ENOENT +; + +126 + } +} + +129  + $ci_tif_li_lookup +( +ci_tif +* +tif +,  +ddr +,  +t +) + +131  +rc + = + `ci_tif_fr_lookup +( +tif +, +ddr +, +t +, 0, 0, +IPPROTO_TCP +); + +132 if +rc + < 0 ) + +133 +rc + = + `ci_tif_fr_lookup +( +tif +, 0, +t +, 0, 0, +IPPROTO_TCP +); + +134  +rc +; + +135 + } +} + +138 +ci_ut32 + + +139 + $ci_tif_fr_hash +( +ci_tif +* +ni +,  +ddr +,  +t +, + +140  +ddr +,  +t +,  +oc +) + +142  + `t_hash3 +( +ni +-> +fr_b +, +ddr +, +t +, +ddr +, +t +, +oc +); + +143 + } +} + +146 +ci_le +  + $ci_sock_tf_check +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +, + +147  +tf_i +,  +vn +) + +149  (( +s +-> +rx_bd2dev_ba_ifdex + == + +150 + `ci_tif_tf_i_to_ba_ifdex +( +ni +, +tf_i +)) && + +151 +s +-> +rx_bd2dev_vn + = +vn +); + +152 + } +} + +155  +ci_tif_fr_f_ch_mch +( +ci_tif +* +ni +,  +ddr +, + +156  +t +,  +ddr +, + +157  +t +,  +oc +, + +158  +tf_i +,  +vn +, + +159 (* +back +)( +ci_sock_cmn +*, *), + +160 * +back_g +, +ci_ut32 +* +hash_out +) + +162 +ci_tif_fr_b +* +tbl +; + +163  +hash1 +, +hash2 + = 0; + +164  +f +; + +166 +tbl + = +ni +-> +fr_b +; + +167 if +hash_out + ! +NULL + ) + +168 * +hash_out + = + `t_hash3 +( +tbl +, +ddr +, +t +, +ddr +, +t +, +oc +); + +169 +hash1 + = + `t_hash1 +( +tbl +, +ddr +, +t +, +ddr +, +t +, +oc +); + +170 +f + = +hash1 +; + +172 + `LOG_NV +( + `log +("%s: %s %s:%u->%s:%u hash=%u:%ut=%u", + +173 +__FUNCTION__ +, + `CI_IP_PROTOCOL_STR +( +oc +), + +174 + `_addr_r +( +ddr +), ( + `CI_BSWAP_BE16 +( +t +), + +175 + `_addr_r +( +ddr +), ( + `CI_BSWAP_BE16 +( +t +), + +176 +f +, + `t_hash2 +( +tbl +, +ddr +, +t +, +ddr +, +t +, +oc +), + +177 +hash1 +)); + +180  +id + = +tbl +-> +b +[ +hash1 +].id; + +181 if( + `CI_LIKELY + +id + >= 0 )) { + +182 +ci_sock_cmn +* +s + = + `ID_TO_SOCK +( +ni +, +id +); + +183 if(( +ddr + - +tbl +-> +b +[ +hash1 +].laddr) | + +184 ( +t + - + `sock_t_be16 +( +s +) ) | + +185 ( +ddr + - + `sock_ddr_be32 +( +s +) ) | + +186 ( +t + - + `sock_t_be16 +( +s +) ) | + +187 ( +oc + - + `sock_oc +( +s +) )) == 0 ) + +188 if( + `CI_LIKELY +( +s +-> +rx_bd2dev_ifdex + = +CI_IFID_BAD + || + +189 + `ci_sock_tf_check +( +ni +, +s +, +tf_i +, +vn +)) )) + +190 if + `back +( +s +, +back_g +) != 0 ) + +193 if +id + = +EMPTY + ) + +197 if +hash1 + = +f + ) + +198 +hash2 + = + `t_hash2 +( +tbl +, +ddr +, +t +, +ddr +, +t +, +oc +); + +199 +hash1 + = (hash1 + +hash2 +& +tbl +-> +b_size_mask +; + +200 if +hash1 + = +f + ) { + +201 + `LOG_NV +( + `ci_log +( +FN_FMT + "ITERATE FULL %s:%u->%s:%u hash=%u:%u", + +202 + `FN_PRI_ARGS +( +ni +), + `_addr_r +( +ddr +), +t +, + +203 + `_addr_r +( +ddr +), +t +, +hash1 +, +hash2 +)); + +208 + } +} + +212  + $ci_tif_fr_ +( +ci_tif +* +tif +, +oo_ + +t_id +, + +213  +ddr +,  +t +, + +214  +ddr +,  +t +,  +oc +) + +216 +ci_tif_fr_b_y +* +y +; + +217  +hash1 +, +hash2 +; + +218 +ci_tif_fr_b +* +tbl +; + +219 #i! + `defed +( +NDEBUG +|| +CI_CFG_STATS_NETIF + + +220  +hs + = 1; + +222  +f +; + +224 + `ci_as +( +tif +); + +225 + `ci_as +( + `ci_tif_is_locked +( +tif +)); + +226 + `ci_as +( +tif +-> +fr_b +); + +227 +tbl + = +tif +-> +fr_b +; + +229 +hash1 + = + `t_hash1 +( +tbl +, +ddr +, +t +, +ddr +, +t +, +oc +); + +230 +hash2 + = + `t_hash2 +( +tbl +, +ddr +, +t +, +ddr +, +t +, +oc +); + +231 +f + = +hash1 +; + +235 +y + = & +tbl +-> +b +[ +hash1 +]; + +236 if +y +-> +id + < 0 ) ; + +238 ++ +y +-> +rou_cou +; + +239 #i! + `defed +( +NDEBUG +|| +CI_CFG_STATS_NETIF + + +240 ++ +hs +; + +246 + `ci_as +( + +247 !(( +y +-> +id + = + `OO_SP_TO_INT +( +t_id +)&& ( +ddr + ==ntry->laddr)) ); + +249 +hash1 + = (hash1 + +hash2 +& +tbl +-> +b_size_mask +; + +251 if +hash1 + = +f + ) { + +252 +ci_sock_cmn + * +s + = + `SP_TO_SOCK_CMN +( +tif +, +t_id +); + +253 if! ( +s +-> +s_ags + & +CI_SOCK_FLAG_SW_FILTER_FULL +) ) { + +254 + `LOG_E +( + `ci_log +( +FN_FMT + "%d FULL %s %s:%u->%s:%u hops=%u", + +255 + `FN_PRI_ARGS +( +tif +), + +256 + `OO_SP_FMT +( +t_id +), + `CI_IP_PROTOCOL_STR +( +oc +), + +257 + `_addr_r +( +ddr +), ( + `CI_BSWAP_BE16 +( +t +), + +258 + `_addr_r +( +ddr +), ( + `CI_BSWAP_BE16 +( +t +), + +259 +hs +)); + +260 +s +-> +s_ags + | +CI_SOCK_FLAG_SW_FILTER_FULL +; + +263 + `CITP_STATS_NETIF_INC +( +tif +, +sw_fr__b_fu +); + +264  - +ENOBUFS +; + +269 + `LOG_TC +( + `ci_log +( +FN_FMT + "%d INSERT %s %s:%u->%s:%u hash=%u:%ut=%u " + +270 "ov=%d hs=%u", + `FN_PRI_ARGS +( +tif +), + `OO_SP_FMT +( +t_id +), + +271 + `CI_IP_PROTOCOL_STR +( +oc +), + +272 + `_addr_r +( +ddr +), ( + `CI_BSWAP_BE16 +( +t +), + +273 + `_addr_r +( +ddr +), ( + `CI_BSWAP_BE16 +( +t +), + +274 +f +, +hash2 +, +hash1 +, +y +-> +id +, +hs +)); + +276 #i +CI_CFG_STATS_NETIF + + +277 if +hs + > +tif +-> +e +-> +s +. +b_max_hs + ) + +278 +tif +-> +e +-> +s +. +b_max_hs + = +hs +; + +280 if +tif +-> +e +-> +s +. +b_mn_hs + == 0 ) + +281 +tif +-> +e +-> +s +. +b_mn_hs + = 1; + +282 +tif +-> +e +-> +s +. +b_mn_hs + = + +283 ( +tif +-> +e +-> +s +. +b_mn_hs + * 9 + +hs +) / 10; + +285 if +y +-> +id + = +EMPTY + ) + +286 ++ +tif +-> +e +-> +s +. +b_n_s +; + +287 ++ +tif +-> +e +-> +s +. +b_n_s +; + +290 +y +-> +id + = + `OO_SP_TO_INT +( +t_id +); + +291 +y +-> +ddr + =addr; + +293 + } +} + +297 + $__ci_tif_fr_move +( +ci_tif +* +ni +,  +hash1 +, + +298  +hash2 +,  +hs +,  +ϡ_tbl_i +) + +300 +ci_tif_fr_b +* +tbl + = +ni +-> +fr_b +; + +301 +ci_tif_fr_b_y +* +y +; + +302  +tbl_i +; + +303  +i +; + +305 +tbl_i + = +hash1 +; + +306  +i + = 0; i < +hs +; ++i ) { + +307 +y + = & +tbl +-> +b +[ +tbl_i +]; + +308 + `ci_as +( +y +-> +id + ! +EMPTY +); + +309 + `ci_as +( +y +-> +rou_cou + > 0); + +310 if-- +y +-> +rou_cou + =0 &&ry-> +id + = +TOMBSTONE + ) { + +311 + `CITP_STATS_NETIF +(-- +ni +-> +e +-> +s +. +b_n_s +); + +312 +y +-> +id + = +EMPTY +; + +314 +tbl_i + = (tbl_+ +hash2 +& +tbl +-> +b_size_mask +; + +316 + `ci_as +( +tbl_i + = +ϡ_tbl_i +); + +318 + `CITP_STATS_NETIF +(-- +ni +-> +e +-> +s +. +b_n_s +); + +319 +y + = & +tbl +-> +b +[ +tbl_i +]; + +320 if +y +-> +rou_cou + == 0 ) { + +321 + `CITP_STATS_NETIF +(-- +ni +-> +e +-> +s +. +b_n_s +); + +322 +y +-> +id + = +EMPTY +; + +325 +y +-> +id + = +TOMBSTONE +; + +327 + } +} + +331 + $ci_tif_fr_move +( +ci_tif +* +tif +, +oo_ + +sock_p +, + +332  +ddr +,  +t +, + +333  +ddr +,  +t +,  +oc +) + +335 +ci_tif_fr_b_y +* +y +; + +336  +hash1 +, +hash2 +, +tbl_i +; + +337 +ci_tif_fr_b +* +tbl +; + +338  +hs + = 0; + +339  +f +; + +341 + `ci_as +( + `ci_tif_is_locked +( +tif +) + +342 #ifde +__KERNEL__ + + +345 || ( + `tif2t_hr_sour +( +tif +)-> +k_f_cou + & + +346 +TCP_HELPER_K_RC_DEAD +) + +351 +tbl + = +tif +-> +fr_b +; + +352 +hash1 + = + `t_hash1 +( +tbl +, +ddr +, +t +, +ddr +, +t +, +oc +); + +353 +hash2 + = + `t_hash2 +( +tbl +, +ddr +, +t +, +ddr +, +t +, +oc +); + +354 +f + = +hash1 +; + +356 + `LOG_TC +( + `ci_log +("%s: [%d:%d] REMOVE %s %s:%u->%s:%u hash=%u:%u", + +357 +__FUNCTION__ +, + `NI_ID +( +tif +), + `OO_SP_FMT +( +sock_p +), + +358 + `CI_IP_PROTOCOL_STR +( +oc +), + +359 + `_addr_r +( +ddr +), ( + `CI_BSWAP_BE16 +( +t +), + +360 + `_addr_r +( +ddr +), ( + `CI_BSWAP_BE16 +( +t +), + +361 +hash1 +, +hash2 +)); + +363 +tbl_i + = +hash1 +; + +365 +y + = & +tbl +-> +b +[ +tbl_i +]; + +366 if +y +-> +id + = + `OO_SP_TO_INT +( +sock_p +) ) { + +367 if +ddr + = +y +->laddr ) + +370 if +y +-> +id + = +EMPTY + ) { + +376 +tbl_i + = (tbl_+ +hash2 +& +tbl +-> +b_size_mask +; + +377 ++ +hs +; + +378 if +tbl_i + = +f + ) { + +379 + `LOG_E +( + `ci_log +( +FN_FMT + "ERROR: LOOP [%d] %s %s:%u->%s:%u", + +380 + `FN_PRI_ARGS +( +tif +), + `OO_SP_FMT +( +sock_p +), + +381 + `CI_IP_PROTOCOL_STR +( +oc +), + +382 + `_addr_r +( +ddr +), ( + `CI_BSWAP_BE16 +( +t +), + +383 + `_addr_r +( +ddr +), ( + `CI_BSWAP_BE16 +( +t +))); + +388 + `__ci_tif_fr_move +( +tif +, +hash1 +, +hash2 +, +hs +, +tbl_i +); + +389 + } +} + +395 #ifde +__ci_driv__ + + +397  + $ci_tif_fr_ +( +ci_tif_fr_b +* +tbl +,  +size_lg2 +) + +399  +i +; + +400  +size + = + `ci_pow2 +( +size_lg2 +); + +402 + `ci_as +( +tbl +); + +403 + `ci_as_gt +( +size_lg2 +, 0); + +404 + `ci_as_ +( +size_lg2 +, 32); + +406 +tbl +-> +b_size_mask + = +size + - 1; + +408  +i + = 0; i < +size +; ++i ) { + +409 +tbl +-> +b +[ +i +]. +id + = +EMPTY +; + +410 +tbl +-> +b +[ +i +]. +rou_cou + = 0; + +411 +tbl +-> +b +[ +i +]. +ddr + = 0; + +413 + } +} + +417 +ci_sock_cmn +* + $__ci_tif_fr_lookup +( +ci_tif +* +tif +,  +ddr +, + +418  +t +,  +ddr +, + +419  +t +,  +oc +) + +421  +rc +; + +424 +rc + = + `ci_tif_fr_lookup +( +tif +, +ddr +, +t +, +ddr +, +t +, +oc +); + +425 + `LOG_NV +( + `log +( +LPF + "FULL LOOKUP %s:%u->%s:%uc=%d", + +426 + `_addr_r +( +ddr +), ( + `CI_BSWAP_BE16 +( +t +), + +427 + `_addr_r +( +ddr +), ( + `CI_BSWAP_BE16 +( +t +), + +428 +rc +)); + +430 if( + `CI_LIKELY + +rc + >= 0 )) + +431  + `ID_TO_SOCK +( +tif +,if-> +fr_b +-> +b +[ +rc +]. +id +); + +434 +ddr + = +t + = 0; + +435 +rc + = + `ci_tif_fr_lookup +( +tif +, +ddr +, +t +, +ddr +, +t +, +oc +); + +436 + `LOG_NV +( + `log +( +LPF + "WILD LOOKUP %s:%u->%s:%uc=%d", + +437 + `_addr_r +( +ddr +), ( + `CI_BSWAP_BE16 +( +t +), + +438 + `_addr_r +( +ddr +), ( + `CI_BSWAP_BE16 +( +t +), + +439 +rc +)); + +441 if( + `CI_LIKELY + +rc + >= 0 )) + +442  + `ID_TO_SOCK +( +tif +,if-> +fr_b +-> +b +[ +rc +]. +id +); + +445 + } +} + +448  + $ci_tif_fr_check +( +ci_tif +* +tif +, + +449  +ddr +,  +t +, + +450  +ddr +,  +t +, + +451  +oc +) + +453  + `ci_tif_fr_lookup +( +tif +, +ddr +, +t +, +ddr +, +t +, +oc +); + +454 + } +} + +460  + $ci_tif_fr_dump +( +ci_tif +* +ni +) + +462  +id +; + +463  +i +; + +464 +ci_tif_fr_b +* +tbl +; + +466 + `ci_as +( +ni +); + +467 +tbl + = +ni +-> +fr_b +; + +469 + `log +("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); + +470 #i +CI_CFG_STATS_NETIF + + +471 + `log +( +FN_FMT + "size=%d_s=%n_s=%max=%mn=%i", + `FN_PRI_ARGS +( +ni +), + +472 +tbl +-> +b_size_mask + + 1, +ni +-> +e +-> +s +. +b_n_s +, + +473 +ni +-> +e +-> +s +. +b_n_s +,i->e->s. +b_max_hs +, + +474 +ni +-> +e +-> +s +. +b_mn_hs +); + +477  +i + = 0; i < +tbl +-> +b_size_mask +; ++i ) { + +478 +id + = +tbl +-> +b +[ +i +].id; + +479 if + `CI_LIKELY +( +id + >= 0) ) { + +480 +ci_sock_cmn +* +s + = + `ID_TO_SOCK +( +ni +, +id +); + +481  +ddr + = +tbl +-> +b +[ +i +].laddr; + +482  +t + = + `sock_t_be16 +( +s +); + +483  +ddr + = + `sock_ddr_be32 +( +s +); + +484  +t + = + `sock_t_be16 +( +s +); + +485  +oc + = + `sock_oc +( +s +); + +486  +hash1 + = + `t_hash1 +( +tbl +, +ddr +, +t +, +ddr +, +t +, +oc +); + +487  +hash2 + = + `t_hash2 +( +tbl +, +ddr +, +t +, +ddr +, +t +, +oc +); + +488 + `log +("%010d id=%-10dt_=%d %" +CI_IP_PRINTF_FORMAT +":%d " + +489 +CI_IP_PRINTF_FORMAT +":%d %010d:%010d", + +490 +i +, +id +, +tbl +-> +b +[i]. +rou_cou +, + `CI_IP_PROTOCOL_STR +( +oc +), + +491 + `CI_IP_PRINTF_ARGS +(& +ddr +), + `CI_BSWAP_BE16 +( +t +), + +492 + `CI_IP_PRINTF_ARGS +(& +ddr +), + `CI_BSWAP_BE16 +( +t +), +hash1 +, +hash2 +); + +495 + `log +("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); + +496 + } +} + + @netif_tx.c + +14  + ~"_.h +" + +15  + ~"tif_tx.h +" + +16  + ~ + +17  + ~ + +20  + $__ci_tif_dmaq_shove +( +ci_tif +* +ni +,  +tf_i +) + +22 +oo_pktq +* +dmaq + = & +ni +-> +e +-> +nic +[ +tf_i +].dmaq; + +23 +ef_vi +* +vi + = & +ni +-> +nic_hw +[ +tf_i +].vi; + +24 +ci__pkt_fmt +* +pkt +; + +25  +rc +; + +28 +pkt + = + `PKT_CHK +( +ni +, +dmaq +-> +hd +); + +29 + `ci_as +( +pkt +-> +ags + & +CI_PKT_FLAG_TX_PENDING +); + +30 + `ci_as_equ +( +tf_i +, +pkt +->intf_i); + +32 +ef_iovec + +iov +[ +CI_IP_PKT_SEGMENTS_MAX +]; + +33 + `ci_tif_pkt_to_iovec +( +ni +, +pkt +, +iov +, (iov) / (iov[0])); + +34 +rc + = + `ef_vi_smv_ +( +vi +, +iov +, +pkt +-> +n_bufrs +, + `OO_PKT_ID +(pkt)); + +35 if +rc + >= 0 ) { + +36 + `__oo_pktq_xt +( +ni +, +dmaq +, +pkt +, +tif +. +tx +. +dmaq_xt +); + +37 + `CI_DEBUG +( +pkt +-> +tif +. +tx +. +dmaq_xt + = +OO_PP_NULL +); + +41 #i +CI_CFG_STATS_NETIF + + +42 if( +ci_ut32 + +dmaq +-> +num + > +ni +-> +e +-> +s +. +tx_dma_max + ) + +43 +ni +-> +e +-> +s +. +tx_dma_max + = +dmaq +-> +num +; + +49  + `oo_pktq_n_emy +( +dmaq +) ); + +51 + `ef_vi_sm_push +( +vi +); + +52 + `CITP_STATS_NETIF_INC +( +ni +, +tx_dma_dobls +); + +53 + } +} + +56  + $ci_tif_dmaq_shove1 +( +ci_tif +* +ni +,  +tf_i +) + +58 +ef_vi +* +vi + = & +ni +-> +nic_hw +[ +tf_i +].vi; + +59 if + `ef_vi_sm_a +( +vi +>( + `ef_vi_sm_cy +(vi) >> 1) ) + +60 + `__ci_tif_dmaq_shove +( +ni +, +tf_i +); + +61 + } +} + +64  + $ci_tif_dmaq_shove2 +( +ci_tif +* +ni +,  +tf_i +) + +66 +ef_vi +* +vi + = & +ni +-> +nic_hw +[ +tf_i +].vi; + +67 if + `ef_vi_sm_a +( +vi +> +CI_IP_PKT_SEGMENTS_MAX + ) + +68 + `__ci_tif_dmaq_shove +( +ni +, +tf_i +); + +69 + } +} + +72  + $ci_tif_nd +( +ci_tif +* +tif +, +ci__pkt_fmt +* +pkt +) + +74  +tf_i +, +rc +; + +75 +oo_pktq +* +dmaq +; + +76 +ef_vi +* +vi +; + +77 +ef_iovec + +iov +[ +CI_IP_PKT_SEGMENTS_MAX +]; + +78 #i +CI_CFG_USE_PIO + + +79 +ci_ut8 + +d +; + +80 +ci_t32 + +offt +; + +81 +ci_pio_buddy_lot +* +buddy +; + +84 + `ci_as +( +tif +); + +85 + `ci_as +( +pkt +); + +86 + `ci_as +( +pkt +-> +tf_i + >= 0); + +87 + `ci_as +( +pkt +-> +tf_i + < +CI_CFG_MAX_INTERFACES +); + +89 + `__ci_tif_dmaq___pkt +( +tif +, +pkt +); + +91 + `LOG_NT +( + `log +("%s: [%d] id=%dg=%d 0:[" +EF_ADDR_FMT +":%d] dhost=" + +92 +CI_MAC_PRINTF_FORMAT +, +__FUNCTION__ +, + `NI_ID +( +tif +), + +93 + `OO_PKT_FMT +( +pkt +),kt-> +n_bufrs +,kt-> +dma_addr +[pkt-> +tf_i +], + +94 +pkt +-> +buf_n +, + `CI_MAC_PRINTF_ARGS +( + `oo_h_dho +(pkt)))); + +96 + `ci_check +! + `ci_h_addr_is_zo +(( +ci_ut8 + *) + `oo_h_dho +( +pkt +))); + +105 +tf_i + = +pkt +->intf_i; + +107 +dmaq + = + `ci_tif_dmaq +( +tif +, +tf_i +); + +108 +vi + = & +tif +-> +nic_hw +[ +tf_i +].vi; + +111 + `ci_as_equ +( +vi +, & +tif +-> +nic_hw +[ +pkt +-> +tf_i +].vi); + +113 if + `oo_pktq_is_emy +( +dmaq +) ) { + +114 #i +CI_CFG_USE_PIO + + +118 +d + = + `ci_log2_ge +( +pkt +-> +y_n +, +CI_CFG_MIN_PIO_BLOCK_ORDER +); + +119 +buddy + = & +tif +-> +e +-> +nic +[ +tf_i +]. +pio_buddy +; + +120 if +tif +-> +e +-> +nic +[ +tf_i +]. +oo_vi_ags + & +OO_VI_FLAGS_PIO_EN + ) { + +121 if +pkt +-> +y_n + < + `NI_OPTS +( +tif +). +pio_thsh + &&kt-> +n_bufrs + == 1 ) { + +122 if( +offt + = + `ci_pio_buddy_loc +( +tif +, +buddy +, +d +)) >= 0 ) { + +123 +rc + = + `ef_vi_sm_cy_pio +(& +tif +-> +nic_hw +[ +pkt +-> +tf_i +]. +vi +, +offt +, + +124 + `PKT_START +( +pkt +),kt-> +buf_n +, + +125 + `OO_PKT_ID +( +pkt +)); + +126 if +rc + == 0 ) { + +127 + `CITP_STATS_NETIF_INC +( +tif +, +pio_pkts +); + +128 + `ci_as +( +pkt +-> +pio_addr + == -1); + +129 +pkt +-> +pio_addr + = +offt +; + +130 +pkt +-> +pio_d + = +d +; + +131  +de +; + +134 + `CITP_STATS_NETIF_INC +( +tif +, +no_pio_r +); + +135 + `ci_pio_buddy_ +( +tif +, +buddy +, +offt +, +d +); + +140 + `CI_DEBUG +( + `CITP_STATS_NETIF_INC +( +tif +, +no_pio_busy +)); + +144 + `CI_DEBUG +( + `CITP_STATS_NETIF_INC +( +tif +, +no_pio_too_lg +)); + +148 + `ci_tif_pkt_to_iovec +( +tif +, +pkt +, +iov +, + +149 ( +iov +) / (iov[0])); + +150 if( +rc + = + `ef_vi_smv +( +vi +, +iov +, +pkt +-> +n_bufrs +, + `OO_PKT_ID +(pkt))) == 0 ) { + +151 + `CITP_STATS_NETIF_INC +( +tif +, +tx_dma_dobls +); + +152 + `LOG_AT +( + `ci_y_pkt +( + `oo_h_hdr +( +pkt +),kt-> +buf_n +)); + +153 + `LOG_DT +( + `ci_hex_dump +( +ci_log_ +, + `oo_h_hdr +( +pkt +),kt-> +buf_n +, 0)); + +154  +de +; + +161 + `LOG_NT +( + `log +("%s: ENQ id=%d", +__FUNCTION__ +, + `OO_PKT_FMT +( +pkt +))); + +162 + `__ci_tif_dmaq_put +( +tif +, +dmaq +, +pkt +); + +164 +de +: + +170 if +tif +-> +e +-> +nd_may_pl + ) { + +171 +ci_tif_e_nic_t +* +n + = & +tif +-> +e +-> +nic +[ +tf_i +]; + +172 if +n +-> +tx_dmaq__q + --> +tx_dmaq__q_ϡ_pl + > + +173 + `NI_OPTS +( +tif +). +nd_pl_thsh + ) { + +174 +n +-> +tx_dmaq__q_ϡ_pl + =-> +tx_dmaq__q +; + +175 if + `ci_tif_tf_has_evt +( +tif +, +tf_i +) ) { + +179 +tif +-> +e +-> +nd_may_pl + = 0; + +180 + `ci_tif_pl_n +( +tif +, + `NI_OPTS +ґif). +nd_pl_max_evts +); + +181 +tif +-> +e +-> +nd_may_pl + = 1; + +185 + } +} + + @netif_tx.h + +1 #ide +__NETIF_TX_H__ + + +2  + #__NETIF_TX_H__ + + + ) + +9 +ci_le +  + $ci_tif_pkt_tx_as_n +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +, + +10  +n +) + +12 #ide +NDEBUG + + +13 +ci__pkt_fmt +* +f + = +pkt +; + +14  +i +, +t + = 0; + +15  +i + = 0; ; ) { + +16 +t + + +pkt +-> +buf_n +; + +17 + `ci_as_ +( +t +, +f +-> +y_n +); + +18 if++ +i + = +n + ) + +20 +pkt + = + `PKT_CHK +( +ni +,kt-> +ag_xt +); + +22 + `ci_as_equ +( +t +, +f +-> +y_n +); + +24 + } +} + +27 +ci_le +  + $ci_tif_pkt_to_iovec +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +, + +28 +ef_iovec +* +iov +,  +iovn +) + +30  +i +, +tf_i + = +pkt +->intf_i; + +31  +n + = +pkt +-> +n_bufrs +; + +33 + `ci_as_ +(( +tf_i +, +CI_CFG_MAX_INTERFACES +); + +34 + `ci_as_ge +( +iovn +, +n +); + +36 #i +CI_CFG_NETIF_HARDEN + + +37 if +n + > +iovn + ) + +38 +n + = +iovn +; + +41 + `ci_tif_pkt_tx_as_n +( +ni +, +pkt +, +n +); + +43  +i + = 0; ; ) { + +44 +iov +[ +i +]. +iov_ba + = +pkt +-> +dma_addr +[ +tf_i +] +kt-> +pkt_t_off +; + +45 +iov +[ +i +]. +iov_n + = +pkt +-> +buf_n +; + +46 if++ +i + = +n + ) + +48 +pkt + = + `PKT_CHK +( +ni +,kt-> +ag_xt +); + +50 + } +} + +60  +ci_tif_dmaq_shove1 +( +ci_tif +*,  +tf_i +); + +65  +ci_tif_dmaq_shove2 +( +ci_tif +*,  +tf_i +); + +68  + #ci_tif_dmaq +( +ni +, +nic_i +(&i)-> +e +-> +nic +[nic_i]. +dmaq +) + + ) + +71  + #ci_tif_dmaq_is_emy +( +ni +, +nic_i +) \ + +72 + `oo_pktq_is_emy +( + `ci_tif_dmaq +(( +ni +), ( +nic_i +))) + + ) + +74  + #ci_tif_dmaq_n_emy +( +ni +, +nic_i +) \ + +75 + `oo_pktq_n_emy +( + `ci_tif_dmaq +(( +ni +), ( +nic_i +))) + + ) + +78  + #__ci_tif_dmaq_put +( +ni +, +q +, +pkt +) \ + +80 + `__oo_pktq_put +(( +ni +), ( +q +), ( +pkt +), +tif +. +tx +. +dmaq_xt +); \ + +82 } 0) + + ) + +85 +ci_le +  + $ci_tif_dmaq_d_vi_f_pkt +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +, + +86 +oo_pktq +** +dmaq +, +ef_vi +** +vi +) { + +87 * +dmaq + = & +ni +-> +e +-> +nic +[ +pkt +-> +tf_i +].dmaq; + +88 * +vi + = & +ni +-> +nic_hw +[ +pkt +-> +tf_i +].vi; + +89 + } +} + +92  + #__ci_tif_dmaq___pkt +( +ni +, +pkt +) \ + +94 + `ci_as +! (( +pkt +)-> +ags + & +CI_PKT_FLAG_TX_PENDING +) ); \ + +95 ( +pkt +)-> +ags + | +CI_PKT_FLAG_TX_PENDING +; \ + +96 ++( +ni +)-> +e +-> +nic +[( +pkt +)-> +tf_i +]. +tx_dmaq__q +; \ + +97 ( +ni +)-> +e +-> +nic +[( +pkt +)-> +tf_i +]. +tx_bys_added ++= + `TX_PKT_LEN +(pkt); \ + +98 if + `oo_tdump_check +( +ni +, +pkt +, (pkt)-> +tf_i +) ) \ + +99 + `oo_tdump_dump_pkt +( +ni +, +pkt +); \ + +100 } 0) + + ) + +103  + #__ci_tif_dmaq___pkt_wm_undo +( +ni +, +pkt +) \ + +105 ( +pkt +)-> +ags + &=~ +CI_PKT_FLAG_TX_PENDING +; \ + +106 --( +ni +)-> +e +-> +nic +[( +pkt +)-> +tf_i +]. +tx_dmaq__q +; \ + +107 ( +ni +)-> +e +-> +nic +[( +pkt +)-> +tf_i +]. +tx_bys_added +-= + `TX_PKT_LEN +(pkt); \ + +108 + `ci_tif_pkt_a +( +ni +, +pkt +); \ + +109 } 0) + + ) + + @os_sock.c + +10  + ~"_.h +" + +11  + ~ + +12  + ~ + +13 #ide +__KERNEL__ + + +14  + ~ + +22 #ifde +__KERNEL__ + + +25  + $oo_os_sock_g_om_ +( +t_hr_dpot_t +* + +, +oo_os_fe +* +os_sock_out +) + +27  +lock_ags +; + +29 + `_lock_qve +(& + +-> +lock +, +lock_ags +); + +30 if + +-> +os_sock + ! +NULL + ) { + +31 * +os_sock_out + = + +-> +os_sock +-> +fe +; + +32 + `g_fe +(* +os_sock_out +); + +33 + `_uock_qe +(& + +-> +lock +, +lock_ags +); + +34 + `ci_as +(* +os_sock_out + ! +NULL +); + +37 + `_uock_qe +(& + +-> +lock +, +lock_ags +); + +38 * +os_sock_out + = +NULL +; + +39  - +EINVAL +; + +40 + } +} + +43  + $oo_os_sock_g +( +ci_tif +* +ni +, +oo_ + +sock_p +, +oo_os_fe +* +os_sock_out +) + +45  +sock_id + = + `OO_SP_TO_INT +( +sock_p +); + +46 +t_hr_dpot_t +* + +; + +48 if +sock_id + ! + `TRUSTED_SOCK_ID +( +ni +, sock_id) ) { + +49 + `LOG_E +( + `ci_log +("%s: ERROR: %d:%d bad sock_id", + +50 +__FUNCTION__ +, + `NI_ID +( +ni +), +sock_id +)); + +51  - +EINVAL +; + +53 + + = + `ci_tif__g +( +ni +, +sock_p +); + +54 if + `oo_os_sock_g_om_ +( + +, +os_sock_out +) == 0 ) + +57 + `LOG_E +( + `ci_log +("%s: ERROR: %d:%d haso O/S socket", + +58 +__FUNCTION__ +, + `NI_ID +( +ni +), +sock_id +)); + +59  - +ENOENT +; + +60 + } +} + +64  + $oo_os_sock_g +( +ci_tif +* +ni +, +oo_ + +sock_p +, +oo_os_fe +* +os_sock_out +) + +66 +oo_os_sock_fd_g_t + + +; + +67  +rc +; + +69 + `oo_rwlock_lock_ad +(& +cp_dup2_lock +); + +70 + +. +sock_id + = + `OO_SP_TO_INT +( +sock_p +); + +71 +rc + = + `oo_sour_ +( + `ci_tif_g_driv_hd +( +ni +), + +72 +OO_IOC_OS_SOCK_FD_GET +, & + +); + +73 if +rc + == 0 ) + +74 * +os_sock_out + = + +. +fd_out +; + +76 + `oo_rwlock_uock_ad + (& +cp_dup2_lock +); + +77  +rc +; + +78 + } +} + +81  + $oo_os_sock_a +( +ci_tif +* +ni +, +oo_os_fe + +fd +) + +83  +rc + = + `ci_sys_o +( +fd +); + +84 + `oo_rwlock_uock_ad +(& +cp_dup2_lock +); + +85 if +rc + != 0 ) + +86 + `LOG_E +( + `ci_log +("%s: [%d] ci_sys_closeeturned %d (errno=%d)", + +87 +__FUNCTION__ +, + `NI_ID +( +ni +), +rc +, +o +)); + +88 + } +} + +96  + $oo_os_sock_iol +( +ci_tif +* +ni +, +oo_ + +sock_p +,  +que +, * +g +, + +97 * +iol_rc +) + +99 +oo_os_fe + +os_sock_fd +; + +100  +rc +; + +101 if( +rc + = + `oo_os_sock_g +( +ni +, +sock_p +, & +os_sock_fd +)) == 0 ) { + +102 +rc + = + `ci_sys_iol +( +os_sock_fd +, +que +, +g +); + +103 if +rc + < 0 ) + +104 +rc + = - +o +; + +105 + `oo_os_sock_a +( +ni +, +os_sock_fd +); + +106 if +iol_rc + ! +NULL + ) { + +107 * +iol_rc + = +rc +; + +108 +rc + = 0; + +112 + `LOG_E +( + `ci_log +("%s: [%d:%d] ERROR: failedo get kernel sock fd " + +113 "c=%deq=%d)", +__FUNCTION__ +, + `NI_ID +( +ni +), + `OO_SP_FMT +( +sock_p +), + +114 +rc +, +que +)); + +116  +rc +; + +117 + } +} + +121  + $oo_os_sock_ndmsg +( +ci_tif +* +ni +, +oo_ + +sock_p +, + +122 cڡ  +msghdr +* +msg +,  +ags +) + +124 +oo_os_sock_ndmsg_t + + +; + +126 + +. +sock_id + = + `OO_SP_TO_INT +( +sock_p +); + +127 + +. +sizeof_r + = (*); + +128 + +. +ags + = flags; + +129 + `CI_USER_PTR_SET +( + +. +msg_iov +, +msg +->msg_iov); + +130 + +. +msg_iovn + = +msg +->msg_iovlen; + +131 + `CI_USER_PTR_SET +( + +. +msg_me +, +msg +->msg_name); + +132 + +. +msg_m + = +msg +->msg_namelen; + +133 #ifde +__i386__ + + +135 + `ci_as_equ +( +msg +-> +msg_cڌn +, 0); + +136 + +. +msg_cڌn + = 0; + +137 + `CI_USER_PTR_SET +( + +. +msg_cڌ +, +NULL +); + +139 + `CI_USER_PTR_SET +( + +. +msg_cڌ +, +msg +->msg_control); + +140 + +. +msg_cڌn + = +msg +->msg_controllen; + +142  + `oo_sour_ +( + `ci_tif_g_driv_hd +( +ni +), + +143 +OO_IOC_OS_SOCK_SENDMSG +, & + +); + +144 + } +} + +146  + $oo_os_sock_ndmsg_w +( +ci_tif +* +ni +, +oo_ + +sock_p +, + +147 cڡ  +msghdr +* +msg +,  +ags +) + +149  +sock_gs +[8]; + +150 +oo_os_sock_ndmsg_w_t + + +; + +151  +rc +; + +153 + +. +sock_id + = + `OO_SP_TO_INT +( +sock_p +); + +154 + +. +sizeof_r + = (*); + +155 + +. +ags + = flags; + +156 + `CI_USER_PTR_SET +( + +. +msg +, msg); + +157 + `CI_USER_PTR_SET +( + +. +sock_gs +, socketcall_args); + +159 + `oo_rwlock_lock_ad +(& +cp_dup2_lock +); + +160 +rc + = + `oo_sour_ +( + `ci_tif_g_driv_hd +( +ni +), + +161 +OO_IOC_OS_SOCK_SENDMSG_RAW +, & + +); + +162 + `oo_rwlock_uock_ad + (& +cp_dup2_lock +); + +164  +rc +; + +165 + } +} + +168  + $oo_os_sock_cvmsg +( +ci_tif +* +ni +, +oo_ + +sock_p +, + +169  +msghdr +* +msg +,  +ags +) + +171 +oo_os_sock_cvmsg_t + + +; + +172  +rc +; + +174 + +. +sock_id + = + `OO_SP_TO_INT +( +sock_p +); + +175 + +. +sizeof_r + = (*); + +176 + +. +ags + = flags; + +177 + `CI_USER_PTR_SET +( + +. +msg_iov +, +msg +->msg_iov); + +178 + +. +msg_iovn + = +msg +->msg_iovlen; + +179 + `CI_USER_PTR_SET +( + +. +msg_me +, +msg +->msg_name); + +180 + +. +msg_m + = +msg +->msg_namelen; + +181 + `CI_USER_PTR_SET +( + +. +msg_cڌ +, +msg +->msg_control); + +182 + +. +msg_cڌn + = +msg +->msg_controllen; + +183 +rc + = + `oo_sour_ +( + `ci_tif_g_driv_hd +( +ni +), + +184 +OO_IOC_OS_SOCK_RECVMSG +, & + +); + +185 + `ci_as +( + +. +rc + >= 0 ||c < 0); + +186 if +rc + == 0 ) { + +187 +msg +-> +msg_ags + = + +. +ags +; + +188 +msg +-> +msg_m + = + +.msg_namelen; + +189 if +msg +-> +msg_cڌn + ) + +190 +msg +-> +msg_cڌn + = + +.msg_controllen; + +191  + +. +rc +; + +193  +rc +; + +194 + } +} + +196  + $oo_os_sock_ac +( +ci_tif +* +ni +, +oo_ + +sock_p +,  +sockaddr + * +addr +, + +197 +sockn_t + * +add +,  +ags +) + +199 +oo_os_sock_ac_t + + +; + +200  +rc +; + +202 + +. +sock_id + = + `OO_SP_TO_INT +( +sock_p +); + +203 + `CI_USER_PTR_SET +( + +. +addr +,ddr); + +204 + `CI_USER_PTR_SET +( + +. +add +,ddrlen); + +205 + +. +ags + = flags; + +207 +rc + = + `oo_sour_ +( + `ci_tif_g_driv_hd +( +ni +), + +208 +OO_IOC_OS_SOCK_ACCEPT +, & + +); + +210  +rc + =0 ? + +.rc :c; + +211 + } +} + + @per_thread.c + +12  + ~ + +13  + ~ + +16 #ifde +HAVE_CC__THREAD + + +18 #ifde +__powpc__ + + +19 +__thad +  +oo_r_thad + oo_r_thad +__ibu__ +(( +s_mod +("local-dynamic"))); + +21 +__thad +  +oo_r_thad + + goo_r_thad +; + +26 +had_key_t + + goo_r_thad_key + = +INVALID_PTHREAD_KEY_ID +; + +30 +cp__thad_back + + g_thad_back +; + +33  + $oo_r_thad_ +() + +35 #ide +HAVE_CC__THREAD + + +36  +rc + = + `had_key_ +(& +oo_r_thad_key +, + +); + +37 if +rc + != 0) { + +38 + `LOG_E +( + `log +("%s: ERROR:thread_key_create failed (rc=%drrno=%d)", + +39 +__FUNCTION__ +, +rc +, +o +)); + +44 + } +} + +47 #ifde +HAVE_CC__THREAD + + +49  + $oo_r_thad__thad +() + +51 if +_thad_back + ) { + +52 + `_thad_back +(& +oo_r_thad +); + +53 +oo_r_thad +. +lid + = 1; + +54 +oo_r_thad +. +_vfk_chd + = 0; + +56 + } +} + +60  +oo_r_thad +* + $oo_r_thad__d_g +() + +62  +oo_r_thad +* + + = + `had_gecific +( +oo_r_thad_key +); + +63 if + + = +NULL + ) { + +64 + + = + `mloc +((* +oo_r_thad_p +)); + +65 + `CI_TEST +( + + ! +NULL +); + +66 + `had_tecific +( +oo_r_thad_key +, + +); + +67 + `memt +( + +, 0, (*pt)); + +69 if +_thad_back + ) { + +70 + `_thad_back +( + +); + +71 + +-> +lid + = 1; + +72 + +-> +_vfk_chd + = 0; + +74  + +; + +75 + } +} + + @pio_buddy.c + +14  + ~ + +15  + ~ + +19  + #DEBUG_ALLOC +( +x +) + + ) + +21  + #DEBUG_ALLOC +( +x + + ) +x + +27  + #FREE_LIST +( +b +, +o +((b)-> +_lis + + (o)) + + ) + +29  + #LINK_TO_ADDR +( +b +, +l +(( +ci_ut32 +)(- (b)-> +lks +)) + + ) + +31  + #ADDR_TO_LINK +( +b +, +a +((b)-> +lks + + (a)) + + ) + +34  +le +  + +35 + $ci_pio_buddy__li_emy +( +ci_tif +* +ni +, +ci_pio_buddy_lot +* +b +, + +36 +ci_ut8 + +d +) + +38  + `ci_ni_di_is_emy +( +ni +, + `FREE_LIST +( +b +, +d +)); + +39 + } +} + +42  +le +  + +43 + $ci_pio_buddy_addr___li +( +ci_tif +* +ni +, +ci_pio_buddy_lot +* +b +, + +44 +ci_t32 + +addr +) + +47  ! + `ci_ni_di_is_ +( + `ADDR_TO_LINK +( +b +, +addr +)); + +48 + } +} + +51  +le +  + +52 + $ci_pio_buddy__li_add +( +ci_tif +* +ni +, +ci_pio_buddy_lot +* +b +, + +53 +ci_ut8 + +d +, +ci_ut32 + +addr +) + +56 + `ci_as +(! + `ci_pio_buddy_addr___li +( +ni +, +b +, +addr +)); + +58 + `ci_ni_di_push +( +ni +, + `FREE_LIST +( +b +, +d +), + `ADDR_TO_LINK +(b, +addr +)); + +59 +b +-> +ds +[ +addr +] = +d +; + +60 + } +} + +63  +le +  + +64 + $ci_pio_buddy__li_move +( +ci_tif +* +ni +, +ci_pio_buddy_lot +* +b +, + +65 +ci_ut32 + +addr +) + +68 + `ci_as +( + `ci_pio_buddy_addr___li +( +ni +, +b +, +addr +)); + +70 + `ci_ni_di_move +( +ni +, + `ADDR_TO_LINK +( +b +, +addr +)); + +71 + `ci_ni_di_mk_ +( + `ADDR_TO_LINK +( +b +, +addr +)); + +72 + } +} + +75  +le + +ci_ut32 + + +76 + $ci_pio_buddy__li_p +( +ci_tif +* +ni +, +ci_pio_buddy_lot +* +b +, + +77 +ci_ut8 + +d +) + +79 +ci_ni_di_lk +* +l +; + +82 + `ci_as +(! + `ci_pio_buddy__li_emy +( +ni +, +b +, +d +)); + +84 +l + = + `ci_ni_di_p +( +ni +, + `FREE_LIST +( +b +, +d +)); + +85 + `ci_ni_di_mk_ +( +l +); + +86  + `LINK_TO_ADDR +( +b +, +l +); + +87 + } +} + +91 + $ci_pio_buddy_ +( +ci_tif +* +ni +, +ci_pio_buddy_lot +* +b +,  +pio_n +) + +93 +ci_ut8 + +o +; + +98  +pio_d + = + `ci_log2_ +( +pio_n +); + +101 + `ci_as +( +b +); + +103 + `ci_as +( +CI_PIO_BUDDY_MAX_ORDER + < 255); + +105 + `ci_as +( + `CI_IS_POW2 +( +pio_n +)); + +106 + `ci_as_ge +( +pio_d +, +CI_CFG_MIN_PIO_BLOCK_ORDER +); + +107 + `ci_as_ +( +pio_d +, +CI_PIO_BUF_ORDER +); + +110  +o + = 0; o < +CI_PIO_BUDDY_MAX_ORDER +; ++o ) + +111 + `ci_ni_di_ +( +ni +, + `FREE_LIST +( +b +, +o +), + +112 + `oo_r_to_ +( +ni +, + `FREE_LIST +( +b +, +o +)), "pio_buddy"); + +115  +o + = 0; o < (1u << +CI_PIO_BUDDY_MAX_ORDER +); ++o ) { + +116 + `ci_ni_di_lk_ +( +ni +, + `ADDR_TO_LINK +( +b +, +o +), + +117 + `oo_r_to_ +( +ni +, + `ADDR_TO_LINK +( +b +, +o +)), + +119 + `ci_ni_di_mk_ +( + `ADDR_TO_LINK +( +b +, +o +)); + +123 + `ci_pio_buddy__li_add +( +ni +, +b +, +pio_d + - +CI_CFG_MIN_PIO_BLOCK_ORDER +, 0); + +125 +b +-> +lid + = 1; + +126 + } +} + +130 + $ci_pio_buddy_dt +( +ci_tif +* +ni +, +ci_pio_buddy_lot +* +b +) + +132 +b +-> +lid + = 0; + +133 + } +} + +136 +ci_t32 + + +137 + $ci_pio_buddy_loc +( +ci_tif +* +ni +, +ci_pio_buddy_lot +* +b +, +ci_ut8 + +d +) + +139 #i +CI_CFG_USE_PIO + + +140 +ci_ut8 + +smˡ +; + +141 +ci_ut32 + +addr +; + +142 if +b +-> +lid + ) { + +143 +d + - +CI_CFG_MIN_PIO_BLOCK_ORDER +; + +146 +smˡ + = +d +; + +147  +smˡ + < +CI_PIO_BUDDY_MAX_ORDER + && + +148 + `ci_pio_buddy__li_emy +( +ni +, +b +, +smˡ +) ) + +149 ++ +smˡ +; + +151 if +smˡ + > +CI_PIO_BUDDY_MAX_ORDER + ) { + +152 + `DEBUG_ALLOC +( + `ci_log +("buddy -lloc order %d failed - max order %d", + +153 +d +, +CI_PIO_BUDDY_MAX_ORDER +);); + +154  - +ENOMEM +; + +158 +addr + = + `ci_pio_buddy__li_p +( +ni +, +b +, +smˡ +); + +160 + `DEBUG_ALLOC +( + `ci_log +("buddy -lloc %x order %d cut from order %d", + +161 +addr +, +d +, +smˡ +);); + +166  +smˡ +-- > +d + ) + +167 + `ci_pio_buddy__li_add +( +ni +, +b +, +smˡ +, +addr + + + `ci_pow2 +(smallest)); + +169 +b +-> +ds +[ +addr +] = ( +ci_ut8 + +d +; + +172 + `ci_as_ge +(( +ci_t32 + +addr +, 0); + +173 + `ci_as_ +( +addr +, 1u << +CI_PIO_BUDDY_MAX_ORDER +); + +175  +addr + * (1u << +CI_CFG_MIN_PIO_BLOCK_ORDER +); + +178  - +ENOSPC +; + +179 + } +} + +183 + $ci_pio_buddy_ +( +ci_tif +* +ni +, +ci_pio_buddy_lot +* +b +, +ci_t32 + +offt +, + +184 +ci_ut8 + +d +) + +186 +ci_ut32 + +buddy_addr +; + +187 +ci_ut32 + +addr + = +offt + / (1u << +CI_CFG_MIN_PIO_BLOCK_ORDER +); + +188 +d + - +CI_CFG_MIN_PIO_BLOCK_ORDER +; + +191 + `ci_as_ +( +d +, +CI_PIO_BUDDY_MAX_ORDER +); + +192 + `ci_as_ +( +addr + + (1u << +d +), 1u << +CI_PIO_BUDDY_MAX_ORDER +); + +194 + `ci_as +(! + `ci_pio_buddy_addr___li +( +ni +, +b +, +addr +)); + +196 + `ci_as_equ +( +b +-> +ds +[ +addr +], +d +); + +201  +d + < +CI_PIO_BUDDY_MAX_ORDER +) { + +202 +buddy_addr + = +addr + ^ + `ci_pow2 +( +d +); + +207 if! + `ci_pio_buddy_addr___li +( +ni +, +b +, +buddy_addr +) || + +208 +b +-> +ds +[ +buddy_addr +] ! +d + ) + +212 + `ci_pio_buddy__li_move +( +ni +, +b +, +buddy_addr +); + +217 if +buddy_addr + < +addr + ) + +218 +addr + = +buddy_addr +; + +220 ++ +d +; + +223 + `DEBUG_ALLOC +( + `ci_log +("buddy - f%x mged id %d", +addr +, +d +);); + +228 + `ci_pio_buddy__li_add +( +ni +, +b +, +d +, +addr +); + +229 + } +} + + @pipe.c + +14  + ~"_.h +" + +15 #i +CI_CFG_USERSPACE_PIPE + + +17  + ~ + +18  + ~ + +19  + ~ + +21  + #LPF + "ci_pe_" + + ) + +22  + #LPFIN + "-> " +LPF + + + ) + +23  + #LPFOUT + "<- " +LPF + + + ) + +27  + #OO_PIPE_VERBOSE + 0 + + ) + +29  + #OO_PIPE_DUMP + 0 + + ) + +31 #i +OO_PIPE_VERBOSE + + +32  + #LOG_PIPE +( +x +... + `ci_log +(x) + + ) + +34  + #LOG_PIPE +( +x +...) + + ) + +38  + $pe_dump +( +ci_tif +* +ni +,  +oo_pe +* +p +) + +40 if +OO_PIPE_DUMP + ) { + +41 + `ci_log +("Pe:=%d", +p +-> +b +. +bufid +); + +42 + `ci_log +(" [%d]d_r: %d %u", +p +-> +b +. +bufid +, + +43 + `OO_PP_FMT +( +p +-> +ad_r +. + +),->ad_r. +offt +); + +44 + `ci_log +(" [%d] wre_r: %d %d", +p +-> +b +. +bufid +, + +45 + `OO_PP_FMT +( +p +-> +wre_r +. + +), OO_PP_FMT->wre_r. +_wa +)); + +46 + `ci_log +(" [%d]ags=%x ", +p +-> +b +. +bufid +,-> +aags +); + +47 + `ci_log +(" [%d] bufs_num=%u/%u", +p +-> +b +. +bufid +,-> +bufs_num +,-> +bufs_max +); + +48 + `ci_log +(" [%d] bys_added=%u bys_moved=%u", +p +-> +b +. +bufid +, + +49 +p +-> +bys_added +,-> +bys_moved +); + +50 if + `ci_tif_is_locked +( +ni +&& + `OO_PP_NOT_NULL +( +p +-> +pe_bufs +. + +) ) { + +51 +ci__pkt_fmt +* +pkt + = + `PKT_CHK +( +ni +, +p +-> +pe_bufs +. + +); + +52  +bufs_num + = 0; + +54 + `ci_log +(" [%d:%d]k%d ba=%day_n=%d", +p +-> +b +. +bufid +, +bufs_num +, + +55 + `OO_PKT_P +( +pkt +),kt-> +pf +. +pe +. +ba +,kt->pf.pe. +y_n +); + +56 +pkt + = + `PKT_CHK +( +ni +,kt-> +xt +); + +57 }  + `OO_PKT_P +( +pkt +! +p +-> +pe_bufs +. + + && + +58 ++ +bufs_num + < 2 * +p +->bufs_num ); + +62 if +bufs_num + > +p +->bufs_num ) + +63 + `ci_log +(" [%d] WARNING: Mܐth->bufs_num bufrs.", +p +-> +b +. +bufid +); + +66 + } +} + +69 +ci_le +  + $oo_pe_buf_li_ +( +oo_pe_buf_li_t +* +li +) + +71 +li +-> + + = +OO_PP_NULL +; + +72 + } +} + +75  + $oo_pe_buf_r_e +( +ci_tif +* +ni +,  +oo_pe +* +p +) + +77 +p +-> +ad_r +. + + = +OO_PP_NULL +; + +78 +p +-> +ad_r +. +offt + = 0; + +79 +p +-> +wre_r +. + + = +OO_PP_NULL +; + +80 +p +-> +wre_r +. +_wa + = +OO_PP_NULL +; + +81 + `oo_pe_buf_li_ +(& +p +-> +pe_bufs +); + +82 + } +} + +87 +ci_le +  + $oo_pe_buf_li__a +( +ci__pkt_fmt +* +li +, + +88 +ci__pkt_fmt +* +lk +) + +90 +lk +-> +xt + = +li +->next; + +91 +li +-> +xt + = + `OO_PKT_P +( +lk +); + +92 + } +} + +95 +ci_le +  + $oo_pe_buf_li_push +( +ci_tif +* +ni +, +oo_pe_buf_li_t +* +li +, + +96 +ci__pkt_fmt +* +lk +) + +98 if + `OO_PP_NOT_NULL +( +li +-> + +) ) { + +99 + `oo_pe_buf_li__a +( + `PKT_CHK +( +ni +, +li +-> + +), +lk +); + +102 +li +-> + + = + `OO_PKT_P +( +lk +); + +103 +lk +-> +xt + = + `OO_PKT_P +(link); + +105 + } +} + +109 +ci_le + +ci__pkt_fmt +* + $oo_pe_buf_li_fd +( +ci_tif +* +ni +, + +110 +ci__pkt_fmt +* +li +, + +111 +oo_pkt_p + +em +) + +113 +ci__pkt_fmt +* +pkt + = +li +; + +114  +pkt +-> +xt + ! +em + ) + +115 +pkt + = + `PKT_CHK +( +ni +,kt-> +xt +); + +116  +pkt +; + +117 + } +} + +120 +ci_le + +oo_pkt_p + + $oo_pe_buf_li_t +( +oo_pe_buf_li_t +* +li +) + +122  +li +-> + +; + +123 + } +} + +126 +ci_le +  + $oo_pe_buf_li_is_ϡ +( +ci__pkt_fmt +* +pkt +) + +128  +pkt +-> +xt + = + `OO_PKT_P +(pkt); + +129 + } +} + +135 +ci_le + +oo_pkt_p + + $oo_pe_xt_buf +( +oo_pe +* +p +, +ci__pkt_fmt +* +pkt +) + +137  +pkt +-> +xt +; + +138 + } +} + +141 #ide +__KERNEL__ + + +145 +ci_le + +ci__pkt_fmt +* + +146 + $oo_pe_buf_li_p_a +( +ci_tif +* +ni +,  +oo_pe +* +p +, + +147 +ci__pkt_fmt +* +li +) + +149 +ci__pkt_fmt +* +pkt +; + +150 + `ci_as +( +li +); + +151 + `ci_as +( + `OO_PP_NOT_NULL +( +p +-> +pe_bufs +. + +)); + +152 + `ci_as +(! + `oo_pe_buf_li_is_ϡ +( +li +)); + +153 +pkt + = + `PKT_CHK +( +ni +, +li +-> +xt +); + +154 if +p +-> +pe_bufs +. + + = +li +-> +xt + ) + +155 +p +-> +pe_bufs +. + + = + `OO_PKT_P +( +li +); + +156 +li +-> +xt + = +pkt +->next; + +157  +pkt +; + +158 + } +} + +162 +ci_le +  + $__oo_pe_wake_ +( +ci_tif +* +ni +,  +oo_pe +* +p +, + +163  +wake +) + +165 + `ci_wmb +(); + +166 if +wake + & +CI_SB_FLAG_WAKE_RX + ) + +167 ++ +p +-> +b +. +p_q +. +rw +. +rx +; + +168 if +wake + & +CI_SB_FLAG_WAKE_TX + ) + +169 ++ +p +-> +b +. +p_q +. +rw +. +tx +; + +170 + `ci_mb +(); + +171 if +p +-> +b +. +wake_que + & +wake + ) { + +172 +p +-> +b +. +sb_ags + | +wake +; + +173 + `cp_waab_wakeup +( +ni +, & +p +-> +b +); + +175 + } +} + +178 #ifde +__KERNEL__ + + +179  + $oo_pe_wake_ +( +ci_tif +* +ni +,  +oo_pe +* +p +,  +wake +) + +181 + `__oo_pe_wake_ +( +ni +, +p +, +wake +); + +182 + } +} + +186 +ci_le + +ci_ut8 +* + $pe_g_pot +( +ci_tif +* +ni +,  +oo_pe + * +p +, + +187 +ci__pkt_fmt +* +pkt +, +ci_ut32 + +offt +) + +189 + `ci_as +( +p +); + +190 + `ci_as_ +( +offt +, +OO_PIPE_BUF_MAX_SIZE + - +pkt +-> +pf +. +pe +. +ba +); + +192  +pkt +-> +dma_t + +kt-> +pf +. +pe +. +ba + + +offt +; + +193 + } +} + +200 +ci_le + +ci_ut32 + + $oo_pe_buf_a +( +ci__pkt_fmt +* +pkt +) + +202 + `ci_as_ +( +pkt +-> +pf +. +pe +. +ba + +kt->pf.pe. +y_n +, +OO_PIPE_BUF_MAX_SIZE +); + +203  +OO_PIPE_BUF_MAX_SIZE + - ( +pkt +-> +pf +. +pe +. +ba + +kt->pf.pe. +y_n +); + +204 + } +} + +207 +ci_le +  + $do_cy_ad +(* +to +, cڡ * +om +,  +n_bys +) + +209 #ifde +__KERNEL__ + + +210  + `cy_to_ur +( +to +, +om +, +n_bys +) != 0; + +212 + `memy +( +to +, +om +, +n_bys +); + +215 + } +} + +218 +ci_le +  + $do_cy_wre +(* +to +, cڡ * +om +,  +n_bys +) + +220 #ifde +__KERNEL__ + + +221  + `cy_om_ur +( +to +, +om +, +n_bys +) != 0; + +223 + `memy +( +to +, +om +, +n_bys +); + +226 + } +} + +229  + $oo_pe_ad_wa +( +ci_tif +* +ni +,  +oo_pe +* +p +,  +n_block +) + +231 +ci_ut64 + +p_q +; + +232  +rc +; + +234 if +p +-> +aags + & ( +CI_PFD_AFLAG_CLOSED + << +CI_PFD_AFLAG_WRITER_SHIFT +) ) { + +235 +od_doub_check +: + +236 + `ci_mb +(); + +237  + `oo_pe_da_n +( +p +) ? 1 : 0; + +240 + `LOG_PIPE +("%s:otnough data inheipe", + +241 +__FUNCTION__ +); + +243 if +n_block + ) { + +244 + `LOG_PIPE +("%s: O_NONBLOCK isex", +__FUNCTION__ +); + +245 + `CI_SET_ERROR +( +rc +, +EAGAIN +); + +246  +rc +; + +249 #ide +__KERNEL__ + + +250 if + `oo_r_thad_g +()-> +e + & (1 << +ONLOAD_SPIN_PIPE_RECV +) ) { + +251 +ci_ut64 + +now_c +, +t_c +; + +252 +ci_ut64 + +schedu_c +; + +253 +cp_sigl_fo +* +si + = + `cp_sigl_g_ecific_ed +(); + +254 +ci_ut64 + +max__cyes + = +p +-> +b +. +_cyes +; + +256 + `ci_c64 +(& +now_c +); + +257 +t_c + = +now_c +; + +258 +schedu_c + = +now_c +; + +260 +rc + = + `OO_SPINLOOP_PAUSE_CHECK_SIGNALS +( +ni +, +now_c +, & +schedu_c +, + +261 +l +, +NULL +, +si +); + +262 if +rc + < 0 ) { + +263 + `CI_SET_ERROR +( +rc +, -rc); + +264  +rc +; + +266 if + `oo_pe_da_n +( +p +) ) + +268 if +p +-> +aags + & ( +CI_PFD_AFLAG_CLOSED + << +CI_PFD_AFLAG_WRITER_SHIFT +) ) + +269  +od_doub_check +; + +270 + `ci_c64 +(& +now_c +); + +271 #i +CI_CFG_SPIN_STATS + + +272 +ni +-> +e +-> +s +. +_pe_ad +++; + +274 }  +now_c + - +t_c + < +max__cyes + ); + +279 +p_q + = +p +-> +b +.p_q. +l +; + +280 + `ci_rmb +(); + +281 if + `oo_pe_da_n +( +p +) ) + +283 if +p +-> +aags + & ( +CI_PFD_AFLAG_CLOSED + << +CI_PFD_AFLAG_WRITER_SHIFT +) ) + +284  +od_doub_check +; + +286 + `LOG_PIPE +("%s [%u]: goingo sleep seq=(%u, %u) data_len=%dflags=%x", + +287 +__FUNCTION__ +, +p +-> +b +. +bufid +, + +288 (( +ci_p_q_t + *)(& +p_q +))-> +rw +. +rx +, + +289 (( +ci_p_q_t + *)(& +p_q +))-> +rw +. +tx +, + +290 + `oo_pe_da_n +( +p +),-> +aags +); + +291 +rc + = + `ci_sock_p +( +ni +, & +p +-> +b +, +CI_SB_FLAG_WAKE_RX +, 0, +p_q +, 0); + +292 + `LOG_PIPE +("%s[%u]: wokup:c=%d da_n=%dags=%x", +__FUNCTION__ +, + +293 +p +-> +b +. +bufid +, +rc +, () + `oo_pe_da_n +),-> +aags +); + +294 if +rc + < 0 ) { + +295 + `LOG_PIPE +("%s: s˕%d", +__FUNCTION__ +, +rc +); + +296 + `CI_SET_ERROR +( +rc +, -rc); + +297  +rc +; + +299 if + `oo_pe_da_n +( +p +) ) + +302 + } +} + +307 +ci_le +  + +308 + $oo_pe_move_ad_r +( +ci_tif +* +ni +,  +oo_pe +* +p +, +ci__pkt_fmt +** +pkt +, + +309 +ci_ut32 + * +offt +,  +ack_locked +) + +311  +moved + = 0; + +315  * +offt + >(* +pkt +)-> +pf +. +pe +. +y_n + ) { + +317 + `ci_as_qu +( + `OO_PKT_P +(* +pkt +), +p +-> +wre_r +. + +); + +318 * +pkt + = + `PKT_CHK_NML +( +ni +, + `oo_pe_xt_buf +( +p +, *pkt), +ack_locked +); + +319 * +offt + = 0; + +320 ++ +moved +; + +322  +moved +; + +323 + } +} + +326  + $ci_pe_ad +( +ci_tif +* +ni +,  +oo_pe +* +p +, + +327 cڡ  +iovec + * +iov +, +size_t + +iovn +) + +329  +bys_avaab +; + +330  +rc +; + +331  +i +; + +332 +ci__pkt_fmt +* +pkt +; + +333  +do_wake + = 0; + +334 +ci_ut32 + +offt +; + +336 + `ci_as +( +p +); + +337 + `ci_as +( +ni +); + +338 + `ci_as +( +iov +); + +339 + `ci_as_gt +( +iovn +, 0); + +341 + `LOG_PIPE +("%s[%u]: ENTER data_len=%dflags=%x", + +342 +__FUNCTION__ +, +p +-> +b +. +bufid +, + `oo_pe_da_n +),-> +aags +); + +343 + `pe_dump +( +ni +, +p +); + +345 +aga +: + +346 +bys_avaab + = + `oo_pe_da_n +( +p +); + +347 if +bys_avaab + == 0 ) { + +348 if( +rc + = + `oo_pe_ad_wa +( +ni +, +p +, + +349 +p +-> +aags + & ( +CI_PFD_AFLAG_NONBLOCK + << + +350 +CI_PFD_AFLAG_READER_SHIFT +))) != 1 ) + +351  +out +; + +354 +rc + = + `ci_sock_lock +( +ni +, & +p +-> +b +); + +355 #ifde +__KERNEL__ + + +356 if +rc + < 0 ) { + +357 + `CI_SET_ERROR +( +rc +, +ERESTARTSYS +); + +358  +out +; + +362 if( +bys_avaab + = + `oo_pe_da_n +( +p +)) == 0 ) { + +363 + `ci_sock_uock +( +ni +, & +p +-> +b +); + +364  +aga +; + +367 +rc + = 0; + +368 +pkt + = + `PKT_CHK_NNL +( +ni +, +p +-> +ad_r +. + +); + +369 +offt + = +p +-> +ad_r +.offset; + +370  +i + = 0; i < +iovn +; i++ ) { + +371 * +t + = +iov +[ +i +]. +iov_ba +; + +372 * +d + = +t + + +iov +[ +i +]. +iov_n +; + +373  +d + - +t + ) { + +374 +ci_ut8 +* +ad_pot +; + +375  +bur +; + +380 +do_wake + + + `oo_pe_move_ad_r +( +ni +, +p +, & +pkt +, & +offt +, 0); + +382 +ad_pot + = + `pe_g_pot +( +ni +, +p +, +pkt +, +offt +); + +383 +bur + = + `CI_MIN +( +pkt +-> +pf +. +pe +. +y_n + - +offt +, +d + - +t +); + +384 +bur + = + `CI_MIN +(bur, +bys_avaab + - +rc +); + +385 + `ci_as_ +( +offt +, +pkt +-> +pf +. +pe +. +y_n +); + +386 + `ci_as_ +( +offt + + +bur +, +pkt +-> +pf +. +pe +. +y_n +); + +388 if( + `CI_UNLIKELY + + `do_cy_ad +( +t +, +ad_pot +, +bur +) != 0 )) { + +389 + `ci_wmb +(); + +390 +p +-> +bys_moved + + +rc +; + +391 + `CI_SET_ERROR +( +rc +, +EFAULT +); + +392  +wake_d_uock_out +; + +395 +rc + + +bur +; + +396 +t + + +bur +; + +397 +offt + + +bur +; + +399 if +bys_avaab + = +rc + ) + +400  +ad +; + +404 +ad +: + +405 + `ci_wmb +(); + +406 +p +-> +bys_moved + + +rc +; + +407 +p +-> +ad_r +. + + = + `OO_PKT_P +( +pkt +); + +408 +p +-> +ad_r +. +offt + = offset; + +409 +wake_d_uock_out +: + +410 if +do_wake + || +bys_avaab + = +rc + ) + +411 + `__oo_pe_wake_ +( +ni +, +p +, +CI_SB_FLAG_WAKE_TX +); + +412 + `ci_sock_uock +( +ni +, & +p +-> +b +); + +413 +out +: + +414 + `LOG_PIPE +("%s[%u]: EXITu %d", +__FUNCTION__ +, +p +-> +b +. +bufid +, +rc +); + +415  +rc +; + +416 + } +} + +419 +ci_le +  + $oo_pe_sigl +( +ci_tif +* +ni +) + +421 #ide +__KERNEL__ + + +422 () + `ci_sys_iol +( + `ci_tif_g_driv_hd +( +ni +), + +423 +OO_IOC_KILL_SELF_SIGPIPE +, + +424 +NULL +); + +426 () + `nd_sig +( +SIGPIPE +, +cut +, 0); + +428 + } +} + +434  + $oo_pe_wa_wre +( +ci_tif +* +ni +,  +oo_pe +* +p +,  +ags +, + +435 * +ack_locked +) + +437 +ci_ut64 + +p_q +; + +438  +rc + = 0; + +440 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +441 + `ci_as_equ +(* +ack_locked +, 1); + +443 i + `oo_pe_is_wrab +( +p +) ) + +445 + `ci_tif_uock +( +ni +); + +446 * +ack_locked + = 0; + +448 #ide +__KERNEL__ + + +449 if + `oo_r_thad_g +()-> +e + & (1 << +ONLOAD_SPIN_PIPE_SEND +) ) { + +450 +ci_ut64 + +now_c +, +t_c +; + +451 +ci_ut64 + +schedu_c +; + +452 +cp_sigl_fo +* +si + = + `cp_sigl_g_ecific_ed +(); + +453 +ci_ut64 + +max__cyes + = +p +-> +b +. +_cyes +; + +455 + `ci_c64 +(& +now_c +); + +456 +t_c + = +now_c +; + +457 +schedu_c + = +now_c +; + +460 +rc + = + `OO_SPINLOOP_PAUSE_CHECK_SIGNALS +( +ni +, +now_c +, & +schedu_c +, + +461 +l +, +NULL +, +si +); + +462 if +rc + < 0 ) { + +463 + `CI_SET_ERROR +( +rc +, -rc); + +464  +rc +; + +467 i + `oo_pe_is_wrab +( +p +) ) + +470 i +p +-> +aags + & ( +CI_PFD_AFLAG_CLOSED + << +CI_PFD_AFLAG_READER_SHIFT +) ) { + +471 + `CI_SET_ERROR +( +rc +, +EPIPE +); + +472 if! ( +ags + & +MSG_NOSIGNAL +) ) + +473 + `oo_pe_sigl +( +ni +); + +474  +rc +; + +477 + `ci_c64 +(& +now_c +); + +478 #i +CI_CFG_SPIN_STATS + + +479 +ni +-> +e +-> +s +. +_pe_wre +++; + +482 }  +now_c + - +t_c + < +max__cyes + ); + +487 +p_q + = +p +-> +b +.p_q. +l +; + +488 + `ci_rmb +(); + +491 if + `oo_pe_is_wrab +( +p +) ) + +495 + `LOG_PIPE +("%s: gogئp", +__FUNCTION__ +); + +496 +rc + = + `ci_sock_p +( +ni +, & +p +-> +b +, +CI_SB_FLAG_WAKE_TX +, 0, +p_q +, 0); + +497 i +p +-> +aags + & ( +CI_PFD_AFLAG_CLOSED + << +CI_PFD_AFLAG_READER_SHIFT +) ) { + +498 + `CI_SET_ERROR +( +rc +, +EPIPE +); + +499 if! ( +ags + & +MSG_NOSIGNAL +) ) + +500 + `oo_pe_sigl +( +ni +); + +501  +rc +; + +504 + `LOG_PIPE +("%s[%u]: woku- %d", +__FUNCTION__ +, +p +-> +b +. +bufid +, +rc +); + +506 if +rc + < 0 ) { + +507 + `LOG_PIPE +("%s: s˕%d", +__FUNCTION__ +, +rc +); + +508 + `CI_SET_ERROR +( +rc +, -rc); + +509  +rc +; + +511 }  ! + `oo_pe_is_wrab +( +p +) ); + +515 + } +} + +519 +ci_le +  + $oo_pe_buf_wre_ +( +oo_pe +* +p +, +ci__pkt_fmt +* +pkt +) + +521 +pkt +-> +pf +. +pe +. +ba + = 0; + +522 +pkt +-> +pf +. +pe +. +y_n + = 0; + +523 + } +} + +526 #ide +__KERNEL__ + + +531 +ci_le + +ci__pkt_fmt +* + $oo_pe_pkt_li_p +( +ci_tif +* +ni +, + +532  +ci_pe_pkt_li +* +pkts +) + +534 +ci__pkt_fmt +* +pkt +; + +535 + `ci_as +( +pkts +); + +536 if! +pkts +-> +cou + ) + +537  +NULL +; + +538 + `ci_as +( +pkts +-> +hd +); + +539 +pkt + = +pkts +-> +hd +; + +540 +pkts +-> +hd + = + `PKT_CHK +( +ni +, +pkt +-> +xt +); + +541 -- +pkts +-> +cou +; + +542  +pkt +; + +543 + } +} + +546 +ci_le +  + $oo_pe_pkt_li_push +( +ci_pe_pkt_li +* +li +, + +547 +ci__pkt_fmt +* +pkt +) + +549 if +li +-> +cou + ) { + +550 +li +-> + +-> +xt + = + `OO_PKT_P +( +pkt +); + +551 +li +-> + + = +pkt +; + +552 ++ +li +-> +cou +; + +555 +li +-> +hd + = +pkt +; + +556 +li +-> + + = +pkt +; + +557 +li +-> +cou + = 1; + +558 + } +} + +561 +ci_le + +oo_pkt_p + + $oo_pe_pkt_li_xt +( +ci__pkt_fmt +* +pkt +) + +563  +pkt +-> +xt +; + +564 + } +} + +582  + $oo_pe_me_bufrs +( +ci_tif +* +ni +,  +oo_pe +* +p +,  +queed +, + +583  +ci_pe_pkt_li +* +pkts +) + +586 +ci_ut32 + +num_lod +, +tٮ_to_loc +; + +587 +ci__pkt_fmt +* +wre_pkt + = +NULL +; + +589 + `ci_as_ge +( +queed +, 0); + +591 + `LOG_PIPE +("%s: called fori=%d=%d wr=%dd=%d", + +592 +__FUNCTION__ +, +ni +-> +e +-> +ack_id +, +p +-> +b +. +bufid +, + +593 + `OO_PP_FMT +( +p +-> +wre_r +. + +), OO_PP_FMT-> +ad_r +.pp)); + +595 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +597 if +p +-> +bufs_num + >p-> +bufs_max + ) + +599 if + `OO_PP_NOT_NULL +( +p +-> +wre_r +. + +) ) + +600 +wre_pkt + = + `PKT_CHK +( +ni +, +p +-> +wre_r +. + +); + +601 if +queed + ) + +602 +tٮ_to_loc + = + `CI_MIN +( +queed +, +p +-> +bufs_max + --> +bufs_num +); + +604 +tٮ_to_loc + = +p +-> +bufs_num + > 0 ? + +605 + `CI_MIN +( +p +-> +bufs_num +,-> +bufs_max + -->bufs_num) : + +606 + `CI_MIN +( +OO_PIPE_INITIAL_BUFS +, +p +-> +bufs_max +); + +607  +num_lod + = 0;um_lod < +tٮ_to_loc +; ++num_alloced ) { + +608 +ci__pkt_fmt +* +pkt +; + +609 #ide +__KERNEL__ + + +610 if +pkts + ! +NULL + &&kts-> +cou + ) + +611 +pkt + = + `oo_pe_pkt_li_p +( +ni +, +pkts +); + +614 +pkt + = + `ci_tif_pkt_loc +( +ni +); + +615 if! +pkt + ) { + +616 + `LOG_NV +( + `ci_log +("Failedollocipeacket buffer")); + +619 + `oo_pe_buf_wre_ +( +p +, +pkt +); + +620 if +wre_pkt + ! +NULL + ) + +621 + `oo_pe_buf_li__a +( +wre_pkt +, +pkt +); + +623 + `oo_pe_buf_li_push +( +ni +, & +p +-> +pe_bufs +, +pkt +); + +626 if +num_lod + > 0 ) { + +627 if +wre_pkt + = +NULL + ) { + +628 +p +-> +wre_r +. + + = + `oo_pe_buf_li_t +(&p-> +pe_bufs +); + +630 +p +-> +ad_r +. + + =-> +wre_r +.pp; + +633 +p +-> +wre_r +. + + = + `oo_pe_xt_buf +, +wre_pkt +); + +634 +p +-> +wre_r +. +_wa + = +OO_PP_NULL +; + +635 +p +-> +bufs_num + + +num_lod +; + +636  +num_lod +; + +638  - +ENOBUFS +; + +639 + } +} + +642 #ide +__KERNEL__ + + +650  + $oo_pe__bufrs +( +ci_tif +* +ni +,  +oo_pe +* +p +, + +651  +ci_pe_pkt_li +* +pkts +) + +653 +ci__pkt_fmt +* +wre_pkt + = +NULL +; + +654 +oo_pkt_p + +_ad +; + +656 + `LOG_PIPE +("%s: called fori=%d=%d wr=%dd=%d", + +657 +__FUNCTION__ +, +ni +-> +e +-> +ack_id +, +p +-> +b +. +bufid +, + +658 + `OO_PP_FMT +( +p +-> +wre_r +. + +), OO_PP_FMT-> +ad_r +.pp)); + +660 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +661 + `ci_as_gt +( +pkts +-> +cou +, 0); + +662 + `ci_as +( +pkts +-> +hd +); + +663 + `ci_as +( +pkts +-> + +); + +665 if + `OO_PP_IS_NULL +( +p +-> +wre_r +. + +) ) { + +666 + `ci_as_equ +( +p +-> +bufs_num +, 0); + +667 +p +-> +pe_bufs +. + + = + `OO_PKT_P +( +pkts +-> +hd +); + +668 +pkts +-> + +-> +xt + = + `OO_PKT_P +kts-> +hd +); + +670 +p +-> +ad_r +. +offt + = 0; + +671 +p +-> +ad_r +. + + = + `OO_PKT_P +( +pkts +-> +hd +); + +672 + `ci_as_gt +( +pkts +-> + +-> +pf +. +pe +. +y_n +, 0); + +675 +wre_pkt + = + `PKT_CHK +( +ni +, +p +-> +wre_r +. + +); + +676 +pkts +-> + +-> +xt + = + `oo_pe_xt_buf +( +p +, +wre_pkt +); + +677 +wre_pkt +-> +xt + = + `OO_PKT_P +( +pkts +-> +hd +); + +680 +p +-> +wre_r +. + + = + `OO_PKT_P +( +pkts +-> + +); + +681 +_ad + = + `OO_ACCESS_ONCE +( +p +-> +ad_r +. + +); + +682 if +pkts +-> + +-> +xt + = +_ad + && + `oo_pe_buf_a +(pkts->tail) == 0 ) + +683 +p +-> +wre_r +. +_wa + = +_ad +; + +684 +p +-> +bufs_num + + +pkts +-> +cou +; + +685 + } +} + +697  + $oo_pe__emy_bufrs +( +ci_tif +* +ni +, + +698  +oo_pe +* +p +, + +699  +cou +, + +700  +ci_pe_pkt_li +* +pkts +) + +702  +d + = 0; + +703 +oo_pkt_p + +pkt_p +; + +704 +ci__pkt_fmt +* +pkt +; + +705 +oo_pkt_p + +p_d +; + +707 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +708 + `ci_as +( + `OO_PP_NOT_NULL +( +p +)); + +709 + `ci_as_ge +( +cou +, 0); + +711 +pkt_p + = +p +-> +wre_r +. + +; + +712 +p_d + = + `OO_ACCESS_ONCE +( +p +-> +ad_r +. + +); + +714 if +p +-> +bufs_num + == 0 ) + +716 +p +-> +pe_bufs +. + + = +pkt_p +; + +717 +pkt + = + `PKT_CHK +( +ni +, +pkt_p +); + +718  +d + ! +cou + || count == 0 ) { + +720 +ci__pkt_fmt +* +kt +; + +721 +oo_pkt_p + +_xt + = + `oo_pe_xt_buf +( +p +, +pkt +); + +722 if +_xt + = +p_d + ) + +724 +kt + = + `oo_pe_buf_li_p_a +( +ni +, +p +, +pkt +); + +725 + `ci_as_qu +( +pkt +, +kt +); + +726 + `ci_as_qu +( + `OO_PKT_P +( +kt +), +p_d +); + +727 + `ci_as_equ +( +kt +-> +fcou +, 1); + +728 if +pkts + = +NULL + ) + +729 + `ci_tif_pkt_a +( +ni +, +kt +); + +731 + `oo_pe_buf_wre_ +( +p +, +kt +); + +736 +kt +-> +pf +. +pe +. +y_n + = + `oo_pe_buf_a +(fpkt); + +737 + `oo_pe_pkt_li_push +( +pkts +, +kt +); + +739 ++ +d +; + +741 +p +-> +bufs_num + - +d +; + +742 if + `oo_pe_buf_a +( +pkt +) == 0 ) { + +743 +oo_pkt_p + +_xt + = + `oo_pe_xt_buf +( +p +, +pkt +); + +744 +p +-> +wre_r +. +_wa + = +_xt + = +p_d + ?p_x: +OO_PP_NULL +; + +746 + `ci_as_ge +( +p +-> +bufs_num +, 0); + +747  +d +; + +748 + } +} + +757  + $oo_pe_gb_pe_bufrs +( +ci_tif +* +ni +, + +758  +oo_pe +* +p +, + +759  +cou +, + +760  +ci_pe_pkt_li +* +pkts +) + +762  +pe_buf_a + = + `CI_MAX +( +p +-> +bufs_max + --> +bufs_num +, 0); + +763  +buf_num +; + +765 + `ci_as_gt +( +cou +, 0); + +766 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +768 +buf_num + = + `oo_pe__emy_bufrs +( +ni +, +p +, +cou +, +pkts +); + +769 +cou + - +buf_num +; + +770 if! +cou + ) + +771  +buf_num +; + +772  +cou + = + `CI_MIN +( +pe_buf_a +, count); count; --count ) { + +773 +ci__pkt_fmt +* +pkt + = + `ci_tif_pkt_loc +( +ni +); + +774 if! +pkt + ) { + +775 + `LOG_NV +( + `ci_log +("Failedollocipeacket buffer")); + +778 + `ci_as_equ +( +pkt +-> +fcou +, 1); + +779 + `oo_pe_buf_wre_ +( +p +, +pkt +); + +784 +pkt +-> +pf +. +pe +. +y_n + = + `oo_pe_buf_a +(pkt); + +785 + `oo_pe_pkt_li_push +( +pkts +, +pkt +); + +786 ++ +buf_num +; + +788  +buf_num +; + +789 + } +} + +800  + $ci_pe_zc_loc_bufrs +( +ci_tif +* +ni +, + +801  +oo_pe +* +p +, + +802  +cou +, + +803  +ags +, + +804  +ci_pe_pkt_li +* +pkts_out +) + +806  +c +; + +807  +rc + = 0; + +808  +ack_locked + = 1; + +809 + `ci_tif_lock +( +ni +); + +812 +c + = + `oo_pe_gb_pe_bufrs +( +ni +, +p +, +cou +, +pkts_out +); + +813 if +c + ) { + +814 +ni +-> +e +-> +n_async_pkts + + +c +; + +817 if( +ags + & +MSG_DONTWAIT + ) { + +818 + `CI_SET_ERROR +( +rc +, +EAGAIN +); + +821 +rc + = + `oo_pe_wa_wre +( +ni +, +p +, +ags +, & +ack_locked +); + +822 if +rc + != 0 ) + +824 if! +ack_locked + ) { + +825 + `ci_tif_lock +( +ni +); + +826 +ack_locked + = 1; + +830 if +ack_locked + ) + +831 + `ci_tif_uock +( +ni +); + +832  +rc +; + +833 + } +} + +836  + $oo_pe__bufrs +( +ci_tif +* +ni +, + +837  +ci_pe_pkt_li +* +pkts +) + +839 +ci__pkt_fmt +* +pkt + = +pkts +-> +hd +; + +840 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +841  ; +pkts +-> +cou +; --pkts->count ) { + +842 +oo_pkt_p + + +; + +843 + `ci_as +( +pkt +); + +844 + `ci_as_equ +( +pkt +-> +fcou +, 1); + +845 + + = + `oo_pe_pkt_li_xt +( +pkt +); + +846 + `ci_tif_pkt_a +( +ni +, +pkt +); + +847 +pkt + = + `PKT_CHK +( +ni +, + +); + +849 + } +} + +857  + $oo_pe_zc_a_bufrs +( +ci_tif +* +ni +, + +858  +oo_pe +* +p +, + +859  +ci_pe_pkt_li +* +pkts +) + +861  +i +; + +862  +cou + = +pkts +->count; + +864 +i + = + `oo_pe_me_bufrs +( +ni +, +p +, +pkts +-> +cou +,kts); + +865 ( +i +; + +866 + `ci_as_ +(0, +i +); + +867 if +pkts +-> +cou + ) + +869 + `oo_pe__bufrs +( +ni +, +pkts +); + +870 +ni +-> +e +-> +n_async_pkts + - +cou +; + +872 + } +} + +876  + $ci_pe_zc_a_bufrs +( +ci_tif +* +ni +, + +877  +oo_pe +* +p +, + +878  +ci_pe_pkt_li +* +pkts +) + +880  +rc +; + +881 + `ci_tif_lock +( +ni +); + +882 +rc + = + `oo_pe_zc_a_bufrs +( +ni +, +p +, +pkts +); + +883 + `ci_tif_uock +( +ni +); + +884  +rc +; + +885 + } +} + +898 +ci_le +  + $oo_pe_li_r_move +( +ci_tif +* +ni +,  +oo_pe +* +p +, + +899 +ci__pkt_fmt +** +li +, * +adv +, + +900 +ci__pkt_fmt +** +e_ +) + +902  +cou + = 1; + +905 +ci__pkt_fmt +* +hd + = * +li +; + +906 ( +hd +; + +908 + `ci_as_ge +(* +adv +, 0); + +909 + `ci_as +(* +li +); + +911 if +e_ + ! +NULL + ) + +912 * +e_ + = +NULL +; + +914  * +adv + > (* +li +)-> +pf +. +pe +. +y_n + ) { + +915 * +adv + -(* +li +)-> +pf +. +pe +. +y_n +; + +916 ++ +cou +; + +917 if +e_ + ! +NULL + ) + +918 * +e_ + = * +li +; + +919 * +li + = + `PKT_CHK +( +ni +, + `oo_pe_xt_buf +( +p +, *list)); + +920 + `ci_as +(* +li +); + +921 + `ci_as_ge +(* +adv +, 0); + +922 if* +adv + != 0 ) + +923 + `ci_as_qu +( + `OO_PKT_P +(* +li +), OO_PKT_P( +hd +)); + +924 + `ci_as_gt +((* +li +)-> +pf +. +pe +. +y_n +, 0); + +926  +cou +; + +927 + } +} + +951  + $ci_pe_zc_wre +( +ci_tif +* +ni +,  +oo_pe +* +p +, + +952  +ci_pe_pkt_li +* +pkts +, + +953  +n +,  +ags +) + +955  +rc +; + +956  +bys_added +; + +957  +ack_locked +; + +958  +buf_a +; + +959  +cou + = +pkts +->count; + +961 + `ci_as +( +p +); + +962 + `ci_as +( +ni +); + +963 + `ci_as +( +pkts +); + +964 + `ci_as_gt +( +pkts +-> +cou +, 0); + +966 + `LOG_PIPE +("%s[%u]: ENTERonblock=%s bufs=%d wr=%d wr_wait=%dd=%d", + +967 +__FUNCTION__ +, + +968 +p +-> +b +. +bufid +, + +969 ( +ags + & +MSG_DONTWAIT +) ? + +971 +p +-> +bufs_num +, + +972 + `OO_PP_FMT +( +p +-> +wre_r +. + +), + +973 + `OO_PP_FMT +( +p +-> +wre_r +. +_wa +), + +974 + `OO_PP_FMT +( +p +-> +ad_r +. + +)); + +976 + `ci_tif_lock +( +ni +); + +977 +ack_locked + = 1; + +979 + `pe_dump +( +ni +, +p +); + +981 if +p +-> +aags + & ( +CI_PFD_AFLAG_CLOSED + << +CI_PFD_AFLAG_READER_SHIFT +) ) { + +982 + `CI_SET_ERROR +( +rc +, +EPIPE +); + +983  +out +; + +986 if +n + == 0 ) { + +987 ( + `oo_pe_zc_a_bufrs +( +ni +, +p +, +pkts +); + +988 +rc + = 0; + +989  +out +; + +994  +adv + = +n +; + +995  +ci_pe_pkt_li + +pkts_to_ + = * +pkts +; + +996 +oo_pkt_p + +f_to_ +; + +997  +pkt_t +; + +999 +pkts +-> + + =kts-> +hd +; + +1000 +pkt_t + = + `oo_pe_li_r_move +( +ni +, +p +, & +pkts +-> + +, & +adv +, +NULL +); + +1001 +pkts +-> + +-> +pf +. +pe +. +y_n + = +adv +; + +1002 +pkts +-> +cou + = +pkt_t +; + +1003 +pkts_to_ +. +cou + - +pkt_t +; + +1004 if +pkts_to_ +. +cou + ) { + +1005 +f_to_ + = + `oo_pe_pkt_li_xt +( +pkts +-> + +); + +1006 +pkts_to_ +. +hd + = + `PKT_CHK +( +ni +, +f_to_ +); + +1007 ( + `oo_pe_zc_a_bufrs +( +ni +, +p +, & +pkts_to_ +); + +1011 +buf_a + = +p +-> +bufs_max + --> +bufs_num +; + +1012 if +buf_a + < +cou + ) { + +1013 ( + `oo_pe__emy_bufrs +( +ni +, +p +, +cou + - +buf_a +, +NULL +); + +1014 +buf_a + = +p +-> +bufs_max + --> +bufs_num +; + +1016 if( +ags + & +CI_PIPE_ZC_WRITE_FLAG_FORCE +) == 0 ) { + +1017  +buf_a + <= 0 ) { + +1018 if +ags + & +MSG_DONTWAIT + ) { + +1019 + `LOG_PIPE +("%s: O_NONBLOCK isex", +__FUNCTION__ +); + +1020 + `CI_SET_ERROR +( +rc +, +EAGAIN +); + +1021  +out +; + +1023 +rc + = + `oo_pe_wa_wre +( +ni +, +p +, +MSG_NOSIGNAL +, & +ack_locked +); + +1024 if +rc + != 0 ) + +1025  +out +; + +1026 if! +ack_locked + ) { + +1027 + `ci_tif_lock +( +ni +); + +1028 +ack_locked + = 1; + +1033 +buf_a + = +p +-> +bufs_max + --> +bufs_num +; + +1034 if +buf_a + < +pkts +-> +cou + ) { + +1035 ( + `oo_pe__emy_bufrs +( +ni +, +p +, +cou + - +buf_a +, +NULL +); + +1036 +buf_a + = +p +-> +bufs_max + --> +bufs_num +; + +1041 + `oo_pe__bufrs +( +ni +, +p +, +pkts +); + +1042 +bys_added + = +n +; + +1044 if +bys_added + > 0 ) { + +1045 + `ci_wmb +(); + +1046 +p +-> +bys_added + += bytes_added; + +1047 +ni +-> +e +-> +n_async_pkts + - +cou +; + +1048 + `__oo_pe_wake_ +( +ni +, +p +, +CI_SB_FLAG_WAKE_RX +); + +1050 +rc + = +bys_added +; + +1052 +out +: + +1053 + `pe_dump +( +ni +, +p +); + +1055 if +ack_locked + ) + +1056 + `ci_tif_uock +( +ni +); + +1058 + `LOG_PIPE +("%s[%u]: EXITu %d", +__FUNCTION__ +, +p +-> +b +. +bufid +, +rc +); + +1059  +rc +; + +1060 + } +} + +1070  + $ci_pe_li_to_iovec +( +ci_tif +* +ni +,  +oo_pe +* +p +, + +1071  +iovec +* +iov +, + +1072 * +iov_num +, + +1073  +ci_pe_pkt_li +* +pkts +, + +1074  +n +) + +1076  +by_n + = 0; + +1077  +i +; + +1078 +oo_pkt_p + + + = +OO_PP_ID_NULL +; + +1079 +ci__pkt_fmt +* +pkt +; + +1080  +cou +; + +1081 + `ci_as_gt +( +n +, 0); + +1082 + `ci_as +( +pkts +); + +1083 + `ci_as_gt +( +pkts +-> +cou +, 0); + +1084 +pkt + = +pkts +-> +hd +; + +1085 + `ci_as +( +pkt +); + +1086 +cou + = + `CI_MIN +(* +iov_num +, +pkts +->count); + +1087  +i + = 0; i < +cou +; ++i ) { + +1088  +iov_n +; + +1089 if +i + != 0 ) + +1090 +pkt + = + `PKT_CHK +( +ni +, + +); + +1091 +iov_n + = + `CI_MIN +( +pkt +-> +pf +. +pe +. +y_n +, +n +); + +1092 if +iov_n + == 0 ) + +1094 +iov +[ +i +]. +iov_ba + = + `pe_g_pot +( +ni +, +p +, +pkt +, 0); + +1095 +iov +[ +i +]. +iov_n + = iov_len; + +1096 + `ci_as +( +iov +[ +i +]. +iov_ba +); + +1097 +n + - +iov_n +; + +1098 +by_n + + +iov_n +; + +1099 + + = + `oo_pe_pkt_li_xt +( +pkt +); + +1101 * +iov_num + = +i +; + +1102 +pkts +-> +cou + - +i +; + +1103 +pkts +-> +hd + = +pkt +; + +1104  +by_n +; + +1105 + } +} + +1108  + #OO_PIPE_ZC_READ_IOV_IOV_LEN + 64 + + ) + +1109  + soo_pe_zc_ad_iov_x + { + +1110  +iovec + + miov__ack +[ +OO_PIPE_ZC_READ_IOV_IOV_LEN +]; + +1111  +iovec +* + miov +; + +1112 +ci_pe_zc_ad_cb + + mcb +; + +1113 * + mcb_x +; + +1121 +ci_le +  + $oo_pe_zc_ad_iov_cb +(* +zc_ad_iov_x +, + +1122 +ci_tif +* +ni +, + +1123  +oo_pe +* +p +, + +1124  +ags +, + +1125 +ci__pkt_fmt +* +hd +, + +1126  +bys_avaab +, + +1127  +n +, + +1128 +ci__pkt_fmt +** +ϡpkt_ad_out +, + +1129 * +ϡpkt_yld_ad_out +, + +1130 * +pkts_ad_out +) + +1132  +oo_pe_zc_ad_iov_x +* +x + = +zc_ad_iov_x +; + +1133  +iovec +* +iov + = +x +-> +iov__ack +; + +1134 +ci__pkt_fmt +* +pkt + = +hd +; + +1135  +bys_to_ad + = + `CI_MIN +( +bys_avaab +, +n +); + +1136  +ϡ_pkt_bys_wrn +; + +1137  +bys_wrn +; + +1138  +size +; + +1139  +i +; + +1140  +rc +; + +1143 +iov +[0]. +iov_ba + = + `pe_g_pot +( +ni +, +p +, +pkt +,-> +ad_r +. +offt +); + +1144 +size + = +pkt +-> +pf +. +pe +. +y_n + - +p +-> +ad_r +. +offt +; + +1145 +iov +[0]. +iov_n + = +size +; + +1146  +i + = 1; +size + < +bys_to_ad +; ++i ) { + +1147 +oo_pkt_p + + + = + `oo_pe_xt_buf +( +p +, +pkt +); + +1149 + `ci_as_qu +( + `OO_PKT_P +( +pkt +), +p +-> +wre_r +. + +); + +1150 +pkt + = + `PKT_CHK +( +ni +, + +); + +1151 + `ci_as +( +pkt +); + +1152 if +i + = +OO_PIPE_ZC_READ_IOV_IOV_LEN + ) { + +1153 * +niov +; + +1154  +size2 + = +bys_to_ad + - +size +; + +1155 +ci__pkt_fmt +* +pkt2 + = +pkt +; + +1157  +iov_n + = +i + + + `oo_pe_li_r_move +( +ni +, +p +, & +pkt2 +, & +size2 +, +NULL +) + 1; + +1158 +niov + = + `loc +( +iov + = +x +-> +iov__ack + ? +NULL + : iov, + +1159 (* +iov +* +OO_PIPE_ZC_READ_IOV_IOV_LEN +); + +1160 if +niov + = +NULL + ) + +1162 + `memy +( +niov +, +iov +, (*iov* +iov_n +); + +1163 +iov + = +niov +; + +1164 +x +-> +iov + = +niov +; + +1166 +iov +[ +i +]. +iov_ba + = + `pe_g_pot +( +ni +, +p +, +pkt +, 0); + +1167 +iov +[ +i +]. +iov_n + = + `CI_MIN +( +pkt +-> +pf +. +pe +. +y_n +, + +1168 +bys_to_ad + - +size +); + +1169 +size + + +iov +[ +i +]. +iov_n +; + +1171 +iov +[ +i + - 1]. +iov_n + + + `CI_MIN +(0, +bys_to_ad + - +size +); + +1173 +rc + = +x +-> + `cb +(x-> +cb_x +, +iov +, +i +, +ags +); + +1175 if +rc + <= 0 ) + +1176  +rc +; + +1178 +bys_wrn + = +rc +; + +1179 + `ci_as_ +( +bys_wrn +, +bys_to_ad +); + +1181 +ϡ_pkt_bys_wrn + = +bys_wrn + - + +1182 ( +bys_to_ad + - +iov +[ +i + - 1]. +iov_n +); + +1184 if +ϡ_pkt_bys_wrn + <= 0 ) { + +1188  +size2 + = +bys_wrn + + +p +-> +ad_r +. +offt +; + +1189 +pkt + = +hd +; + +1190 +i + = + `oo_pe_li_r_move +( +ni +, +p +, & +pkt +, & +size2 +, +NULL +); + +1191 +ϡ_pkt_bys_wrn + = +size2 +; + +1194 + `ci_as_ +( +ϡ_pkt_bys_wrn +, +pkt +-> +pf +. +pe +. +y_n +); + +1196 * +ϡpkt_ad_out + = +pkt +; + +1197 * +ϡpkt_yld_ad_out + = +ϡ_pkt_bys_wrn +; + +1198 * +pkts_ad_out + = +i + - 1; + +1199  +bys_wrn +; + +1200 + } +} + +1204 (* + too_pe_zc_ad_cb_t +)(* + tzc_ad_iov_x +, + +1205 + tci_tif +* + tni +, + +1206  + too_pe +* + tp +, + +1207  + tags +, + +1208 + tci__pkt_fmt +* + thd +, + +1209  + tbys_avaab +, + +1210  + tn +, + +1211 + tci__pkt_fmt +** + tϡpkt_ad_out +, + +1212 * + tϡpkt_yld_ad_out +, + +1213 * + tpkts_ad_out +); + +1231  + #OO_PIPE_ZC_READ_BARE_FLAG_LOCK_STACK + 1 + + ) + +1232  + #OO_PIPE_ZC_READ_BARE_FLAG_REMOVE_BUFFERS + 2 + + ) + +1233 +ci_le +  + $oo_pe_zc_ad_be +( +ci_tif +* +ni +,  +oo_pe +* +p +, + +1234  +n +,  +ags +,  +zc_ags +, + +1235 +oo_pe_zc_ad_cb_t + +cb +, * +cb_x +) + +1237  +bys_avaab +; + +1238  +bys_ad_tٮ + = 0; + +1239  +bufs_ad_tٮ + = 0; + +1240  +rc +; + +1241 +ci__pkt_fmt +* +pkt +; + +1242 +ci__pkt_fmt +* +e_f_pkt +; + +1243 +oo_pkt_p + +wre_r_xt + = +OO_PP_NULL +; + +1244  +lock_ack + = +zc_ags + & +OO_PIPE_ZC_READ_BARE_FLAG_LOCK_STACK +; + +1245  +move_bufrs + = +zc_ags + & +OO_PIPE_ZC_READ_BARE_FLAG_REMOVE_BUFFERS +; + +1246 + `ci_as +( +p +); + +1247 + `ci_as +( +ni +); + +1248 + `ci_as +(! +move_bufrs + || +lock_ack +); + +1250 + `LOG_PIPE +("%s[%u]: ENTER data_len=%dflags=%x", + +1251 +__FUNCTION__ +, +p +-> +b +. +bufid +, + `oo_pe_da_n +),-> +aags +); + +1253 +aga +: + +1254 +rc + = + `ci_sock_lock +( +ni +, & +p +-> +b +); + +1255 +bys_avaab + = + `oo_pe_da_n +( +p +); + +1257 if +bys_avaab + == 0 ) { + +1258 + `ci_sock_uock +( +ni +, & +p +-> +b +); + +1259  +wa_f_bys +; + +1262 if +lock_ack + ) + +1263 + `ci_tif_lock +( +ni +); + +1265 + `pe_dump +( +ni +, +p +); + +1267 +aga_locked +: + +1268 +pkt + = + `PKT_CHK_NML +( +ni +, +p +-> +ad_r +. + +, +lock_ack +); + +1269 +e_f_pkt + = +pkt +; + +1271 +bufs_ad_tٮ + + + `oo_pe_move_ad_r +( +ni +, +p +, & +pkt +, &p-> +ad_r +. +offt +, + +1272 +lock_ack +); + +1274 if +bufs_ad_tٮ + > 0 ) { + +1277 +p +-> +ad_r +. + + = + `OO_PKT_P +( +pkt +); + +1278 + `__oo_pe_wake_ +( +ni +, +p +, +CI_SB_FLAG_WAKE_TX +); + +1282  +bys_ad +; + +1283 +ci__pkt_fmt +* +ϡ_pkt +; + +1284  +ϡ_pkt_bys_ad +; + +1285  +bufs_ad +; + +1287 if +move_bufrs + ) { + +1288 +ci__pkt_fmt +* +wre_r_pkt + = + `PKT_CHK +( +ni +, +p +-> +wre_r +. + +); + +1289 if +e_f_pkt + = +pkt + ) { + +1295 +e_f_pkt + = +wre_r_pkt +; + +1297 +e_f_pkt + = + `oo_pe_buf_li_fd +( +ni +,_f_pkt, + `OO_PKT_P +( +pkt +)); + +1300 +wre_r_xt + = +wre_r_pkt +-> +xt +; + +1326 +rc + = + `cb +( +cb_x +, +ni +, +p +, +ags +, +pkt +, +bys_avaab +, +n +, + +1327 & +ϡ_pkt +, & +ϡ_pkt_bys_ad +, & +bufs_ad +); + +1329 if +rc + <= 0 ) { + +1330 if +rc + =- +EINTR + ) + +1331  +aga_locked +; + +1332 if +bys_ad_tٮ + ) { + +1335 +rc + = +bys_ad_tٮ +; + +1340 +bys_ad + = +rc +; + +1342 if +move_bufrs + && +bufs_ad + > 0 ) { + +1343 + `ci_as_ge +( +p +-> +bufs_num +, +bufs_ad +); + +1344 +p +-> +bufs_num + - +bufs_ad +; + +1345 if +p +-> +bufs_num + == 0 ) { + +1347 + `oo_pe_buf_r_e +( +ni +, +p +); + +1348 +ϡ_pkt + = +NULL +; + +1349 + `ci_as_equ +( +ϡ_pkt_bys_ad +, 0); + +1353 +e_f_pkt +-> +xt + = + `OO_PKT_P +( +ϡ_pkt +); + +1354 if +wre_r_xt + = + `OO_PKT_P +( +ϡ_pkt +) ) { + +1357 +p +-> +wre_r +. +_wa + = +OO_PP_NULL +; + +1358 +p +-> +wre_r +. + + = +wre_r_xt +; + +1359 + `oo_pe_buf_wre_ +( +p +, +ϡ_pkt +); + +1363 +p +-> +pe_bufs +. + + = + `OO_PKT_P +( +ϡ_pkt +); + +1367 +bufs_ad_tٮ + + +bufs_ad +; + +1369 +bys_ad_tٮ + + +bys_ad +; + +1370 +bys_avaab + - +bys_ad +; + +1372 if +ϡ_pkt + ) { + +1373 +p +-> +ad_r +. + + = + `OO_PKT_P +( +ϡ_pkt +); + +1374 if +bufs_ad + == 0 ) + +1375 +p +-> +ad_r +. +offt + + +ϡ_pkt_bys_ad +; + +1377 +p +-> +ad_r +. +offt + = +ϡ_pkt_bys_ad +; + +1379 if +bufs_ad + > 0 || +bys_avaab + == 0 ) + +1380 + `__oo_pe_wake_ +( +ni +, +p +, +CI_SB_FLAG_WAKE_TX +); + +1382 + `ci_as_ +( +p +-> +ad_r +. +offt +, +ϡ_pkt +-> +pf +. +pe +. +y_n +); + +1389 + `ci_wmb +(); + +1390 +p +-> +bys_moved + + +bys_ad_tٮ +; + +1391 if +lock_ack + ) + +1392 + `ci_tif_uock +( +ni +); + +1393 + `ci_sock_uock +( +ni +, & +p +-> +b +); + +1394 +out +: + +1395 + `LOG_PIPE +("%s[%u]: EXITu %d", +__FUNCTION__ +, +p +-> +b +. +bufid +, +rc +); + +1396  +rc +; + +1398 +wa_f_bys +: + +1399 + `LOG_PIPE +("%s[%u]: wa_f_bys", +__FUNCTION__ +, +p +-> +b +. +bufid +); + +1400 if( +rc + = + `oo_pe_ad_wa +( +ni +, +p +, +ags + & +MSG_DONTWAIT +)) != 1 ) + +1401  +out +; + +1402  +aga +; + +1403 + } +} + +1418  + $ci_pe_zc_ad +( +ci_tif +* +ni +,  +oo_pe +* +p +,  +n +,  +ags +, + +1419 +ci_pe_zc_ad_cb + +cb +, * +cb_x +) + +1421  +oo_pe_zc_ad_iov_x + +x + = { + +1422 . +cb + = cb, + +1423 . +cb_x + = cb_ctx, + +1425  +rc +; + +1426 +x +. +iov + = ctx. +iov__ack +; + +1427 +rc + = + `oo_pe_zc_ad_be +( +ni +, +p +, +n +, +ags +, 0, + +1428 +oo_pe_zc_ad_iov_cb +, & +x +); + +1429 if +x +. +iov + !x. +iov__ack + ) + +1430 + ` +( +x +. +iov +); + +1431  +rc +; + +1432 + } +} + +1444 + $__oo_pe_zc_move_bufrs +( +ci_tif +* +ni +,  +oo_pe +* +pe_c +, + +1445  +oo_pe +* +pe_de +,  +ags +,  +n +, + +1446 +ci__pkt_fmt +* +hd +, ci__pkt_fmt** +xt_pkt_out +, + +1447 * +n_pkts_out +, * +ϡ_pkt_offt_out +) + +1449 +ci__pkt_fmt +* +e_ +; + +1450  +bys_mag +; + +1451  +ack_locked + = 1; + +1452  +ci_pe_pkt_li + +pkts + = { + +1453 . +hd + = head, + +1454 . + + = +hd +, + +1457 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +1459  +pe_de +-> +bufs_num + >pe_de-> +bufs_max + ) { + +1460 + `oo_pe__emy_bufrs +( +ni +, +pe_de +, 0, +NULL +); + +1461 if +pe_de +-> +bufs_num + >pe_de-> +bufs_max + ) { + +1462  +rc +; + +1463 + `LOG_PIPE +("%s[%u,%u]: stilloo few buffersost-reap (%d/%d)", + +1464 +__FUNCTION__ +, +pe_c +-> +b +. +bufid +, +pe_de +->b.bufid, + +1465 +pe_de +-> +bufs_num +,e_de-> +bufs_max +); + +1466 if +ags + & +MSG_DONTWAIT + ) + +1467  - +EAGAIN +; + +1468 +rc + = + `oo_pe_wa_wre +( +ni +, +pe_de +, 0, & +ack_locked +); + +1469 if! +ack_locked + ) { + +1470 + `ci_tif_lock +( +ni +); + +1471 if +rc + == 0 ) + +1472  - +EINTR +; + +1474 if +rc + < 0 ) + +1475  +rc +; + +1481 +bys_mag + = +n + + +pe_c +-> +ad_r +. +offt +; + +1482 +pkts +. +cou + = + `oo_pe_li_r_move +( +ni +, +pe_c +, &pkts. + +, & +bys_mag +, + +1483 & +e_ +); + +1484 if +bys_mag + = +pkts +. + +-> +pf +. +pe +. +y_n + ) { + +1486 +bys_mag + = 0; + +1487 * +xt_pkt_out + = + `PKT_CHK +( +ni +, + `oo_pe_xt_buf +( +pe_c +, +pkts +. + +)); + +1492 * +xt_pkt_out + = +pkts +. + +; + +1493 +pkts +. + + = +e_ +; + +1494 -- +pkts +. +cou +; + +1497 if +pkts +. + + ! +NULL + ) { + +1498 + `ci_as_gt +( +pkts +. +cou +, 0); + +1499 +pkts +. +hd +-> +pf +. +pe +. +y_n + - +pe_c +-> +ad_r +. +offt +; + +1500 +pkts +. +hd +-> +pf +. +pe +. +ba + + +pe_c +-> +ad_r +. +offt +; + +1501 + `oo_pe__bufrs +( +ni +, +pe_de +, & +pkts +); + +1504 * +ϡ_pkt_offt_out + = 0; + +1508 * +ϡ_pkt_offt_out + = +pe_c +-> +ad_r +. +offt +; + +1509 +bys_mag + -* +ϡ_pkt_offt_out +; + +1512 * +n_pkts_out + = +pkts +. +cou +; + +1513  +bys_mag +; + +1514 + } +} + +1518 + $__oo_pe_zc_cy_ϡ_bufr +( +ci_tif +* +ni +,  +oo_pe +* +pe_c +, + +1519  +oo_pe +* +pe_de +,  +ags +, + +1520 +ci__pkt_fmt +* +pkt_c +,  +n +,  +offt +, + +1521  +bys_ady_lid +) + +1523  +ack_locked + = 1; + +1524 +ci_ut8 +* +wre_pot +; + +1525 +ci_ut8 +* +ad_pot +; + +1526 +oo_pkt_p + +_de_ad + = + `OO_ACCESS_ONCE +( +pe_de +-> +ad_r +. + +); + +1527 +ci__pkt_fmt +* +pkt_de + = + `OO_PP_NOT_NULL +( +pe_de +-> +wre_r +. + +) ? + +1528 + `PKT_CHK +( +ni +, +pe_de +-> +wre_r +. + +: +NULL +; + +1529  +de_buf_a + = +pkt_de + ! +NULL + ? + `oo_pe_buf_a +(pkt_dest) : 0; + +1530  +f_pti + = + `CI_MIN +( +de_buf_a +, +n +); + +1531  +bys_cݛd +; + +1533 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +1534 + `ci_as_ +( +n +, +pkt_c +-> +pf +. +pe +. +y_n + - +offt +); + +1539 +ad_pot + = + `pe_g_pot +( +ni +, +pe_c +, +pkt_c +, +offt +); + +1540 if +de_buf_a + > 0 ) { + +1541 +pkt_de + = + `PKT_CHK +( +ni +, +pe_de +-> +wre_r +. + +); + +1542 +wre_pot + = + +1543 + `pe_g_pot +( +ni +, +pe_de +, +pkt_de +,kt_de-> +pf +. +pe +. +y_n +); + +1544 + `do_cy_wre +( +wre_pot +, +ad_pot +, +f_pti +); + +1545 +pkt_de +-> +pf +. +pe +. +y_n + + +f_pti +; + +1546 +n + - +f_pti +; + +1547 +ad_pot + + +f_pti +; + +1548 if +f_pti + = +de_buf_a + && +pkt_de +-> +xt + = +_de_ad + ) + +1549 +pe_de +-> +wre_r +. +_wa + = +pkt_de +-> +xt +; + +1552 +bys_cݛd + = +f_pti +; + +1555 if +n + > 0 ) { + +1556 if + `CI_UNLIKELY +(! + `oo_pe_has_a +( +pe_de +)) ) { + +1557  +rc +; + +1558 + `LOG_PIPE +("%s[%u,%u]:d mܐa", +__FUNCTION__ +, +pe_c +-> +b +. +bufid +, + +1559 +pe_de +-> +b +. +bufid +); + +1560 +rc + = + `oo_pe_me_bufrs +( +ni +, +pe_de +, 0, +NULL +); + +1564 if +rc + <0 && +bys_ady_lid + > 0 ) { + +1565  +bys_cݛd +; + +1569 if +rc + < 0 ) { + +1570  - +ENOBUFS +; + +1573 if +rc + == 0 ) { + +1574 if +ags + & +MSG_DONTWAIT + ) + +1575  - +EAGAIN +; + +1576 +rc + = + `oo_pe_wa_wre +( +ni +, +pe_de +, 0, & +ack_locked +); + +1577 if! +ack_locked + ) { + +1580 + `ci_tif_lock +( +ni +); + +1581 +ack_locked + = 1; + +1582 if +rc + == 0 ) + +1583  - +EINTR +; + +1585 if +rc + < 0 ) + +1586  +rc +; + +1589 +pe_de +-> +wre_r +. + + =e_de->wre_r. +_wa +; + +1590 +pe_de +-> +wre_r +. +_wa + = +OO_PP_NULL +; + +1594 +pe_de +-> +wre_r +. + + = +pkt_de +-> +xt +; + +1597 +pkt_de + = + `PKT_CHK +( +ni +, +pe_de +-> +wre_r +. + +); + +1598 + `oo_pe_buf_wre_ +( +pe_de +, +pkt_de +); + +1599 +wre_pot + = + `pe_g_pot +( +ni +, +pe_de +, +pkt_de +, 0); + +1600 + `do_cy_wre +( +wre_pot +, +ad_pot +, +n +); + +1601 +pkt_de +-> +pf +. +pe +. +y_n + = +n +; + +1602 +bys_cݛd + + +n +; + +1606 + `ci_as_gt +( + `oo_pe_buf_a +( +pkt_de +), 0); + +1609  +bys_cݛd +; + +1610 + } +} + +1613  + soo_pe_zc_move_x + { + +1614  +oo_pe +* + mpe_de +; + +1647  + #PIPE_TO_PIPE_SPLICE_COPY_THRESHOLD + 300 + + ) + +1650 + $oo_pe_zc_move_cb +(* +c +, +ci_tif +* +ni +,  +oo_pe +* +pe_c +,  +ags +, + +1651 +ci__pkt_fmt +* +hd +,  +bys_avaab +,  +ad_n +, + +1652 +ci__pkt_fmt +** +xt_pkt_out +, * +xt_pkt_yld_out +, + +1653 * +n_pkts_out +) + +1655  +oo_pe_zc_move_x +* +x + = +c +; + +1656  +oo_pe +* +pe_de + = +x +->pipe_dest; + +1657  +ϡ_pkt_bys +, +ϡ_pkt_offt +; + +1658  +bys_n_move + = + `CI_MIN +( +bys_avaab +, +ad_n +); + +1661 + `CI_BUILD_ASSERT +( +PIPE_TO_PIPE_SPLICE_COPY_THRESHOLD + < +OO_PIPE_BUF_MAX_SIZE +); + +1663 + `LOG_PIPE +("%s[%u,%u]: ENTER", +__FUNCTION__ +, +pe_c +-> +b +. +bufid +, + +1664 +pe_de +-> +b +. +bufid +); + +1665 + `pe_dump +( +ni +, +pe_de +); + +1667 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +1668 + `ci_as_equ +( + `OO_PKT_P +( +hd +), +pe_c +-> +ad_r +. + +); + +1670 * +xt_pkt_yld_out + = 0; + +1673 if +bys_n_move + == 0 ) { + +1674 * +xt_pkt_out + = +hd +; + +1675 * +n_pkts_out + = 0; + +1680 if +bys_n_move + = +hd +-> +pf +. +pe +. +y_n + - +pe_c +-> +ad_r +. +offt + && + +1681 +bys_n_move + < +PIPE_TO_PIPE_SPLICE_COPY_THRESHOLD + ) { + +1682 +ϡ_pkt_bys + = +bys_n_move +; + +1683 +ϡ_pkt_offt + = +pe_c +-> +ad_r +. +offt +; + +1684 * +xt_pkt_out + = +hd +; + +1685 * +n_pkts_out + = 0; + +1689 +ϡ_pkt_bys + = + +1690 + `__oo_pe_zc_move_bufrs +( +ni +, +pe_c +, +pe_de +, +ags +, +bys_n_move +, + +1691 +hd +, +xt_pkt_out +, +n_pkts_out +, + +1692 & +ϡ_pkt_offt +); + +1693 if +ϡ_pkt_bys + < 0 ) + +1694  +ϡ_pkt_bys +; + +1699 + `LOG_PIPE +("%s[%u,%u]: cy %d byoff%d/%d", +__FUNCTION__ +, + +1700 +pe_c +-> +b +. +bufid +, +pe_de +->b.bufid, +ϡ_pkt_bys +, + +1701 +ϡ_pkt_offt +, (* +xt_pkt_out +)-> +pf +. +pe +. +y_n +); + +1702 if +ϡ_pkt_bys + > 0 ) { + +1703  +bys_cݛd +; + +1704 + `ci_as_ +(* +n_pkts_out +, +pe_c +-> +bufs_num +); + +1705 +bys_cݛd + = + +1706 + `__oo_pe_zc_cy_ϡ_bufr +( +ni +, +pe_c +, +pe_de +, +ags +, + +1707 * +xt_pkt_out +, +ϡ_pkt_bys +, + +1708 +ϡ_pkt_offt +, + +1709 +bys_n_move + - +ϡ_pkt_bys +); + +1710 if +bys_cݛd + < 0 ) + +1711  +bys_cݛd +; + +1712 * +xt_pkt_yld_out + = +bys_cݛd +; + +1713 +bys_n_move + - +ϡ_pkt_bys + - +bys_cݛd +; + +1716 if +bys_n_move + > 0 ) { + +1717 + `ci_wmb +(); + +1718 +pe_de +-> +bys_added + + +bys_n_move +; + +1719 + `__oo_pe_wake_ +( +ni +, +pe_de +, +CI_SB_FLAG_WAKE_RX +); + +1722  +bys_n_move +; + +1723 + } +} + +1726  + $ci_pe_zc_move +( +ci_tif +* +ni +,  +oo_pe +* +pe_c +, + +1727  +oo_pe +* +pe_de +,  + +,  +ags +) + +1729  +oo_pe_zc_move_x + +x + = { + +1730 . +pe_de + =ipe_dest, + +1732  + `oo_pe_zc_ad_be +( +ni +, +pe_c +, + +, +ags +, + +1733 +OO_PIPE_ZC_READ_BARE_FLAG_LOCK_STACK + | + +1734 +OO_PIPE_ZC_READ_BARE_FLAG_REMOVE_BUFFERS +, + +1735 +oo_pe_zc_move_cb +, & +x +); + +1736 + } +} + +1741  + $ci_pe_wre +( +ci_tif +* +ni +,  +oo_pe +* +p +, + +1742 cڡ  +iovec + * +iov +, + +1743 +size_t + +iovn +) + +1745  +tٮ_bys + = 0, +rc +; + +1746  +i +; + +1747  +add + = 0; + +1748  +ack_locked + = 0; + +1749 +ci__pkt_fmt +* +pkt + = +NULL +; + +1750 +oo_pkt_p + +_ad +; + +1752 + `ci_as +( +p +); + +1753 + `ci_as +( +ni +); + +1754 + `ci_as +( +iov +); + +1755 + `ci_as_gt +( +iovn +, 0); + +1757 + `LOG_PIPE +("%s[%u]: ENTERonblock=%s bufs=%d wr=%d wr_wait=%dd=%d", + +1758 +__FUNCTION__ +, + +1759 +p +-> +b +. +bufid +, + +1760 ( +p +-> +aags + & + +1761 ( +CI_PFD_AFLAG_NONBLOCK + << +CI_PFD_AFLAG_WRITER_SHIFT +)) ? + +1763 +p +-> +bufs_num +, + +1764 + `OO_PP_FMT +( +p +-> +wre_r +. + +), + +1765 + `OO_PP_FMT +( +p +-> +wre_r +. +_wa +), + +1766 + `OO_PP_FMT +( +p +-> +ad_r +. + +)); + +1768 +rc + = + `ci_tif_lock +( +ni +); + +1769 #ifde +__KERNEL__ + + +1770 if +rc + < 0 ) { + +1771 + `CI_SET_ERROR +( +rc +, +ERESTARTSYS +); + +1772  +out +; + +1775 +ack_locked + = 1; + +1777 + `pe_dump +( +ni +, +p +); + +1779 if +p +-> +aags + & ( +CI_PFD_AFLAG_CLOSED + << +CI_PFD_AFLAG_READER_SHIFT +)) { + +1782 + `CI_SET_ERROR +( +rc +, +EPIPE +); + +1783 + `oo_pe_sigl +( +ni +); + +1784  +out +; + +1787 +_ad + = + `OO_ACCESS_ONCE +( +p +-> +ad_r +. + +); + +1788  +i + = 0; i < +iovn +; i++ ) { + +1789 * +t + = +iov +[ +i +]. +iov_ba +; + +1790 * +d + = +t + + +iov +[ +i +]. +iov_n +; + +1793 +ci_ut8 +* +wre_pot +; + +1794  +bur +; + +1795 + `ci_as +( +iov +[ +i +]. +iov_n + =0 || +d + - +t +); + +1797 if +pkt + = +NULL + && + `OO_PP_NOT_NULL +( +p +-> +wre_r +. + +) ) + +1798 +pkt + = + `PKT_CHK +( +ni +, +p +-> +wre_r +. + +); + +1800 if +pkt + ! +NULL + && + `oo_pe_buf_a +(pkt) > 0 ) { + +1803 if +pkt + ! +NULL + &&kt-> +xt + ! +_ad + ) { + +1804 +p +-> +wre_r +. +_wa + = +OO_PP_NULL +; + +1805 +p +-> +wre_r +. + + = +pkt +-> +xt +; + +1806 +pkt + = + `PKT_CHK +( +ni +,kt-> +xt +); + +1807 + `oo_pe_buf_wre_ +( +p +, +pkt +); + +1810  +out_of_a +; + +1812 + `LOG_PIPE +("%s: ->%d+%u %d %d", + +1813 +__FUNCTION__ +, + `OO_PP_FMT +( +p +-> +wre_r +. + +), +pkt +-> +pf +. +pe +. +y_n +, + +1814 ()( + `oo_pe_buf_a +( +pkt +)), + +1815 ()( +d + - +t +)); + +1817 +wre_pot + = + `pe_g_pot +( +ni +, +p +, +pkt +,kt-> +pf +. +pe +. +y_n +); + +1819 +bur + = + `CI_MIN +( + `oo_pe_buf_a +( +pkt +), +d + - +t +); + +1821 if +bur + ) { + +1822 if( + `CI_UNLIKELY + + `do_cy_wre +( +wre_pot +, +t +, +bur +) != 0 )) { + +1823 + `CI_SET_ERROR +( +rc +, +EFAULT +); + +1824 if +add + > 0 ) + +1825  +_out +; + +1827  +out +; + +1831 +add + + +bur +; + +1832 +t + + +bur +; + +1833 +pkt +-> +pf +. +pe +. +y_n + + +bur +; + +1834 + `ci_as_ge +( + `oo_pe_buf_a +( +pkt +), 0); + +1836 + `LOG_PIPE +("%s:nd-start=%d burst=%ddd=%d", + +1837 +__FUNCTION__ +, ()( +d + - +t +), +bur +, +add +); + +1840 if! ( +d + - +t + ) ) + +1846 +out_of_a +: + +1848 +rc + = + `oo_pe_me_bufrs +( +ni +, +p +, 0, +NULL +); + +1849 if +rc + <= 0 ) { + +1850 if +p +-> +bufs_num + == 0 ) { + +1851 + `LOG_PIPE +("%s: Nbufrd faedخlo", +__FUNCTION__ +); + +1852 + `CI_SET_ERROR +( +rc +, +ENOMEM +); + +1853  +out +; + +1855 + `ci_as_qu +( +pkt +, +NULL +); + +1856 +p +-> +wre_r +. +_wa + = +pkt +-> +xt +; + +1857 if +p +-> +aags + & + +1858 ( +CI_PFD_AFLAG_NONBLOCK + << +CI_PFD_AFLAG_WRITER_SHIFT +) ) { + +1861 if +add + > 0 ) + +1862  +_sucss +; + +1863 + `CI_SET_ERROR +( +rc +, +EAGAIN +); + +1864  +out +; + +1870 +tٮ_bys + + +add +; + +1871 + `ci_wmb +(); + +1872 +p +-> +bys_added + + +add +; + +1873 +add + = 0; + +1875 if +tٮ_bys + ) + +1876 + `__oo_pe_wake_ +( +ni +, +p +, +CI_SB_FLAG_WAKE_RX +); + +1877 +rc + = + `oo_pe_wa_wre +( +ni +, +p +, 0, & +ack_locked +); + +1878 i( +rc + != 0) { + +1879 if +tٮ_bys + ) { + +1881  +_sucss +; + +1883  +out +; + +1885 if! +ack_locked + ) { + +1886 +rc + = + `ci_tif_lock +( +ni +); + +1887 #ifde +__KERNEL__ + + +1888 if +rc + < 0 ) { + +1889 + `CI_SET_ERROR +( +rc +, +ERESTARTSYS +); + +1890  +out +; + +1893 +ack_locked + = 1; + +1894 +pkt + = +NULL +; + +1898 +_ad + = + `OO_ACCESS_ONCE +( +p +-> +ad_r +. + +); + +1903 if +pkt + ! +NULL + && + `oo_pe_buf_a +(pkt) == 0 && + +1904 +pkt +-> +xt + = + `OO_ACCESS_ONCE +( +p +-> +ad_r +. + +) ) + +1905 +p +-> +wre_r +. +_wa + = +pkt +-> +xt +; + +1907 +_sucss +: + +1908 +rc + = +tٮ_bys + + +add +; + +1909 +_out +: + +1910 if + `CI_LIKELY +( +add + > 0) ) { + +1911 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +1912 +tٮ_bys + + +add +; + +1913 + `ci_wmb +(); + +1914 +p +-> +bys_added + + +add +; + +1915 + `__oo_pe_wake_ +( +ni +, +p +, +CI_SB_FLAG_WAKE_RX +); + +1917 +out +: + +1918 if +ack_locked + ) + +1919 + `ci_tif_uock +( +ni +); + +1920 + `LOG_PIPE +("%s[%u]: EXITu %d", +__FUNCTION__ +, +p +-> +b +. +bufid +, +rc +); + +1921  +rc +; + +1922 + } +} + +1925 #ifde +__KERNEL__ + + +1926  + $oo_pe__bufs +( +ci_tif +* +ni +,  +oo_pe +* +p +) + +1928 +oo_pkt_p + + + = + `oo_pe_buf_li_t +(& +p +-> +pe_bufs +); + +1929 +oo_pkt_p + +_d + = + +; + +1930 if! + `OO_PP_NOT_NULL +( + +) ) + +1933 +ci__pkt_fmt +* +pkt + = + `PKT_CHK +( +ni +, + +); + +1934 + + = + `oo_pe_xt_buf +( +p +, +pkt +); + +1935 + `ci_tif_pkt_a +( +ni +, +pkt +); + +1936 }  + + ! +_d + ); + +1937 + } +} + +1940  + $oo_pe_ +( +ci_tif +* +ni +,  +oo_pe +* +p +) + +1942 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +1944 + `LOG_PIPE +("%s: fpwaab id=%d", +__FUNCTION__ +, + +1945 +p +-> +b +. +bufid +); + +1948 + `cp_waab_obj_ +( +ni +, & +p +-> +b +); + +1949 + } +} + +1952  + $ci_pe_l_fds_ge +( +ci_tif +* +ni +,  +oo_pe +* +p +,  +do_ +) + +1954 + `ci_as +( +p +); + +1955 + `ci_as +( +ni +); + +1956 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +1957 + `ci_as +( +do_ +); + +1959 + `pe_dump +( +ni +, +p +); + +1961 + `oo_pe__bufs +( +ni +, +p +); + +1962 + `oo_pe_ +( +ni +, +p +); + +1964 + `LOG_PIPE +("%s: de", +__FUNCTION__ +); + +1965 + } +} + +1969 #ide +__KERNEL__ + + +1970  + $ci_pe_t_size +( +ci_tif +* +ni +,  +oo_pe +* +pe +, +size_t + +size +) + +1973  +bufs + = + `OO_PIPE_SIZE_TO_BUFS +( +size +) + 1; + +1977 + `CI_BUILD_ASSERT +( +OO_PIPE_MIN_BUFS + > 1); + +1979 if +bufs + < +OO_PIPE_MIN_BUFS + || buf> +OO_PIPE_MAX_BUFS +) + +1982 + `ci_tif_lock +( +ni +); + +1984 +pe +-> +bufs_max + = +bufs +; + +1988 + `oo_pe__emy_bufrs +( +ni +, +pe +, 0, +NULL +); + +1990 + `ci_tif_uock +( +ni +); + +1993 + } +} + +1998  + $oo_pe_dump +( +ci_tif +* +ni +,  +oo_pe +* +p +, cڡ * +pf +, + +1999 +oo_dump_log__t + +logg +, * +log_g +) + +2001 + `logg +( +log_g +, "%d_p=%d:%u bys=%u fgs=%x", +pf +, + +2002 + `OO_PP_FMT +( +p +-> +ad_r +. + +),->ad_r. +offt +,-> +bys_moved +, + +2003 ( +p +-> +aags + & +CI_PFD_AFLAG_READER_MASK + ) >> +CI_PFD_AFLAG_READER_SHIFT +); + +2004 + `logg +( +log_g +, "% wr_p=%d:%u bys=%u fgs=%x", +pf +, + +2005 + `OO_PP_FMT +( +p +-> +wre_r +. + +), + +2006 + `OO_PP_NOT_NULL +( +p +-> +wre_r +. + +) ? + +2007 + `PKT_CHK +( +ni +, +p +-> +wre_r +. + +)-> +pf +. +pe +. +y_n + : 0, + +2008 +p +-> +bys_added +, + +2009 ( +p +-> +aags + & +CI_PFD_AFLAG_WRITER_MASK + ) >> +CI_PFD_AFLAG_WRITER_SHIFT +); + +2010 + `logg +( +log_g +, "%um_bufs=%d/%d", +pf +, +p +-> +bufs_num +,-> +bufs_max +); + +2011 + } +} + + @pkt_filler.c + +11  + ~"_.h +" + +12  + ~ + +15  + $oo_pkt_fr__unud_pkts +( +ci_tif +* +ni +, * +p_tif_locked +, + +16  +oo_pkt_fr +* +pf +) + +18 +ci__pkt_fmt +* +pkt +; + +19 +oo_pkt_p + +xt +; + +21 if +pf +-> +loc_pkt + = +NULL + ) + +24 +xt + = + `OO_PKT_P +( +pf +-> +loc_pkt +); + +25 +pf +-> +loc_pkt + = +NULL +; + +28 +pkt + = + `PKT_CHK_NML +( +ni +, +xt +, * +p_tif_locked +); + +29 +xt + = +pkt +->next; + +30 if! ( +pkt +-> +ags + & +CI_PKT_FLAG_NONB_POOL +) ) { + +31 if* +p_tif_locked + || (*p_tif_locked = + `ci_tif_ylock +( +ni +)) ) { + +32 + `ci_tif_pkt_a_1f +( +ni +, +pkt +); + +33 -- +ni +-> +e +-> +n_async_pkts +; + +42 +pkt +-> +fcou + = 0; + +43 + `__ci_tif_pkt_n +( +pkt +); + +44 + `ci_tif_pkt__nb_li +( +ni +, + `OO_PKT_P +( +pkt +),kt); + +45 }  + `OO_PP_NOT_NULL +( +xt +) ); + +46 + } +} + +49 +ci_le +  +oo_pkt_fl_cy +(* +to +, cڡ * +om +,  +n_bys + + +50 + $CI_KERNEL_ARG +( +ci_addr_c_t + +addr_c +)) + +52 #ifde +__KERNEL__ + + +53 if +addr_c + ! +CI_ADDR_SPC_KERNEL + ) + +54  + `cy_om_ur +( +to +, +om +, +n_bys +); + +56 + `memy +( +to +, +om +, +n_bys +); + +58 + } +} + +61  +oo_pkt_fl +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +, * +p_tif_locked +, + +62  +n_block +, + +63  +oo_pkt_fr +* +pf +, +ci_iovec_r +* +piov +, + +64  +bys_to_cy + + $CI_KERNEL_ARG +( +ci_addr_c_t + +addr_c +)) + +66 +ci__pkt_fmt +* +xt_pkt +; + +67  +n +; + +68  +rc +; + +70 + `ci_as_ +( +bys_to_cy +, + `ci_iovec_r_bys_cou +( +piov +)); + +71 + `ci_as_ge +((( +pf +-> +buf_d + -f-> +buf_t +), 0); + +72 + `ci_as +( +pf +-> +buf_t + > + `PKT_START +f-> +ϡ_pkt +)); + +73 + `ci_as +( +pf +-> +buf_t + +buf_d +); + +75 + `ci_as +( +pf +-> +buf_d + < + `CI_PTR_ALIGN_FWD +( + `PKT_START +f-> +ϡ_pkt +), + +76 +CI_CFG_PKT_BUF_SIZE +)); + +79 +n + = (( +pf +-> +buf_d + -f-> +buf_t +); + +80 +n + = + `CI_MIN +, + `CI_IOVEC_LEN +(& +piov +-> +io +)); + +81 +n + = + `CI_MIN +, +bys_to_cy +); + +82 if( + `CI_UNLIKELY + + `oo_pkt_fl_cy +( +pf +-> +buf_t +, + `CI_IOVEC_BASE +(& +piov +-> +io +), + +83 +n + + `CI_KERNEL_ARG +( +addr_c +)) != 0 )) + +84  - +EFAULT +; + +86 +pf +-> +buf_t + + +n +; + +87 +pf +-> +pkt +-> +y_n + + +n +; + +88 + `ci_iovec_r_adv +( +piov +, +n +); + +90 if +n + = +bys_to_cy + ) + +93 +bys_to_cy + - +n +; + +95 if +pf +-> +buf_t + =pf-> +buf_d + ) { + +100 + `ci_as +( + `CI_IOVEC_LEN +(& +piov +-> +io +> 0 ||iov-> +iovn + > 0); + +102 +pf +-> +ϡ_pkt +-> +buf_n + = + +103 +pf +-> +buf_t + - + `PKT_START +f-> +ϡ_pkt +); + +105 +xt_pkt + = + `oo_pkt_fr_xt_pkt +( +ni +, +pf +, * +p_tif_locked +); + +106 if +xt_pkt + = +NULL + ) { + +107 + `ci_as +( +p_tif_locked +); + +108 +rc + = + `ci_tif_pkt_loc_block +( +ni +, +s +, +p_tif_locked +, +n_block +, + +109 & +xt_pkt +); + +110 if +rc + != 0 ) + +111  +rc +; + +114 + `oo_tx_pkt_yout_ +( +xt_pkt +); + +115 ++ +pf +-> +pkt +-> +n_bufrs +; + +117 +pf +-> +ϡ_pkt +-> +ag_xt + = + `OO_PKT_P +( +xt_pkt +); + +118 +pf +-> +ϡ_pkt + = +xt_pkt +; + +119 +pf +-> +buf_t + = + `PKT_START +( +xt_pkt +); + +121 +pf +-> +buf_d + = + `CI_PTR_ALIGN_FWD +f-> +buf_t +, +CI_CFG_PKT_BUF_SIZE +); + +125 + `ci_as_equ +( + `CI_IOVEC_LEN +(& +piov +-> +io +), 0); + +126 if +piov +-> +iovn + == 0 ) + +128 +piov +-> +io + = *piov-> +iov +++; + +129 -- +piov +-> +iovn +; + +132 +pf +-> +ϡ_pkt +-> +buf_n + =f-> +buf_t + - + `PKT_START +(pf->last_pkt); + +134 + } +} + + @pmtu.c + +14  + ~"_.h +" + +17  + #LPF + "ci_pmtu_" + + ) + +20 cڡ +ci_ut16 + + gmtu_u +[] = +CI_PMTU_PLATEAU_ENTRIES +; + +24 + $ci_pmtu_e_ +( +ci_tif +* +ni +, +ci_sock_cmn + * +s +, +ci_pmtu_e_t +* +pmtus +, + +25  +func_code +) + +27 +pmtus +-> +tid +. +m1 + = + `SC_SP +( +s +); + +28 +pmtus +-> +tid +. + + = ( +ci_time_back__t +) +func_code +; + +30 + `ci_pmtu_e_ +( +ni +, +s +, +pmtus +); + +31 + } +} + +34 + $ci_pmtu_e_ +( +ci_tif +* +ni +, +ci_sock_cmn + * +s +, +ci_pmtu_e_t +* +pmtus +) + +36 +oo_p + + +; + +37 + + = + `oo_sockp_to_ +( +ni +, + `SC_SP +( +s +)); + +38 + `OO_P_ADD +( + +, (*& +pmtus +-> +tid + - (* +s +); + +39 + `ci__tim_ +( +ni +, & +pmtus +-> +tid +, + +, "pmtu"); + +40 + } +} + +47  + $ci_pmtu_t +( +ci_tif + * +ni +, +ci_pmtu_e_t + * +pmtus +,  +pmtu +) + +49 cڡ +ci_ut16 + +u +[] = +CI_PMTU_PLATEAU_ENTRIES +; + +50  +id + = +CI_PMTU_PLATEAU_ENTRY_MAX +; + +51 + `ci_as_ge +( +pmtu +, +CI_CFG_TCP_MINIMUM_MSS +); + +53 +pmtu + = + `CI_MIN +( +CI_PMTU_MAX_MTU +,mtu); + +54  +id + && +pmtu + < +u +[id]) + +55 +id +--; + +57 +pmtus +-> +pmtu + = ( +ci_ut16 +)pmtu; + +58 +pmtus +-> +u_id + = ( +ci_ut8 +) +id +; + +59 + `LOG_PMTU +( + `ci_log +("%s:eq_pmtu=%dmtu=%d id=%d(%d) max_mtu=%d", + +60 +__FUNCTION__ +, +pmtu +, +pmtus +->pmtu,mtus-> +u_id +, + +61 +u +[ +pmtus +-> +u_id +], +CI_PMTU_MAX_MTU +)); + +62 + } +} + +65 +ci_le +  + $__ci_pmtu_timeout_hdr +( +ci_tif +* +ni +, +ci_pmtu_e_t + * +pmtus +, + +66 +ci__ched_hdrs + * +che +) + +68 + `ci_as_ +( +pmtus +-> +pmtu +, +CI_PMTU_MAX_MTU +); + +69 + `ci_as_ +( +che +-> +mtu +, +CI_PMTU_MAX_MTU +); + +72 +pmtus +-> +pmtu + = +mtu_u +[++pmtus-> +u_id +]; + +77 if +pmtus +-> +pmtu + > +che +-> +mtu + ) { + +78 +pmtus +-> +pmtu + = +che +-> +mtu +; + +79 +pmtus +-> +u_id +--; + +80 + `CI_PMTU_TIMER_KILL +( +ni +, +pmtus +); + +81 + `LOG_PMTU +( + `ci_log +("%s: (TCP)eached interface MTU, killedimer, mtu=%d", + +82 +__FUNCTION__ +, +pmtus +-> +pmtu +)); + +84 + `CI_PMTU_TIMER_SET_FAST +( +ni +, +pmtus +); + +85 + `LOG_PMTU +( + `ci_log +("%s: (TCP) climbedlateau, set fastimer, mtu=%d", + +86 +__FUNCTION__ +, +pmtus +-> +pmtu +)); + +88 #unde +TRAFFIC_TCP + + +89 #unde +TRAFFIC_UDP + + +90 + } +} + +95  + $ci_pmtu_timeout_pmtu +( +ci_tif +* +ni +, +ci_t_e + * +ts +) + +97 + `__ci_pmtu_timeout_hdr +( +ni +, & +ts +-> +pmtus +, &ts-> +s +. +pkt +); + +98 + `ci_t_tx_chge_mss +( +ni +, +ts +); + +99 + } +} + +106  + $ci_pmtu_upde_ow +( +ci_tif +* +ni +, +ci_pmtu_e_t + * +pmtus +, + +107 +ci__ched_hdrs + * +che +, + +108  +pmtu +) + +110 + `ci_as_ge +( +pmtu +, +CI_CFG_TCP_MINIMUM_MSS +); + +111 + `ci_as_ +( +pmtu +, +CI_PMTU_MAX_MTU +); + +112 + `ci_as_ +( +pmtu +, +che +-> +mtu +); + +114 + `CI_PMTU_TIMER_KILL +( +ni +, +pmtus +); + +115 + `ci_pmtu_t +( +ni +, +pmtus +, +pmtu +); + +117 i( +pmtus +-> +pmtu + < +che +-> +mtu +) + +118 + `CI_PMTU_TIMER_SET_SLOW +( +ni +, +pmtus +); + +120 + `LOG_PMTU +( + `ci_log +("%s:ew_pmtu=%deq_pmtu=%d if_mtu=%d", +__FUNCTION__ +, + +121 +pmtus +-> +pmtu +,mtu, +che +-> +mtu +)); + +122 + } +} + +129  + $ci_pmtu_upde_ +( +ci_tif +* +ni +, +ci_pmtu_e_t + * +pmtus +, + +130 +ci__ched_hdrs + * +che +, + +131  +pmtu +) + +133 + `ci_as_ge +( +pmtu +, +CI_CFG_TCP_MINIMUM_MSS +); + +134 + `ci_as_ +( +pmtu +, +CI_PMTU_MAX_MTU +); + +135 + `ci_as_ +( +pmtu +, +che +-> +mtu +); + +137 + `CI_PMTU_TIMER_KILL +( +ni +, +pmtus +); + +138 + `ci_pmtu_t +( +ni +, +pmtus +, +pmtu +); + +140 i( +pmtus +-> +pmtu + < +che +-> +mtu +) + +141 + `CI_PMTU_TIMER_SET_FAST +( +ni +, +pmtus +); + +143 + `LOG_PMTU +( + `ci_log +("%s:ew_pmtu=%deq_pmtu=%d if_mtu=%d", +__FUNCTION__ +, + +144 +pmtus +-> +pmtu +,mtu, +che +-> +mtu +)); + +145 + } +} + + @rwlock.c + +2  + ~ + +5  + $rwlock_n_adg +( +oo_rwlock_had + * +p +) + +7 +p +-> +xt +-> +ev + =->prev; + +8 +p +-> +ev +-> +xt + =->next; + +9 +p +-> +l +-> +v +--; + +10 + } +} + +14  + $rwlock__ad +( +oo_rwlock_had + * +p +) + +16 +ci_ut32 + +ags +; + +17  +locked + = 0; + +20 +ags + = +p +->flags; + +21 if~ +ags + & +OO_RWLOCK_KEY_IS_READER + ) { + +22 if +locked + ) + +23 + `CI_TRY + + `had_mux_uock +(& +p +-> +l +-> +mux +) ); + +26 if! +locked + ) { + +27 + `CI_TRY + + `had_mux_lock +(& +p +-> +l +-> +mux +) ); + +28 +locked + = 1; + +30 }  + `ci_s32u_ +(& +p +-> +ags +, flags, + +31 +ags + &~ +OO_RWLOCK_KEY_IS_READER +) ); + +33 + `rwlock_n_adg +( +p +); + +34 if +p +-> +l +-> +v + = +OO_RWLOCK_VAL_WRITER + ) + +35 + `had_cd_brd +(& +p +-> +l +-> +cd +); + +36 + `CI_TRY + + `had_mux_uock +(& +p +-> +l +-> +mux +) ); + +37 + } +} + +41  + $rwlock_had_dt +(* +da +) + +43  +oo_rwlock_had + * +p + = +da +; + +45 + `CI_TRY +( + `had_tecific +( +p +-> +l +-> +key +, +NULL +)); + +47 if +p +-> +ags + & +OO_RWLOCK_KEY_READING_NOW + ) { + +49 + `ci_log +("%s:x fromhad whhdgdock", +__func__ +); + +54 if +p +-> +ags + & +OO_RWLOCK_KEY_IS_READER + ) + +55 + `rwlock__ad +( +p +); + +57 + ` +( +p +); + +58 + } +} + +62  + $rwlock_y_t_ad +( +oo_rwlock_had + * +p +) + +64 +ci_ut32 + +ags +; + +66 + `ci_as +(~ +p +-> +ags + & +OO_RWLOCK_KEY_IS_READER +); + +69 if +p +-> +l +-> +v + & +OO_RWLOCK_VAL_WRITER + ) + +73 +ags + = +p +->flags; + +75 + `ci_as +~ +ags + & +OO_RWLOCK_KEY_IS_READER + ); + +76 + `ci_as +~ +ags + & +OO_RWLOCK_KEY_READING_NOW + ); + +77 }  + `ci_s32u_ +(& +p +-> +ags +, flags, + +78 +ags + + +79 | +OO_RWLOCK_KEY_IS_READER + + +80 | +OO_RWLOCK_KEY_READING_NOW +) ); + +81 +p +-> +l +-> +thad_hd +. +xt +-> +ev + =; + +82 +p +-> +xt + =-> +l +-> +thad_hd +.next; + +83 +p +-> +l +-> +thad_hd +. +xt + =; + +84 +p +-> +ev + = &p-> +l +-> +thad_hd +; + +86 +p +-> +l +-> +v +++; + +88 + } +} + +92  + $rwlock_r_ads +( +oo_rwlock + * +l +) + +94  +oo_rwlock_had + * +p +; + +95 +ci_ut32 + +ags +; + +99  +p + = +l +-> +thad_hd +. +xt +; != &l->thread_head; =->next ) { + +100 + `ci_as +( +p +-> +ags + & +OO_RWLOCK_KEY_IS_READER + ); + +102 +ags + = +p +->flags; + +103 if +ags + & +OO_RWLOCK_KEY_READING_NOW + ) + +105 }  + `ci_s32u_ +(& +p +-> +ags +, flags, + +106 +ags + &~ +OO_RWLOCK_KEY_IS_READER +) ); + +107 if~ +ags + & +OO_RWLOCK_KEY_READING_NOW + ) + +108 + `rwlock_n_adg +( +p +); + +113 if +l +-> +v + = +OO_RWLOCK_VAL_WRITER + ) + +114 + `had_cd_brd +(& +l +-> +cd +); + +115 + } +} + +119  + $rwlock_wrs_dec +( +oo_rwlock + * +l +,  +locked +) + +121 +ci_ut64 + +tmp +; + +125 + `ci_as +( +l +-> +v + & +OO_RWLOCK_VAL_WRITER +); + +128 +tmp + = +l +-> +wrs +; + +129 if +tmp + == 1 ) { + +130 if! +locked + ) + +131 + `CI_TRY + + `had_mux_lock +(& +l +-> +mux +) ); + +132 +locked + = 1; + +134 if +locked + ) { + +135 + `CI_TRY + + `had_mux_uock +(& +l +-> +mux +) ); + +136 +locked + = 0; + +138 }  + `ci_s64u_ +(& +l +-> +wrs +, +tmp +,mp - 1) ); + +139 + `ci_as_equiv +( +locked +, +tmp + == 1); + +143 if! +locked +) + +148 + `ci_as +( +l +-> +v + & +OO_RWLOCK_VAL_WRITER +); + +149 +l +-> +v + &=~ +OO_RWLOCK_VAL_WRITER +; + +150 + `had_cd_brd +(& +l +-> +cd +); + +151 + `CI_TRY + + `had_mux_uock +(& +l +-> +mux +) ); + +152 + } +} + + @save_fd.c + +14  + ~ + +15  + ~ + +16  + ~ + +17  + ~ + +18 #ifde +__lux__ + + +19  + ~ + +25 cڡ * + goo_devi_me +[] = + +27 #ifde +__sun__ + + +28 "/devis/pudo/" +EFAB_DEV_NAME + "@0:ctl" + +30 #ifde +__lux__ + + +31 "/dev/" +EFAB_DEV_NAME +, + +32 "/dev/" +OO_EPOLL_DEV_NAME + + +36 cڡ  + ge_iol +[ +OO_MAX_DEV +] = + +38 +OO_IOC_CLONE_FD +, + +39 #ifde +__lux__ + + +40 +OO_EPOLL_IOC_CLONE +, + +47  + gved_fd +[ +OO_MAX_DEV +]; + +48  + gfd_is_ved +[ +OO_MAX_DEV +]; + +51  + goo__rdev +[ +OO_MAX_DEV +]; + +55 +ci_le +  + $oo_ݒ +( +ci_fd_t +* +out +, +oo_devi_ty + +dev_ty +,  +ags +) { + +56 +ci_fd_t + + + = + `ci_sys_ݒ +( +oo_devi_me +[ +dev_ty +], +O_RDWR + | +ags +); + +57 if + + < 0 )  - +o +; + +58 * +out + = + +; + +60 + } +} + +63  + $ef_ld_hd_move_d_do_xec +( +ef_driv_hd +* +pfd +,  +do_xec +) + +65  +fd +; + +67 if +do_xec + ) + +68 +fd + = + `oo_f_dupfd_xec +(* +pfd +, +CITP_OPTS +. +fd_ba +); + +70 +fd + = + `ci_sys_f +(* +pfd +, +F_DUPFD +, +CITP_OPTS +. +fd_ba +); + +75 if +fd + >= 0 ) { + +76 + `ci_t_hr_o_no_ampޚe +(* +pfd +); + +77 * +pfd + = +fd +; + +81 + `LOG_NV +( + `ci_log +("%s: Failedo move fd from %d,c %d", + +82 +__func__ +, * +pfd +, +fd +)); + +85  +fd +; + +86 + } +} + +88  + $ef_ld_driv_ݒ +( +ef_driv_hd +* +pfd +, + +89 +oo_devi_ty + +dev_ty +, + +90  +do_xec +) + +92  +rc +; + +93  +ags + = 0; + +94  +ved_o + = +o +; + +96 #ifde +O_CLOEXEC + + +97 if +do_xec + ) + +98 +ags + = +O_CLOEXEC +; + +101 + `ci_as +( +pfd +); + +102 +rc + = + `oo_ݒ +( +pfd +, +dev_ty +, +ags +); + +103 if +rc + !0 && +o + ! +EMFILE + && +fd_is_ved +[ +dev_ty +] >= 0 ) { + +104 +ci_e_fd_t + + +; + +105 + +. +do_xec + = do_cloexec; + +106 + `LOG_NV +( + `ci_log +("%s: oed, buښg from saved fd", +__func__ +)); + +107 +rc + = + `ci_sys_iol +(( +ci_fd_t + +ved_fd +[ +dev_ty +], + +108 +e_iol +[ +dev_ty +], & + +); + +109 if +rc + < 0 ) + +110  +rc +; + +111 +o + = +ved_o +; + +112 * +pfd + = + +. +fd +; + +115 if +rc + != 0 ) + +116  +rc +; + +129 if* +pfd + < +CITP_OPTS +. +fd_ba + ) + +130 if + `ef_ld_hd_move_d_do_xec +( +pfd +, +do_xec +) == 0 ) + +133 if +do_xec + ) { + +134 #i + `defed +( +O_CLOEXEC +) + +135  +o_xec_s + = -1; + +136 if +o_xec_s + < 0 ) { + +137  +g +; + +138 +rc + = + `ci_sys_f +(*(*) +pfd +, +F_GETFD +, & +g +); + +139 if +rc + =0 && ( +g + & +FD_CLOEXEC +) ) + +140 +o_xec_s + = 0; + +142 +o_xec_s + = 1; + +145 cڡ  +o_xec_s + = 1; + +147 if +o_xec_s + ) + +148 + `CI_DEBUG_TRY +( + `ci_sys_f +(*(*) +pfd +, +F_SETFD +, +FD_CLOEXEC +)); + +152 + } +} + +155 #ifde +__unix__ + + +156  + $ef_driv_ve_fd +() + +158  +rc + = 0; + +159 +ef_driv_hd + +fd +; + +160 +oo_devi_ty + +dev_ty +; + +162  +dev_ty + = 0; dev_ty < +OO_MAX_DEV +; dev_type++ ) { + +163 if! +fd_is_ved +[ +dev_ty +] ) { + +164 +rc + = + `ef_ld_driv_ݒ +(& +fd +, +dev_ty +, 1); + +165 if +rc + == 0 ) { + +166 +ved_fd +[ +dev_ty +] = +fd +; + +167 +fd_is_ved +[ +dev_ty +] = 1; + +168 + `LOG_NV +( + `ci_log +("%s: Saved fd %d %s for cloning", + +169 +__func__ +, () +fd +, +oo_devi_me +[ +dev_ty +])); + +170 if +oo__rdev +[ +dev_ty +] <= 0 ) { + +171  + + + +; + +172 + `f +( +fd +, & + +); + +173 +oo__rdev +[ +dev_ty +] = + +. +_rdev +; + +176 + `ci_log +("%s: failedo open %s -c=%d", + +177 +__func__ +, +oo_devi_me +[ +dev_ty +], +rc +); + +181 + } +} + +184  + $oo_g__rdev +( +oo_devi_ty + +dev_ty +) + +186 if +oo__rdev +[ +dev_ty +] == 0 ) { + +187  + + + +; + +188 if + ` +( +oo_devi_me +[ +dev_ty +], & + +) == 0 ) + +189 +oo__rdev +[ +dev_ty +] = + +. +_rdev +; + +191 + `LOG_NV +( + `ci_log +("%s: ERROR: stats(%s) failedrrno=%d", + +192 +__func__ +, +oo_devi_me +[ +dev_ty +], +o +)); + +193 +oo__rdev +[ +dev_ty +] = -1; + +196  +oo__rdev +[ +dev_ty +]; + +197 + } +} + +200 +dev_t + + $oo_ldfs_dev_t +() + +202  +ci_ut32 + +ldfs_dev_t + = 0; + +204 if +ldfs_dev_t + == 0 ) { + +205  +fd +; + +206 if + `ef_ld_driv_ݒ +(& +fd +, +OO_STACK_DEV +, 1) != 0 ) { + +207 + `rtf +( +dr +, "%s: Faedݒ /dev/ld\n", +__FUNCTION__ +); + +210 if + `ci_sys_iol +( +fd +, +OO_IOC_GET_ONLOADFS_DEV +, & +ldfs_dev_t +) != 0 ) { + +211 + `LOG_E +( + `ci_log +("%s: Faedfd odfdev_t", +__FUNCTION__ +)); + +213 + `ci_sys_o +( +fd +); + +215  +ldfs_dev_t +; + +216 + } +} + + @signal.c + +14 #ifde +__unix__ + + +15  + ~"_.h +" + +16  + ~ + +17  + ~ + +18  + ~ + +19  + ~ + +20  + ~ + +22 #ifde +__KERNEL__ + + +28  +oo_sigai + + gcp_sigl_da +[ +NSIG +]; + +40 + $cp_sigl_run_p_hdr +( +sig +, +sigfo_t + * +fo +, * +cڋxt +) + +42  +oo_sigai + * +p_da + = & +cp_sigl_da +[ +sig +-1]; + +43  +oo_sigai + +a +; + +44 +ci_t32 + +ty1 +, +ty2 +; + +45  +t +; + +46 +_sigai_t + +hdr +; + +49 +ty1 + = +p_da +-> +ty +; + +50 +a + = * +p_da +; + +51 +ty2 + = +p_da +-> +ty +; + +52 }  +ty1 + ! +ty2 + || + +53 ( +ty1 + & +OO_SIGHANGLER_TYPE_MASK += +OO_SIGHANGLER_BUSY + ); + +64 +t + = +a +. +ags + & +SA_RESTART +; + +65 + `LOG_SIG +( + `log +("%s: signal %dype %dun handler %p flags %x", + +66 +__FUNCTION__ +, +sig +, +a +. +ty +, + `CI_USER_PTR_GET +. +hdr +), + +67 +a +. +ags +)); + +69 +hdr + = + `CI_USER_PTR_GET +( +a +.handler); + +70 + `ci_as +( +hdr +); + +71 + `ci_as_qu +( +hdr +, +cp_sigl_r +); + +72 + `ci_as +( +fo +); + +73 + `ci_as +( +cڋxt +); + +75 if( +a +. +ty + & +OO_SIGHANGLER_TYPE_MASK +! +OO_SIGHANGLER_USER + || + +76 ( +a +. +ags + & +SA_SIGINFO +) ) { + +77 (* +hdr +)( +sig +, +fo +, +cڋxt +); + +79 +__sighdr_t + +hdr1 + = (*) +hdr +; + +80 (* +hdr1 +)( +sig +); + +82 + `LOG_SIG +( + `log +("%s:ued from hd˸f sig%d:=%x", +__FUNCTION__ +, + +83 +sig +, +t +)); + +90 if( +a +. +ags + & +SA_ONESHOT +) && + +91 +a +. +ty + = +cp_sigl_da +[ +sig +-1].type ) { + +92  +sigai + + +; + +93 + `memt +(& + +, 0, (sa)); + +94 + +. +_hdr + = +SIG_DFL +; + +95 + +. +_ags + = +a +. +ags +; + +96 + `sigai +( +sig +, & + +, +NULL +); + +97 + `LOG_SIG +( + `log +("%s: SA_ONESHOT fixup", +__func__ +)); + +100  +t +; + +101 + } +} + +107  + $cp_sigl_run_ndg +( +cp_sigl_fo + * +our_fo +) + +111  +d_o + = +o +; + +112  +i +; + +114 + `LOG_SIG +( + `log +("%s: s", +__FUNCTION__ +)); + +115 + `ci_wmb +(); + +116 + `ci_as_equ +( +our_fo +-> +side_lib +, 0); + +117 + `ci_as +( +our_fo +-> +aags + & +OO_SIGNAL_FLAG_HAVE_PENDING +); + +119 + `ci_omic32_d +(& +our_fo +-> +aags +, ~ +OO_SIGNAL_FLAG_HAVE_PENDING +); + +120  +i + = 0; i < +OO_SIGNAL_MAX_PENDING +; i++ ) { + +121 +sigfo_t + +ved_fo +; + +122 * +ved_cڋxt +; + +123  +signum +; + +125 i( +our_fo +-> +sigls +[ +i +]. +signum + == 0) + +128 +ved_cڋxt + = +our_fo +-> +sigls +[ +i +].saved_context; + +129 if +our_fo +-> +sigls +[ +i +]. +ved_cڋxt + ) + +130 + `memy +(& +ved_fo +, & +our_fo +-> +sigls +[ +i +].saved_info, + +131 ( +ved_fo +)); + +132 +signum + = +our_fo +-> +sigls +[ +i +].signum; + +133 if + `ci_s32_ +(& +our_fo +-> +sigls +[ +i +]. +signum +, signum, 0) ) + +136 if + `cp_sigl_run_p_hdr +( + +137 +signum +, + +138 +ved_cڋxt + = +NULL + ? NULL : & +ved_fo +, + +139 +ved_cڋxt +) ) + +140 + `ci_omic32_ +(& +our_fo +-> +aags +, +OO_SIGNAL_FLAG_NEED_RESTART +); + +142 + `ci_omic32_d +(& +our_fo +-> +aags +, ~ +OO_SIGNAL_FLAG_NEED_RESTART +); + +144 + `LOG_SIG +( + `log +("%s:nd", +__FUNCTION__ +)); + +145 +o + = +d_o +; + +146 + } +} + +157 +ci_le +  + $cp_sigl_t_ndg +( +signum +, +sigfo_t + * +fo +, + +158 * +cڋxt +, + +159 +cp_sigl_fo + * +our_fo +) + +161  +i +; + +163 + `ci_as +( +our_fo +-> +side_lib +); + +165  +i + = 0; i < +OO_SIGNAL_MAX_PENDING +; i++ ) { + +166 if +our_fo +-> +sigls +[ +i +]. +signum + ) + +168 if + `ci_s32_ +(& +our_fo +-> +sigls +[ +i +]. +signum +, 0, signum) ) + +170 + `LOG_SIG +( + `log +("%s: sig%ddg", +__FUNCTION__ +, +signum +)); + +171 + `ci_as +( +fo +); + +172 + `ci_as +( +cڋxt +); + +173 + `memy +(& +our_fo +-> +sigls +[ +i +]. +ved_fo +, +fo +, ( +sigfo_t +)); + +174 +our_fo +-> +sigls +[ +i +]. +ved_cڋxt + = +cڋxt +; + +179 if +cp_sigl_da +[ +signum +-1]. +ags + & +SA_ONESHOT + ) + +180 + `sigai +( +signum +, +NULL +, NULL); + +182 + `ci_omic32_ +(& +our_fo +-> +aags +, +OO_SIGNAL_FLAG_HAVE_PENDING +); + +186 + `log +("%s:emy slفأndg sig%d", +__FUNCTION__ +, +signum +); + +187 + } +} + +195 +ci_le +  + $cp_sigl_run_now +( +signum +, +sigfo_t + * +fo +, + +196 * +cڋxt +, + +197 +cp_sigl_fo + * +our_fo +) + +199  +ed_t +; + +201 + `LOG_SIG +( + `log +("%s: SIGNAL %d -uimmedly", +__FUNCTION__ +, +signum +)); + +205 i( +our_fo + && (our_fo-> +aags + & +OO_SIGNAL_FLAG_HAVE_PENDING +)) + +206 + `cp_sigl_run_ndg +( +our_fo +); + +208 +ed_t + = + `cp_sigl_run_p_hdr +( +signum +, +fo +, +cڋxt +); + +213 i( +our_fo +) { + +214 + `LOG_SIG +( + `log +("%s: SIGNAL %d - sdeag%d", +__FUNCTION__ +, + +215 +signum +, +ed_t +)); + +216 if +ed_t + ) + +217 + `ci_omic32_ +(& +our_fo +-> +aags +, +OO_SIGNAL_FLAG_NEED_RESTART +); + +219 + `ci_omic32_d +(& +our_fo +-> +aags +, ~ +OO_SIGNAL_FLAG_NEED_RESTART +); + +221 + } +} + +228  + $cp_sigl_r +( +signum +, +sigfo_t + * +fo +, * +cڋxt +) + +230 +cp_sigl_fo + * +our_fo + = + `cp_sigl_g_ecific_ed +(); + +231 + `LOG_SIG +( + `log +("%s(%d, %p, %p)", +__func__ +, +signum +, +fo +, +cڋxt +)); + +239 i( +our_fo + && our_fo-> +side_lib + && + +240 ( +CITP_OPTS +. +sigls_no_pope + & (1 << ( +signum +-1))) == 0) + +241 + `cp_sigl_t_ndg +( +signum +, +fo +, +cڋxt +, +our_fo +); + +243 + `cp_sigl_run_now +( +signum +, +fo +, +cڋxt +, +our_fo +); + +244 + } +} + +248  + $cp_sigl_rme +( +signum +, +sigfo_t + * +fo +, * +cڋxt +) + +250  +fd +; + +251  +rc +; + +254 +rc + = + `ef_ld_driv_ݒ +(& +fd +, +OO_STACK_DEV +, 1); + +259 if +rc + == 0 ) + +260 + `oo_sour_ +( +fd +, +OO_IOC_DIE_SIGNAL +, & +signum +); + +262 + `_ex +(128 + +signum +); + +263 + } +} + +266 * + gcp_sigl_ܔ +; + +267  + gcp_sigl_ܔ_ed + = 0; + +269 #ide +SA_RESTORER + + +271  + #SA_RESTORER + 0x04000000 + + ) + +274 * + $cp_sigl_ܔ_g +() + +276  +sig + = +SIGINT +; + +277  +sigai + +a +; + +278  +rc +; + +280 if +cp_sigl_ܔ_ed + ) + +281  +cp_sigl_ܔ +; + +283 + `LOG_SIG +( + `log +("%s: citp_signal_intercept=%p", + +284 +__func__ +, +cp_sigl_r +)); + +285 + `LOG_SIG +( + `log +("%s: cp_sigl_rme=%p", +__func__ +, + +286 +cp_sigl_rme +)); + +287  +sig + = 1; sig < +_NSIG +; sig++ ) { + +288 + `LOG_SIG +( + `log +("fd sa_ܔ v sig%d", +sig +)); + +290 +rc + = + `sigai +( +sig +, +NULL +, & +a +); + +291 if +rc + != 0 ) + +293 if +a +. +_ܔ + ! +NULL + && (a. +_ags + & +SA_SIGINFO +) ) { + +294 +cp_sigl_ܔ + = +a +. +_ܔ +; + +295 + `LOG_SIG +( + `ci_log +("%s: iny cp_sigl_ܔ=%p", +__func__ +, + +296 +cp_sigl_ܔ +)); + +297 +cp_sigl_ܔ_ed + = 1; + +298  +cp_sigl_ܔ +; + +302 if +a +. +_hdr + ! +SIG_IGN + &&._hd˸! +SIG_DFL + ) + +305 + `LOG_SIG +( + `ci_log +("%s:-sigfا_ܔ=%p", +__func__ +, + +306 +a +. +_ܔ +)); + +308 +a +. +_ags + | +SA_SIGINFO +; + +309 +rc + = + `sigai +( +sig +, & +a +, +NULL +); + +310 if +rc + != 0 ) + +313 +rc + = + `sigai +( +sig +, +NULL +, & +a +); + +314 if +rc + == 0 ) { + +315 +cp_sigl_ܔ_ed + = 1; + +316 + `LOG_SIG +( + `ci_log +("%s: set/get flags %x citp_signal_sarestorer=%p", + +317 +__func__ +, +a +. +_ags +,. +_ܔ +)); + +318 if!( +a +. +_ags + & +SA_RESTORER +) ) + +319  +NULL +; + +320 +cp_sigl_ܔ + = +a +. +_ܔ +; + +321  +cp_sigl_ܔ +; + +325  +NULL +; + +326 + } +} + +329 +_sigai_t + + gcp_sigl_hdrs +[ +OO_SIGHANGLER_DFL_MAX ++1] = { + +330 +cp_sigl_rme + , + +331 +NULL +, NULL + +336  + $oo_lo_run_ndg_sigs +( +ci_tif +* +ni +, +cp_waab +* +w +, + +337 +cp_sigl_fo +* +si +,  +have_timeout +) + +339  +side_lib +; + +340 if +have_timeout + ) + +341  - +EINTR +; + +342 if +w + ) + +343 + `ci_sock_uock +( +ni +, +w +); + +344 +side_lib + = +si +->inside_lib; + +345 +si +-> +side_lib + = 0; + +346 + `ci_comp_brr +(); + +347 + `cp_sigl_run_ndg +( +si +); + +348 +si +-> +side_lib + = inside_lib; + +349 + `ci_comp_brr +(); + +350 if +w + ) + +351 + `ci_sock_lock +( +ni +, +w +); + +352 if~ +si +-> +aags + & +OO_SIGNAL_FLAG_NEED_RESTART + ) + +354  - +EINTR +; + +356 + } +} + + @sockerr.c + +14  + ~"_.h +" + +19  + $ci_rq_udp_dump + +ci_udp_e +* +us + ) + +21  +r +; + +22 + `ci_log +"Dumorqred iUDP s %p", +us + ); + +23 + `ci_log +"Rd:%d Wr:%d En:%d O:%u (Fl:%d Emp:%d)", +us +-> +rq +. +rd +, us->rq. +wr +, + +24 +us +-> +rq +. +abd +, us->rq. +oow +, + +25 + `CI_UDP_ERRQ_IS_FULL +& +us +-> +rq + ), + +26 + `CI_UDP_ERRQ_IS_EMPTY +& +us +-> +rq + )); + +27  +r + = 0; c < +CI_ERRQ_UDP_ERR_MAX +; ctr++ ) { + +28 + `ci_log +("%02u: Rdy:%u %s%s", +r +, +us +-> +rq +. +r +[r]. +ady +, + +29 +r + = +us +-> +rq +. +rd + ? "R" : "", c =us->rq. +wr + ? "W" : "" ); + +30 if +us +-> +rq +. +r +[ +r +]. +ady + ) { + +31 + `ci_log +(" Err:%u Org:%u Typ:%u Cod:%u", + +32 +us +-> +rq +. +r +[ +r +]. +e +.r, us->rq.r[r].e. +ig +, + +33 +us +-> +rq +. +r +[ +r +]. +e +. +ty +, us->rq.r[r].e. +code + ); + +34 + `ci_log +(" Pad:%u Inf:%u Dat:%u", + +35 +us +-> +rq +. +r +[ +r +]. +e +. +d +, us->rq.r[r].e. +fo +, + +36 +us +-> +rq +. +r +[ +r +]. +e +. +da + ); + +37 + `ci_log +(" sa: %x:%u", + +38 +us +-> +rq +. +r +[ +r +]. +e +. +_addr +, + +39 +us +-> +rq +. +r +[ +r +]. +e +. +_pt +); + +42 + } +} + +44  + $ci_rq_t_dump + +ci_t_e +* +ts + ) + +46  +r +; + +47 + `ci_log +"Dumorqred iTCP s %p", +ts + ); + +48 + `ci_log +"Rd:%d Wr:%d O:%u (Fl:%d Emp:%d)", +ts +-> +rq +. +rd +,s->rq. +wr +, + +49 +ts +-> +rq +. +oow +, + `CI_TCP_ERRQ_IS_FULL +( &ts->errq ), + +50 + `CI_TCP_ERRQ_IS_EMPTY +& +ts +-> +rq + )); + +51  +r + = 0; c < +CI_ERRQ_TCP_ERR_MAX +; ctr++ ) { + +52 + `ci_log +("%02u: Rdy:%u %s%s", +r +, +ts +-> +rq +. +r +[r]. +ady +, + +53 +r + = +ts +-> +rq +. +rd + ? "R" : "", c =ts->rq. +wr + ? "W" : "" ); + +54 if +ts +-> +rq +. +r +[ +r +]. +ady + ) { + +55 + `ci_log +(" Seq:%u Org:%u Err:%u", + +56 +ts +-> +rq +. +r +[ +r +]. +q_be32 +,s->rq.r[r]. +ig +, + +57 +ts +-> +rq +. +r +[ +r +].err ); + +60 + } +} + +62  + $ci_rq_dump + +ci_udp_e +* +us + ) { + +63 + `ci_as + +us + ); + +64 + `LOG_IPP + + `ci_rq_t_dump + +us + ); + +65 + `ci_rq_udp_dump + +us + ) ); + +66 + } +} + + @socket.c + +13  + ~"_.h +" + +16  + $ci_sock_cmn_ +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +) + +18 +s +-> +so_r + = 0; + +20 #i + `defed +( +__lux__ +|| defed( +_WIN32 +) + +21 +s +-> +tx_o + = +EPIPE +; + +22 #i + `defed +( +__sun__ +) + +23 +s +-> +tx_o + = +ENOTCONN +; + +28 +s +-> +rx_o + = +ENOTCONN +; + +29 +s +-> +pkt +. +h_ty + = +CI_ETHERTYPE_IP +; + +30 + `ci__che_ +(& +s +-> +pkt +); + +32 +s +-> +s_ags + &~( +CI_SOCK_FLAG_FILTER + | +CI_SOCK_FLAG_MAC_FILTER +); + +33 + } +} + +36 #ifde +_WIN32 + + +37  + $ci_sock_cmn__w32 +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +) + +39  +dex +; + +40  +dex + = 0; index < +CI_SOCK_NUM_EVENT_TRIGGERS +; index++) + +41 + `oo_omic_t +(& +s +-> +igg_med_mask +[ +dex +], +CI_EV_NONE +); + +42 +s +-> +evl_mask + = +CI_EV_NONE +; + +43 +s +-> +evl_med_mask + = +CI_EV_NONE +; + +44 +s +-> +evl_dibd_mask + = +CI_EV_NONE +; + +45 +s +-> +os_gied + = +CI_OS_NOT_REGISTERED +; + +46 + } +} + +50  + $oo_sock__ +( +oo_sock_ +* + +) + +52 + +-> +_ddr_be32 + = 0; + +53 + +-> +t_be16 + = 0; + +54 + +-> +so_bdtodevi + = +CI_IFID_BAD +; + +55 + +-> +_mui_if + = +CI_IFID_BAD +; + +56 + +-> +_mui_if_ddr_be32 + = 0; + +57 + +-> +_l + = +CI_IP_DFLT_TTL +; + +58 + +-> +_m_l + = 1; + +59 + +-> +sock__ags + = 0; + +60 + } +} + +63  + $ci_sock_cmn_ +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +,  +n_pois +) + +65 +oo_p + + +; + +68 + `CI_DEBUG +( + +69 if +n_pois + ) + +70 + `memt +(& +s +-> +b + + 1, 0xf0, (*) (s + 1) - (*) (&s->b + 1)); + +73 + `cp_waab_ +( +ni +, & +s +-> +b +); + +74 + `oo_sock__ +(& +s +-> + +); + +76 +s +-> +s_ags + = +CI_SOCK_FLAG_CONNECT_MUST_BIND + | +CI_SOCK_FLAG_PMTU_DO +; + +77 +s +-> +s_aags + = 0u; + +79 + `ci_as_equ +0, +CI_IP_DFLT_TOS + ); + +80 +s +-> +so_iܙy + = 0; + +85 + `memt +(& +s +-> +so +, 0, (s->so)); + +86 +s +-> +so +. +dbuf + = + `NI_OPTS +( +ni +). +t_dbuf_def +; + +87 +s +-> +so +. +rcvbuf + = + `NI_OPTS +( +ni +). +t_rcvbuf_def +; + +89 +s +-> +rx_bd2dev_ifdex + = +CI_IFID_BAD +; + +94 +s +-> +rx_bd2dev_ba_ifdex + = 0; + +95 +s +-> +rx_bd2dev_vn + = 0; + +97 +s +-> +cmsg_ags + = 0u; + +98 +s +-> +timeampg_ags + = 0u; + +99 +s +-> +os_sock_us + = +OO_OS_STATUS_TX +; + +101 #ifde +_WIN32 + + +102 + `ci_sock_cmn__w32 +( +ni +, +s +); + +105 + `ci_sock_cmn_ +( +ni +, +s +); + +107 + + = + `oo_sockp_to_ +( +ni +, + `SC_SP +( +s +)); + +108 + `OO_P_ADD +( + +, + `CI_MEMBER_OFFSET +( +ci_sock_cmn +, +_lk +)); + +109 + `ci_ni_di_lk_ +( +ni +, & +s +-> +_lk +, + +, "reap"); + +110 + `ci_ni_di_lf_lk +( +ni +, & +s +-> +_lk +); + +113 + `sock_ddr_be32 +( +s + + `sock_ddr_be32 +(s) = 0; + +114 + `sock_t_be16 +( +s + + `sock_t_be16 +(s) = 0; + +115 + } +} + +118 #ifde +_WIN32 + + +119  + $ci_sock_cmn_dump_w32 +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +, + +120 cڡ * +pf +, + +121 +oo_dump_log__t + +logg +, * +log_g +) + +123  +tmp +; + +124  +i +; + +126 +tmp + = + `ci_sock_cmn_g_cut_evt_mask +( +ni +, +s +); + +127 + `logg +( +log_g +, "%vts:ive=" +CI_EVMASK_FMT +, +pf +, + +128 + `CI_EVMASK_PRI_ARG +( +tmp +)); + +129  +i + = 0; i < +CI_SOCK_NUM_EVENT_TRIGGERS +; i++) { + +130 +tmp + = + `oo_omic_ad +(& +s +-> +igg_med_mask +[ +i +]); + +131 i( +tmp + + `logg +( +log_g +, "%rg[%d]=" +CI_EVMASK_FMT +, +pf +, +i +, + +132 + `CI_EVMASK_PRI_ARG +( +tmp +)); + +134 +tmp + = +s +-> +evl_mask +; + +135 i( +tmp +) + +136 + `logg +( +log_g +, "%vsmsk=" +CI_EVMASK_FMT +, + +137 +pf +, + `CI_EVMASK_PRI_ARG +( +tmp +)); + +138 +tmp + = +s +-> +evl_med_mask +; + +139 i( +tmp +) + +140 + `logg +( +log_g +, "%rmmsk=" +CI_EVMASK_FMT +, + +141 +pf +, + `CI_EVMASK_PRI_ARG +( +tmp +)); + +142 +tmp + = +s +-> +evl_dibd_mask +; + +143 i( +tmp +) + +144 + `logg +( +log_g +, "% dismsk=" +CI_EVMASK_FMT +, + +145 +pf +, + `CI_EVMASK_PRI_ARG +( +tmp +)); + +146 + } +} + +150  + $ci_sock_cmn_dump +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +, cڡ * +pf +, + +151 +oo_dump_log__t + +logg +, * +log_g +) + +153 #ifde +_WIN32 + + +154 + `ci_sock_cmn_dump_w32 +( +ni +, +s +, +pf +, +logg +, +log_g +); + +156 + `logg +( +log_g +, "% uid=%d" + `CI_DEBUG +("id=%d") + +157 " s_ags: " +CI_SOCK_FLAGS_FMT +, +pf +, + +158 ( +s +-> +uid + + `CI_DEBUG_ARG +(()s-> +pid +), + +159 + `CI_SOCK_FLAGS_PRI_ARG +( +s +)); + +160 + `logg +( +log_g +, "%cvbuf=%d sndbuf=%d bdtodev=%d(%d,%d:%dl=%d", +pf +, + +161 +s +-> +so +. +rcvbuf +, s->so. +dbuf +, s-> + +. +so_bdtodevi +, + +162 +s +-> +rx_bd2dev_ifdex +, s-> +rx_bd2dev_ba_ifdex +, + +163 +s +-> +rx_bd2dev_vn +, s-> + +. +_l +); + +164 + `logg +( +log_g +, "%scvtimeo_ms=%d sndtimeo_ms=%d sigown=%d " + +165 "cmsg=" +OO_CMSG_FLAGS_FMT +"%s", + +166 +pf +, +s +-> +so +. +rcvtimeo_mc +, s->so. +dtimeo_mc +, s-> +b +. +sigown +, + +167 + `OO_CMSG_FLAGS_PRI_ARG +( +s +-> +cmsg_ags +), + +168 ( +s +-> + +. +sock__ags + & +OO_SCP_NO_MULTICAST +) ? " NO_MCAST_TX":""); + +169 + `logg +( +log_g +, "%x_o=%xx_o=%x so_r=%d os_sock=%u%s%s", +pf +, + +170 +s +-> +rx_o +, s-> +tx_o +, s-> +so_r +, + +171 +s +-> +os_sock_us + >> +OO_OS_STATUS_SEQ_SHIFT +, + +172 ( +s +-> +os_sock_us + & +OO_OS_STATUS_RX +) ? ",RX":"", + +173 ( +s +-> +os_sock_us + & +OO_OS_STATUS_TX +) ? ",TX":""); + +175 if +s +-> +b +. +ady_li_id + > 0 ) + +176 + `logg +( +log_g +, "%spoll3:eady_list_id %dpoll_pid %d", + +177 +pf +, +s +-> +b +. +ady_li_id +, s->b. +eem_pid +); + +179 + `logg +( +log_g +, "%pl3:dy_li_id %d", +pf +, +s +-> +b +. +ady_li_id +); + +180 + } +} + + @syscall.c + +16  + #_GNU_SOURCE + + + ) + +17 #i +defed + +__unix__ + + +18  + ~ + +21  + ~ + +22  + ~ + +26 #i +defed +( +__unix__ +) + +27  + ~ + +29  + #CI_MK_DECL +( +t +, + +, +gs + + `t + (* +ci_sys_ +##g + ) +fn + +30  + ~ + + @tcp_close.c + +15  + ~"_.h +" + +16 #i +defed +( +__lux__ +&& defed( +__KERNEL__ +) + +17  + ~ + +19  + ~ + +20  + ~ + +22  + #LPF + "t_o: " + + ) + +27  + $__ci_t_li_to_nm +( +ci_tif +* +tif +, +ci_t_sock_li +* +s +) + +29 +cp_waab_obj +* +wo + = + `SOCK_TO_WAITABLE_OBJ +(& +s +-> +s +); + +31 + `ci_as +( +s +-> +n_liq + == 0); + +32 + `ci_as_equ +( + `ci_t_acq_n +( +s +), 0); + +33 + `ci_as_equ +( + `ci_t_acq_n_emy +( +s +), 0); + +35 if~ +s +-> +s +. +s_ags + & +CI_SOCK_FLAG_BOUND_ALIEN + ) + +36 + `ci__tim_r +( +tif +, & +s +-> +liq_tid +); + +37 + `ci_ni_di_move_ +( +tif +, & +s +-> +s +. +b +. +po_pl_lk +); + +38 + `ci_t_e_ +( +tif +, & +wo +-> +t +); + +39 + } +} + +42  + $ci_t_add_f +( +ci_t_e +* +ts +, +ci_tif +* +tif +) + +44 +ci__pkt_queue +* +ndq + = & +ts +-> +nd +; + +45 +ci__pkt_fmt +* +pkt +; + +46 +ci_t_hdr + * +t_hdr +; + +48 + `ci_as +( + `ci_tif_is_locked +( +tif +)); + +50 + `LOG_TC +( + `log +( +FNTS_FMT + "ndq_num=%d ck=%d", + `FNTS_PRI_ARGS +( +tif +, +ts +), + +51 +ndq +-> +num +, !!( +ts +-> +s +. +s_aags + & +CI_SOCK_AFLAG_CORK +))); + +53 if +ndq +-> +num + ) { + +55 +pkt + = + `PKT_CHK +( +tif +, +ndq +-> + +); + +56 +t_hdr + = + `TX_PKT_TCP +( +pkt +); + +57 +t_hdr +-> +t_ags + | +CI_TCP_FLAG_FIN +; + +58 + `t_q_nxt +( +ts +) += 1; + +59 +pkt +-> +pf +. +t_tx +. +d_q + = + `t_q_nxt +( +ts +); + +60 if + `SEQ_LE +( +pkt +-> +pf +. +t_tx +. +d_q +, +ts +-> +d_max +) ) + +64 + `ci_t_tx_adv +( +ts +, +tif +); + +68 #ifde +__KERNEL__ + + +75 +pkt + = + `ci_tif_pkt_loc +( +tif +); + +78  +is_locked + = 1; + +79  +rc + = + `ci_tif_pkt_loc_block +( +tif +, & +ts +-> +s +, & +is_locked +, + +80 +CI_TRUE + , & +pkt +); + +82 () +rc +; + +83 + `ci_as_equ +( +rc +, 0); + +84 -- +tif +-> +e +-> +n_async_pkts +; + +85 i( +is_locked + == 0) + +86 + `ci_tif_lock +( +tif +); + +87 + `ci_as +( +pkt + ! +NULL +); + +91 if +pkt + ) + +92 + `ci_t_queue_no_da +( +ts +, +tif +, +pkt +); + +94 + `LOG_U +( + `log +( +LNTS_FMT + "%s: out ofkt bufs", + +95 + `LNTS_PRI_ARGS +( +tif +, +ts +), +__FUNCTION__ +)); + +96  +ENOBUFS +; + +99 + } +} + +102  + $__ci_t_shutdown +( +ci_tif +* +tif +, +ci_t_e +* +ts +,  +how +) + +104  +rc +; + +113 + `ci_as +( +tif +); + +114 + `ci_as +( +ts +); + +115 + `ci_as +( + `ci_tif_is_locked +( +tif +)); + +117 #i +CI_CFG_PIO + + +119 if +how + = +SHUT_WR + || how = +SHUT_RDWR + ) + +120 + `ci_t_tm__l +( +tif +, +ts +); + +126 if +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_NOT_CONNECTED + ) { + +127  +ts +-> +s +. +b +. +e + ) { + +128  +CI_TCP_SYN_SENT +: + +129 + `ci_t_dr +( +tif +, +ts +, +ECONNRESET +); + +130 +ts +-> +s +. +rx_o + = +ENOTCONN +; + +133  +CI_TCP_CLOSING +: + +134  +CI_TCP_LAST_ACK +: + +139  - +ENOTCONN +; + +144 if +how + = +SHUT_RD + ) { + +145 +ts +-> +s +. +rx_o + = +CI_SHUT_RD +; + +146 + `ci_t_wake_n__pl +( +tif +, +ts +, +CI_SB_FLAG_WAKE_RX +); + +152 if +ts +-> +s +. +tx_o + != 0 ) { + +153 if +how + = +SHUT_RDWR + ) { + +154 +ts +-> +s +. +rx_o + = +CI_SHUT_RD +; + +155 + `ci_t_wake_n__pl +( +tif +, +ts +, +CI_SB_FLAG_WAKE_RX +); + +163 + `ci_t_t_ags +( +ts +, +CI_TCP_FLAG_FIN + | +CI_TCP_FLAG_ACK +); + +164 if +ts +-> +s +. +b +. +e + = +CI_TCP_CLOSE_WAIT + ) + +165 + `ci_t_t_ow_e +( +tif +, +ts +, +CI_TCP_LAST_ACK +); + +167 + `ci_t_t_ow_e +( +tif +, +ts +, +CI_TCP_FIN_WAIT1 +); + +169 #i +CI_CFG_FD_CACHING + + +170 if +ts +-> +s +. +b +. +sb_aags + & ( +CI_SB_AFLAG_ORPHAN + | +CI_SB_AFLAG_IN_CACHE +) ) + +172 if +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_ORPHAN + ) + +174 + `ci_tif_f_timeout_r +( +tif +, +ts +); + +176 if +how + = +SHUT_RDWR + ) + +177 +ts +-> +s +. +rx_o + = +CI_SHUT_RD +; + +178 +ts +-> +s +. +tx_o + = +EPIPE +; + +181 if( +rc + = + `ci_t_add_f +( +ts +, +tif +)) != 0 ) { + +182 + `LOG_E +( + `ci_log +("%s: faedؒqueuFIN, %d", +__FUNCTION__ +, +rc +)); + +192 + `ci_t_dr +( +tif +, +ts +, 0); + +193 + `CITP_STATS_NETIF_INC +( +tif +, +t_dr__f +); + +196 + `ci_t_wake_n__pl +( +tif +, +ts +, + +197 +CI_SB_FLAG_WAKE_TX + | + +198 ( +how + = +SHUT_RDWR + ? +CI_SB_FLAG_WAKE_RX + : 0)); + +200 + } +} + +203 #i +CI_CFG_FD_CACHING + + +204 #ifde +__KERNEL__ + + +205  + ~ + +209  + $unche_fd +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +211  +fd + = +ts +-> +ched__fd +; + +212  +pid + = +ts +-> +ched__pid +; + +213 + `LOG_EP +( + `ci_log +("Unchg fd %d opid %dušgid %d:%s", +fd +, + +214 +pid +, +cut +-> +tgid +, cut-> +comm +)); + +216 + `ci_as +( +cut +); + +217 if!( +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_IN_CACHE_NO_FD +) && + +218 (~ +cut +-> +ags + & +PF_EXITING +) ) { + +231  +fe +* +fp +; + +233 if +cut +-> +fes + ! +NULL + ) { + +234 if +pid + ! +cut +-> +tgid + ) { + +235 + `NI_LOG +( +ni +, +RESOURCE_WARNINGS +, + +236 "%s:id mismch: cached__pid=%d cut=%d:%s", +__func__ +, + +237 +pid +, +cut +-> +tgid +, cut-> +comm +); + +239 if( +fp + = + `fg +( +fd +)= +NULL + ) { + +240 + `NI_LOG +( +ni +, +RESOURCE_WARNINGS +, + +242 +__func__ +, +fd +, +pid +); + +244 if +fp +-> +f_ + !& +lux_t_hr_fs_t + ) { + +245 + `NI_LOG +( +ni +, +RESOURCE_WARNINGS +, + +247 +__func__ +, +fd +, +pid +); + +248 + `ut +( +fp +); + +251 + `ut +( +fp +); + +252 + `eb_lux_sys_o +( +fd +); + +257 + `ci_log +("%s: called from workqueue - cannot close file descriptor %d.", + +258 +__func__ +, +fd +); + +259 + `ci_as +(0); + +262 + } +} + +264 +ci_le +  + $r_ched_e +( +ci_t_e + * +ts +) + +266 + `ci_omic32_d +(& +ts +-> +s +. +b +. +sb_aags +, + +267 ~( +CI_SB_AFLAG_IN_CACHE +| +CI_SB_AFLAG_IN_PASSIVE_CACHE +)); + +268 +ts +-> +ched__fd + = -1; + +269 +ts +-> +ched__pid + = -1; + +270 + } +} + +288  + $unche_ +( +ci_tif + * +tif +, +ci_t_sock_li +* +s +, + +289 +ci_t_e + * +ts +) + +291 + `LOG_EP +( + `ci_log +("Unchg%d", + `S_FMT +( +ts +))); + +292 + `ci_as + + `ci_t_is_ched +( +ts +) ); + +294 + `ci_ni_di_lk_as_vid +( +tif +, & +ts +-> +che_lk +); + +295 + `ci_ni_di_move_ +( +tif +, & +ts +-> +che_lk +); + +305 i( +ts +-> +s +. +b +. +e + = +CI_TCP_CLOSED +) + +306 + `ci_t__r_frs +( +tif +, + `S_SP +( +ts +), 0); + +311 i + `ci_t_is_timeout_ph +( +ts +) ) + +312 + `ci_tif_timeout_move +( +tif +, +ts +); + +314 + `r_ched_e +( +ts +); + +325 if + `ci_b__d_t +(& +ts +-> +s +. +b +. +sb_aags +, +CI_SB_AFLAG_IN_CACHE_NO_FD_BIT +) ) + +326 + `eb_t_hr_o_dpot +( + `tif2t_hr_sour +( +tif +), + `S_SP +( +ts +)); + +328 if +s + ) { + +329 + `ci_omic32_c +((vީ +ci_ut32 +*) + +330 + `CI_NETIF_PTR +( +tif +, +s +-> +che +. +ava_ack +)); + +331 + `ci_omic32_c +(& +s +-> +che_ava_sock +); + +333 + `ci_as_ +( +tif +-> +e +-> +ssive_che_ava_ack +, + +334 +tif +-> +e +-> +ts +. +sock_che_max +); + +335 + `ci_as_ +( +s +-> +che_ava_sock +, + +336 +tif +-> +e +-> +ts +. +r_sock_che_max +); + +339 +ci_tif_e +* +ns + = +tif +-> +e +; + +340 + `ci_omic32_c +(& +ns +-> +aive_che_ava_ack +); + +341 + `ci_as_ +( +ns +-> +aive_che_ava_ack +,s-> +ts +. +sock_che_max +); + +343 + } +} + +351 + $unche__li +( +ci_tif + * +tif +, +ci_t_sock_li +* +s +, + +352 +ci_ni_di_t + * +thi +) + +354 +ci_ni_di_lk +* +l + = + `ci_ni_di_t +( +tif +, +thi +); + +355 + `ci_as +( + `ci_tif_is_locked +( +tif +)); + +356  +l + ! + `ci_ni_di_d +( +tif +, +thi +) ) { + +357 +ci_t_e +* +ched_e + = + `CI_CONTAINER +(ci_t_e, +che_lk +, +l +); + +358 + `ci_ni_di_ +( +tif +, +l +); + +359 + `ci_as +( +ched_e +); + +360 + `ci_as +( + `ci_t_is_ched +( +ched_e +)); + +361 + `ci_ni_di_lk_as_vid +( +tif +, & +ched_e +-> +che_lk +); + +362 + `unche_ +( +tif +, +s +, +ched_e +); + +364 + } +} + +374  + $ci_t_li_unche_fds +( +ci_tif +* +tif +, +ci_t_sock_li +* +s +) + +376 +ci_ni_di_lk +* +l + = + `ci_ni_di_ccut_t +( +tif +, + +377 & +s +-> +che +. +fd_es +); + +378  +l + ! + `ci_ni_di_d +( +tif +, & +s +-> +che +. +fd_es +) ) { + +379 +ci_t_e +* +ched_e + = + `CI_CONTAINER +(ci_t_e, +che_fd_lk +, +l +); + +380 + `ci_ni_di_ +( +tif +, +l +); + +389 + `ci_as +( +ched_e +); + +390 + `ci_as +( + `ci_t_is_ched +( +ched_e +)); + +391 + `unche_fd +( +tif +, +ched_e +); + +393 + } +} + +397  + $ci_t_che_dr_che +( +ci_tif +* +ni +) + +399  +id +; + +400 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +401  +id + = 0; id < +ni +-> +e +-> +n__bufs +; ++id ) { + +402 +cp_waab_obj +* +wo + = + `ID_TO_WAITABLE_OBJ +( +ni +, +id +); + +403 if +wo +-> +waab +. +e + = +CI_TCP_LISTEN + ) { + +404 +cp_waab +* +w + = & +wo +-> +waab +; + +405 +ci_sock_cmn +* +s + = + `CI_CONTAINER +(ci_sock_cmn, +b +, +w +); + +406 +ci_t_sock_li +* +s + = + `SOCK_TO_TCP_LISTEN +( +s +); + +407 + `ci_t_li_unche_fds +( +ni +, +s +); + +408 + `unche__li +( +ni +, +s +, &s-> +che +. +ndg +); + +409 + `unche__li +( +ni +, +s +, &s-> +che +. +che +); + +412 + } +} + +415  + $ci_t_aive_che_dr_che +( +ci_tif +* +ni +) + +417 +ci_tif_e +* +ns + = +ni +-> +e +; + +418 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +419 + `unche__li +( +ni +, +NULL +, & +ns +-> +aive_che +. +ndg +); + +420 + `unche__li +( +ni +, +NULL +, & +ns +-> +aive_che +. +che +); + +421 + } +} + +427 #i +CI_CFG_FD_CACHING + || +defed +( +__KERNEL__ +) + +429 #ide +__KERNEL__ + + +434  + $ci_t_lg +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +442 +ci_ut64 + +p_q +; + +443  +rc + = 0; + +444 +ci_ut32 + +timeout + = +ts +-> +s +. +so +. +lg + * 1000; + +445  +ags + = +CI_SLEEP_NETIF_LOCKED +; + +447 + `LOG_TC +( + `log +("%s: " +NTS_FMT +, +__FUNCTION__ +, + `NTS_PRI_ARGS +( +ni +, +ts +))); + +449 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +450 #ide +__KERNEL__ + + +451 + `ci_as +( +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_IN_CACHE +); + +453 + `ci_as +( +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_LINGER +); + +454 + `ci_as +( +ts +-> +s +. +b +. +e + ! +CI_TCP_LISTEN +); + +457 +p_q + = +ts +-> +s +. +b +.p_q. +l +; + +458 + `ci_rmb +(); + +459 if + `SEQ_EQ +( + `t_q_nxt +( +ts +), + `t_d_u +(ts)) ) { + +462 +rc + = + `ci_sock_p +( +ni +, & +ts +-> +s +. +b +, +CI_SB_FLAG_WAKE_TX +, +ags +, + +463 +p_q +, & +timeout +); + +464 +ags + = 0; + +465 if +rc + ) + +468 if +ags + ) + +469 + `ci_tif_uock +( +ni +); + +470 + } +} + +472 #i +defed +( +__KERNEL__ +) + +475  + $ci_t_o +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +477 + `ci_as +( +tif +); + +478 + `ci_as +( +ts +); + +479 + `ci_as +( + `ci_tif_is_locked +( +tif +)); + +480 + `ci_as +( +ts +-> +s +. +b +. +e + ! +CI_TCP_LISTEN +); + +482 if +ts +-> +s +. +b +. +e + = +CI_TCP_CLOSED + ) { + +483 + `LOG_TV +( + `ci_log +( +LPF + "%d CLOSE̗dy clod", + `S_FMT +( +ts +))); + +485 + `ci_t__r_frs +( +tif +, + `S_SP +( +ts +), 0); + +486 if +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_ORPHAN + ) + +487 + `ci_t_e_ +( +tif +, +ts +); + +491 if( +ts +-> +s +. +b +. +sb_ags + & +CI_SB_FLAG_MOVED +) ) + +492  +dr +; + +494 if + `t_rcv_u +( +ts +) != 0 ) { + +498 + `CI_TCP_EXT_STATS_INC_TCP_ABORT_ON_CLOSE +( +tif +); + +499 + `LOG_TV +( + `log +( +LPF + "%d CLOSE sent RST,sx dataresentdded %u " + +500 "dived %u_rcv_u=%u", + `S_FMT +( +ts +),s-> +rcv_added +, + +501 +ts +-> +rcv_dived +, + `t_rcv_u +(ts))); + +502 + `ci_t_nd_r +( +tif +, +ts +); + +503  +dr +; + +505 if +ts +-> +d_deged + != 0 ) { + +506 + `CI_TCP_EXT_STATS_INC_TCP_ABORT_ON_DELEGATED_SEND +( +tif +); + +507 + `ci_t_nd_r +( +tif +, +ts +); + +508  +dr +; + +510 if( +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_LINGER +&&s->s. +so +. +lg + == 0 ) { + +514 + `CI_TCP_EXT_STATS_INC_TCP_ABORT_ON_DATA +( +tif +); + +515 if! ( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_NOT_CONNECTED +) ) { + +516 + `LOG_TV +( + `log +( +LPF + "%d ABORT st", + `S_FMT +( +ts +))); + +517 + `ci_t_nd_r +( +tif +, +ts +); + +519  +dr +; + +522 if( +ts +-> +s +. +b +. +e + = +CI_TCP_TIME_WAIT +) || + +523 ( +ts +-> +s +. +b +. +e + = +CI_TCP_CLOSING +) || + +524 ( +ts +-> +s +. +b +. +e + = +CI_TCP_LAST_ACK +) ) + +527 if! ( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_NOT_CONNECTED +) ) { + +528  +rc +; + +530 if +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_TCP_IN_ACCEPTQ + ) { + +531 + `ci_t_nd_r +( +tif +, +ts +); + +532 + `ci_t__r_frs +( +tif +, + `S_SP +( +ts +), 0); + +533 + `ci_t_e_ +( +tif +, +ts +); + +537 +rc + = + `__ci_t_shutdown +( +tif +, +ts +, +SHUT_RDWR +); + +539 if( +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_ORPHAN +) && + +540 +ts +-> +s +. +b +. +e + = +CI_TCP_CLOSED + ) { + +541 + `ci_t_e_ +( +tif +, +ts +); + +543 #ide +__KERNEL__ + + +546 if( +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_IN_CACHE +) && + +547 ( +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_LINGER +) && + +548 ! + `SEQ_EQ +( + `t_q_nxt +( +ts +), + `t_d_u +(ts)) + +550 + `ci_as +( +ts +-> +s +. +so +. +lg + != 0); + +551 + `ci_t_lg +( +tif +, +ts +); + +552 + `ci_tif_lock +( +tif +); + +555  +rc +; + +558 +dr +: + +559 + `LOG_TC +( + `log +( +LPF + "%d dr ci i%e", + `S_FMT +( +ts +), + +560 + `ci_t_e_r +( +ts +-> +s +. +b +. +e +))); + +564 + `ci_b_r +(& +ts +-> +s +. +b +. +sb_aags +, +CI_SB_AFLAG_TCP_IN_ACCEPTQ_BIT +); + +565 + `ci_t_dr +( +tif +, +ts +, +ECONNRESET +); + +567 + } +} + +571 #ifde +__KERNEL__ + + +572  + $ci_t_li_shutdown_queues +( +ci_tif +* +tif +, +ci_t_sock_li +* +s +) + +574  +syecvs +; + +578 + `ci_as +( + `ci_tif_is_locked +( +tif +)); + +581 + `LOG_TV +( + `ci_log +("%s: %d cˬ ousyecv queue", +__FUNCTION__ +, + +582 + `S_FMT +( +s +))); + +583 if +s +-> +n_liq + != 0 && + +584 (~ +s +-> +s +. +s_ags + & +CI_SOCK_FLAG_BOUND_ALIEN +) ) + +585 + `ci__tim_r +( +tif +, & +s +-> +liq_tid +); + +586 +syecvs + = + `ci_t_liq_dr_l +( +tif +, +s +); + +587 + `ci_as_equ +( +s +-> +n_liq +, +syecvs +); + +588 + `ci_as_ +( +s +-> +n_liq_w +, +syecvs +); + +589 +s +-> +n_liq + - +syecvs +; + +590 +s +-> +n_liq_w + = 0; + +596 + `LOG_TV +( + `log +("%s: %d cˬ ouac queu(%drs)", +__FUNCTION__ +, + +597 + `S_FMT +( +s +), + `ci_t_acq_n +(tls))); + +599  + `ci_t_acq_n_emy +( +s +) ) { + +600 +cp_waab +* +w +; + +601 +ci_t_e +* +s +; + +602 +t_hr_sour_t + * +thr + = +NULL +; + +604 +w + = + `ci_t_acq_g +( +tif +, +s +); + +606 if +w +-> +sb_aags + & +CI_SB_AFLAG_MOVED_AWAY + ) { + +607 +oo_ + + +; + +608 +ci_ut32 + +ack_id +; + +609 +ci_tif + * +i +; + +611 #ifde +NDEBUG + + +612 if + `_u +() ) { + +613 + `LOG_U +( + `log +("%s: invidcq memb", +__FUNCTION__ +)); + +614 + `cp_waab_obj_ +( +tif +, +w +); + +618 + `ci_as +(! + `_u +()); + +621 + + = +w +-> +moved_to_sock_id +; + +622 +ack_id + = +w +-> +moved_to_ack_id +; + +623 + `cp_waab_obj_ +( +tif +, +w +); + +626 + `LOG_TV +( + `log +("%s:lsock %d:%d iac queu%d:%d", +__FUNCTION__ +, + +627 +ack_id +, + `OO_SP_FMT +( + +), + `NI_ID +( +tif +), + `S_FMT +( +s +))); + +629 if + `eb_thr_b_lookup +( +NULL +, +ack_id +, + +630 +EFAB_THR_TABLE_LOOKUP_CHECK_USER +, + +631 & +thr +) != 0 ) { + +632 + `LOG_U +( + `log +("%s:istening socket %d:%d can't find " + +633 "acq memeb %d:%d", +__FUNCTION__ +, + +634 +tif +-> +e +-> +ack_id +, +s +-> +s +. +b +. +bufid +, sck_id, + +)); + +637 +i + = & +thr +-> +tif +; + +639 if!( + `SP_TO_WAITABLE +( +i +, + +)-> +e + & +CI_TCP_STATE_TCP +) || + +640 + `SP_TO_WAITABLE +( +i +, + +)-> +e + = +CI_TCP_LISTEN + ) { + +641 + `LOG_U +( + `log +("%s:istening socket %d:%d hason-TCP " + +642 "acq memeb %d:%d", +__FUNCTION__ +, + +643 +tif +-> +e +-> +ack_id +, +s +-> +s +. +b +. +bufid +, sck_id, + +)); + +646 +s + = + `SP_TO_TCP +( +i +, + +); + +650 + `ci_b_r +(& +s +-> +s +. +b +. +sb_aags +, +CI_SB_AFLAG_ORPHAN_BIT +); + +651 + `eb_t_hr_o_dpot +( +thr +, + +); + +652 + `eb_thr_a +( +thr +); + +656 +s + = & + `CI_CONTAINER +( +cp_waab_obj +, +waab +, +w +)-> +t +; + +658 + `ci_as +( + `ci_t_is_ched +( +s +) || + +659 ( +s +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_ORPHAN +)); + +660 + `ci_as +( +s +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_TCP_IN_ACCEPTQ +); + +662 #i +CI_CFG_FD_CACHING + + +666 if! + `ci_t_is_ched +( +s +) ) + +669 + `ci_b_r +(& +s +-> +s +. +b +. +sb_aags +, +CI_SB_AFLAG_TCP_IN_ACCEPTQ_BIT +); + +671 if +s +-> +s +. +b +. +e + ! +CI_TCP_CLOSED + && + +672 +s +-> +s +. +b +. +e + ! +CI_TCP_TIME_WAIT + ) { + +673 + `LOG_TV +( + `log +("%s: sdetaced ci", +__FUNCTION__ +)); + +674 + `ci_t_nd_r +( +tif +, +s +); + +677 + `ci_t_dr +( +tif +, +s +, +ECONNRESET +); + +679 #i +CI_CFG_FD_CACHING + + +680 if + `ci_t_is_ched +( +s +) ) { + +681 + `LOG_EP +( + `ci_log + ("listen_shutdown - uncache fromcceptq")); + +682 + `unche_ +( +tif +, +s +, +s +); + +685 + `ci_b_r +(& +s +-> +s +. +b +. +sb_aags +, +CI_SB_AFLAG_TCP_IN_ACCEPTQ_BIT +); + +690 + `ci_as_equ +( + `ci_t_acq_n +( +s +), 0); + +692 #i +CI_CFG_FD_CACHING + + +698 + `LOG_EP +( + `ci_log +("listen_shutdown - uncachell on cacheist")); + +699 + `unche__li +( +tif +, +s +, &s-> +che +. +che +); + +700 + `LOG_EP +( + `ci_log +("listen_shutdown - uncachell onendingist")); + +701 + `unche__li +( +tif +, +s +, &s-> +che +. +ndg +); + +703 + } +} + +705 #i +CI_CFG_FD_CACHING + + +706  + $ci_t_li_upde_ched +( +ci_tif +* +tif +, +ci_t_sock_li +* +s +) + +708 +t_hr_dpot_t + * +ched_ +; + +709 +ci_ni_di_lk + * +l +; + +710 +ci_t_e + * +ched_e +; + +719  ( +l + = + `ci_ni_di_y_p +( +tif +, & +s +-> +che_ced +)) ) { + +720 +ched_e + = + `CI_CONTAINER +( +ci_t_e +, +che_lk +, +l +); + +721 + `ci_ni_di_lf_lk +( +tif +, & +ched_e +-> +che_lk +); + +723 +ched_ + = + `ci_tif__g +( +tif +, +ched_e +-> +s +. +b +. +bufid +); + +724 + `t_hr_dpot_upde_fr_das +( +ched_ +); + +726 + `ci_as +( + `ci_ni_di_is_vid +( +tif +, & +s +-> +che_ced +. +l +)); + +727 + `ci_as +( + `ci_ni_di_is_emy +( +tif +, & +s +-> +che_ced +)); + +732 +l + = + `ci_ni_di_t +( +tif +, & +s +-> +che +. +ndg +); + +733  +l + ! + `ci_ni_di_d +( +tif +, & +s +-> +che +. +ndg +) ) { + +734 +ched_e + = + `CI_CONTAINER +( +ci_t_e +, +che_lk +, +l +); + +735 +ched_ + = + `ci_tif__g +( +tif +, +ched_e +-> +s +. +b +. +bufid +); + +737 + `t_hr_dpot_upde_fr_das +( +ched_ +); + +738 + `ci_ni_di_ +( +tif +, +l +); + +740 + `ci_as +( + `ci_ni_di_is_vid +( +tif +, & +s +-> +che +. +ndg +. +l +)); + +741 + } +} + +747  + $__ci_t_li_shutdown +( +ci_tif +* +tif +, +ci_t_sock_li +* +s +, + +748 +ci_fd_t + +fd +) + +750  +rc +; + +752 + `ci_as +( +tif +); + +753 + `ci_as +( +s +); + +754 + `ci_as +( +s +-> +s +. +b +. +e + = +CI_TCP_LISTEN +); + +756 + `ci_as +( + `ci_sock_is_locked +( +tif +, & +s +-> +s +. +b +) || + +757 ( +s +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_ORPHAN +)); + +759 + `LOG_TV +( + `ci_log +("%s: S_FMT=%d", +__FUNCTION__ +, + `S_FMT +( +s +))); + +761 #ide +__unix__ + + +763 + `ci_t__r_frs +( +tif +, + `S_SP +( +s +)); + +764 +s +-> +s +. +s_ags + &~( +CI_SOCK_FLAG_BOUND + | +CI_SOCK_FLAG_ADDR_BOUND +); + +768 if! ( +s +-> +s +. +s_ags + & +CI_SOCK_FLAG_PORT_BOUND +) ) + +769 +s +-> +s +. +s_ags + &~ +CI_SOCK_FLAG_BOUND +; + +771 #ifde +__KERNEL__ + + +772 +rc + = + `t_hr_dpot_shutdown +( + `tif2t_hr_sour +( +tif +), + +773 + `S_SP +( +s +), +SHUT_RDWR +, +CI_TCP_LISTEN +); + +774 if +rc + =- +EINVAL + ) + +779 +rc + = 0; + +781 +rc + = + `ci_t_hr_dpot_shutdown +( +fd +, +SHUT_RDWR +, +CI_TCP_LISTEN +); + +783 if +rc + < 0 ) + +784 + `LOG_E +( + `ci_log +("%s: [%d:%d] shutdown(os_sock) failed %d", + +785 +__FUNCTION__ +, + `NI_ID +( +tif +), + `S_FMT +( +s +), +rc +)); + +787 + } +} + +790  + $ci_t_l_fds_ge_comm +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +799 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +800 + `ci_as +( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_TCP +); + +803 if( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_TIMEOUT_ORPHAN +) && + +804 !( +ts +-> +s +. +b +. +sb_ags + & +CI_SB_FLAG_MOVED +) ) + +805 + `ci_tif_f_timeout_r +( +ni +, +ts +); + +808 if +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_KALIVE + ) { + +809 +ts +-> +s +. +s_ags + &=~ +CI_SOCK_FLAG_KALIVE +; + +810 + `ci_t_kive_check_d_r +( +ni +, +ts +); + +811 +ts +-> +ka_obes + = 0; + +813 + } +} + +815 #ifde +__KERNEL__ + + +816  + $ci_t_li_l_fds_ge +( +ci_tif +* +ni +, +ci_t_sock_li +* +s +, + +817  +do_ +) + +826 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +827 + `ci_as_equ +( +s +-> +s +. +b +. +e +, +CI_TCP_LISTEN +); + +829 + `__ci_t_li_shutdown +( +ni +, +s +, +NULL +); + +830 + `__ci_t_li_to_nm +( +ni +, +s +); + +831 if +do_ + ) + +832 + `cp_waab_obj_ +( +ni +, & +s +-> +s +. +b +); + +833 + } +} + +836  + $ci_t_l_fds_ge +( +ci_tif +* +ni +, +ci_t_e +* +ts +,  +do_ +) + +838 + `ci_t_l_fds_ge_comm +( +ni +, +ts +); + +841 if +do_ + ) + +842 + `ci_t_o +( +ni +, +ts +); + +843 + } +} + + @tcp_connect.c + +16  + ~"_.h +" + +17  + ~ + +18  + ~ + +20 #ifde +ONLOAD_OFE + + +21  + ~"o/ld.h +" + +24 #ide +__KERNEL__ + + +25  + ~ + +28  + #VERB +( +x +) + + ) + +30  + #LPF + "t_c: " + + ) + +32 #ide +__KERNEL__ + + +36  + $ci_t_vide_ + +_my_t + +doma +, + +37 cڡ  +sockaddr +* + +, +sockn_t + +_n + ) + +39 #ifde +__lux__ + + +45 if! + + ) { + +46 + `LOG_U +( + `ci_log +( +LPF + "invalid sockaddr : sa = %lx, sa_len = %d", + +47 ( + +, +_n +)); + +48 if +_n + == 0 ) + +49 + `RET_WITH_ERRNO + +EINVAL + ); + +51 + `RET_WITH_ERRNO + +EFAULT + ); + +58 if! + + ) { + +59 + `LOG_U +( + `ci_log +( +LPF + "vid sockadd: s%p, sa_%d", + +, +_n +)); + +60 + `RET_WITH_ERRNO + +EDESTADDRREQ + ); + +64 if +_n + < ( +sockaddr_ +) + +65 #i +CI_CFG_FAKE_IPV6 + + +66 || ( +doma + = +AF_INET6 + && +_n + < +SIN6_LEN_RFC2133 +) + +69 + `LOG_U + + `ci_log +( +LPF + "structoo shorto be sockaddr_in(6)" )); + +70 + `RET_WITH_ERRNO + +EINVAL + ); + +75 i( + `CI_SIN +( + +)-> +s_my + ! +doma + && + +76 + `CI_SIN +( + +)-> +s_my + ! +AF_UNSPEC +) { + +77 + `LOG_U +( + `ci_log +( +LPF + "address family %d doesot match " + +78 "wh sock doma %d", + `CI_SIN +( + +)-> +s_my +, +doma +)); + +79 + `RET_WITH_ERRNO +( +EAFNOSUPPORT +); + +82 #i +CI_CFG_FAKE_IPV6 + + +83 i( + +-> +_my + = +AF_INET6 + && ! + `ci_t_v6_is_v4 +(sa)) { + +84 + `LOG_TC +( + `ci_log +( +LPF + "Pure IPv6ddress isot supported")); + +85 + `RET_WITH_ERRNO +( +EAFNOSUPPORT +); + +89 + } +} + +96 +le +  + $ci_t_bd_ags_as_vid +( +ci_sock_cmn +* +s +) + +98 if +s +-> +s_ags + & +CI_SOCK_FLAG_DEFERRED_BIND + ) { + +100 + `ci_as + +s +-> +s_ags + & +CI_SOCK_FLAG_CONNECT_MUST_BIND + ); + +105 + `ci_as + +s +-> +s_ags + & ~ +CI_SOCK_FLAG_PORT_BOUND + ); + +107 + } +} + +120  + $__ci_t_bd +( +ci_tif + * +ni +, +ci_sock_cmn + * +s +, +ci_fd_t + +fd +, + +121 +ci_ut32 + +_addr_be32 +, +ci_ut16 +* +pt_be16 +,  +may_der +) + +123  +rc + = 0; + +124 +ci_ut16 + +ur_pt +; + +126  +ci_sockaddr_u + +_u +; + +128 + `ci_as +( +s +-> +doma + = +AF_INET + || s->doma = +AF_INET6 +); + +129 + `ci_as + +pt_be16 + ); + +130 + `ci_as +( +s +-> +b +. +e + & +CI_TCP_STATE_TCP + || + +131 +s +-> +b +. +e + = +CI_TCP_STATE_ACTIVE_WILD +); + +132 + `ci_t_bd_ags_as_vid +( +s +); + +134 +ur_pt + = * +pt_be16 +; + +136 if!( +s +-> +s_ags + & +CI_SOCK_FLAG_TPROXY +) ) { + +138 if! +may_der + || ! + `NI_OPTS +( +ni +). +t_shed_lol_pts + || +ur_pt + != 0 ) { + +139 #i +CI_CFG_FAKE_IPV6 + + +140 + `ci_as +( +s +-> +doma + = +AF_INET + || s->doma = +AF_INET6 +); + +141 if +s +-> +doma + = +AF_INET + ) + +142 + `ci_make_sockaddr +(& +_u +. +s +, +s +-> +doma +, +ur_pt +, +_addr_be32 +); + +144 + `ci_make_sockaddr6 +(& +_u +. +s6 +, +s +-> +doma +, +ur_pt +, +_addr_be32 +); + +146 + `ci_as +( +s +-> +doma + = +AF_INET +); + +147 + `ci_make_sockaddr +(& +_u +. +s +, +s +-> +doma +, +ur_pt +, +_addr_be32 +); + +150 #ifde +__ci_driv__ + + +151 +rc + = + `eb_t_hr_bd_os_sock_kl +( + `tif2t_hr_sour +( +ni +), + +152 + `SC_SP +( +s +), & +_u +. + +, + +153 ( +_u +), +pt_be16 +); + +155 +rc + = + `ci_t_hr_bd_os_sock +( +fd +, & +_u +. + +, (_u), +pt_be16 +); + +157 if +rc + == 0 ) + +158 +s +-> +s_ags + &~( +CI_SOCK_FLAG_CONNECT_MUST_BIND + | + +159 +CI_SOCK_FLAG_DEFERRED_BIND +); + +164 if +s +-> +s_ags + & +CI_SOCK_FLAG_DEFERRED_BIND + || + +165 ! ( +s +-> +s_ags + & +CI_SOCK_FLAG_CONNECT_MUST_BIND +) ) { + +167 + `CI_SET_ERROR +( +rc +, +EINVAL +); + +175 +ci_t_e +* +c + = & + `SOCK_TO_WAITABLE_OBJ +( +s +)-> +t +; + +176 + `ci_as_equ +( +s +-> +b +. +e +, +CI_TCP_CLOSED +); + +177 + `ci_as +(~ +c +-> +tags + & +CI_TCPT_FLAG_WAS_ESTAB +); + +178 ( +c +; + +180 +s +-> +s_ags + | +CI_SOCK_FLAG_DEFERRED_BIND +; + +181 +rc + = 0; + +188 + `ci_as_nags +( +s +-> +s_ags +, +CI_SOCK_FLAG_DEFERRED_BIND +); + +189 +s +-> +s_ags + &~ +CI_SOCK_FLAG_CONNECT_MUST_BIND +; + +194 if +rc + != 0 ) + +195  +rc +; + +196 if +ur_pt + != 0 ) + +197 +s +-> +s_ags + | +CI_SOCK_FLAG_PORT_BOUND +; + +198 if +_addr_be32 + ! +INADDR_ANY + ) + +199 +s +-> +s_ags + | +CI_SOCK_FLAG_ADDR_BOUND +; + +201 #ide +__ci_driv__ + + +203 if! ( +s +-> +s_ags + & +CI_SOCK_FLAG_TPROXY +&& +_addr_be32 + ! +INADDR_ANY + && + +204 ! + `ci_ur_addr_is_lol_eb +( + `CICP_HANDLE +( +ni +), & +_addr_be32 +) ) + +205 +s +-> +s_ags + | +CI_SOCK_FLAG_BOUND_ALIEN +; + +208 + `ci_t_bd_ags_as_vid +( +s +); + +209  +rc +; + +210 + } +} + +213 +oo_ + + $ci_t_c_fd_lol_ +( +ci_tif + * +ni +, + +214 +ci__addr_t + +d_be32 +,  +dpt_be16 +) + +216  +i +; + +218  +i + = 0; i < () +ni +-> +e +-> +n__bufs +; ++i ) { + +219 +cp_waab_obj +* +wo + = + `ID_TO_WAITABLE_OBJ +( +ni +, +i +); + +220 +ci_t_sock_li +* +s +; + +221 if +wo +-> +waab +. +e + ! +CI_TCP_LISTEN + ) ; + +222 if +wo +-> +waab +. +sb_aags + & +CI_SB_AFLAG_ORPHAN + ) ; + +223 +s + = + `SOCK_TO_TCP_LISTEN +(& +wo +-> +sock +); + +224 if +s +-> +s +. + +. +t_be16 + ! +dpt_be16 + ) ; + +225 if +s +-> +s +. + +. +_ddr_be32 + ! +INADDR_ANY + && + +226 +s +-> +s +. + +. +_ddr_be32 + ! +d_be32 +) ; + +227 if +s +-> +s +. + +. +so_bdtodevi + ! +CI_IFID_BAD + ) ; + +230 if() + `ci_t_acq_n +( +s + +acq_max + ) + +231  +s +-> +s +. +b +. +bufid +; + +233  +OO_SP_INVALID +; + +235  +OO_SP_NULL +; + +236 + } +} + +241 #ide +__KERNEL__ + + +243  + $ci_t_c_check_de +( +cp_sock +* + +, +ci__addr_t + +d_be32 +, + +244  +dpt_be16 +) + +246 +ci__ched_hdrs +* +che + = & + +-> +s +-> +pkt +; + +248 +che +-> + +. +_daddr_be32 + = +d_be32 +; + +249 +che +-> +dpt_be16 + = dport_be16; + +250 + `ci_ur_ve +( + +-> +tif +, +che +, &-> +s +-> + +); + +252 if( + `CI_LIKELY + +che +-> +us + = +rc_sucss + || + +253 +che +-> +us + = +rc_nomac + || + +254 +che +-> +us + < 0 )) { + +256 if +che +-> +p +. +ty + & +CICP_LLAP_TYPE_XMIT_HASH_LAYER4 + ) + +260 + `ci__che_vide +( +che +); + +261 if +che +-> + +. +_ddr_be32 + == 0 ) { + +263 +che +-> + +. +_ddr_be32 + = ipcache->ip_saddr_be32; + +264 + +-> +s +-> + +. +_ddr_be32 + = +che +-> +_ddr_be32 +; + +268 if +che +-> +us + = +rc_loou + ) { + +269 +ci_t_e +* +ts + = + `SOCK_TO_TCP +( + +-> +s +); + +271 if + `NI_OPTS +( + +-> +tif +). +t__loback + = +CITP_TCP_LOOPBACK_OFF +) + +272  +CI_SOCKET_HANDOVER +; + +274 + +-> +s +-> +s_ags + | +CI_SOCK_FLAG_BOUND_ALIEN +; + +275 if + `NI_OPTS +( + +-> +tif +). +t_rv_loback + ! +CITP_TCP_LOOPBACK_OFF + ) + +276 +ts +-> +lol_ + = + `ci_t_c_fd_lol_ +( + +-> +tif +, +d_be32 +, + +277 +dpt_be16 +); + +279 +ts +-> +lol_ + = +OO_SP_NULL +; + +281 if + `OO_SP_NOT_NULL +( +ts +-> +lol_ +) || + +282 + `NI_OPTS +( + +-> +tif +). +t__loback + != + +283 +CITP_TCP_LOOPBACK_SAMESTACK + ) { + +284 +che +-> +ags + | +CI_IP_CACHE_IS_LOCALROUTE +; + +285 if +che +-> + +. +_ddr_be32 + == 0 ) { + +286 +che +-> + +. +_ddr_be32 + = +d_be32 +; + +287 + +-> +s +-> + +. +_ddr_be32 + = +d_be32 +; + +289 +che +-> +h_offt + = 4; + +290 +che +-> +_ddr_be32 + = +d_be32 +; + +291 +che +-> +dpt_be16 + = dport_be16; + +294  +CI_SOCKET_HANDOVER +; + +297  +CI_SOCKET_HANDOVER +; + +298 + } +} + +303 + $ci_t_u_mac_fr +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +, +ci_ifid_t + +ifdex +, + +304 +oo_ + +om_t_id +) + +306  +u_mac_fr + = 0; + +307  +mode +; + +309 if + `NI_OPTS +( +ni +). +sb_fr_ab + ! +CITP_SCALABLE_FILTERS_ENABLE + ) + +312 +mode + = + `NI_OPTS +( +ni +). +sb_fr_mode +; + +313 if +mode + & +CITP_SCALABLE_MODE_TPROXY_ACTIVE + ) { + +317 +u_mac_fr + |( +s +-> +s_ags + & +CI_SOCK_FLAG_TPROXY +); + +320 if! +u_mac_fr + && ( +mode + & +CITP_SCALABLE_MODE_PASSIVE +) ) { + +324 +u_mac_fr + | + `OO_SP_NOT_NULL +( +om_t_id +) && + +325 ( + `SP_TO_SOCK +( +ni +, +om_t_id +)-> +s_ags + & +CI_SOCK_FLAG_MAC_FILTER +); + +331 if( +u_mac_fr + =0&& ( +s +-> +b +. +e + = +CI_TCP_LISTEN +) && + +332 ! ( +s +-> +s_ags + & +CI_SOCK_FLAG_REUSEPORT +) ) { + +334 if +ifdex + < 0 ) { + +336 + `ci_ur_fd_home +( + `CICP_HANDLE +( +ni +), & + `sock_ddr_be32 +( +s +), + +337 +NULL +, & +ifdex +, NULL, NULL, NULL); + +339 +u_mac_fr + |( + `NI_OPTS +( +ni +). +sb_fr_ifdex + = +ifdex +); + +343 if +u_mac_fr + ) { + +345 + `ci_as_ags +( +s +-> +b +. +e +, +CI_TCP_STATE_TCP +); + +350 + `ci_as +( +s +-> +b +. +e + = +CI_TCP_LISTEN + || + +351 + `OO_SP_IS_NULL +( + `SOCK_TO_TCP +( +s +)-> +lol_ +)); + +354  +u_mac_fr +; + +355 + } +} + +358 #ide +__KERNEL__ + + +359  + $ci_t_n_t_fr__ul +( +ci_tif + * +ni +, +ci_sock_cmn +* +s +) + +361 if( +s +-> +s_ags + & +CI_SOCK_FLAG_TPROXY +) == 0 ) + +363 + `ci_as_nags +( +s +-> +s_ags +, +CI_SOCK_FLAG_FILTER +); + +364 + `ci_as_ags +( +s +-> +b +. +e +, +CI_TCP_STATE_TCP +); + +365 + `ci_as_qu +( +s +-> +b +. +e +, +CI_TCP_LISTEN +); + +366 + `ci_as_nags +( + `SOCK_TO_TCP +( +s +)-> +tags +, +CI_TCPT_FLAG_PASSIVE_OPENED +); + +367 + `ci_as +( + `OO_SP_IS_NULL +( + `SOCK_TO_TCP +( +s +)-> +lol_ +)); + +368 + `ci_as_qu +( + `sock_ddr_be32 +( +s +), 0); + +369 + `ci_as_qu +( + `sock_t_be16 +( +s +), 0); + +371 + } +} + +375  + $ci_t_sock_t_sb_fr +( +ci_tif + * +ni +, +ci_t_e +* +ts +) + +377  +rc +; + +378 + `LOG_TC +( + `log + +LNT_FMT + " %s", + `LNT_PRI_ARGS +( +ni +, +ts +), +__FUNCTION__ +)); + +379 + `ci_as +(( +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_MAC_FILTER +) == 0); + +381 +rc + = + `ci_tif_fr_lookup +( +ni +, + `t_ddr_be32 +( +ts +), + +382 + `t_t_be16 +( +ts +), + `t_ddr_be32 +(ts), + +383 + `t_t_be16 +( +ts +), + `t_oc +(ts)); + +385 if +rc + >= 0 ) + +386  - +EADDRINUSE +; + +388 +rc + = + `ci_tif_fr_ +( +ni +, + `S_ID +( +ts +), + `t_ddr_be32 +(ts), + +389 + `t_t_be16 +( +ts +), + `t_ddr_be32 +(ts), + +390 + `t_t_be16 +( +ts +), + `t_oc +(ts)); + +391 if +rc + == 0 ) + +392 +ts +-> +s +. +s_ags + | +CI_SOCK_FLAG_MAC_FILTER +; + +393  +rc +; + +394 + } +} + +397  + $ci_t_sock_r_sb_fr +( +ci_tif + * +ni +, +ci_t_e +* +ts +) + +399 + `LOG_TC +( + `log + +LNT_FMT + " %s", + `LNT_PRI_ARGS +( +ni +, +ts +), +__FUNCTION__ +)); + +400 + `ci_as +(( +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_MAC_FILTER +) != 0); + +401 + `ci_tif_fr_move +( +ni +, + `S_ID +( +ts +), + `t_ddr_be32 +(ts), + +402 + `t_t_be16 +( +ts +), + `t_ddr_be32 +(ts), + +403 + `t_t_be16 +( +ts +), + `t_oc +(ts)); + +404 +ts +-> +s +. +s_ags + &~ +CI_SOCK_FLAG_MAC_FILTER +; + +405 + } +} + +410  + #CI_CONNECT_UL_OK + 0 + + ) + +411  + #CI_CONNECT_UL_FAIL + -1 + + ) + +412  + #CI_CONNECT_UL_START_AGAIN + -2 + + ) + +413  + #CI_CONNECT_UL_LOCK_DROPPED + -3 + + ) + +416  + $ci_t_c_ul_t +( +ci_tif + * +ni +, +ci_t_e +* +ts +, +ci_fd_t + +fd +, + +417 +ci_ut32 + +d_be32 +,  +dpt_be16 +, + +418 * +_rc +) + +420 +ci__pkt_fmt +* +pkt +; + +421  +rc + = 0; + +422 +oo_ + +aive_wd + = +OO_SP_NULL +; + +423 +ci_ut32 + +ev_q + = 0; + +425 + `ci_as +( +ts +-> +s +. +pkt +. +mtu +); + +427 +ts +-> +tags + &=~ +CI_TCPT_FLAG_FIN_RECEIVED +; + +433 +ts +-> +amss + =s-> +s +. +pkt +. +mtu + - ( +ci_t_hdr +- ( +ci_4_hdr +); + +434 #i +CI_CFG_LIMIT_AMSS + + +435 +ts +-> +amss + = + `ci_t_lim_mss +s->amss, +ni +, +__FUNCTION__ +); + +439 +ts +-> +smss + = +CI_CFG_TCP_DEFAULT_MSS +; + +442 + `ci_pmtu_t +( +ni +, & +ts +-> +pmtus +,s-> +s +. +pkt +. +mtu +); + +443 + `ci_t_t_eff_mss +( +ni +, +ts +); + +444 + `ci_t_t_lcwnd +( +ni +, +ts +); + +449 +ts +-> +so_dbuf_pkts + = 0; + +453 +ts +-> +ka_obes + = 0; + +459 + `ci_as_qu +( +ts +-> +s +. +pkt +. + +. +_ddr_be32 +, +INADDR_ANY +); + +461 if +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_CONNECT_MUST_BIND + ) { + +462 +ci_ut16 + +sour_be16 + = 0; + +463 +ci_sock_cmn +* +s + = & +ts +->s; + +465 #ide +__KERNEL__ + + +466 +aive_wd + = + `ci_tif_aive_wd_g +( +ni +, + `sock_ddr_be32 +(& +ts +-> +s +), + +467 + `sock_ddr_be32 +(& +ts +-> +s +), + +468 +dpt_be16 +, & +sour_be16 +, & +ev_q +); + +471 if +aive_wd + ! +OO_SP_NULL + ) { + +472 +ts +-> +s +. +s_ags + &~( +CI_SOCK_FLAG_DEFERRED_BIND + | + +473 +CI_SOCK_FLAG_CONNECT_MUST_BIND +); + +474 +rc + = 0; + +476 if +s +-> +s_ags + & +CI_SOCK_FLAG_ADDR_BOUND + ) + +477 +rc + = + `__ci_t_bd +( +ni +, & +ts +-> +s +, +fd +,s->s. +pkt +. + +. +_ddr_be32 +, + +478 & +sour_be16 +, 0); + +480 +rc + = + `__ci_t_bd +( +ni +, & +ts +-> +s +, +fd +, +INADDR_ANY +, & +sour_be16 +, 0); + +481 if( + `CI_LIKELY + +rc + == 0 )) { + +482 + `TS_TCP +( +ts +)-> +t_sour_be16 + = +sour_be16 +; + +483 +ts +-> +s +. + +. +t_be16 + = +sour_be16 +; + +484 + `LOG_TC +( + `log +( +LNT_FMT + "connect: our bindeturned %s:%u", + +485 + `LNT_PRI_ARGS +( +ni +, +ts +), + +486 + `_addr_r +( +INADDR_ANY +), + +487 ( + `CI_BSWAP_BE16 +( + `TS_TCP +( +ts +)-> +t_sour_be16 +))); + +490 + `LOG_U +( + `ci_log +("__ci_t_bdued %d%s:%d", + `CI_GET_ERROR +( +rc +), + +491 +__FILE__ +, +__LINE__ +)); + +492 * +_rc + = +rc +; + +493  +CI_CONNECT_UL_FAIL +; + +495 if( + `CI_UNLIKELY + +ts +-> +s +. +pkt +. + +. +_ddr_be32 + == 0 )) { + +496 + `CI_SET_ERROR +(* +_rc +, +EINVAL +); + +497  +CI_CONNECT_UL_FAIL +; + +501 + `ci_t_t_ +( +ts +, +d_be32 +, +dpt_be16 +); + +504 +pkt + = + `ci_tif_pkt_tx_t_loc +( +ni +, +ts +); + +505 if + `CI_UNLIKELY +(! +pkt +) ) { + +507 if + `NI_OPTS +( +ni +). +t_nblock_no_pkts_mode + && + +508 ( +ts +-> +s +. +b +. +sb_aags + & ( +CI_SB_AFLAG_O_NONBLOCK + | +CI_SB_AFLAG_O_NDELAY +)) ) { + +509 + `CI_SET_ERROR +(* +_rc +, +ENOBUFS +); + +510  +CI_CONNECT_UL_FAIL +; + +513 +rc + = + `ci_tif_pkt_wa +( +ni +, & +ts +-> +s +, +CI_SLEEP_NETIF_LOCKED +| +CI_SLEEP_NETIF_RQ +); + +514 if + `ci_tif_pkt_wa_was_ued +( +rc +) ) { + +515 + `CI_SET_ERROR +(* +_rc +, - +rc +); + +516  +CI_CONNECT_UL_LOCK_DROPPED +; + +523  +CI_CONNECT_UL_START_AGAIN +; + +526 #ifde +ONLOAD_OFE + + +527 if +ni +-> +o_chl + ! +NULL + ) + +528 +ts +-> +s +. +o_code_t + = + `o_socktbl_fd +( + +529 +ni +-> +o +, +OFE_SOCKTYPE_TCP_ACTIVE +, + +530 + `t_ddr_be32 +( +ts +), + `t_ddr_be32 +(ts), + +531 + `t_t_be16 +( +ts +), + `t_t_be16 +(ts)); + +533 +ts +-> +s +. +o_code_t + = +OFE_ADDR_NULL +; + +536 +rc + = + `ci_t__t_frs +( +ni +, + `S_SP +( +ts +),s-> +s +. + +. +so_bdtodevi +, + +537 +aive_wd +); + +538 if +rc + < 0 ) { + +542 + `ci_as_qu +( +rc +, - +EFILTERSSOME +); + +543 if +rc + !- +EBUSY + || ! + `ci_tif_timewa_y_to__fr +( +ni +) || + +544 ( +rc + = + `ci_t__t_frs +( +ni +, + `S_SP +( +ts +), + +545 +ts +-> +s +. + +. +so_bdtodevi +, + +546 +aive_wd +)) < 0 ) { + +547 + `ci_as_qu +( +rc +, - +EFILTERSSOME +); + +551 if! ( +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_ADDR_BOUND +) ) { + +552 +ts +-> +s +. +pkt +. + +. +_ddr_be32 + = 0; + +553 +ts +-> +s +. + +. +_ddr_be32 + = 0; + +555 + `ci_tif_pkt_a +( +ni +, +pkt +); + +556 + `CI_SET_ERROR +(* +_rc +, - +rc +); + +557  +CI_CONNECT_UL_FAIL +; + +561 + `LOG_TC +( + `log +( +LNT_FMT + "CONNECT %s:%u->%s:%u", + `LNT_PRI_ARGS +( +ni +, +ts +), + +562 + `_addr_r +( +ts +-> +s +. +pkt +. + +. +_ddr_be32 +), + +563 ( + `CI_BSWAP_BE16 +( + `TS_TCP +( +ts +)-> +t_sour_be16 +), + +564 + `_addr_r +( +ts +-> +s +. +pkt +. + +. +_daddr_be32 +), + +565 ( + `CI_BSWAP_BE16 +( + `TS_TCP +( +ts +)-> +t_de_be16 +))); + +568 if +aive_wd + ! +OO_SP_NULL + ) + +569 +ts +-> +tags + | +CI_TCPT_FLAG_ACTIVE_WILD +; + +571 + `t_d_nxt +( +ts + + `ci_t_l_qno +( +ni +); + +572 if +ev_q + ) + +577 + `t_d_nxt +( +ts +_d_nxts& 0x3fffffff| (~ +ev_q + & 0xc0000000); + +578 + `t_d_u +( +ts + + `t_q_nxt +s + `t_d_up +s + `t_d_nxt +(ts); + +579 +ts +-> +d_max + = + `t_d_nxt +(ts) + 1; + +582 + `ci_t_r_t_timg +( +ts +); + +583 + `ci_t_t_ags +( +ts +, +CI_TCP_FLAG_SYN +); + +584 +ts +-> +tags + &=~ +CI_TCPT_FLAG_OPT_MASK +; + +585 +ts +-> +tags + | + `NI_OPTS +( +ni +). +syn_ts +; + +587 if( +ts +-> +tags + & +CI_TCPT_FLAG_WSCL +) ) { + +588 if + `NI_OPTS +( +ni +). +t_rcvbuf_mode + == 1 ) + +589 +ts +-> +rcv_ws + = + +590 + `ci_t_ws_by_buff +( +ni +, + `ci_t_max_rcvbuf +i, +ts +-> +amss +)); + +592 +ts +-> +rcv_ws + = + +593 + `ci_t_ws_by_buff +( +ni +, + `ci_t_rcvbuf_eablished +i, & +ts +-> +s +)); + +594 + `CI_IP_SOCK_STATS_VAL_RXWSCL +( +ts +,s-> +rcv_ws +); + +597 +ts +-> +rcv_ws + = 0; + +598 + `CI_IP_SOCK_STATS_VAL_RXWSCL +( +ts +, 0); + +600 + `ci_t_t_rcvbuf +( +ni +, +ts +); + +601 + `ci_t__rcv_wnd +( +ts +, "CONNECT"); + +604 if! ( +ts +-> +tags + & +CI_TCPT_FLAG_TSO +) ) + +605 +ts +-> +outgog_hdrs_n + = ( +ci_4_hdr +)+( +ci_t_hdr +); + +606 if + `ci_t_n_re +( +ni +, +ts +-> +s +. +pkt +. + +. +_ddr_be32 +, + +607 +ts +-> +s +. +pkt +. + +. +_daddr_be32 +) ) + +608 +ts +-> +tags + | +CI_TCPT_FLAG_STRIPE +; + +609 + `ci_t_t_ow_e +( +ni +, +ts +, +CI_TCP_SYN_SENT +); + +622 + `ci_as +( +ts +-> +d_max + = + `t_d_nxt +(ts) + 1); + +623 +ts +-> +s +. +rx_o + = 0; + +624 +ts +-> +s +. +tx_o + = 0; + +625 + `ci_t_queue_no_da +( +ts +, +ni +, +pkt +); + +626 + `ci_t_t_ags +( +ts +, +CI_TCP_FLAG_ACK +); + +628 if +ts +-> +s +. +b +. +sb_aags + & ( +CI_SB_AFLAG_O_NONBLOCK + | +CI_SB_AFLAG_O_NDELAY +) ) { + +629 +ts +-> +tags + | +CI_TCPT_FLAG_NONBLOCK_CONNECT +; + +630 + `LOG_TC +( + `log + +LNT_FMT + "Non-blocking connect -eturn EINPROGRESS", + +631 + `LNT_PRI_ARGS +( +ni +, +ts +))); + +632 #ide +_WIN32 + + +633 + `CI_SET_ERROR +(* +_rc +, +EINPROGRESS +); + +635 + `CI_SET_ERROR +(* +_rc +, +EAGAIN +); + +637  +CI_CONNECT_UL_FAIL +; + +640  +CI_CONNECT_UL_OK +; + +641 + } +} + +643 +ci_le +  + $ci_t_c_hd_so_r +( +ci_sock_cmn + * +s +) + +645 +ci_t32 + +rc + = + `ci_g_so_r +( +s +); + +646 if +rc + == 0 ) + +648 #i + `defed +( +__lux__ +|| defed( +_WIN32 +) + +649 +s +-> +rx_o + = +ENOTCONN +; + +650 #i + `defed +( +__sun__ +) + +651 +s +-> +rx_o + = +CI_SHUT_RD +; + +653  +rc +; + +654 + } +} + +656  + $ci_t_c_ul_syn_ +( +ci_tif + * +ni +, +ci_t_e + * +ts +) + +658  +rc + = 0; + +660 if +ts +-> +s +. +b +. +e + = +CI_TCP_SYN_SENT + ) { + +661 +ci_ut32 + +timeout + = +ts +-> +s +. +so +. +dtimeo_mc +; + +663 + `ci_tif_pl +( +ni +); + +664 if + `OO_SP_NOT_NULL +( +ts +-> +lol_ +) ) { + +667 + `ci_t_dr +( +ni +, +ts +, +EBUSY +); + +668 + `RET_WITH_ERRNO +( +EBUSY +); + +671 #ide +__KERNEL__ + + +672 if + `oo_r_thad_g +()-> +e + & (1 << +ONLOAD_SPIN_TCP_CONNECT +) ) { + +673 +ci_ut64 + +t_c +, +now_c +, +schedu_c +; + +674 +cp_sigl_fo +* +si + = + `cp_sigl_g_ecific_ed +(); + +675 +ci_ut64 + +max_ + = +ts +-> +s +. +b +. +_cyes +; + +676  +ack_locked + = 1; + +678 if +ts +-> +s +. +so +. +dtimeo_mc + ) { + +679 +ci_ut64 + +max_so_ + = (ci_ut64) +ts +-> +s +. +so +. +dtimeo_mc + * + +680 + `IPTIMER_STATE +( +ni +)-> +khz +; + +681 if +max_so_ + < +max_ + ) + +682 +max_ + = +max_so_ +; + +685 + `ci_c64 +(& +t_c +); + +686 +schedu_c + = +t_c +; + +687 +now_c + = +t_c +; + +690 if + `ci_tif_may_pl +( +ni +) ) { + +691 if + `ci_tif_ed_pl_ng +( +ni +, +now_c +) ) { + +692 if +ack_locked + || + `ci_tif_ylock +( +ni +) ) { + +693 + `ci_tif_pl_n +( +ni +, + `NI_OPTS +i). +evs_r_pl +); + +694 + `ci_tif_uock +( +ni +); + +695 +ack_locked + = 0; + +698 if! +ni +-> +e +-> +is_r + ) + +699 +ni +-> +e +-> +is_r + = 1; + +701 if +ts +-> +s +. +b +. +e + ! +CI_TCP_SYN_SENT + ) { + +702 +ni +-> +e +-> +is_r + = 0; + +703 + `ci_tif_lock +( +ni +); + +704 +rc + = 0; + +705  +out +; + +709 if +ack_locked + ) { + +710 + `ci_tif_uock +( +ni +); + +711 +ack_locked + = 0; + +714 + `ci_c64 +(& +now_c +); + +715 +rc + = + `OO_SPINLOOP_PAUSE_CHECK_SIGNALS +( +ni +, +now_c +, & +schedu_c +, + +716 +ts +-> +s +. +so +. +dtimeo_mc +, +NULL +, +si +); + +717 if +rc + != 0 ) { + +718 +ni +-> +e +-> +is_r + = 0; + +719 + `ci_tif_lock +( +ni +); + +720  +out +; + +722 #i +CI_CFG_SPIN_STATS + + +723 +ni +-> +e +-> +s +. +_t_c +++; + +725 }  +now_c + - +t_c + < +max_ + ); + +727 +ni +-> +e +-> +is_r + = 0; + +728 + `ci_tif_lock +( +ni +); + +730 if +timeout + ) { + +731 +ci_ut32 + +_ms + = ( +t_c + - +now_c +/ + `IPTIMER_STATE +( +ni +)-> +khz +; + +732 if +_ms + < +timeout + ) + +733 +timeout + - +_ms +; + +735 if +ts +-> +s +. +b +. +e + = +CI_TCP_SYN_SENT + ) + +736 +rc + = - +EAGAIN +; + +737  +out +; + +743 + `CI_TCP_SLEEP_WHILE +( +ni +, +ts +, +CI_SB_FLAG_WAKE_RX +, + +744 +timeout +, + +745 +ts +-> +s +. +b +. +e + = +CI_TCP_SYN_SENT +, & +rc +); + +748 #ide +__KERNEL__ + + +749 +out +: + +751 if +rc + =- +EAGAIN + ) { + +752 + `LOG_TC +( + `log + +LNT_FMT + "timeout on sleep: %d", + +753 + `LNT_PRI_ARGS +( +ni +, +ts +), - +rc +)); + +754 if! ( +ts +-> +tags + & +CI_TCPT_FLAG_NONBLOCK_CONNECT +) ) { + +755 +ts +-> +tags + | +CI_TCPT_FLAG_NONBLOCK_CONNECT +; + +756 + `CI_SET_ERROR +( +rc +, +EINPROGRESS +); + +759 + `CI_SET_ERROR +( +rc +, +EALREADY +); + +760  +rc +; + +762 if +rc + =- +EINTR + ) { + +763 + `LOG_TC +( + `log +( +LNT_FMT + "connect() was interrupted by signal", + +764 + `LNT_PRI_ARGS +( +ni +, +ts +))); + +765 +ts +-> +tags + | +CI_TCPT_FLAG_NONBLOCK_CONNECT +; + +766 + `CI_SET_ERROR +( +rc +, +EINTR +); + +767  +rc +; + +772 if +ts +-> +s +. +b +. +e + = +CI_TCP_CLOSED + ) { + +773 #i + `defed +( +__lux__ +) + +777 if +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_OS_BACKED + ) { + +778 #ifde +__ci_driv__ + + +779 + `CI_TRY +( + `eb_t_hr_t_t_o_os_sock +( + +780 + `tif2t_hr_sour +( +ni +), + +781 + `S_SP +( +ts +))); + +783 + `CI_TRY +( + `ci_t_hr_t_t_o_os_sock +( +ni +, + `S_SP +( +ts +))); + +790 if! ( +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_PORT_BOUND +) ) + +791 +ts +-> +s +. +s_ags + | +CI_SOCK_FLAG_CONNECT_MUST_BIND +; + +797 if( +rc + = + `ci_t_c_hd_so_r +(& +ts +-> +s +)) == 0) + +798 +rc + = + `TCP_RX_ERRNO +( +ts +? TCP_RX_ERRNOs: +ECONNABORTED +; + +799 + `CI_SET_ERROR +( +rc +,c); + +801 if! ( +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_ADDR_BOUND +) ) { + +802 +ts +-> +s +. +pkt +. + +. +_ddr_be32 + = 0; + +803 +ts +-> +s +. + +. +_ddr_be32 + = 0; + +805  +rc +; + +809 + } +} + +812 #ide +__KERNEL__ + + +823  + $ci_t_c +( +cp_sock +* + +, cڡ  +sockaddr +* +rv_addr +, + +824 +sockn_t + +add +, +ci_fd_t + +fd +, * +p_moved +) + +827  +sockaddr_ +* +addr + = (sockaddr_* +rv_addr +; + +828 +ci_sock_cmn +* +s + = + +->s; + +829 +ci_t_e +* +ts + = & + `SOCK_TO_WAITABLE_OBJ +( +s +)-> +t +; + +830  +rc + = 0, +c +; + +831 +ci_ut32 + +d_be32 +; + +833 if + `NI_OPTS +( + +-> +tif +). +t_c_hdov + ) + +834  +CI_SOCKET_HANDOVER +; + +837 + `ci_tif_lock +( + +-> +tif +); + +838 + `CHECK_TEP +( + +); + +839 + `ci_tif_pl +( + +-> +tif +); + +845 +t_aga +: + +847 if( +rc + = + `ci_t_c_hd_so_r +( +s +)) != 0) { + +848 + `CI_SET_ERROR +( +rc +,c); + +849  +uock_out +; + +852 if +s +-> +b +. +e + ! +CI_TCP_CLOSED + ) { + +855 if +s +-> +b +. +e + & +CI_TCP_STATE_SYNCHRONISED + ) { + +856 if +ts +-> +tags + & +CI_TCPT_FLAG_NONBLOCK_CONNECT + ) { + +857 +ts +-> +tags + &~ +CI_TCPT_FLAG_NONBLOCK_CONNECT +; + +858 #ifde +__lux__ + + +859 +rc + = 0; + +861 + `CI_SET_ERROR +( +rc +, +EISCONN +); + +863  +uock_out +; + +865 if +rv_addr +-> +_my + = +AF_UNSPEC + ) + +866 + `LOG_E +( + `ci_log +("Onload doesot support TCP disconnect via " + +869 + `CI_SET_ERROR +( +rc +, +EISCONN +); + +871 if +s +-> +b +. +e + = +CI_TCP_LISTEN + ) { + +872 #i +CI_CFG_POSIX_CONNECT_AFTER_LISTEN + + +873 + `CI_SET_ERROR +( +rc +, +EOPNOTSUPP +); + +875 #ifde +__unix__ + + +876 if + `ci_t_vide_ +( +s +-> +doma +, +rv_addr +, +add +) ) { + +878 +rc + = +CI_SOCKET_HANDOVER +; + +879  +uock_out +; + +881 if +rv_addr +-> +_my + = +AF_UNSPEC + ) { + +883 + `ci_tif_uock +( + +-> +tif +); + +884 +rc + = + `ci_t_shutdown +( + +, +SHUT_RD +, +fd +); + +885  +out +; + +888 + `CI_SET_ERROR +( +rc +, +EISCONN +); + +892 + `CI_SET_ERROR +( +rc +, +EINVAL +); + +898 + `ci_as_equ +( +s +-> +b +. +e +, +CI_TCP_SYN_SENT +); + +899 #i + `defed +( +__sun__ +) + +900 + `CI_SET_ERROR +( +rc +, +EALREADY +); + +902 if +s +-> +b +. +sb_aags + & ( +CI_SB_AFLAG_O_NONBLOCK + | +CI_SB_AFLAG_O_NDELAY +) ) + +903 + `CI_SET_ERROR +( +rc +, +EALREADY +); + +905  +syn_ +; + +908  +uock_out +; + +912 if +ts +-> +tags + & +CI_TCPT_FLAG_WAS_ESTAB + ) { + +913 + `CI_SET_ERROR +( +rc +, +EISCONN +); + +914  +uock_out +; + +925 + `ci_t_vide_ +( +s +-> +doma +, +rv_addr +, +add +) + +928 || ( +d_be32 + = + `ci_g_4_addr +( +addr +-> +s_my +, +rv_addr +)) == 0 + +930 || +addr +-> +s_pt + == 0 ) + +932 +rc + = +CI_SOCKET_HANDOVER +; + +933  +uock_out +; + +937 +rc + = + `ci_t_c_check_de +( + +, +d_be32 +, +addr +-> +s_pt +); + +938 if +rc + )  +uock_out +; + +940 if( +ts +-> +s +. +pkt +. +ags + & +CI_IP_CACHE_IS_LOCALROUTE +) && + +941 + `OO_SP_IS_NULL +( +ts +-> +lol_ +) ) { + +943  +oo__loback_c + + +; + +944 + +. +d_pt + = +addr +-> +s_pt +; + +945 + +. +d_addr + = +d_be32 +; + +947 +rc + = + `oo_sour_ +( +fd +, +OO_IOC_TCP_LOOPBACK_CONNECT +, & + +); + +948 if +rc + < 0) + +949  +CI_SOCKET_HANDOVER +; + +950 if + +. +out_moved + ) + +951 * +p_moved + = 1; + +952 if + +. +out_rc + =- +EINPROGRESS + ) + +953 + `RET_WITH_ERRNO + +EINPROGRESS + ); + +954 if + +. +out_rc + =- +EAGAIN + ) + +955  - +EAGAIN +; + +956 if + +. +out_rc + != 0 ) + +957  +CI_SOCKET_HANDOVER +; + +962 if( +s +-> +s_ags + & +CI_SOCK_FLAG_BOUND_ALIEN +) && + +963 ! ( +ts +-> +s +. +pkt +. +ags + & +CI_IP_CACHE_IS_LOCALROUTE + || + +964 +s +-> +s_ags + & +CI_SOCK_FLAG_TPROXY +) ) { + +965 +rc + = +CI_SOCKET_HANDOVER +; + +966  +uock_out +; + +969 +c + = + `ci_t_c_ul_t +( + +-> +tif +, +ts +, +fd +, +d_be32 +, +addr +-> +s_pt +, + +970 & +rc +); + +971 if +c + ! +CI_CONNECT_UL_OK + ) { + +972  +c + ) { + +973  +CI_CONNECT_UL_FAIL +: + +974  +uock_out +; + +975  +CI_CONNECT_UL_LOCK_DROPPED +: + +976  +out +; + +977  +CI_CONNECT_UL_START_AGAIN +: + +978  +t_aga +; + +981 + `CI_TCP_STATS_INC_ACTIVE_OPENS + + +-> +tif + ); + +983 #i! + `defed +( +__sun__ +) + +984 +syn_ +: + +986 +rc + = + `ci_t_c_ul_syn_ +( + +-> +tif +, +ts +); + +988 +uock_out +: + +989 + `ci_tif_uock +( + +-> +tif +); + +990 +out +: + +991  +rc +; + +992 + } +} + +995  + $ci_t_li_ +( +ci_tif + * +ni +, +ci_t_sock_li + * +s +) + +997  +i +; + +998 +oo_p + + +; + +1000 +s +-> +acq_n_ + =ls-> +acq_n_out + = 0; + +1001 +s +-> +acq_put + = +CI_ILL_END +; + +1002 +s +-> +acq_g + = +OO_SP_NULL +; + +1003 +s +-> +n_liq + = 0; + +1004 +s +-> +n_liq_w + = 0; + +1007 +s +-> +buck + = + `ci_ni_aux_loc_buck +( +ni +); + +1008 if + `OO_P_IS_NULL +( +s +-> +buck +) ) + +1009  - +ENOBUFS +; + +1010 +s +-> +n_bucks + = 1; + +1013  +i + = 0; i < +CI_CFG_TCP_SYNACK_RETRANS_MAX +; ++i ) { + +1014 + + = + `TS_OFF +( +ni +, +s +); + +1015 + `OO_P_ADD +( + +, + `CI_MEMBER_OFFSET +( +ci_t_sock_li +, +liq +[ +i +])); + +1016 + `ci_ni_di_ +( +ni +, & +s +-> +liq +[ +i +], + +, "lstq"); + +1022 + `LOG_EP + ( + `log + ("Initialise cachendendingist for id %d", + +1023 + `S_FMT +( +s +))); + +1025 #i +CI_CFG_FD_CACHING + + +1026 + + = + `TS_OFF +( +ni +, +s +); + +1027 + `OO_P_ADD +( + +, + `CI_MEMBER_OFFSET +( +ci_t_sock_li +, +che +. +che +)); + +1028 + `ci_ni_di_ +( +ni +, & +s +-> +che +. +che +, + +, "epch"); + +1030 + + = + `TS_OFF +( +ni +, +s +); + +1031 + `OO_P_ADD +( + +, + `CI_MEMBER_OFFSET +( +ci_t_sock_li +, +che +. +ndg +)); + +1032 + `ci_ni_di_ +( +ni +, & +s +-> +che +. +ndg +, + +, "eppd"); + +1034 + + = + `TS_OFF +( +ni +, +s +); + +1035 + `OO_P_ADD +( + +, + `CI_MEMBER_OFFSET +( +ci_t_sock_li +, +che_ced +)); + +1036 + `ci_ni_di_ +( +ni +, & +s +-> +che_ced +, + +, "epco"); + +1038 + + = + `TS_OFF +( +ni +, +s +); + +1039 + `OO_P_ADD +( + +, + `CI_MEMBER_OFFSET +( +ci_t_sock_li +, +che +. +fd_es +)); + +1040 + `ci_ni_di_ +( +ni +, & +s +-> +che +. +fd_es +, + +, "ecfd"); + +1042 +s +-> +che +. +ava_ack + = +oo_r_to_ + + +1043 ( +ni +, &ni-> +e +-> +ssive_che_ava_ack +); + +1045 +s +-> +che_ava_sock + = +ni +-> +e +-> +ts +. +r_sock_che_max +; + +1049 + } +} + +1052 #ifde +__KERNEL__ + + +1053  + $ci_t_c_lo_meack +( +ci_tif + * +ni +, +ci_t_e + * +ts +, +oo_ + +s_id +) + +1055  +c +, +rc + = 0; + +1057 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +1059 +ts +-> +lol_ + = +s_id +; + +1060 +c + = + `ci_t_c_ul_t +( +ni +, +ts +, +CI_FD_BAD +,s-> +s +. +pkt +. +_ddr_be32 +, + +1061 +ts +-> +s +. +pkt +. +dpt_be16 +, & +rc +); + +1065 if +c + = +CI_CONNECT_UL_OK + ) + +1066 +rc + = + `ci_t_c_ul_syn_ +( +ni +, +ts +); + +1067  +rc +; + +1068 + } +} + +1072  + $ci_t_c_lo_tocn +( +ci_tif + * +c_ni +, +oo_ + +c_id +, +ci_ut32 + +d +, + +1073 +ci_tif + * +l_ni +, +oo_ + +l_id +) + +1075 +ci_t_e + * +ts +; + +1076 +ci_t_sock_li + * +s +, * +n_s +; + +1077 +cp_waab_obj + * +wo +; + +1078 +cp_waab + * +w +; + +1079  +rc +; + +1081 + `ci_as +( + `ci_tif_is_locked +( +c_ni +)); + +1082 + `ci_as +( + `OO_SP_NOT_NULL +( +c_id +)); + +1083 + `ci_as +( + `OO_SP_NOT_NULL +( +l_id +)); + +1085 + `LOG_TC +( + `log +("%s: c %d:%d%d:%d", +__FUNCTION__ +, + +1086 +c_ni +-> +e +-> +ack_id +, + `OO_SP_TO_INT +( +c_id +), + +1087 +l_ni +-> +e +-> +ack_id +, + `OO_SP_TO_INT +( +l_id +))); + +1089 +n_s + = + `SP_TO_TCP_LISTEN +( +l_ni +, +l_id +); + +1090 if() + `ci_t_acq_n +( +n_s +>n_s-> +acq_max + ) { + +1091 + `ci_tif_uock +( +c_ni +); + +1092  - +EBUSY +; + +1096 +ts + = + `ci_t_g_e_buf +( +c_ni +); + +1097 if +ts + = +NULL + ) { + +1098 + `ci_tif_uock +( +c_ni +); + +1099 + `LOG_E +( + `ci_log +("%s: [%d] ouosock bufrs", +__FUNCTION__ +, + `NI_ID +( +c_ni +))); + +1100  - +ENOMEM +; + +1104 +ts +-> +s +. +so + = +n_s +->s.so; + +1105 +ts +-> +s +. + +. +_l + = +n_s +->s.cp.ip_ttl; + +1106 + `S_TCP_HDR +(& +ts +-> +s +)-> +t_sour_be16 + = + +1107 + `S_TCP_HDR +(& +n_s +-> +s +)-> +t_sour_be16 +; + +1108 +ts +-> +s +. +doma + = +n_s +->s.domain; + +1109 +ts +-> +c + = +n_s +->c; + +1110 +ts +-> +c +. +t_der_ac + = +OO_TCP_DEFER_ACCEPT_OFF +; + +1114 + `ci_b_t +(& +ts +-> +s +. +b +. +sb_aags +, +CI_SB_AFLAG_ORPHAN_BIT +); + +1116 + `ci_t_t_ow_e +( +c_ni +, +ts +, +CI_TCP_LISTEN +); + +1117 +s + = + `SOCK_TO_TCP_LISTEN +(& +ts +-> +s +); + +1119 +s +-> +s +. +s_ags + = +n_s +->s.s_ag| +CI_SOCK_FLAG_BOUND_ALIEN +; + +1121 +s +-> +acq_max + = 1; + +1122 +rc + = + `ci_t_li_ +( +c_ni +, +s +); + +1123 if +rc + != 0 ) { + +1124 + `cp_waab_obj_ +( +c_ni +, & +s +-> +s +. +b +); + +1125  +rc +; + +1129 +ts + = + `SP_TO_TCP +( +c_ni +, +c_id +); + +1130 +rc + = + `ci_t_c_lo_meack +( +c_ni +, +ts +, +s +-> +s +. +b +. +bufid +); + +1133 if! + `ci_t_acq_n_emy +( +s +) ) { + +1136 + `ci_t_liq_dr_l +( +c_ni +, +s +); + +1137 + `cp_waab_obj_ +( +c_ni +, & +s +-> +s +. +b +); + +1138 + `ci_tif_uock +( +c_ni +); + +1139  - +EBUSY +; + +1141 +w + = + `ci_t_acq_g +( +c_ni +, +s +); + +1142 + `ci_as +( +w +); + +1143 + `LOG_TV +( + `ci_log +("%s: %d:%do %d:%d shadow %d:%dccepted %d:%d", + +1144 +__FUNCTION__ +, + +1145 +c_ni +-> +e +-> +ack_id +, + `OO_SP_TO_INT +( +c_id +), + +1146 +l_ni +-> +e +-> +ack_id +, + `OO_SP_TO_INT +( +l_id +), + +1147 +c_ni +-> +e +-> +ack_id +, +s +-> +s +. +b +. +bufid +, + +1148 +c_ni +-> +e +-> +ack_id +, +w +-> +bufid +)); + +1150 + `ci_as +( +w +-> +e + & +CI_TCP_STATE_TCP +); + +1151 + `ci_as +( +w +-> +e + ! +CI_TCP_LISTEN +); + +1157 + `ci_as_equ +( + `ci_t_acq_n +( +s +), 0); + +1158 + `ci_t_liq_dr_l +( +c_ni +, +s +); + +1159 + `cp_waab_obj_ +( +c_ni +, & +s +-> +s +. +b +); + +1160 + `ci_tif_uock +( +c_ni +); + +1164 +t_hr_dpot_t + * +l_ +, * +a_ +; + +1165  +oo_fe_f +* +os_sock_f +; + +1166  +lock_ags +; + +1168 +l_ + = + `ci_s__g +( + `tif2t_hr_sour +( +l_ni +), +l_id +); + +1169 +a_ + = + `ci_s__g +( + `tif2t_hr_sour +( +c_ni +), + `W_SP +( +w +)); + +1170 + `_lock_qve +(& +l_ +-> +lock +, +lock_ags +); + +1171 +os_sock_f + = +l_ +-> +os_sock +; + +1172 + `ci_as_equ +( +a_ +-> +os_pt_kr +, +NULL +); + +1173 if +os_sock_f + ! +NULL + ) { + +1174 +os_sock_f + = + `oo_fe_f_add +(os_sock_ref); + +1175 +os_sock_f + = + `oo_fe_f_xchg +(& +a_ +-> +os_pt_kr +, os_sock_ref); + +1176 + `_uock_qe +(& +l_ +-> +lock +, +lock_ags +); + +1177 if +os_sock_f + ! +NULL + ) + +1178 + `oo_fe_f_dr +( +os_sock_f +); + +1181 + `_uock_qe +(& +l_ +-> +lock +, +lock_ags +); + +1182  +nup +; + +1188 if + `ci_tif_lock +( +l_ni +) != 0 ) + +1189  +nup +; + +1190 if +n_s +-> +s +. +b +. +e + ! +CI_TCP_LISTEN + || + +1191 ( +n_s +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_ORPHAN +) || + +1192 + `S_TCP_HDR +(& +n_s +-> +s +)-> +t_sour_be16 + ! + `TS_TCP +( +ts +)-> +t_de_be16 + || + +1193 ( +n_s +-> +s +. +pkt +. + +. +_ddr_be32 + ! +INADDR_ANY + && + +1194 +n_s +-> +s +. +pkt +. + +. +_ddr_be32 + ! +ts +->s.pkt.. +_daddr_be32 +) ) { + +1195 + `ci_tif_uock +( +l_ni +); + +1196  +nup +; + +1199 + `ci_b_mask_t +(& +w +-> +sb_aags +, + +1200 +CI_SB_AFLAG_TCP_IN_ACCEPTQ + | +CI_SB_AFLAG_ORPHAN +); + +1202 +wo + = + `cp_waab_obj_loc +( +l_ni +); + +1203 if +wo + = +NULL + ) { + +1204 + `ci_tif_uock +( +l_ni +); + +1205  +nup +; + +1207 +wo +-> +waab +. +e + = +CI_TCP_CLOSED +; + +1208 +wo +-> +waab +. +sb_aags + | +CI_SB_AFLAG_MOVED_AWAY +; + +1209 +wo +-> +waab +. +moved_to_ack_id + = +c_ni +-> +e +-> +ack_id +; + +1210 +wo +-> +waab +. +moved_to_sock_id + = + `W_SP +( +w +); + +1211 + `LOG_TC +( + `log +("%s:utacq %d:%dencg %d:%d", +__func__ +, + +1212 +l_ni +-> +e +-> +ack_id +, + `OO_SP_TO_INT +( + `W_SP +(& +wo +-> +waab +)), + +1213 +c_ni +-> +e +-> +ack_id +, + `OO_SP_TO_INT +( + `W_SP +( +w +)))); + +1215 + `ci_t_acq_put +( +l_ni +, +n_s +, & +wo +-> +waab +); + +1216 + `cp_waab_wake_n__pl +( +l_ni +, & +n_s +-> +s +. +b +, +CI_SB_FLAG_WAKE_RX +); + +1217 + `ci_tif_uock +( +l_ni +); + +1219  +rc +; + +1221 +nup +: + +1222 + `ci_as +( +w +-> +sb_aags + & +CI_SB_AFLAG_ORPHAN +); + +1223 + `ci_b_mask_r +(& +w +-> +sb_aags +, + +1224 +CI_SB_AFLAG_TCP_IN_ACCEPTQ + | +CI_SB_AFLAG_ORPHAN +); + +1225 + `eb_t_hr_o_dpot +( + `tif2t_hr_sour +( +c_ni +), +w +-> +bufid +); + +1229  - +EBUSY +; + +1230 + } +} + +1235 #ide +__KERNEL__ + + +1239  + $ci_t_upt_bd +( +ci_sock_cmn +* +sock +, +ci_fd_t + +fd +) + +1241  +rc +; + +1246 + `ci_as +((( +sock +-> +s_ags + & +CI_SOCK_FLAG_PORT_BOUND +) != 0)); + +1247 + `ci_as_qu +( +sock +-> +s_ags + & +CI_SOCK_FLAG_REUSEPORT +, 0); + +1248 i( +rc + = + `ci_t__upt_bd +( +fd +, +CITP_OPTS +. +u_me +, + +1249 +CITP_OPTS +. +u_size +, + +1250 +CITP_OPTS +. +u_t_t +, + +1251 + `sock_ddr_be32 +( +sock +), + +1252 + `sock_t_be16 +( +sock +))) != 0 ) { + +1253 +o + = - +rc +; + +1257 + } +} + +1263  + $ci_t_bd +( +cp_sock +* + +, cڡ  +sockaddr +* +my_addr +, + +1264 +sockn_t + +add +, +ci_fd_t + +fd + ) + +1266  +sockaddr_ +* +my_addr_ +; + +1267 +ci_ut16 + +w_pt +; + +1268 +ci_ut32 + +addr_be32 +; + +1269 +ci_sock_cmn +* +s + = + +->s; + +1270 +ci_t_e +* +c + = & + `SOCK_TO_WAITABLE_OBJ +( +s +)-> +t +; + +1271  +rc + = 0; + +1273 + `CHECK_TEP +( + +); + +1274 + `ci_as +( + `ci_tif_is_locked +( + +-> +tif +)); + +1276 +my_addr_ + = ( +sockaddr_ +* +my_addr +; + +1281 i( +my_addr + = +NULL +) + +1282 + `RET_WITH_ERRNO + +EINVAL + ); + +1284 #ifde +__sun__ + + +1285 i( +s +-> +s_ags + & +CI_SOCK_FLAG_BOUND +) + +1286 + `RET_WITH_ERRNO + +EINVAL + ); + +1289 i( +s +-> +b +. +e + ! +CI_TCP_CLOSED +) + +1290 + `RET_WITH_ERRNO + +EINVAL + ); + +1292 i( +c +-> +tags + & +CI_TCPT_FLAG_WAS_ESTAB +) + +1293 + `RET_WITH_ERRNO + +EINVAL + ); + +1295 if +my_addr +-> +_my + ! +s +-> +doma + ) + +1296 + `RET_WITH_ERRNO + +s +-> +doma + = +PF_INET + ? +EAFNOSUPPORT + : +EINVAL + ); + +1298 #ide +__sun__ + + +1301 i( +s +-> +doma + = +PF_INET + && +add + < ( +sockaddr_ +)) + +1302 + `RET_WITH_ERRNO + +EINVAL + ); + +1304 i( +s +-> +doma + = +PF_INET + && +add + !( +sockaddr_ +)) + +1305 + `RET_WITH_ERRNO + +EINVAL + ); + +1308 #i +CI_CFG_FAKE_IPV6 + + +1309 i( +s +-> +doma + = +PF_INET6 + && +add + < +SIN6_LEN_RFC2133 +) + +1310 + `RET_WITH_ERRNO + +EINVAL + ); + +1312 if +s +-> +doma + = +PF_INET6 + && ! + `ci_t_v6_is_v4 +( +my_addr +) ) { + +1313 if!( + +-> +s +-> +b +. +sb_aags + & +CI_SB_AFLAG_OS_BACKED +) ) { + +1314 +rc + = + `ci_t_hr_os_sock__d_t +( + +-> +tif +, +fd +, +s +, -1, 0, +NULL +, + +1316 if +rc + < 0 ) + +1317 + `RET_WITH_ERRNO +( +o +); + +1319  +CI_SOCKET_HANDOVER +; + +1323 if(( +s +-> +s_ags + & +CI_SOCK_FLAG_TPROXY +) != 0) && + +1324 ( +my_addr_ +-> +s_pt + == 0) ) { + +1325 + `NI_LOG +( + +-> +tif +, +USAGE_WARNINGS +, "Sockets with IP_TRANSPARENT set must " + +1327 if!( + +-> +s +-> +b +. +sb_aags + & +CI_SB_AFLAG_OS_BACKED +) ) { + +1328 +rc + = + `ci_t_hr_os_sock__d_t +( + +-> +tif +, +fd +, +s +, -1, 0, +NULL +, + +1330 if +rc + < 0 ) + +1331 + `RET_WITH_ERRNO +( +o +); + +1333  +CI_SOCKET_HANDOVER +; + +1336 +addr_be32 + = + `ci_g_4_addr +( +s +-> +doma +, +my_addr +); + +1338 if(( +s +-> +s_ags + & +CI_SOCK_FLAG_TPROXY +!0&& ( +addr_be32 + == 0) ) { + +1339 + `NI_LOG +( + +-> +tif +, +USAGE_WARNINGS +, "Sockets with IP_TRANSPARENT set must " + +1341 if!( + +-> +s +-> +b +. +sb_aags + & +CI_SB_AFLAG_OS_BACKED +) ) { + +1342 +rc + = + `ci_t_hr_os_sock__d_t +( + +-> +tif +, +fd +, +s +, -1, 0, +NULL +, + +1344 if +rc + < 0 ) + +1345 + `RET_WITH_ERRNO +( +o +); + +1347  +CI_SOCKET_HANDOVER +; + +1351 +w_pt + = +my_addr_ +-> +s_pt +; + +1353 if +CITP_OPTS +. +t_upts + !0 && +w_pt + != 0 ) { + +1354  +ci_pt_li + * +f_upt +; + +1355 + `CI_DLLIST_FOR_EACH2 +( +ci_pt_li +, +f_upt +, +lk +, + +1356 ( +ci_di +*)( +ci_u_t +) +CITP_OPTS +. +t_upts +) { + +1357 if +f_upt +-> +pt + = +w_pt + ) { + +1358  +e + = 1; + +1359 if + +-> +s +-> +b +. +sb_aags + & +CI_SB_AFLAG_OS_BACKED + ) { + +1360 +ci_fd_t + +os_sock + = + `ci_g_os_sock_fd +( +fd +); + +1361 + `ci_as +( + `CI_IS_VALID_SOCKET +( +os_sock +)); + +1362 +rc + = + `ci_sys_tsockt +( +os_sock +, +SOL_SOCKET +, +SO_REUSEPORT +, & +e +, + +1363 ( +e +)); + +1364 + `ci_l_os_sock_fd +( +os_sock +); + +1367 if( +s +-> +s_ags + & +CI_SOCK_FLAG_TPROXY +) == 0 ) { + +1368 +rc + = + `ci_t_hr_os_sock__d_t +( + +-> +tif +, +fd +, +s +, + +1369 +SOL_SOCKET +, +SO_REUSEPORT +, + +1370 (*)& +e +, (one)); + +1372 if +rc + != 0 ) { + +1373 + `log +("%s: failedo set SO_REUSEPORT on OS socket: " + +1374 "rc=%dno=%d", +__func__ +, +rc +, +o +); + +1376 + +-> +s +-> +s_ags + | +CI_SOCK_FLAG_REUSEPORT +; + +1377 + `LOG_TC +( + `log +("%" +SF_FMT +",ppliedegacy SO_REUSEPORT flag forort %u", + +1378 +__FUNCTION__ +, + `SF_PRI_ARGS +( + +, +fd +), +w_pt +)); + +1383 + `CI_LOGLEVEL_TRY_RET +( +LOG_TV +, + +1384 + `__ci_t_bd +( + +-> +tif +,p-> +s +, +fd +, +addr_be32 +, + +1385 & +w_pt +, 1)); + +1386 + +-> +s +-> +s_ags + | +CI_SOCK_FLAG_BOUND +; + +1387 + `sock_t_be16 +( +s + +w_pt +; + +1388 + `sock_ddr_be32 +( +s + +addr_be32 +; + +1389 if + `CI_IP_IS_MULTICAST +( +addr_be32 +) ) + +1390 +s +-> + +. +_ddr_be32 + = 0; + +1392 +s +-> + +. +_ddr_be32 + = +addr_be32 +; + +1393 +s +-> + +. +t_be16 + = +w_pt +; + +1394 + `sock_t_be16 +( +s + + `sock_ddr_be32 +(s) = 0; + +1396 + `LOG_TC +( + `log +( +LPF + "bd%s:%u_p:%up:%u", + `_addr_r +( +addr_be32 +), + +1397 ( + `CI_BSWAP_BE16 +( +my_addr_ +-> +s_pt +), + +1398 + `CI_BSWAP_BE16 +( +w_pt +), CI_BSWAP_BE16( + `sock_t_be16 +( +s +)))); + +1401 + } +} + +1411  + $ci_t_li +( +cp_sock +* + +, +ci_fd_t + +fd +,  +backlog +) + +1421 +ci_t_e +* +ts +; + +1422 +ci_t_sock_li +* +s +; + +1423 +ci_tif +* +tif + = + +->netif; + +1424 +ci_sock_cmn +* +s + = + +->s; + +1425  +ul_backlog + = +backlog +; + +1426  +rc +; + +1427 +oo_p + + +; + +1429 + `LOG_TC +( + `log +("%" +SK_FMT +"i backlog=%d", +__FUNCTION__ +, + `SK_PRI_ARGS +( + +), + +1430 +backlog +)); + +1431 + `CHECK_TEP +( + +); + +1433 if + `NI_OPTS +( +tif +). +t_li_hdov + ) + +1434  +CI_SOCKET_HANDOVER +; + +1435 if! + `NI_OPTS +( +tif +). +t_rv_loback +) { + +1437 if +s +-> +s_ags + & +CI_SOCK_FLAG_BOUND_ALIEN + ) + +1438  +CI_SOCKET_HANDOVER +; + +1441 if +ul_backlog + < 0 ) + +1442 +ul_backlog + = + `NI_OPTS +( +tif +). +max__bufs +; + +1443 if +ul_backlog + < + `NI_OPTS +( +tif +). +acq_m_backlog + ) + +1444 +ul_backlog + = + `NI_OPTS +( +tif +). +acq_m_backlog +; + +1446 if +s +-> +b +. +e + = +CI_TCP_LISTEN + ) { + +1447 +s + = + `SOCK_TO_TCP_LISTEN +( +s +); + +1448 + `ci_tif_lock +( + +-> +tif +); + +1449 +s +-> +acq_max + = +ul_backlog +; + +1450 + `ci_t_hr_li_os_sock +( +fd +, +ul_backlog +); + +1451 + `ci_tif_uock +( + +-> +tif +); + +1455 if +s +-> +b +. +e + ! +CI_TCP_CLOSED + ) { + +1456 + `CI_SET_ERROR +( +rc +, +EINVAL +); + +1457  +rc +; + +1460 #ifde +_WIN32 + + +1462 if! + `S_TCP_HDR +( +s +)-> +t_sour_be16 + ) { + +1463 + `CI_SET_ERROR +( +rc +, +EINVAL +); + +1464  +rc +; + +1466 + `ci_as +( +s +-> +s_ags + & +CI_SOCK_FLAG_BOUND +); + +1469 +ts + = + `SOCK_TO_TCP +( +s +); + +1476 #ifde +__lux__ + + +1477 +ts +-> +s +. +tx_o + = +EPIPE +; + +1480 #ifde +_WIN32 + + +1481 +ts +-> +s +. +tx_o + = +EPIPE +; + +1484 #ifde +__sun__ + + +1485 +ts +-> +s +. +tx_o + = +ENOTCONN +; + +1488 +ts +-> +s +. +rx_o + = +ENOTCONN +; + +1490 + `ci_sock_lock +( +tif +, & +ts +-> +s +. +b +); + +1491 + `ci_tif_lock +( + +-> +tif +); + +1492 #ide +_WIN32 + + +1494 if +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_CONNECT_MUST_BIND + ) { + +1495 +ci_ut16 + +sour_be16 +; + +1500 +sour_be16 + = 0; + +1501 +rc + = + `__ci_t_bd +( + +-> +tif +,p-> +s +, +fd +, +ts +->s. +pkt +. + +. +_ddr_be32 +, + +1502 & +sour_be16 +, 0); + +1503 i( + `CI_LIKELY + +rc +==0 )) { + +1504 + `TS_TCP +( +ts +)-> +t_sour_be16 + = +sour_be16 +; + +1505 +ts +-> +s +. + +. +t_be16 + = +sour_be16 +; + +1506 + `LOG_TC +( + `log +( +LNT_FMT + "listen: our bindeturned %s:%u", + +1507 + `LNT_PRI_ARGS +( + +-> +tif +, +ts +), + +1508 + `_addr_r +( +ts +-> +s +. +pkt +. + +. +_ddr_be32 +), + +1509 ( + `CI_BSWAP_BE16 +( + `TS_TCP +( +ts +)-> +t_sour_be16 +))); + +1512 + `LOG_U +( + `ci_log +("__ci_t_bdued %d%s:%d", + `CI_GET_ERROR +( +rc +), + +1513 +__FILE__ +, +__LINE__ +)); + +1514 + `ci_tif_uock +( + +-> +tif +); + +1515 + `ci_sock_uock +( +tif +, & +ts +-> +s +. +b +); + +1516  +rc +; + +1521 + `ci_t_t_ow_e +( +tif +, +ts +, +CI_TCP_LISTEN +); + +1522 +s + = + `SOCK_TO_TCP_LISTEN +(& +ts +-> +s +); + +1524 + `t_ddr_be32 +( +s +) = 0u; + +1525 + `t_t_be16 +( +s +) = 0u; + +1527 #ifde +__lux__ + + +1528 + `ci_as_equ +( +s +-> +s +. +tx_o +, +EPIPE +); + +1531 #ifde +_WIN32 + + +1532 + `ci_as_equ +( +s +-> +s +. +tx_o +, +EPIPE +); + +1535 #ifde +__sun__ + + +1536 + `ci_as_equ +( +s +-> +s +. +tx_o +, +ENOTCONN +); + +1539 + `ci_as_equ +( +s +-> +s +. +rx_o +, +ENOTCONN +); + +1543 if~ +s +-> +s +. +s_ags + & +CI_SOCK_FLAG_BOUND_ALIEN + ) { + +1544 + + = + `TS_OFF +( +tif +, +s +); + +1545 + `OO_P_ADD +( + +, + `CI_MEMBER_OFFSET +( +ci_t_sock_li +, +liq_tid +)); + +1546 + `ci__tim_ +( +tif +, & +s +-> +liq_tid +, + +, "lstq"); + +1547 +s +-> +liq_tid +. +m1 + = + `S_SP +(tls); + +1548 +s +-> +liq_tid +. + + = +CI_IP_TIMER_TCP_LISTEN +; + +1551 +rc + = + `ci_t_li_ +( +tif +, +s +); + +1554 + `ci_tif_uock +( + +-> +tif +); + +1555 + `ci_sock_uock +( +tif +, & +ts +-> +s +. +b +); + +1556 + `ci_tif_lock +( + +-> +tif +); + +1558 if +rc + != 0 ) { + +1559 + `CI_SET_ERROR +( +rc +, -rc); + +1560  +li_ +; + +1562 +s +-> +acq_max + = +ul_backlog +; + +1564 + `CITP_STATS_TCP_LISTEN +( + `CI_ZERO +(& +s +-> +s +)); + +1573 if~ +s +-> +s_ags + & +CI_SOCK_FLAG_BOUND_ALIEN + ) { + +1574 #ifde +ONLOAD_OFE + + +1575 if +tif +-> +o_chl + ! +NULL + ) { + +1576 +s +-> +s +. +o_code_t + = + `o_socktbl_fd +( + +1577 +tif +-> +o +, +OFE_SOCKTYPE_TCP_LISTEN +, + +1578 + `t_ddr_be32 +( +s +), +INADDR_ANY +, + +1579 + `t_t_be16 +( +ts +), 0); + +1580 +s +-> +o_ome + = + `o_socktbl_fd +( + +1581 +tif +-> +o +, +OFE_SOCKTYPE_TCP_PASSIVE +, + +1582 + `t_ddr_be32 +( +s +), +INADDR_ANY +, + +1583 + `t_t_be16 +( +ts +), 0); + +1586 +s +-> +s +. +o_code_t + = +OFE_ADDR_NULL +; + +1587 +s +-> +o_ome + = +OFE_ADDR_NULL +; + +1590 +rc + = + `ci_t__t_frs +( +tif +, + `S_SP +( +s +),ls-> +s +. + +. +so_bdtodevi +, + +1591 +OO_SP_NULL +); + +1592 if +rc + =- +EFILTERSSOME + ) { + +1593 if +CITP_OPTS +. +no_ + ) + +1594 +rc + = 0; + +1596 + `ci_t__r_frs +( +tif +, + `S_SP +( +s +), 0); + +1597 +rc + = - +ENOBUFS +; + +1600 + `ci_as_qu +( +rc +, - +EFILTERSSOME +); + +1601 + `VERB +( + `ci_log +("%s: s_frued %d", +__FUNCTION__ +, +rc +)); + +1602 i( +rc + < 0) { + +1603 + `CI_SET_ERROR +( +rc +, -rc); + +1604  +po_li_ +; + +1608 #ifde +_WIN32 + + +1615 + `ci_p +(500); + +1623 #ide +_WIN32 + + +1624 #ifde +__ci_driv__ + + +1626 +rc + = + `eb_t_hr_li_os_sock + + `tif2t_hr_sour +( +tif +), + +1627 + `S_SP +( +s +), +backlog +); + +1630 +rc + = + `ci_t_hr_li_os_sock +( +fd +, +backlog +); + +1632 i +rc + < 0 ) { + +1634 + `ci_t__r_frs +( +tif +, + `S_SP +( +s +), 0); + +1635  +po_li_ +; + +1639 +ci_fd_t + +os_sock + = + `ci_g_os_sock_fd +( + +, +fd +); + +1641 + `ci_as_qu + +os_sock +, +CI_INVALID_SOCKET +); + +1644 + `VERB +( + `ci_log +("%s: down sys_li(%#x/%d, %d)", +__FUNCTION__ +, + +1645 +os_sock +, os_sock, +backlog +)); + +1646 if +CI_SOCKET_ERROR + = + `ci_sys_li + + +, +backlog + ) ) { + +1647 + `CI_SET_ERROR + +rc +, +o + ); + +1649 + `ci_t__r_frs +( +tif +, + `S_SP +( +s +), 0); + +1650 + `ci_l_os_sock_fd +( +os_sock +); + +1651 + `VERB +( + `ci_log +("%s: sys_li faed wh %d", +__FUNCTION__ +, +rc +)); + +1652  +po_li_ +; + +1654 + `ci_l_os_sock_fd +( +os_sock +); + +1657 + `ci_tif_uock +( + +-> +tif +); + +1660 +po_li_ +: + +1661 + `ci_t_liq_dr_l +( +tif +, +s +); + +1662 +li_ +: + +1664 + `__ci_t_li_to_nm +( +tif +, +s +); + +1666 + `ci_b_r +(& +s +-> +s +. +b +. +sb_aags +, +CI_SB_AFLAG_ORPHAN_BIT +); + +1667 + `ci_tif_uock +( + +-> +tif +); + +1668 #ifde +__ci_driv__ + + +1669  +rc +; + +1671  +CI_SOCKET_ERROR +; + +1673 + } +} + +1676  + $ci_t_shutdown_li +( +cp_sock +* + +,  +how +, +ci_fd_t + +fd +) + +1678 #ide +__lux__ + + +1679  +rc +; + +1680 + `CI_SET_ERROR +( +rc +, +ENOTCONN +); + +1681  +rc +; + +1683 +ci_t_sock_li +* +s + = + `SOCK_TO_TCP_LISTEN +( + +-> +s +); + +1685 if +how + = +SHUT_WR + ) + +1688 + `ci_sock_lock +( + +-> +tif +, & +s +-> +s +. +b +); + +1689 + `ci_tif_lock +( + +-> +tif +); + +1690 + `LOG_TC +( + `ci_log +( +SK_FMT +" shutdown(SHUT_RD)", + `SK_PRI_ARGS +( + +))); + +1691 + `__ci_t_li_shutdown +( + +-> +tif +, +s +, +fd +); + +1692 + `__ci_t_li_to_nm +( + +-> +tif +, +s +); + +1694 +ci_fd_t + +os_sock + = + `ci_g_os_sock_fd +( +fd +); + +1695  +ags + = + `ci_sys_f +( +os_sock +, +F_GETFL +); + +1696 +ags + &(~ +O_NONBLOCK +); + +1697 + `CI_TRY +( + `ci_sys_f +( +os_sock +, +F_SETFL +, +ags +)); + +1698 + `ci_l_os_sock_fd +( +os_sock +); + +1700 + `cp_waab_wake_n__pl +( + +-> +tif +, & +s +-> +s +. +b +, + +1701 +CI_SB_FLAG_WAKE_RX + | +CI_SB_FLAG_WAKE_TX +); + +1702 + `ci_tif_uock +( + +-> +tif +); + +1703 + `ci_sock_uock +( + +-> +tif +, & +s +-> +s +. +b +); + +1706 + } +} + +1709  + $ci_t_shutdown +( +cp_sock +* + +,  +how +, +ci_fd_t + +fd +) + +1711 +ci_sock_cmn +* +s + = + +->s; + +1712  +rc +; + +1714 if +s +-> +b +. +e + = +CI_TCP_LISTEN + ) + +1715  + `ci_t_shutdown_li +( + +, +how +, +fd +); + +1717 if + `SOCK_TO_TCP +( +s +)-> +d_deged + ) { + +1720 + `CI_SET_ERROR +( +rc +, +EBUSY +); + +1721  +rc +; + +1724 if! + `ci_tif_ylock +( + +-> +tif +) ) { + +1726  +ags + = 0; + +1727  +s +-> +b +. +e + ) { + +1728  +CI_TCP_CLOSED +: + +1729  +CI_TCP_TIME_WAIT +: + +1730 + `CI_SET_ERROR +( +rc +, +ENOTCONN +); + +1731  +rc +; + +1733 if +how + = +SHUT_RD + || how = +SHUT_RDWR + ) + +1734 +ags + | +CI_SOCK_AFLAG_NEED_SHUT_RD +; + +1735 if +how + = +SHUT_WR + || how = +SHUT_RDWR + ) + +1736 +ags + | +CI_SOCK_AFLAG_NEED_SHUT_WR +; + +1737 + `ci_omic32_ +(& +s +-> +s_aags +, +ags +); + +1738 if! + `ci_tif_lock__der_wk +( + +-> +tif +, & +s +-> +b +) ) + +1740 + `ci_omic32_d +(& +s +-> +s_aags +, ~ +ags +); + +1752 + `ci_tif_pl +( + +-> +tif +); + +1754 +rc + = + `__ci_t_shutdown +( + +-> +tif +, + `SOCK_TO_TCP +( +s +), +how +); + +1755 if +rc + < 0 ) + +1756 + `CI_SET_ERROR +( +rc +, -rc); + +1757 + `ci_tif_uock +( + +-> +tif +); + +1758  +rc +; + +1759 + } +} + +1762  + $ci_t_gme +( +cp_sock +* + +,  +sockaddr +* +me +, + +1763 +sockn_t +* +m +) + +1765 +ci_sock_cmn +* +s + = + +->s; + +1766  +rc +; + +1768 + `CHECK_TEP_NNL +( + +); + +1770 #ifde +_WIN32 + + +1772 if! ( + `SOCK_TO_WAITABLE_OBJ +( +s +)-> +t +. +tags + & +CI_TCPT_FLAG_WAS_ESTAB +) ) + +1775 if! ( +s +-> +b +. +e + & +CI_TCP_STATE_SYNCHRONISED +) || + +1776 +s +-> +b +. +e + = +CI_TCP_TIME_WAIT + ) + +1778 + `CI_SET_ERROR +( +rc +, +ENOTCONN +); + +1779 if +me + = +NULL + || +m + == NULL ) + +1780 + `CI_SET_ERROR +( +rc +, +EFAULT +); + +1782 + `ci_addr_to_ur +( +me +, +m +, +s +-> +doma +, + +1783 + `S_TCP_HDR +( +s +)-> +t_de_be16 +, s-> +pkt +. + +. +_daddr_be32 +); + +1784 +rc + = 0; + +1787  +rc +; + +1788 + } +} + +1791  + $ci_t_gsockme +( +cp_sock +* + +, +ci_fd_t + +fd +,  +sockaddr +* + +, + +1792 +sockn_t +* +p__n +) { + +1793 +ci_sock_cmn +* +s + = + +->s; + +1794  +rc + = 0; + +1797 + `ci_t_bd_ags_as_vid +( +s +); + +1799 if +s +-> +s_ags + & +CI_SOCK_FLAG_DEFERRED_BIND + ) { + +1800 +ci_ut16 + +sour_be16 + = 0; + +1802 if +s +-> +s_ags + & +CI_SOCK_FLAG_ADDR_BOUND + ) + +1803 +rc + = + `__ci_t_bd +( + +-> +tif +, +s +, +fd +, s-> +pkt +. + +. +_ddr_be32 +, + +1804 & +sour_be16 +, 0); + +1806 +rc + = + `__ci_t_bd +( + +-> +tif +, +s +, +fd +, +INADDR_ANY +, & +sour_be16 +, 0); + +1808 if( + `CI_LIKELY + +rc + == 0 )) { + +1809 +s +-> +s_ags + &~( +CI_SOCK_FLAG_DEFERRED_BIND + | + +1810 +CI_SOCK_FLAG_CONNECT_MUST_BIND +); + +1811 + `sock_t_be16 +( +s + +sour_be16 +; + +1812 +s +-> + +. +t_be16 + = +sour_be16 +; + +1813 + `LOG_TC +( + `log +( +NSS_FMT + "Deferred bindeturned %s:%u", + +1814 + `NSS_PRI_ARGS +( + +-> +tif +, +s +), + +1815 + `_addr_r +( +INADDR_ANY +), + `ohs +( + `sock_t_be16 +( +s +)))); + +1818 + `LOG_U +( + `ci_log +("__ci_t_bdued %d%s:%d", + `CI_GET_ERROR +( +rc +), + +1819 +__FILE__ +, +__LINE__ +)); + +1823  +rc +; + +1824 + } +} + + @tcp_debug.c + +11  + ~"_.h +" + +18  + $ci_t_tx_pkt_as_vid +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +19 +ci__pkt_fmt +* +pkt +, + +20 cڡ * +fe +,  +le +) + +23 +ci__pkt_fmt +* +xt_pkt +; + +24 +ci_t_hdr +* +t +; + +25  +i +, +n +, +yn +; + +27 + `vify +( + `IS_VALID_PKT_ID +( +ni +, + `OO_PKT_P +( +pkt +))); + +28 + `vify +( +pkt +-> +fcou + > 0); + +31 + `vify +( +pkt +-> +pkt_h_yld_off + = +ETH_HLEN +); + +32 + `vify +( +pkt +-> +pkt_t_off + =0 ||kt->pkt_t_of=- +ETH_VLAN_HLEN +); + +33 + `vify +( + `CI_IP4_IHL +( + `oo_tx__hdr +( +pkt +)=( +ci_4_hdr +)); + +34 +t + = + `TX_PKT_TCP +( +pkt +); + +35 + `vify +( +t + = + `PKT_TCP_HDR +( +pkt +)); + +38 + `vify +( +t +-> +t_sour_be16 + = + `TS_TCP +( +ts +)->tcp_source_be16); + +39 if +ts +-> +s +. +b +. +e + ! +CI_TCP_LISTEN + ) { + +40 + `vify +( +t +-> +t_de_be16 + = + `TS_TCP +( +ts +)->tcp_dest_be16); + +41 + `vify +( + `oo_tx__hdr +( +pkt +)-> +_ddr_be32 + = +ts +-> +s +.pkt. + +.ip_saddr_be32); + +42 + `vify +( + `oo_tx__hdr +( +pkt +)-> +_daddr_be32 + = +ts +-> +s +.pkt. + +.ip_daddr_be32); + +47 + `vify +( + `SEQ_LT +( + `t_d_u +( +ts +), +pkt +-> +pf +. +t_tx +. +d_q +)); + +48 + `vify +( + `SEQ_LE +( +pkt +-> +pf +. +t_tx +. +d_q +, + `t_q_nxt +( +ts +))); + +51 +yn + = + `SEQ_SUB +( +pkt +-> +pf +. +t_tx +. +d_q +,kt->pf.t_tx. +t_q +); + +52 if +t +-> +t_ags + & ( +CI_TCP_FLAG_SYN + | +CI_TCP_FLAG_FIN +-- +yn +; + +53 + `vify +( + `CI_TCP_HDR_OPT_LEN +( +t += + `t_outgog_ts_n +( +ts +) + +54 || ( +t +-> +t_ags + & +CI_TCP_FLAG_SYN +)); + +56 + `vify +( +pkt +-> +n_bufrs + >= 1); + +57 + `vify +( +pkt +-> +n_bufrs + < +CI_IP_PKT_SEGMENTS_MAX +); + +58 +xt_pkt + = +pkt +; + +59  +n + = 0, +i + = 0; i < +pkt +-> +n_bufrs +; ++i ) { + +60 + `vify +( +xt_pkt +-> +buf_n + > 0); + +61 +n + + +xt_pkt +-> +buf_n +; + +62 if +i + < +pkt +-> +n_bufrs +-1 ) + +63 +xt_pkt + = + `PKT_CHK +( +ni +,ext_pkt-> +ag_xt +); + +65 + `vify +( +n + = +yn + + + `CI_TCP_HDR_LEN +( +t +) + + +66 + `CI_IP4_IHL +( + `oo_tx__hdr +( +pkt +)+ + `oo_h_hdr_size +(pkt)); + +67 + `vify +( +n + = +pkt +-> +y_n +); + +69 + `vify +( + `oo_offbuf_r +(& +pkt +-> +buf +) == + +70 (* + `oo_tx_h_da +( +pkt ++ +ts +-> +outgog_hdrs_n + + +yn +); + +71 + `vify +( + `oo_offbuf_d +(& +pkt +-> +buf +) == + +72 (* + `oo_tx_h_da +( +pkt ++ +ts +-> +outgog_hdrs_n + +s-> +eff_mss +); + +73 + `vify +( + `oo_offbuf_d +(& +pkt +-> +buf +<(*pk+ +CI_CFG_PKT_BUF_SIZE +); + +74 + } +} + +81  + $ci_t_e_li_as_vid +( +ci_tif +* +tif +, + +82 +ci_t_sock_li +* +t +, + +83 cڡ * +fe +,  +le +) + +85 #ifde +__lux__ + + +86 + `vify +( +t +-> +s +. +tx_o + = +EPIPE +); + +89 #ifde +_WIN32 + + +90 + `vify +( +t +-> +s +. +tx_o + = +EPIPE +); + +93 #ifde +__sun__ + + +94 + `vify +( +t +-> +s +. +tx_o + = +ENOTCONN +); + +97 + `vify +( +t +-> +s +. +rx_o + = +ENOTCONN +); + +99 + `vify +( + `ci_to_t +( + `ci_t_acq_n +( +t +)) >= 0); + +100 if + `ci_t_acq_n +( +t +) ) + +101 + `vify +( + `ci_t_acq_n_emy +( +t +)); + +107 if( + `ci_t_acq_n +( +t +>-> +acq_max + ) + +108 + `LOG_U +( + `log +( +NTS_FMT +"ccept queue has morelements (%d)han " + +109 "lowed (%d)", + `NTS_PRI_ARGS +( +tif +, +t +), + `ci_t_acq_n +(tsl), + +110 +t +-> +acq_max +)); + +111 + } +} + +113 #ide +NDEBUG + + +114  + $ci_t_e_s_as_vid +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +115 cڡ * +fe +,  +le +) + +117 +ci__pkt_queue +* +q + = & +ts +-> +s +; + +118 +ci__pkt_fmt + * +pkt + = +NULL +, * +d +, * +ev_pkt +; + +119  +num + = 0, +is_cked + = 0; + +120 +oo_pkt_p + +id +; + +122 +id + = +q +-> +hd +; + +123 +ev_pkt + = 0; + +125  + `OO_PP_NOT_NULL +( +id +) ) { + +126 + `vify +( + `IS_VALID_PKT_ID +( +ni +, +id +)); + +127 +pkt + = + `PKT +( +ni +, +id +); + +128 if + `OO_PP_EQ +( +id +, +q +-> +hd +) ) { + +129 +is_cked + = ( +pkt +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED +) != 0; + +130 + `vify +( + `SEQ_LE +( +pkt +-> +pf +. +t_tx +. +t_q +, + `t_d_u +( +ts +))); + +131 + `vify +( + `SEQ_LT +( + `t_d_u +( +ts +), +pkt +-> +pf +. +t_tx +. +d_q +)); + +133 if + `OO_PP_IS_NULL +( +pkt +-> +pf +. +t_tx +. +block_d +) ) ; + +135 + `vify +( + `IS_VALID_PKT_ID +( +ni +, +pkt +-> +pf +. +t_tx +. +block_d +)); + +136 +d + = + `PKT +( +ni +, +pkt +-> +pf +. +t_tx +. +block_d +); + +139 if +ev_pkt + ) + +140 + `vify +( +pkt +-> +pf +. +t_tx +. +t_q + = +ev_pkt +->pf.t_tx. +d_q +); + +141 + `vify +( + `SEQ_LE +( +pkt +-> +pf +. +t_tx +. +d_q +, +d +->pf.tcp_tx.end_seq)); + +142 if +is_cked + ) + `vify +( +pkt +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED +); + +143 + `vify +(~ +pkt +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED +); + +144 +ev_pkt + = +pkt +; + +145 ++ +num +; + +146 if +pkt + = +d + ) ; + +147 + `vify +( + `IS_VALID_PKT_ID +( +ni +, +pkt +-> +xt +)); + +148 +pkt + = + `PKT_CHK +( +ni +,kt-> +xt +); + +151 +id + = +d +-> +xt +; + +152 +is_cked + = ! is_sacked; + +155 if + `OO_PP_IS_NULL +( +id + +de +; + +158 + `vify +(! +is_cked +); + +160 if +ev_pkt + ) + +161 + `vify +( +pkt +-> +pf +. +t_tx +. +t_q + = +ev_pkt +->pf.t_tx. +d_q +); + +162 + `vify +( + `OO_PP_IS_NULL +( +pkt +-> +pf +. +t_tx +. +block_d +)); + +163 + `vify +(~ +pkt +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED +); + +164 +ev_pkt + = +pkt +; + +165 ++ +num +; + +166 if + `OO_PP_IS_NULL +( +pkt +-> +xt +) ) ; + +167 + `vify +( + `IS_VALID_PKT_ID +( +ni +, +pkt +-> +xt +)); + +168 +pkt + = + `PKT_CHK +( +ni +,kt-> +xt +); + +171 +de +: + +172 + `vify +! +pkt + || + `OO_PP_EQ +( + `OO_PKT_P +kt), +q +-> + +)); + +173 + `vify +( +num + = +q +->num); + +174 + } +} + +177  + $ci_t_e_nd_as_vid +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +178 cڡ * +fe +,  +le +) + +180 +ci__pkt_queue +* +ndq + = & +ts +-> +nd +; + +181 +ci__pkt_fmt + * +pkt +; + +182  +ev_q + = + `t_d_nxt +( +ts +); + +183  +bys +, +num +; + +184 +oo_pkt_p + +id +; + +186 +bys + = 0; + +187 +num + = 0; + +189  +id + = +ndq +-> +hd +; + `OO_PP_NOT_NULL +(id); id = +pkt +-> +xt + ) { + +190 + `vify +( + `IS_VALID_PKT_ID +( +ni +, +id +)); + +191 +pkt + = + `PKT +( +ni +, +id +); + +192 +bys + + + `SEQ_SUB +( +pkt +-> +pf +. +t_tx +. +d_q +,kt->pf.t_tx. +t_q +); + +193 + `vify +( + `SEQ_EQ +( +pkt +-> +pf +. +t_tx +. +t_q +, +ev_q +)); + +194 +ev_q + = +pkt +-> +pf +. +t_tx +. +d_q +; + +195 ++ +num +; + +197 + `vify +( +ts +-> +nd +. +num + ==um); + +198 + `vify +( +bys + = + `SEQ_SUB +( + `t_q_nxt +( +ts +), + `t_d_nxt +(ts))); + +199 + } +} + +202  + $ci_t_e_cg_as_vid +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +203 cڡ * +fe +,  +le +) + +205 +ci__pkt_fmt +* +pkt +; + +207 + `vify +(! +ts +-> +cwnd_exa + || + +208 (( +ts +-> +cge + & ( +CI_TCP_CONG_FAST_RECOV +| +CI_TCP_CONG_COOLING +)) && + +209 ( +ts +-> +tags + & +CI_TCPT_FLAG_SACK +))); + +211 if +ts +-> +cge + ! +CI_TCP_CONG_OPEN + && + +212 +ts +-> +cge + ! +CI_TCP_CONG_NOTIFIED +) { + +213 + `vify +( +ts +-> +cge + = +CI_TCP_CONG_RTO + || + +214 +ts +-> +cge + = +CI_TCP_CONG_RTO_RECOV + || + +215 +ts +-> +cge + = +CI_TCP_CONG_FAST_RECOV + || + +216 +ts +-> +cge + = +CI_TCP_CONG_COOLING +); + +217 + `vify +( + `SEQ_LE +( +ts +-> +cgcov +, + `t_d_nxt +(ts))); + +219 if + `SEQ_LT +( + `t_d_u +( +ts +),s-> +cgcov +) ) { + +220 if +ts +-> +cge + ! +CI_TCP_CONG_COOLING + ) { + +221 + `vify +( + `SEQ_LE +( +ts +-> +s_q +,s-> +cgcov +)); + +222 if + `SEQ_LE +( + `t_d_u +( +ts +),s-> +s_q +) ) { + +223 + `vify +( + `IS_VALID_PKT_ID +( +ni +, +ts +-> +s_r +)); + +224 +pkt + = + `PKT +( +ni +, +ts +-> +s_r +); + +225 + `vify +( +pkt +-> +fcou + > 0); + +226 + `vify +( + `SEQ_LE +( +pkt +-> +pf +. +t_tx +. +t_q +, +ts +-> +s_q +)); + +227 + `vify +( + `SEQ_LT +( +ts +-> +s_q +, +pkt +-> +pf +. +t_tx +. +d_q +)); + +232 + } +} + +235  + $ci_t_e_cv_as_vid +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +236  +g_sock_lock +, + +237 cڡ * +fe +,  +le +) + +239 +ci__pkt_queue +* +q +; + +240  +exa_pots__cv1 + = 0; + +241 +ci__pkt_fmt + * +pkt +, * +ev_pkt + = 0; + +242  +q +, +da_q +; + +243  +bys + = 0, +num + = 0; + +244  +dr_sock_lock + = 0; + +245 +ci_t_hdr +* +t +; + +246 +oo_offbuf +* +buf +; + +247 +oo_pkt_p + +id +; + +249 if! +g_sock_lock + ) + +250 +g_sock_lock + = +dr_sock_lock + = + `ci_sock_ylock +( +ni +, & +ts +-> +s +. +b +); + +252 if +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_ACCEPT_DATA + ) + +253 + `vify +( + `SEQ_EQ +( + `t_rcv_nxt +( +ts +),s-> +rcv_added +)); + +255 +q + = +ts +-> +rcv_dived +; + +258 +q + = & +ts +-> +cv1 +; + +259 +id + = +q +-> +hd +; + +260  + `OO_PP_NOT_NULL +( +id +) ) { + +261 +pkt + = + `PKT_CHK +( +ni +, +id +); + +262 +t + = + `PKT_TCP_HDR +( +pkt +); + +263 +buf + = & +pkt +->buf; + +264 + `vify +( + `oo_offbuf_ +( +buf +) >= 0); + +265 + `vify +( + `oo_offbuf_ +( +buf +< + `SEQ_SUB +( +pkt +-> +pf +. +t_rx +. +d_q +, + +266 + `CI_BSWAP_BE32 +( +t +-> +t_q_be32 +))); + +267 +da_q + = + `PKT_RX_BUF_SEQ +( +pkt +); + +268 if +g_sock_lock + || +q + =& +ts +-> +cv2 + ) { + +269 + `vify +( + `SEQ_EQ +( +da_q + + + `oo_offbuf_ +( +buf +) + +270 + (( +t +-> +t_ags + & +CI_TCP_FLAG_FIN +) + +271 >> +CI_TCP_FLAG_FIN_BIT +), +pkt +-> +pf +. +t_rx +. +d_q +)); + +273 if +g_sock_lock + ) { + +274 + `vify +( + `SEQ_EQ +( +da_q +, +q +|| + `oo_offbuf_ +( +buf +) == 0); + +275 +q + + + `oo_offbuf_ +( +buf ++ (( +t +-> +t_ags + & +CI_TCP_FLAG_FIN +) + +276 >> +CI_TCP_FLAG_FIN_BIT +); + +278 +bys + + + `oo_offbuf_ +( +buf +); + +279 ++ +num +; + +280 if +q + =& +ts +-> +cv1 + ) { + +281 if + `OO_PP_EQ +( +ts +-> +cv1_exa +, + `OO_PKT_P +( +pkt +)) ) + +282 +exa_pots__cv1 + = 1; + +283 if +exa_pots__cv1 + && +g_sock_lock + ) + +285 + `vify +( + `oo_offbuf_ +( +buf +) > 0); + +287 if +ev_pkt + ) { + +293 + `vify +( + `SEQ_LE +( +t +-> +t_q_be32 +, +ev_pkt +-> +pf +. +t_rx +. +d_q +)); + +295 + `vify +( + `SEQ_LT +( +ev_pkt +-> +pf +. +t_rx +. +d_q +, +pkt +->pf.tcp_rx.end_seq)); + +299 +ev_pkt + = +pkt +; + +300 +id + = +pkt +-> +xt +; + +301 if + `OO_PP_IS_NULL +( +id +&& +q + =& +ts +-> +cv1 + ) { + +302 + `vify +( +ts +-> +cv1 +. +num + ==um); + +303 +num + = 0; + +304 +q + = & +ts +-> +cv2 +; + +305 +id + = +q +-> +hd +; + +309 + `vify +( +ts +-> +cv2 +. +num + ==um); + +311 if +g_sock_lock + ) { + +312 if( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_ACCEPT_DATA +) || + +313 (~ +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_SYNCHRONISED +) ) + +314 + `vify +( + `SEQ_EQ +( +q +, + `t_rcv_nxt +( +ts +))); + +316 + `vify +( + `SEQ_EQ +( +q + + 1 , + `t_rcv_nxt +( +ts +))); + +317 + `vify +( +bys + = + `t_rcv_u +( +ts +)); + +318 if + `OO_PP_NOT_NULL +( +ts +-> +cv1_exa +) ) { + +319 + `vify +( +exa_pots__cv1 +); + +320 +pkt + = + `PKT_CHK +( +ni +, +ts +-> +cv1_exa +); + +321 if + `oo_offbuf_is_emy +(& +pkt +-> +buf +&& + `OO_PP_NOT_NULL +kt-> +xt +) ) { + +322 +pkt + = + `PKT_CHK +( +ni +,kt-> +xt +); + +323 + `vify +( + `oo_offbuf_ +(& +pkt +-> +buf +) > 0); + +328 +exa_pots__cv1 + = 0; + +329  +id + = +ts +-> +cv1 +. +hd +; + `OO_PP_NOT_NULL +(id); id = +pkt +-> +xt + ) { + +330 +pkt + = + `PKT_CHK +( +ni +, +id +); + +331 +buf + = & +pkt +->buf; + +332 if + `OO_PP_EQ +( +ts +-> +cv1_exa +, + `OO_PKT_P +( +pkt +)) ) { + +333 +exa_pots__cv1 + = 1; + +334 + `vify +( + `oo_offbuf_ +( +buf +) >= 0); + +336 if +exa_pots__cv1 + ) + +337 + `vify +( + `oo_offbuf_ +( +buf +) > 0); + +339 + `vify +( + `oo_offbuf_ +( +buf +) == 0); + +342 if +dr_sock_lock + ) + `ci_sock_uock +( +ni +, & +ts +-> +s +. +b +); + +344 + } +} + +347  + $ci_t_e_rob_as_vid +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +348 cڡ * +fe +,  +le +) + +350 +ci__pkt_queue +* +rob + = & +ts +->rob; + +351 +ci__pkt_fmt + * +block +, * +pkt +, * +ev_pkt +; + +352 +ci_t_hdr +* +t +; + +353  +block_num +, +num + = 0; + +354 +oo_pkt_p + +id +; + +356  +id + = +rob +-> +hd +; + `OO_PP_NOT_NULL +(id); + +357 +id + = +block +-> +pf +. +t_rx +. +misc +. +rob +. +xt_block + ) { + +358 +block + = + `PKT_CHK +( +ni +, +id +); + +359 +block_num + = 0; + +360 +ev_pkt + = 0; + +363 +pkt + = + `PKT_CHK +( +ni +, +id +); + +364 +t + = + `PKT_TCP_HDR +( +pkt +); + +366 + `vify +( + `SEQ_LE +( +pkt +-> +pf +. +t_rx +. +d_q +, + +367 +block +-> +pf +. +t_rx +. +misc +. +rob +. +d_block_q +)); + +368 ++ +num +; ++ +block_num +; + +369 if +ev_pkt + ) { + +370 + `vify +( + `SEQ_LE +( + `CI_BSWAP_BE32 +( +t +-> +t_q_be32 +), +ev_pkt +-> +pf +. +t_rx +. +d_q +)); + +371 + `vify +( + `SEQ_LT +( +ev_pkt +-> +pf +. +t_rx +. +d_q +, +pkt +->pf.tcp_rx.end_seq)); + +374 if + `OO_PP_EQ +( + `OO_PKT_P +( +pkt +), +block +-> +pf +. +t_rx +. +misc +. +rob +. +d_block +) ) + +376 +id + = +pkt +-> +xt +; + +377 +ev_pkt + = +pkt +; + +380 + `vify +( +block +-> +pf +. +t_rx +. +misc +. +rob +. +num + = +block_num +); + +383 + `vify +( +rob +-> +num + ==um); + +384 + } +} + +388  + $ci_t_e_as_vid +( +ci_tif +* +tif +, +ci_t_e +* +ts +, + +389 cڡ * +fe +,  +le +) + +391 #ide +NDEBUG + + +392 +ci__pkt_fmt + * +pkt +, * +ev_pkt +; + +393  +ck_pots__rob +; + +394  +num +, +ed_uock +; + +395 +oo_pkt_p + +id +; + +406 if( +ed_uock + = + `ci_tif_ylock +( +tif +)) ) + +407 + `log +("%s: WARNING --i%d wauocked (%s:%d)", +__FUNCTION__ +, + +408 + `NI_ID +( +tif +), +fe +, +le +); + +410 + `vify +( +ts +); + +411 + `vify +( + `IS_VALID_SOCK_P +( +tif +, + `S_SP +( +ts +))); + +412 + `vify +( + `SP_TO_TCP +( +tif +, + `S_SP +( +ts +)) ==s); + +413 + `vify +( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_TCP +); + +414 + `vify +(( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_TCP_CONN +) || + +415 +ts +-> +s +. +b +. +e + = +CI_TCP_CLOSED +); + +416 + `vify +( +ts +-> +s +. +b +. +e + > +CI_TCP_CLOSED +); + +417 + `vify +( +ts +-> +s +. +b +. +e + < +CI_TCP_TIME_WAIT +); + +418 + `ci_as +( +ts +-> +s +. +pkt +. + +. +_oc + = +IPPROTO_TCP +); + +420  + #chk +( +x +) \ + +421 + `vify +(! + `ci__tim_ndg +( +tif +, & +ts +-> +x +) || \ + +422 (~ +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_NO_TIMERS +) || \ + +423 ( +ts +-> +s +. +b +. +e + = +CI_TCP_LISTEN + && \ + +424 ( +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_BOUND_ALIEN +))) + + ) + +425 + `chk +( +o_tid +); + +426 + `chk +( +dack_tid +); + +427 + `chk +( +zw_tid +); + +428 + `chk +( +kive_tid +); + +429 + `chk +( +pmtus +. +tid +); + +430 #unde +chk + + +432 + `vify +( + `SEQ_LE +( + `t_d_u +( +ts +), + `t_d_nxt +(ts))); + +436 + `vify +( + `ci__queue_is_vid +( +tif +, & +ts +-> +nd +)); + +437 + `vify +( + `ci__queue_is_vid +( +tif +, & +ts +-> +s +)); + +438 + `vify +( + `ci__queue_is_vid +( +tif +, & +ts +-> +cv1 +)); + +439 + `vify +( + `ci__queue_is_vid +( +tif +, & +ts +-> +cv2 +)); + +440 + `vify +( + `ci__queue_is_vid +( +tif +, & +ts +-> +rob +)); + +442 if(!( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_TXQ_ACTIVE +)){ + +443 + `vify +( + `ci__queue_is_emy +(& +ts +-> +nd +)); + +444 + `vify +( + `ci__queue_is_emy +(& +ts +-> +s +)); + +447 + `vify +(( + `TCP_RX_ERRNO +( +ts +=0 &&s-> +s +. +tx_o + == 0) || + +448 +ts +-> +s +. +b +. +e + ! +CI_TCP_ESTABLISHED +); + +450 if +ts +-> +s +. +b +. +e + > +CI_TCP_SYN_SENT + ) { + +451 + `vify +( + `t_eff_mss +( +ts +< +CI_MAX_ETH_FRAME_LEN +); + +452 + `vify +( +ts +-> +cwnd + > + `t_eff_mss +(ts)); + +453 + `vify +( +ts +-> +shsh + > + `t_eff_mss +(ts) << 1); + +454 + `vify +( + `ci_to_t +( + `t_rcv_wnd_advtid +( +ts +)) >= 0); + +457 + `vify +( + `ci_to_t +( + `t_rcv_wnd_cut +( +ts +)) >= 0); + +461 if +ts +-> +tags + & +CI_TCPT_FLAG_TSO + ) { + +462 + `vify +( +ts +-> +outgog_hdrs_n + == + +463 ( +ci_4_hdr ++ ( +ci_t_hdr +) + 12); + +464 + `vify +( + `t_outgog_ts_n +( +ts +) == 12); + +467 + `vify +( +ts +-> +outgog_hdrs_n + =( +ci_4_hdr ++ ( +ci_t_hdr +)); + +468 + `vify +( + `t_outgog_ts_n +( +ts +) == 0); + +470 + `vify +( + `CI_TCP_HDR_LEN +( + `TS_TCP +( +ts +)) == + +471 ( +ci_t_hdr ++ + `t_outgog_ts_n +( +ts +)); + +474 + `ci_t_e_cv_as_vid +( +tif +, +ts +, 0, +fe +, +le +); + +477 + `ci_t_e_rob_as_vid +( +tif +, +ts +, +fe +, +le +); + +480 + `ci_t_e_cg_as_vid +( +tif +, +ts +, +fe +, +le +); + +483 + `ci_t_e_s_as_vid +( +tif +, +ts +, +fe +, +le +); + +486 + `ci_t_e_nd_as_vid +( +tif +, +ts +, +fe +, +le +); + +488 if +ts +-> +tags + & +CI_TCPT_FLAG_SACK + ){ + +490  +num + = 0;um < +CI_TCP_SACK_MAX_BLOCKS +;um++ ) { + +491 if + `OO_PP_NOT_NULL +( +ts +-> +ϡ_ck +[ +num +]) ) { + +493 +ck_pots__rob + = 0; + +494 +ev_pkt + = 0; + +495  +id + = +ts +-> +rob +. +hd +; + `OO_PP_NOT_NULL +(id); id = +pkt +-> +xt + ) { + +496 +pkt + = + `PKT_CHK +( +tif +, +id +); + +497 if + `OO_PP_EQ +( +id +, +ts +-> +ϡ_ck +[ +num +]) ) { + +500 + `vify +(! +ck_pots__rob +); + +501 +ck_pots__rob + = 1; + +502 if( +ev_pkt +){ + +505 + `vify +(! + `SEQ_EQ +( +ev_pkt +-> +pf +. +t_tx +. +d_q +, + +506 +pkt +-> +pf +. +t_tx +. +t_q +)); + +509 +ev_pkt + = +pkt +; + +511 + `vify +( +ck_pots__rob +); + +516 if +ed_uock + ) + `ci_tif_uock +( +tif +); + +518 + } +} + +521 #ide +NDEBUG + + +522  + $ci_t__as_vid +( +cp_sock +* + +, cڡ * +fe +,  +le +) + +524 + `ci_as +( + +); + +525 + `ci_tif_as_vid +( + +-> +tif +, +fe +, +le +); + +526 + `vify +( + +-> +s +-> +b +. +e + & +CI_TCP_STATE_TCP +); + +527 if + +-> +s +-> +b +. +e + = +CI_TCP_LISTEN + ) + +528 + `ci_t_e_li_as_vid +( + +-> +tif +, + `SOCK_TO_TCP_LISTEN +p-> +s +), + +529 +fe +, +le +); + +531 + `ci_t_e_as_vid +( + +-> +tif +, + `SOCK_TO_TCP +p-> +s +), +fe +, +le +); + +532 + } +} + +540 #i(! +defed +( +__KERNEL__ +)|| defed( +CI_CFG_BUILD_DUMP_CODE_IN_KERNEL +) + +542  + $ci_t_pkt_dump +( +ci_tif + * +ni +, +ci__pkt_fmt +* +pkt +,  +is_cv +,  +dump +) + +544 +ci_t_hdr +* +t + = + `PKT_TCP_HDR +( +pkt +); + +545 +oo_pkt_p + +buf +; + +547 if +is_cv + ) { + +548 +oo_offbuf +* +buf + = & +pkt +->buf; + +549 + `log +(" %4d: %08x-%08x [" +CI_TCP_FLAGS_FMT +"]e=%d", + `OO_PKT_FMT +( +pkt +), + +550 + `SEQ +( + `PKT_TCP_HDR +( +pkt +)-> +t_q_be32 +), SEQkt-> +pf +. +t_rx +. +d_q +), + +551 + `CI_TCP_HDR_FLAGS_PRI_ARG +( +t +), + `oo_offbuf_ +( +buf +)); + +552 if +dump + & 1 ) + +553 + `ci_hex_dump +( +ci_log_ +, + `oo_h_hdr +( +pkt +), + +554 + `oo__hdr +( +pkt +)-> +_t_n_be16 + + + `oo_h_hdr_size +(pkt), 0); + +557  +i +, +yn + = + `TX_PKT_LEN +( +pkt +) - + +558 ( + `oo_h_hdr_size +( +pkt ++ + `CI_IP4_IHL +( + `oo__hdr +(pkt)) + + +559 + `CI_TCP_HDR_LEN +( +t +)); + +561 if +CI_IP_PKT_SEGMENTS_MAX + != 6 ) + +562 + `ci_log +("FIXME: %s:%d", +__FILE__ +, +__LINE__ +); + +564 + `log +(" %4d: %08x-%08x [" +CI_TCP_FLAGS_FMT +"]buf=%daylen=%d " + +565 "q=%d spc=%d " +CI_PKT_FLAGS_FMT +, + `OO_PKT_FMT +( +pkt +), + +566 + `SEQ +( +pkt +-> +pf +. +t_tx +. +t_q +), + +567 + `SEQ +( +pkt +-> +pf +. +t_tx +. +d_q +), + `CI_TCP_HDR_FLAGS_PRI_ARG +( +t +), + +568 +pkt +-> +n_bufrs +, +yn +, + +569 + `SEQ_SUB +( +pkt +-> +pf +. +t_tx +. +d_q +,kt->pf.t_tx. +t_q +), + +570 + `oo_offbuf_ +(& +pkt +-> +buf +), + +571 + `CI_PKT_FLAGS_PRI_ARG +( +pkt +)); + +572 +buf + = + `OO_PKT_P +( +pkt +); + +573  +i + = 0; i < +pkt +-> +n_bufrs +; ++i ) { + +574 +ci__pkt_fmt +* +kt + = + `PKT_CHK +( +ni +, +buf +); + +575 + `log +(" : " +EF_ADDR_FMT +":%d", + +576 +kt +-> +dma_addr +[ +pkt +-> +tf_i +],pkt-> +buf_n +); + +577 +buf + = +kt +-> +ag_xt +; + +579 if +dump + & 1 ) + +580 + `ci_hex_dump +( +ci_log_ +, + `oo_h_hdr +( +pkt +),kt-> +buf_n +, 0); + +582 + } +} + +585  + $ci_t_e_dump_qs +( +ci_tif +* +ni +,  +_id +,  +dump +) + +587 +ci_t_e +* +ts +; + +589 if! + `IS_VALID_SOCK_ID +( +ni +, +_id +) ) + +590 + `log +("%s: invid id %d", +__FUNCTION__ +, +_id +); + +592 +ts + = + `ID_TO_TCP +( +ni +, +_id +); + +594 if +ts +-> +s +. +b +. +e + = +CI_TCP_LISTEN + ) { + +595 + `log +("%s: %d LISTEN (TODO)", +__FUNCTION__ +, + `S_FMT +( +ts +)); + +599 + `log +("%s: " +NTS_FMT +, +__FUNCTION__ +, + `NTS_PRI_ARGS +( +ni +, +ts +)); + +600 + `log +("cv1:xa=%d", + `OO_PP_FMT +( +ts +-> +cv1_exa +)); + +601 + `ci_tif_pkt_queue_dump +( +ni +, & +ts +-> +cv1 +, 1, +dump +); + +602 + `log +("recv2:"); + +603 + `ci_tif_pkt_queue_dump +( +ni +, & +ts +-> +cv2 +, 1, +dump +); + +604 + `log +("rob:"); + +605 + `ci_tif_pkt_queue_dump +( +ni +, & +ts +-> +rob +, 1, +dump +); + +606 + `log +("send:"); + +607 + `ci_tif_pkt_queue_dump +( +ni +, & +ts +-> +nd +, 0, +dump +); + +608 + `log +("retrans:"); + +609 + `ci_tif_pkt_queue_dump +( +ni +, & +ts +-> +s +, 0, +dump +); + +610 + } +} + +613  + $ci_t_e_dump_rob +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +615 +ci__pkt_queue +* +rob + = & +ts +->rob; + +616  +i + = 1; + +617 +ci__pkt_fmt +* +pkt +; + +618 +oo_pkt_p + +pkt_id +; + +619 +oo_pkt_p + +t_id + = +rob +-> +hd +; + +621 + `log +("%s: " +NTS_FMT +, +__FUNCTION__ +, + `NTS_PRI_ARGS +( +tif +, +ts +)); + +622  +pkt_id + = +rob +-> +hd +; + `OO_PP_NOT_NULL +kt_id);kt_id = +pkt +-> +xt +) { + +623 +pkt + = + `PKT +( +tif +, +pkt_id +); + +624 if + `OO_PP_EQ +( +pkt_id +, +t_id +) ) { + +625 + `log +(" %d block iROB", +i +); + +626 +t_id + = + `PKT_TCP_RX_ROB +( +pkt +)-> +xt_block +; + +628 + `ci_t_pkt_dump +( +tif +, +pkt +, 1, 0); + +630 + `log +("End of ROB dump"); + +631 + } +} + +634  + $ci_t_e_dump_s_blocks +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +636 +ci__pkt_queue +* +q + = & +ts +-> +s +; + +637 +ci__pkt_fmt + * +pkt +, * +d +; + +638 +oo_pkt_p + +id +; + +640 + `log +("%s: " +NTS_FMT + +TCP_SND_FMT +, +__FUNCTION__ +, + `NTS_PRI_ARGS +( +ni +, +ts +), + +641 + `TCP_SND_PRI_ARG +( +ts +)); + +643  +id + = +q +-> +hd +; + `OO_PP_NOT_NULL +(id); id = +d +-> +xt + ) { + +644 +pkt + = + `PKT +( +ni +, +id +); + +645 if + `OO_PP_NOT_NULL +( +pkt +-> +pf +. +t_tx +. +block_d +) ) + +646 +d + = + `PKT +( +ni +, +pkt +-> +pf +. +t_tx +. +block_d +); + +648 +d + = + `PKT +( +ni +, +q +-> + +); + +649 + `log +(" %08x-%08x %d-%d=%d%s%s", +pkt +-> +pf +. +t_tx +. +t_q +, + +650 +d +-> +pf +. +t_tx +. +d_q +, + `OO_PKT_FMT +( +pkt +), OO_PKT_FMT(end), + +651 + `SEQ_SUB +( +d +-> +pf +. +t_tx +. +d_q +, +pkt +->pf.t_tx. +t_q +), + +652 +d +-> +ags + & +CI_PKT_FLAG_TX_PENDING + ? " inflight":"", + +653 +pkt +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED + ? " sacked":""); + +655 + } +} + +658  + $ci_t_e_dump_s +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +660 +ci__pkt_queue +* +q + = & +ts +-> +s +; + +661 +ci__pkt_fmt +* +pkt +; + +662 +oo_pkt_p + +id +; + +664 + `log +("%s: " +NTS_FMT +" " +TCP_SND_FMT +, +__FUNCTION__ +, + +665 + `NTS_PRI_ARGS +( +ni +, +ts +), + `TCP_SND_PRI_ARG +(ts)); + +667  +id + = +q +-> +hd +; + `OO_PP_NOT_NULL +(id); id = +pkt +-> +xt + ) { + +668 +pkt + = + `PKT +( +ni +, +id +); + +669 + `log +(" %4d: %08x-%08xen=%u block_end=%d %s%s%s", + +670 + `OO_PP_FMT +( +id +), + `SEQ +( +pkt +-> +pf +. +t_tx +. +t_q +), + +671 + `SEQ +( +pkt +-> +pf +. +t_tx +. +d_q +),kt-> +buf_n +, + +672 + `OO_PP_FMT +( +pkt +-> +pf +. +t_tx +. +block_d +), + +673 +pkt +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED + ? " sacked":"", + +674 +pkt +-> +ags + & +CI_PKT_FLAG_RTQ_RETRANS + ? "etrans":"", + +675 +pkt +-> +ags + & +CI_PKT_FLAG_TX_PENDING + ? " inflight":""); + +677 + } +} + +682  + $ci_t_sock_cmn_dump +( +ci_tif +* +ni +, +ci_t_sock_cmn +* +tsc +, + +683 cڡ * +pf +, + +684 +oo_dump_log__t + +logg +, * +log_g +) + +687 + } +} + +690  + $ci_t_sock_li_dump +( +ci_tif +* +ni +, +ci_t_sock_li +* +s +, + +691 cڡ * +pf +, + +692 +oo_dump_log__t + +logg +, * +log_g +) + +694 + `ci_t_sock_cmn_dump +( +ni +, & +s +-> +c +, +pf +, +logg +, +log_g +); + +696 + `logg +( +log_g +, "%iq: max=%d=%dew=%d bucks=%d", +pf +, + +697 + `ci_t_liq_max +( +ni +), +s +-> +n_liq +,ls-> +n_liq_w +, + +698 +s +-> +n_bucks +); + +699 + `logg +( +log_g +, "%cq: max=%d=%dced=%d", +pf +, + +700 +s +-> +acq_max +, + `ci_t_acq_n +ls),ls-> +acq_n_out +); + +701 + `logg +( +log_g +, "% der_ac=%d", +pf +, +s +-> +c +. +t_der_ac +); + +702 #i +CI_CFG_FD_CACHING + + +703 + `logg +( +log_g +, "%s sockcache:=%d sock_n=%d cache=%sending=%s", + +704 +pf +, +ni +-> +e +-> +ssive_che_ava_ack +, +s +-> +che_ava_sock +, + +705 + `ci_ni_di_is_emy +( +ni +, & +s +-> +che +. +che +) ? "EMPTY":"yes", + +706 + `ci_ni_di_is_emy +( +ni +, & +s +-> +che +. +ndg +) ? "EMPTY":"yes"); + +708 #i +CI_CFG_STATS_TCP_LISTEN + + +710 +ci_t_sock_li_s +* +s + = & +s +-> +s +; + +711 #i +CI_CFG_FD_CACHING + + +712 + `logg +( +log_g +, "% sockche_h=%d", +pf +, +s +-> +n_sockche_h +); + +714 + `logg +( +log_g +, + +716 +pf +, +s +-> +n_liq_ovow +, s-> +n_liq_no_syecv +, + +717 +s +-> +n_acq_ovow +, s-> +n_acq_no_sock +); + +718 + `logg +( +log_g +, "%s_loop2_closed=%d_no_fd=%dck_rsts=%d os=%d", + +719 +pf +, +s +-> +n_ac_lo2_od +, s-> +n_ac_no_fd +, + +720 +s +-> +n_acks_t +, s-> +n_ac_os +); + +721 if + `NI_OPTS +( +ni +). +t_syncooks + ) { + +722 + `logg +( +log_g +, "%s syncookies: syn_recv=%dck_recv=%dck_answ=%d", + +723 +pf +, +s +-> +n_syncook_syn +, s-> +n_syncook_ack_cv +, + +724 +s +-> +n_syncook_ack_sw +); + +725 + `logg +( +log_g +, "%s syncookiesejected:imestamp=%d crypto_hash=%d", + +726 +pf +, +s +-> +n_syncook_ack_ts_j +, s-> +n_syncook_ack_hash_j +); + +730 + } +} + +732  + $le_fmt_tim +(* +buf +,  +n +,  +pos +, + +733 cڡ * +fmt +, +ci_time_t + +d +, + +734 +ci_time_t + +t +, + +735 +oo_dump_log__t + +logg +, * +log_g +) + +737  +ava + = +n + - +pos +; + +738  +n +; + +739 i( +n + = + `ci_tf +( +buf + + +pos +, +ava +, +fmt +, +d +, +t +)) >=vail) { + +740 +buf +[ +pos +] = '\0'; + +741 + `logg +( +log_g +, "%s", +buf +); + +742 +pos + = 0; + +743 +n + = + `ci_tf +( +buf +, +ava +, +fmt +, +d +, +t +); + +745  +pos + + +n +; + +746 + } +} + +749 #i +CI_CFG_CONGESTION_WINDOW_VALIDATION + + +750  + #t_cwnd_ud +( +ts +(s)-> +cwnd_ud +) + + ) + +752  + #t_cwnd_ud +( +ts +0 + + ) + +756  + #LINE_LEN + (79) + + ) + +757  + $ci_t_e_dump +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +758 cڡ * +pf +, + +759 +oo_dump_log__t + +logg +, * +log_g +) + +761  +oo_t_sock_s + +s + = +ts +->stats; + +762 +ci_time_t + +now + = + `ci__time_now +( +ni +); + +763  +buf +[ +LINE_LEN + + 1]; + +764  +n +; + +766 if +ts +-> +s +. +timeampg_ags + & +ONLOAD_SOF_TIMESTAMPING_TX_HARDWARE + ) + +767 + `ci_udp_cvq_dump +( +ni +, & +ts +-> +timeamp_q +, +pf +, " TXimestamping queue:", + +768 +logg +, +log_g +); + +770 + `ci_t_sock_cmn_dump +( +ni +, & +ts +-> +c +, +pf +, +logg +, +log_g +); + +772 + `logg +( +log_g +, "%ags: " +CI_TCP_SOCKET_FLAGS_FMT +"ocal_peer: %d", + +773 +pf +, + `CI_TCP_SOCKET_FLAGS_PRI_ARG +( +ts +),s-> +lol_ +); + +775 + `logg +( +log_g +, "%s snd: up=%08x una-nxt-max=%08x-%08x-%08xnq=%08x%s", + +776 +pf +, + +777 + `t_d_up +( +ts +), + `t_d_u +s), + `t_d_nxt +s),s-> +d_max +, + +778 + `t_q_nxt +( +ts +), + +779 + `SEQ_LT +( + `t_d_nxt +( +ts ++s-> +d_deged +, + `t_d_up +(ts)) ? + +781 + `logg +( +log_g +, + +783 +pf +, + `SEQ_SUB +( + `t_q_nxt +( +ts +), + `t_d_nxt +s)),s-> +nd +. +num +, + +784 + `ci_t_ndq_n_pkts +( +ts +), + +785 + `ci_t_ight +( +ts +),s-> +s +. +num +, + `t_d_wnd +(ts), + +786 + `SEQ_SUB +( +ts +-> +d_max +, + `t_d_nxt +(ts))); + +787 if +ts +-> +d_deged + != 0 ) + +788 + `logg +( +log_g +, "% snd deged=%d", +pf +, +ts +-> +d_deged +); + +789 + `logg +( +log_g +, "%s snd: cwnd=%d+%d used=%d ssthresh=%d bytes_acked=%d %s", + +790 +pf +, +ts +-> +cwnd +,s-> +cwnd_exa +, + `t_cwnd_ud +(ts), + +791 +ts +-> +shsh +,s-> +bys_acked +, + `cge_r +(ts)); + +792 + `logg +( +log_g +, "%s snd:imed_seq %ximed_ts %x", + +793 +pf +, +ts +-> +timed_q +,s-> +timed_ts +); + +794 + `logg +( +log_g +, "% snd: sndbuf_pkts=%d " +OOF_IPCACHE_STATE +" " + +795 +OOF_IPCACHE_DETAIL +, + +796 +pf +, +ts +-> +so_dbuf_pkts +, + `OOFA_IPCACHE_STATE +( +ni +, &ts-> +s +. +pkt +), + +797 + `OOFA_IPCACHE_DETAIL +(& +ts +-> +s +. +pkt +)); + +798 + `logg +( +log_g +, "%s snd:imitedwnd=%d cwnd=%dagle=%d more=%dpp=%d", + +799 +pf +, +s +. +tx__rwnd +, sts. +tx__cwnd +, sts. +tx__g +, + +800 +s +. +tx__me +, sts. +tx__p +); + +802 + `logg +( +log_g +, "%cv:xt-max=%08x-%08x wnddv=%d cur=%d %s%s", +pf +, + +803 + `t_rcv_nxt +( +ts +), + `t_rcv_wnd_right_edge_ +(ts), + +804 + `t_rcv_wnd_advtid +( +ts +), + `t_rcv_wnd_cut +(ts), + +805 + `ci_t_is__硡t +( +ts +) ? " FASTSTART":"", + +806 + `ci_t_n_u__th +( +ts +) ? " FAST":""); + +807 + `logg +( +log_g +, "%scv: bytes=%dob_pkts=%d q_pkts=%d+%d usr=%d", + +808 +pf +, +ts +-> +rcv_added + - +s +. +rx_i +,s-> +rob +. +num +,s-> +cv1 +.num, + +809 +ts +-> +cv2 +. +num +, + `t_rcv_u +(ts)); + +811 + `logg +( +log_g +, + +813 +pf +, +ts +-> +eff_mss +,s-> +smss +,s-> +amss +, + +814 +ts +-> +nd +. +num + +s-> +s +.num +s-> +rob +.num+ts-> +cv1 +.num + +815 + +ts +-> +cv2 +. +num +,s-> +d_ws +,s-> +rcv_ws +); + +816 + `logg +( +log_g +, "% st=%02dv=%03dto=%d zws=%u,%u", +pf +, + +817 + `t_ +( +ts +), + `t_tv +s),s-> +o +,s-> +zw_obes +, + +818 +ts +-> +zw_acks +); + +819 + `logg +( +log_g +, + +821 +pf +, +ts +-> +sms +, +s +. +tٮ_s +,s-> +dup_acks +); + +822 + `logg +( +log_g +, + +824 "ooo=%d", +pf +, +s +. +os +, + +825 +s +. +_covs +, sts. +rx_q_rs +, sts. +rx_ack_q_rs +, + +826 +s +. +rx_ooo_pkts +, sts. +rx_ooo_fl +); + +827 + `logg +( +log_g +, "%x: der=%domac=%u wm=%u wm_ab܋d=%u", +pf +, + +828 +s +. +tx_der +, sts. +tx_nomac_der +, sts. +tx_msg_wm +, + +829 +s +. +tx_msg_wm_abt +); + +830 + `logg +( +log_g +, "%m: sd_=%u sd_ow=%uive=%u", +pf +, + +831 +s +. +tx_tm_nd_ +, sts. +tx_tm_nd_ow +, + +832 +s +. +tx_tm_aive +); + +834 #ide +__KERNEL__ + + +835  + #fmt_tim +( +_b +, +_l +, +_n +, +me +, +fld +) \ + +836 if + `ci__tim_ndg +( +ni +, & +ts +-> +fld +) ) \ + +837 +_n + = + `le_fmt_tim +( +_b +, +_l +, _n, #name"(%ums[%x]) ", \ + +838 + `ci__time_ticks2ms +( +ni +, +ts +-> +fld +. +time +- +now +), \ + +839 +ts +-> +fld +. +time +, \ + +840 +logg +, +log_g +) + + ) + +842  + #fmt_tim +( +_b +, +_l +, +_n +, +me +, +fld +) \ + +843 if + `ci__tim_ndg +( +ni +, & +ts +-> +fld +) ) \ + +844 +_n + = + `le_fmt_tim +( +_b +, +_l +, _n, #name"(%uticks[%x]) ", \ + +845 +ts +-> +fld +. +time +- +now +,s->field.time, \ + +846 +ci_log_dump_ +, +NULL +) + + ) + +849 + `logg +( +log_g +, "%ims: ", +pf +); + +850 +n + = 0; + +851 +buf +[0] = '\0'; + +852 + `fmt_tim +( +buf +, +LINE_LEN +, +n +, +o +, +o_tid +); + +853 + `fmt_tim +( +buf +, +LINE_LEN +, +n +, +dack +, +dack_tid +); + +854 + `fmt_tim +( +buf +, +LINE_LEN +, +n +, +zw +, +zw_tid +); + +855 + `fmt_tim +( +buf +, +LINE_LEN +, +n +, +kive +, +kive_tid +); + +856 + `fmt_tim +( +buf +, +LINE_LEN +, +n +, +pmtu +, +pmtus +. +tid +); + +857 + `logg +( +log_g +, "%s", +buf +); + +858 + } +} + +861  + $ci_t_e_dump_id +( +ci_tif +* +ni +,  +_id +) + +863 if! + `IS_VALID_SOCK_ID +( +ni +, +_id +) ) { + +864 + `log +("%s: invid id=%d", +__FUNCTION__ +, +_id +); + +868 + `ci_t_e_dump +( +ni +, + `ID_TO_TCP +i, +_id +), "", +ci_log_dump_ +, +NULL +); + +869 + } +} + +880  + #CI_TCP_RX_CHK_DEST_MAC + 0x2 + + ) + +881  + #CI_TCP_RX_CHK_SRC_MAC + 0x4 + + ) + +882  + #CI_TCP_RX_CHK_SRC_IS_EFAB + 0x8 + + ) + +883  + #CI_TCP_RX_CHK_IP_CSUM + 0x10 + + ) + +884  + #CI_TCP_RX_CHK_TCP_CSUM + 0x20 + + ) + +885  + #CI_TCP_RX_CHK_PORT + 0x40 + + ) + +887  + #DUMP_PKT + 1 + + ) + +888  + #DUMP_PKT_ADDR + (2|1) + + ) + +889  + #DUMP_SOCK + 4 + + ) + +890  + #DUMP_SOCK_ADDR + (8|4) + + ) + +892 #unde +LPF + + +893  + #LPF + "ci_t_rx_checks: " + + ) + +895  + $t_rx_checks_cmn +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +, + +896 +ci__pkt_fmt +* +pkt +, * +dump +) + +898  +chk + = + `NI_OPTS +( +ni +). +t_rx_checks +; + +899 +ci_t_hdr +* +t + = + `PKT_TCP_HDR +( +pkt +); + +903 if +chk + & +CI_TCP_RX_CHK_DEST_MAC + ) { + +904 +ci_ut8 + +mac +[ +ETH_ALEN +]; + +908 + `ef_vi_g_mac +(& +ni +-> +nic_hw +[ +pkt +-> +tif +. +rx +. +nic_i +]. + +, +mac +); + +909 if + `memcmp +( + `oo_h_dho +( +pkt +), +mac +, +ETH_ALEN +) ) { + +910 + `ci_log +( +LPF + "Wng: DHOST_NOT_DEFAULT: undlyg=" +CI_MAC_PRINTF_FORMAT +, + +911 + `CI_MAC_PRINTF_ARGS +( +mac +)); + +912 * +dump + | +DUMP_PKT_ADDR + | +DUMP_SOCK_ADDR +; + +917 if +chk + & +CI_TCP_RX_CHK_SRC_IS_EFAB + ) { + +918 +ci_ut8 + +mac_efix +[] = { 0x00, 0x0F, 0x53, 0x00 }; + +919 if + `memcmp +( + `oo_h_sho +( +pkt +), +mac_efix +, (mac_prefix)) ) { + +920 + `ci_log +( +LPF + "SHOST_NOT_EFAB:"); + +921 * +dump + | +DUMP_PKT_ADDR + | +DUMP_SOCK_ADDR +; + +925 if +chk + & +CI_TCP_RX_CHK_IP_CSUM + ) { + +929 if +chk + & +CI_TCP_RX_CHK_TCP_CSUM + ) { + +934 if +t +-> +t_ags + & + `NI_OPTS +( +ni +). +t_rx_log_ags + ) + +935 * +dump + | +DUMP_SOCK + | +DUMP_PKT +; + +936 + } +} + +939  + $t_rx_checks_dump_cmn +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +, + +940  +dump +) + +942 +ci_t_hdr +* +t + = + `PKT_TCP_HDR +( +pkt +); + +944 if( +dump + & +DUMP_PKT +) == DUMP_PKT ) + +945 + `ci_log +( +LPF + "pk" +CI_IP_PRINTF_FORMAT +":%u=>"CI_IP_PRINTF_FORMAT":%u [" + +946 +CI_TCP_FLAGS_FMT +"]", + +947 + `CI_IP_PRINTF_ARGS +(& + `oo__hdr +( +pkt +)-> +_ddr_be32 +), + +948 ( + `CI_BSWAP_BE16 +( +t +-> +t_sour_be16 +), + +949 + `CI_IP_PRINTF_ARGS +(& + `oo__hdr +( +pkt +)-> +_daddr_be32 +), + +950 ( + `CI_BSWAP_BE16 +( +t +-> +t_de_be16 +), + +951 + `CI_TCP_HDR_FLAGS_PRI_ARG +( +t +)); + +953 if( +dump + & +DUMP_PKT_ADDR +) == DUMP_PKT_ADDR ) + +954 + `ci_log +( +LPF + "pk" +CI_MAC_PRINTF_FORMAT +"=>"CI_MAC_PRINTF_FORMAT, + +955 + `CI_MAC_PRINTF_ARGS +( + `oo_h_sho +( +pkt +)), + +956 + `CI_MAC_PRINTF_ARGS +( + `oo_h_dho +( +pkt +))); + +957 + } +} + +960  + $ci_t_rx_checks +( +ci_tif +* +ni +, +ci_t_e +* +ts +, +ci__pkt_fmt +* +pkt +) + +962  +chk + = + `NI_OPTS +( +ni +). +t_rx_checks +; + +963  +dump + = 0; + +965 + `t_rx_checks_cmn +( +ni +, & +ts +-> +s +, +pkt +, & +dump +); + +968 if +chk + & +CI_TCP_RX_CHK_PORT + ) { + +972 #i +CI_CFG_PORT_STRIPING + + +973 ! ( +ts +-> +tags + & +CI_TCPT_FLAG_STRIPE +) && + +975 +pkt +-> +tif +. +rx +. +pt_i + ! + `ci_hwpt_g_p܊o +( +ts +-> +s +.pkt. +hwpt +) ) { + +976 + `ci_log +( +LPF + "PORT_BAD: outgoing_port=%d incoming_port=%d", + +977 + `ci_hwpt_g_p܊o +( +ts +-> +s +. +pkt +. +hwpt +),kt-> +tif +. +rx +. +pt_i +); + +978 +dump + | +DUMP_PKT_ADDR + | +DUMP_SOCK_ADDR +; + +983 if +chk + & +CI_TCP_RX_CHK_SRC_MAC + ) { + +987 +ci_ut8 + +mac +[ +ETH_ALEN +]; + +988  +twidd +; + +989 +twidd + = + `oo_h_dho +( +pkt +)[5] ^ + +990 ((*) + `ci__che_h_sho +(& +ts +-> +s +. +pkt +))[5]; + +991 + `memy +( +mac +, + `ci__che_h_dho +(& +ts +-> +s +. +pkt +), +ETH_ALEN +); + +992 +mac +[5] ^ +twidd +; + +993 if + `memcmp +( + `oo_h_sho +( +pkt +), +mac +, +ETH_ALEN +) ) { + +994 + `ci_log +( +LPF + "SHOST_BAD:xed=" +CI_MAC_PRINTF_FORMAT +, + +995 + `CI_MAC_PRINTF_ARGS +( +mac +)); + +996 +dump + | +DUMP_PKT_ADDR + | +DUMP_SOCK_ADDR +; + +1003 + `t_rx_checks_dump_cmn +( +ni +, +pkt +, +dump +); + +1005 if( +dump + & +DUMP_SOCK +) == DUMP_SOCK ) { + +1006 + `ci_log +( +LNT_FMT + "d=%d inf=%dcv=%d %s", + `LNT_PRI_ARGS +( +ni +, +ts +), + +1007 + `SEQ_SUB +( + `t_q_nxt +( +ts +), + `t_d_nxt +(ts)), + +1008 + `ci_t_ight +( +ts +), + `t_rcv_u +s), + `e_r +(ts)); + +1009 + `ci_log +( +LNT_FMT + +CI_IP_PRINTF_FORMAT +":%u=>"CI_IP_PRINTF_FORMAT":%u", + +1010 + `LNT_PRI_ARGS +( +ni +, +ts +), + +1011 + `CI_IP_PRINTF_ARGS +(& + `t_ddr_be32 +( +ts +)), + +1012 ( + `CI_BSWAP_BE16 +( + `t_t_be16 +( +ts +)), + +1013 + `CI_IP_PRINTF_ARGS +(& + `t_ddr_be32 +( +ts +)), + +1014 ( + `CI_BSWAP_BE16 +( + `t_t_be16 +( +ts +))); + +1016 if( +dump + & +DUMP_SOCK_ADDR +) == DUMP_SOCK_ADDR ) + +1017 + `ci_log +( +LNT_FMT + +CI_MAC_PRINTF_FORMAT +"=>"CI_MAC_PRINTF_FORMAT" hwport=%d" + +1018 " se=%x", + `LNT_PRI_ARGS +( +ni +, +ts +), + +1019 + `CI_MAC_PRINTF_ARGS +( + `ci__che_h_sho +(& +ts +-> +s +. +pkt +)), + +1020 + `CI_MAC_PRINTF_ARGS +( + `ci__che_h_dho +(& +ts +-> +s +. +pkt +)), + +1021 ( +ts +-> +s +. +pkt +. +hwpt +, + +1022 #i +CI_CFG_PORT_STRIPING + + +1023 !!( +ts +-> +tags + & +CI_TCPT_FLAG_STRIPE +) + +1028 + } +} + +1031  + $ci_t_li_rx_checks +( +ci_tif +* +ni +, +ci_t_sock_li +* +s +, + +1032 +ci__pkt_fmt +* +pkt +) + +1034  +dump + = 0; + +1036 + `t_rx_checks_cmn +( +ni +, & +s +-> +s +, +pkt +, & +dump +); + +1037 + `t_rx_checks_dump_cmn +( +ni +, +pkt +, +dump +); + +1038 + } +} + + @tcp_driver_ops.c + +14  + ~ + +15  + ~ + +16  + ~ + +18 #ide +__KERNEL__ + + +22  + $ci_t_hr_me_bufs +( +ci_tif +* +ni +) + +24  + `eb_t_hr_me_bufs +( + `tif2t_hr_sour +( +ni +)); + +25 + } +} + +27  + $ci_t_hr_me_socks +( +ci_tif +* +ni +) + +29  + `eb_t_hr_me_socks +( + `tif2t_hr_sour +( +ni +)); + +30 + } +} + + @tcp_helper.c + +14  + ~"_.h +" + +15  + ~ + +17 #ifde +__unix__ + + +18  + ~ + +19  + ~ + +21  + ~ + +23  + ~ + +24 #ifde +__lux__ + + +25  + ~ + +26  + ~ + +29  + #VERB +( +x +) + + ) + +32  + $ci_t_hr_me_bufs +( +ci_tif +* +ni +) + +34  + `oo_sour_ +( + `ci_tif_g_driv_hd +( +ni +), + +35 +OO_IOC_TCP_MORE_BUFS +, +NULL +); + +36 + } +} + +38  + $ci_t_hr_me_socks +( +ci_tif +* +ni +) + +40  + `oo_sour_ +( + `ci_tif_g_driv_hd +( +ni +), + +41 +OO_IOC_TCP_MORE_SOCKS +, +NULL +); + +42 + } +} + +44 #i +CI_CFG_FD_CACHING + + +45  + $ci_t_hr_r_che +( +ci_tif +* +ni +) + +47  + `oo_sour_ +( + `ci_tif_g_driv_hd +( +ni +), + +48 +OO_IOC_TCP_CLEAR_EPCACHE +, +NULL +); + +49 + } +} + +52 #ifde +_WIN32 + + +53  + $ci_t_hr_sr_comi +( +ci_fd_t + +fd +) + +55  +rc +; + +57 +rc + = + `oo_sour_ +( +fd +, +OO_IOC_TCP_XFER_COMPLETION +, +NULL +); + +58 if +rc + < 0 ) { + +59 + `LOG_SV +( + `ci_log +("%s: faed f %x (rc=%d)", +__FUNCTION__ +, +fd +, +rc +)); + +61  +rc +; + +62 + } +} + +82  + $ci_t_hr__t_frs +( +ci_fd_t + +fd +, + +83 +oo_ + + +, + +84 +ci_ifid_t + +bdto_ifdex +, + +85 +oo_ + +om_t_id +) + +87 +oo_t_fr_t_t + + +; + +88  +rc +; + +90 + +. +t_id + = + +; + +91 + +. +bdto_ifdex + = bindto_ifindex; + +92 + +. +om_t_id + = from_tcp_id; + +94 + `VERB +( + `ci_log +("%s: id=%d", +__FUNCTION__ +, + +)); + +95 +rc + = + `oo_sour_ +( +fd +, +OO_IOC_EP_FILTER_SET +, & + +); + +97 if +rc + < 0 ) + +98 + `LOG_SV +( + `ci_log +("%s: faed f %d (rc=%d)", +__FUNCTION__ +, + +99 + `OO_SP_FMT +( + +), +rc +)); + +100  +rc +; + +101 + } +} + +109  + $ci_t_hr__upt_bd +( +ci_fd_t + +fd +, + +110 cڡ * +u_me +, + +111 +ci_t32 + +u_size +, + +112 +ci_ut32 + +u_t_t +, + +113 +ci_ut32 + +addr_be32 +, + +114 +ci_ut16 + +pt_be16 +) + +116 +oo_t_upt_bd_t + + +; + +117  +rc +; + +119 + `y +( + +. +u_me +, clu_me, +CI_CFG_CLUSTER_NAME_LEN +); + +120 + +. +u_me +[ +CI_CFG_CLUSTER_NAME_LEN +] = '\0'; + +121 + +. +u_size + = cluster_size; + +122 + +. +u_t_t + = cluster_restart_opt; + +123 + +. +addr_be32 + =ddr_be32; + +124 + +. +pt_be16 + =ort_be16; + +125 + `VERB +( + `ci_log +("%s: id=%d", +__FUNCTION__ +, +fd +)); + +126 +rc + = + `oo_sour_ +( +fd +, +OO_IOC_EP_REUSEPORT_BIND +, & + +); + +128 if +rc + < 0 ) + +129 + `LOG_SV +( + `ci_log +("%s: faed f %d (rc=%d)", +__FUNCTION__ +, +fd +, +rc +)); + +130  +rc +; + +131 + } +} + +139  + $ci_t_hr_u_dump +(* +aque +, * +buf +,  +buf_n +) + +141 +u_dump_gs +* +gs + = +aque +; + +142 +oo_u_dump_t + + +; + +143 + `CI_USER_PTR_SET +( + +. +buf +, buf); + +144 + +. +buf_n + = buf_len; + +145  + `oo_sour_ +( +gs +-> +fd +, +OO_IOC_CLUSTER_DUMP +, & + +); + +146 + } +} + +160  + $ci_t_hr__r_frs +( +ci_fd_t + +fd +, +oo_ + + +,  +ed_upde +) + +162 +oo_t_fr_r_t + + +; + +163  +rc +; + +165 + +. +t_id + = + +; + +166 + +. +ed_upde + = !!need_update; + +168 + `VERB +( + `ci_log +("%s: id=%d", +__FUNCTION__ +, + +)); + +169 +rc + = + `oo_sour_ +( +fd +, +OO_IOC_EP_FILTER_CLEAR +, & + +); + +171 if +rc + < 0 ) + +172 + `LOG_SV +( + `ci_log +("%s: faed f %d (rc=%d)", +__FUNCTION__ +, + +173 + `OO_SP_FMT +( + +), +rc +)); + +174  +rc +; + +175 + } +} + +189  + $ci_t_hr__fr_dump +(* +aque +, * +buf +,  +buf_n +) + +191 +fr_dump_gs +* +gs + = +aque +; + +192 +oo_t_fr_dump_t + + +; + +193 + +. +sock_id + = +gs +->sock_id; + +194 + `CI_USER_PTR_SET +( + +. +buf +, buf); + +195 + +. +buf_n + = buf_len; + +196  + `oo_sour_ +( +gs +-> +fd +, +OO_IOC_EP_FILTER_DUMP +, & + +); + +197 + } +} + +214  + $ci_t_hr__m_add_d +( +ci_fd_t + +fd +, + +215 +oo_ + + +, + +216 +ci_ut32 + +m_addr +, + +217 +ci_ifid_t + +ifdex +, + +218  +add +) + +220 +oo_t_fr_m_t + + +; + +221  +rc +; + +223 + +. +t_id + = + +; + +224 + +. +ifdex + = ifindex; + +225 + +. +addr + = +m_addr +; + +227 + `VERB +( + `ci_log +("%s: id=%d %s", +__FUNCTION__ +, + `OO_SP_FMT +( + +), + +228 +add + ? "add" : "del")); + +229 +rc + = + `oo_sour_ +( +fd +, + +230 +add + ? +OO_IOC_EP_FILTER_MCAST_ADD + : + +231 +OO_IOC_EP_FILTER_MCAST_DEL +, + +232 & + +); + +234 if +rc + < 0 ) + +235 + `LOG_SV +( + `ci_log +("%s: %s failed for %d (rc=%d)", + +236 +__FUNCTION__ +, +add + ? "add" : "d", + `OO_SP_FMT +( + +), +rc +)); + +237  +rc +; + +238 + } +} + +241  + $ci_t_hr_ack_ch +( +ci_fd_t + +om_fd +, + +242 +em_nic_t_t + * +out_r_nic_t +, + +243 +ci_ut32 + * +out_m_size +) + +245  +rc +; + +246 +oo_ack_ch_t + + +; + +248 + `ci_as +( +out_r_nic_t +); + +249 + `ci_as +( +out_m_size +); + +250 +rc + = + `oo_sour_ +( +om_fd +, +OO_IOC_STACK_ATTACH +, & + +); + +251 if +rc + < 0 ) + +252  +rc +; + +253 * +out_r_nic_t + = + +. +out_nic_t +; + +254 * +out_m_size + = + +.out_map_size; + +255  + +. +fd +; + +256 + } +} + +259  + $ci_t_hr_sock_ch +( +ci_fd_t + +ack_fd +, +oo_ + +_id +, + +260  +doma +,  +ty +) + +262  +rc +; + +263 +oo_sock_ch_t + + +; + +265 + +. +_id + =p_id; + +266 + +. +ty + =ype; + +267 + +. +doma + = domain; + +268 + `oo_rwlock_lock_ad +(& +cp_dup2_lock +); + +269 +rc + = + `oo_sour_ +( +ack_fd +, +OO_IOC_SOCK_ATTACH +, & + +); + +270 + `oo_rwlock_uock_ad + (& +cp_dup2_lock +); + +271 if +rc + < 0 ) + +272  +rc +; + +273  + +. +fd +; + +274 + } +} + +277  + $ci_t_hr_t_ac_sock_ch +( +ci_fd_t + +ack_fd +, +oo_ + +_id +, + +278  +ty +) + +280  +rc +; + +281 +oo_t_ac_sock_ch_t + + +; + +283 + +. +_id + =p_id; + +284 + +. +ty + =ype; + +285 + `oo_rwlock_lock_ad +(& +cp_dup2_lock +); + +286 +rc + = + `oo_sour_ +( +ack_fd +, +OO_IOC_TCP_ACCEPT_SOCK_ATTACH +, & + +); + +287 + `oo_rwlock_uock_ad + (& +cp_dup2_lock +); + +288 if +rc + < 0 ) + +289  +rc +; + +290  + +. +fd +; + +291 + } +} + +293  + $ci_t_hr_pe_ch +( +ci_fd_t + +ack_fd +, +oo_ + +_id +, + +294  +ags +,  +fds +[2]) + +296  +rc +; + +297 +oo_pe_ch_t + + +; + +299 + +. +_id + =p_id; + +300 + +. +ags + = flags; + +301 +rc + = + `oo_sour_ +( +ack_fd +, +OO_IOC_PIPE_ATTACH +, & + +); + +302 if +rc + < 0 ) + +303  +rc +; + +304 +fds +[0] = + +. +rfd +; + +305 +fds +[1] = + +. +wfd +; + +306  +rc +; + +307 + } +} + +309 #ifde +__lux__ + + +310  + $ci_t_hr_o_no_ampޚe +( +fd +) { + +311  +s +; + +312  +_num + = +__NR_o +; + +314 #i + `defed +( +__i386__ +) + +318 +__asm__ + + `__vީe__ +("xchgl %%ebx, %%ecx\n\t" + +324 :""( +s +) + +325 :"0"( +_num +),"c"( +fd +)); + +327 i( + `CI_UNLIKELY +( +s + < 0)) { + +328 +o + = - +s +; + +332 #i + `defed +( +__x86_64__ +) + +333 +__asm__ + + `__vީe__ +("syscall\n" + +337 :""( +s +) + +338 :"a"( +_num +),"D"( +fd +)); + +340 i( + `CI_UNLIKELY +( +s + < 0)) { + +341 +o + = - +s +; + +345 #i + `defed +( +__PPC__ +) + +347  +r0 + + `asm +("r0"); + +348  +r3 + + `asm +("r3"); + +350 +r0 + = +_num +; + +351 +r3 + = +fd +; + +353 +asm + volatile("sc\n" + +358 :""( +r0 +),""( +r3 +) + +359 :"r"( +r0 +),"r"( +r3 +) + +361 +s + = +r3 +; + +363 if( +r0 + & (1<<28)) { + +364 +o + = +s +; + +368 #i + `defed +( +__64__ +) + +371 + `__ibu__ +(( +unud +) +i + = +_num +; + +373 +s + = 0; + +378  +s +; + +379 + } +} + +384  + ~ + +385 +oo_rwlock + + gcp_dup2_lock +; + +388 +ci_fd_t + + $ci_t_hr_g_sock_fd +( +ci_fd_t + +fd +) + +390 +oo_os_sock_fd_g_t + + +; + +391  +rc +; + +393 + `oo_rwlock_lock_ad +(& +cp_dup2_lock +); + +394 + +. +sock_id + = -1; + +395 +rc + = + `oo_sour_ +( +fd +, +OO_IOC_OS_SOCK_FD_GET +, & + +); + +396 if +rc + == 0 ) + +397  + +. +fd_out +; + +398 + `oo_rwlock_uock_ad + (& +cp_dup2_lock +); + +399  ( +ci_fd_t + +rc +; + +400 + } +} + +403  + $ci_t_hr_l_sock_fd +( +ci_fd_t + +fd +) + +405  +rc + = 0; + +406 #ide +_WIN32 + + +407 +rc + = + `ci_sys_o + ( +fd +); + +409 + `oo_rwlock_uock_ad + (& +cp_dup2_lock +); + +410  +rc +; + +411 + } +} + +413 #ifde +__sun__ + + +414  + $ci_t_hr_y_f +( +ci_fd_t + +fd +,  +cmd +,  +g +, * +su +) + +416  +rc +; + +417 +oo_y_f_t + + +; + +419 + +. +cmd + = cmd; + +420 + +. +g + =rg; + +422 +rc + = + `oo_sour_ +( +fd +, +CI_RSOP_APPLY_FCNTL +, & + +); + +423 i( +rc + == 0) + +424 * +su + = + +.result; + +426  +rc +; + +427 + } +} + +431  + $ci_t_hr_bd_os_sock +( +ci_fd_t + +fd +, cڡ  +sockaddr +* +addss +, + +432 +size_t + +add +, +ci_ut16 +* +out_pt +) + +434  +rc +; + +435 +oo_t_bd_os_sock_t + + +; + +437 + `CI_USER_PTR_SET +( + +. +addss +,ddress); + +438 + +. +add + =ddrlen; + +440 +rc + = + `oo_sour_ +( +fd +, +OO_IOC_TCP_BIND_OS_SOCK +, & + +); + +442 i( +rc + < 0) { + +443 +o + = - +rc +; + +446 + `ci_as +( +rc + == 0); + +449 i( +out_pt +) + +450 * +out_pt + = + +. +add +; + +451  +rc +; + +452 + } +} + +455  + $ci_t_hr_li_os_sock +( +ci_fd_t + +fd +,  +backlog +) + +457  +rc +; + +459 +rc + = + `oo_sour_ +( +fd +, +OO_IOC_TCP_LISTEN_OS_SOCK +, & +backlog +); + +460 i( +rc + < 0) { + +461 +o + = - +rc +; + +464 + `ci_as + ( +rc + == 0); + +465  +rc +; + +466 + } +} + +469 #ide +_WIN32 + + +470  + $ci_t_hr_dpot_shutdown +( +ci_fd_t + +fd +,  +how +, +ci_ut32 + +d_e +) + +472 +oo_t_dpot_shutdown_t + + +; + +473  +rc +; + +475 + +. +how + = how; + +476 + +. +d_e + = old_state; + +477 +rc + = + `oo_sour_ +( +fd +, +OO_IOC_TCP_ENDPOINT_SHUTDOWN +, & + +); + +478 i( +rc + < 0) { + +479 +o + = - +rc +; + +482 + `ci_as + ( +rc + == 0); + +483  +rc +; + +484 + } +} + +488  + $ci_t_hr_c_os_sock +( +ci_fd_t + +fd +, cڡ  +sockaddr +* +addss +, + +489 +size_t + +add +) + +491  +rc +; + +492 +oo_t_sockaddr_wh_n_t + + +; + +494 + `CI_USER_PTR_SET +( + +. +addss +,ddress); + +495 + +. +add + =ddrlen; + +496 +rc + = + `oo_sour_ +( +fd +, +OO_IOC_TCP_CONNECT_OS_SOCK +, & + +); + +497 i( +rc + < 0) { + +498 +o + = - +rc +; + +501 + `ci_as + ( +rc + == 0); + +502  +rc +; + +503 + } +} + +506 #ifde +__lux__ + + +507  + $ci_t_hr_t_t_o_os_sock +( +ci_tif + * +ni +, +oo_ + +sock_id +) + +509  + `oo_sour_ +( + `ci_tif_g_driv_hd +( +ni +), + +510 +OO_IOC_TCP_CLOSE_OS_SOCK +, & +sock_id +); + +511 + } +} + +519  + $ci_t_hr_os_sock__d_t +( +ci_tif + * +ni +, +ci_fd_t + +fd +, + +520 +ci_sock_cmn + * +s +,  +v +, + +521  +݊ame +, cڡ * +tv +, + +522  +ݎ +) + +524  +rc +; + +525 +oo_t__t_t + + +; + +530 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +535 + `ci_as_nags +( +s +-> +s_ags +, +CI_SOCK_FLAG_FILTER +); + +540 + `ci_as_qu +( +s +-> +b +. +e +, +CI_TCP_LISTEN +); + +542 + +. +v + =evel; + +543 + +. +݊ame + = optname; + +544 + `CI_USER_PTR_SET +( + +. +tv +, optval); + +545 + +. +ݎ + = optlen; + +546 +rc + = + `oo_sour_ +( +fd +, +OO_IOC_OS_SOCK_CREATE_AND_SET +, & + +); + +547  +rc +; + +548 + } +} + +551  + $ci_t_hr_loc_aive_wd +( +ci_tif + * +ni +) + +553  + `oo_sour_ +( + `ci_tif_g_driv_hd +( +ni +), + +554 +OO_IOC_ALLOC_ACTIVE_WILD +, +NULL +); + +555 + } +} + + @tcp_init_shared.c + +14  + ~"_.h +" + +17 #ide +_WIN32 + + +18  + #TCP_STATE_POISON + 0xff + + ) + +22  + #LPF + "TCP " + + ) + +25  + $ci_t_e_tup_tims +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +27  + #ci_t_tup_tim +( +me +, +back +, +b +) \ + +29 +ci__tim +* +t + = & +ts +-> +me +## +_tid +; \ + +30 +oo_p + + +; \ + +31 +t +-> +m1 + = + `S_SP +( +ts +); \ + +32 +t +-> + + = +back +; \ + +33 + + = + `TS_OFF +( +ni +, +ts +); \ + +34 + `OO_P_ADD +( + +, + `CI_MEMBER_OFFSET +( +ci_t_e +, +me +## +_tid +)); \ + +35 + `ci__tim_ +( +ni +, & +ts +-> +me +## +_tid +, + +, +b +); \ + +36 } 0) + + ) + +38 + `ci_t_tup_tim +( +o +, +CI_IP_TIMER_TCP_RTO +, "rtot"); + +39 + `ci_t_tup_tim +( +dack +, +CI_IP_TIMER_TCP_DELACK +, "dela"); + +40 + `ci_t_tup_tim +( +zw +, +CI_IP_TIMER_TCP_ZWIN +, "zwin"); + +41 + `ci_t_tup_tim +( +kive +, +CI_IP_TIMER_TCP_KALIVE +, "kalv"); + +42 #i +CI_CFG_TCP_SOCK_STATS + + +43 + `ci_t_tup_tim +( +s +, +CI_IP_TIMER_TCP_STATS +, "stat"); + +45 #i +CI_CFG_TAIL_DROP_PROBE + + +46 + `ci_t_tup_tim +( +dr +, +CI_IP_TIMER_TCP_TAIL_DROP +,"tdrp"); + +48 + `ci_t_tup_tim +( +ck +, +CI_IP_TIMER_TCP_CORK +, "cork"); + +50 #unde +ci_t_tup_tim + + +51 + } +} + +54  + $ci_t_e_ced_ts_ +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +56 +oo_p + + +; + +57  +i +; + +59 +ts +-> +nd_equeue + = +CI_ILL_END +; + +60 + `oo_omic_t +(& +ts +-> +nd_equeue_ +, 0); + +61 +ts +-> +nd_ + = 0; + +62 +ts +-> +nd_out + = 0; + +65 + `ci__queue_ +(& +ts +-> +cv1 +); + +66 + `ci__queue_ +(& +ts +-> +cv2 +); + +67 + `TS_QUEUE_RX_SET +( +ts +, +cv1 +); + +68 +ts +-> +cv1_exa + = +OO_PP_NULL +; + +71 + `ci__queue_ +(& +ts +-> +rob +); + +74 +ts +-> +so_dbuf_pkts + = 0; + +75 + `ci__queue_ +(& +ts +-> +nd +); + +77 + `ci__queue_ +(& +ts +-> +s +); + +78  +i + = 0; i < +CI_TCP_SACK_MAX_BLOCKS +; i++ ) + +79 +ts +-> +ϡ_ck +[ +i +] = +OO_PP_NULL +; + +80 +ts +-> +dck_block + = +OO_PP_INVALID +; + +82 + + = + `oo_sockp_to_ +( +tif +, + `S_SP +( +ts +)); + +83 + `OO_P_ADD +( + +, + `CI_MEMBER_OFFSET +( +ci_t_e +, +timeout_q_lk +)); + +84 + `ci_ni_di_lk_ +( +tif +, & +ts +-> +timeout_q_lk +, + +, "tmoq"); + +85 + `ci_ni_di_mk_ +(& +ts +-> +timeout_q_lk +); + +87 + + = + `oo_sockp_to_ +( +tif +, + `S_SP +( +ts +)); + +88 + `OO_P_ADD +( + +, + `CI_MEMBER_OFFSET +( +ci_t_e +, +tx_ady_lk +)); + +89 + `ci_ni_di_lk_ +( +tif +, & +ts +-> +tx_ady_lk +, + +, "tmoq"); + +90 + `ci_ni_di_lf_lk +( +tif +, & +ts +-> +tx_ady_lk +); + +91 + } +} + +94  + $ci_t_e_tcb__fixed +( +ci_tif +* +tif +, +ci_t_e +* +ts +, + +95  +om_che +) + +98 +ts +-> +s +. +so +. +rcvlow + = 1; + +101 +ts +-> +c +. +ka_obe_th + = + `NI_OPTS +( +tif +). +klive_obes +; + +102 +ts +-> +c +. +t_ka_time + = + `NI_CONF +( +tif +). +tcڡ_klive_time +; + +103 +ts +-> +c +. +t_ka_time__cs + = + `NI_OPTS +( +tif +). +klive_time + / 1000; + +104 #i! + `defed +( +__sun__ +) + +105 +ts +-> +c +. +t_ka_tvl + = + `NI_CONF +( +tif +). +tcڡ_klive_tvl +; + +106 +ts +-> +c +. +t_ka_tvl__cs + = + `NI_OPTS +( +tif +). +klive_tvl + / 1000; + +110 + `ci__hdr__fixed +(& +ts +-> +s +. +pkt +. + +, +IPPROTO_TCP +, + +111 +CI_IP_DFLT_TTL +, +CI_IP_DFLT_TOS +); + +113 + `sock_ddr_be32 +(&( +ts +-> +s +)) = 0; + +114 + `TS_TCP +( +ts +)-> +t_sour_be16 + = 0; + +115 #i +CI_CFG_FD_CACHING + + +119 if! +om_che + ) { + +120 +ts +-> +ched__fd + = -1; + +121 +ts +-> +ched__pid + = -1; + +130 +ts +-> +s +. +pkt +. + +. +_ihl_vsi + = + `CI_IP4_IHL_VERSION +(( +ci_4_hdr +)); + +131 +ts +-> +s +. +pkt +. + +. +_oc + = +IPPROTO_TCP +; + +132 +ts +-> +s +. +pkt +. + +. +_check_be16 + = 0; + +133 +ts +-> +s +. +pkt +. + +. +_id_be16 + = 0; + +134 + `TS_TCP +( +ts +)-> +t_check_be16 + = 0; + +135 + } +} + +138  + $ci_t_e_tcb_ +( +ci_tif +* +tif +, +ci_t_e +* +ts +, + +139  +om_che +) + +141 + `ci_t_e_tup_tims +( +tif +, +ts +); + +143 #i +CI_CFG_FD_CACHING + + +144 if! +om_che + ) { + +145 +oo_p + + +; + +146 +ts +-> +ched__fd + = -1; + +147 +ts +-> +ched__pid + = -1; + +148 + + = + `TS_OFF +( +tif +, +ts +); + +149 + `OO_P_ADD +( + +, + `CI_MEMBER_OFFSET +( +ci_t_e +, +che_lk +)); + +150 + `ci_ni_di_lk_ +( +tif +, & +ts +-> +che_lk +, + +, "epch"); + +151 + `ci_ni_di_lf_lk +( +tif +, & +ts +-> +che_lk +); + +152 + + = + `TS_OFF +( +tif +, +ts +); + +153 + `OO_P_ADD +( + +, + `CI_MEMBER_OFFSET +( +ci_t_e +, +che_fd_lk +)); + +154 + `ci_ni_di_lk_ +( +tif +, & +ts +-> +che_fd_lk +, + +, "ecfd"); + +155 + `ci_ni_di_lf_lk +( +tif +, & +ts +-> +che_fd_lk +); + +159 + `ci_t__th_dib +( +ts +); + +161 +ts +-> +tags + = + `NI_OPTS +( +tif +). +syn_ts +; + +163 +ts +-> +outgog_hdrs_n + = ( +ci_4_hdr ++ ( +ci_t_hdr +); + +164 if +ts +-> +tags + & +CI_TCPT_FLAG_TSO + )s-> +outgog_hdrs_n + += 12; + +165 +ts +-> +comg_t_hdr_n + = ( +ci_t_hdr +); + +166 +ts +-> +c +. +t_der_ac + = +OO_TCP_DEFER_ACCEPT_OFF +; + +168 + `ci_t_e_ced_ts_ +( +tif +, +ts +); + +171 + `TS_TCP +( +ts +)-> +t_urg_r_be16 + = 0; + +172 + `t_q_nxt +( +ts + + `t_d_u +s + `t_d_nxt +s + `t_d_up +(ts) = 0; + +173 +ts +-> +d_deged + = 0; + +174 +ts +-> +d_max + = + `t_d_nxt +(ts) + 1; + +178 +ts +-> +d_ws + = 0; + +179 + `CI_IP_SOCK_STATS_VAL_TXWSCL + +ts +,s-> +d_ws +); + +180 +ts +-> +rcv_ws + = 0; + +181 + `CI_IP_SOCK_STATS_VAL_RXWSCL + +ts +,s-> +rcv_ws +); + +184 + `t_rcv_wnd_right_edge_ +( +ts + + `t_rcv_wnd_advtid +(ts) = 0; + +185 +ts +-> +rcv_added + =s-> +rcv_dived + = + `t_rcv_nxt +(ts) = 0; + +186 + `t_rcv_up +( +ts + + `SEQ_SUB +( + `t_rcv_nxt +(ts), 1); + +189 + `CI_TCP_HDR_SET_LEN +( + `TS_TCP +( +ts +), + +190 ( +ts +-> +outgog_hdrs_n + - ( +ci_4_hdr +))); + +191 + `TS_TCP +( +ts +)-> +t_ags + = 0u; + +194 +ts +-> +cge + = +CI_TCP_CONG_OPEN +; + +195 +ts +-> +cwnd_exa + = 0; + +196 +ts +-> +dup_acks + = 0; + +197 +ts +-> +bys_acked + = 0; + +199 #i +CI_CFG_BURST_CONTROL + + +201 +ts +-> +bur_wdow + = 0; + +205 #i +CI_CFG_CONGESTION_WINDOW_VALIDATION + + +206 +ts +-> +t_ϡ_ + = + `ci_t_time_now +( +tif +); + +207 +ts +-> +t_ϡ_fu + = + `ci_t_time_now +( +tif +); + +208 +ts +-> +cwnd_ud + = 0; + +210 +ts +-> +t_ϡ_cv_ack + =s-> +t_ϡ_cv_yld + =s-> +t_ev_cv_yld + = + +211 + `ci_t_time_now +( +tif +); + +213 +ts +-> +eff_mss + = 0; + +214 +ts +-> +amss + = 0; + +215 +ts +-> +shsh + = 0; + +218 +ts +-> +taws + = + `ci_t_time_now +( +tif +- ( + `NI_CONF +ґif). +tcڡ_ws_id ++1); + +219 +ts +-> +te + = 0; + +222 +ts +-> +acks_ndg + = 0; + +225 + `CITP_TCP_FASTSTART +( +ts +-> +硡t_acks + = 0); + +227 #i +CI_CFG_TAIL_DROP_PROBE + + +229 +ts +-> +dr_e + = +CI_TCP_TAIL_DROP_INACTIVE +; + +232 + `ci_t_t_duck_thsh +( +ts +, 0); + +234 +ts +-> +zw_obes + = 0; + +235 +ts +-> +zw_acks + = 0; + +236 +ts +-> +ka_obes + = 0; + +238 +ts +-> +ka_ϡ + = + `ci_t_time_now +( +tif +); + +241 +ts +-> +c +. +ur_mss + = 0; + +244 +ts +-> +sms + = 0; + +247 +ts +-> +o + = + `NI_CONF +( +tif +). +tcڡ_o_l +; + +248 +ts +-> + + = 0; + +249 +ts +-> +sv + = + `NI_CONF +( +tif +). +tcڡ_o_l +; + +251 #i +CI_CFG_TCP_SOCK_STATS + + +252 + `ci_t_s_ +( +tif +, +ts +); + +254 + `t_urg_da +( +ts +) = 0; + +256 i( + `NI_OPTS +( +tif +). +t_f_noday + == 1) + +257 + `ci_b_t +(& +ts +-> +s +. +s_aags +, +CI_SOCK_AFLAG_NODELAY_BIT +); + +259 +ts +-> +tm_hd + = +OO_PP_NULL +; + +261 +ts +-> +lol_ + = +OO_SP_NULL +; + +263 + `memt +(& +ts +-> +s +, 0, (ts->stats)); + +266 + `ci_wmb +(); + +267 +ts +-> +s +. +b +. +e + = +CI_TCP_CLOSED +; + +268 + } +} + +271  + $ci_t_e_ +( +ci_tif +* +tif +, +ci_t_e +* +ts +,  +om_che +) + +273 + `ci_as +( + `CI_PTR_OFFSET +(& +ts +-> +s +. +pkt +. + +, 4) == 0); + +274 + `LOG_TV +( + `ci_log +( +LPF + "%s(): %d", +__FUNCTION__ +, + `S_FMT +( +ts +))); + +276 #i + `defed +( +TCP_STATE_POISON +&& !defed( +NDEBUG +) + +278 if! +om_che + ) { + +279 * +pois_t + = & +ts +-> +s +. +b + + 1; + +280 + `memt +( +pois_t +, +TCP_STATE_POISON +, + +281 ((*)( +ts ++1)- (*) +pois_t +); + +286 + `ci_sock_cmn_ +( +tif +, & +ts +-> +s +, ! +om_che +); + +287 + `ci_pmtu_e_ +( +tif +, & +ts +-> +s +, &ts-> +pmtus +, +CI_IP_TIMER_PMTU_DISCOVER +); + +288 + `ci_udp_cv_q_ +(& +ts +-> +timeamp_q +); + +291 + `ci_t_e_tcb__fixed +( +tif +, +ts +, +om_che +); + +292 + `ci_t_e_tcb_ +( +tif +, +ts +, +om_che +); + +293 + } +} + +295  + $ci_t_e_ +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +297 + `ci_as +( + `CI_PTR_OFFSET +(& +ts +-> +s +. +pkt +. + +, 4) == 0); + +298 + `LOG_TV +( + `ci_log +( +LPF + "%s(): %d", +__FUNCTION__ +, + `S_FMT +( +ts +))); + +302 +ts +-> +s +. +b +. +e + = +CI_TCP_INVALID +; + +303 + `ci_wmb +(); + +309 + `ci_sock_cmn_ +( +tif +, & +ts +-> +s +); + +310 + `ci_pmtu_e_ +( +tif +, & +ts +-> +s +, &ts-> +pmtus +); + +311 + `ci_udp_cv_q_ +(& +ts +-> +timeamp_q +); + +313 + `ci_t_e_tcb_ +( +tif +, +ts +, 0); + +314 + } +} + +317 #ide +__KERNEL__ + + +318 +ci_t_e +* + $ci_t_g_e_buf_om_che +( +ci_tif + * +tif +) + +320 +ci_t_e + * +ts + = +NULL +; + +321 #i +CI_CFG_FD_CACHING + + +322 if + `ci_ni_di_n_emy +( +tif +, &tif-> +e +-> +aive_che +. +che +) ) { + +326 +ci_ni_di_lk + * +lk + = + +327 + `ci_ni_di_hd +( +tif +, &tif-> +e +-> +aive_che +. +che +); + +328 +ts + = + `CI_CONTAINER +( +ci_t_e +, +che_lk +, +lk +); + +329 + `ci_as +( +ts +); + +340 if +ts +-> +ched__pid + ! + `gpid +() && + +341 (~ +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_IN_CACHE_NO_FD +) ) { + +342  +NULL +; + +348 + `ci_ni_di_p +( +tif +, &tif-> +e +-> +aive_che +. +che +); + +349 + `ci_ni_di_lf_lk +( +tif +, & +ts +-> +che_lk +); + +350 + `ci_ni_di_move_ +( +tif +, & +ts +-> +che_fd_lk +); + +351 + `CITP_STATS_NETIF +(++ +tif +-> +e +-> +s +. +aiveche_h +); + +352 + `ci_omic32_c +((vީ +ci_ut32 +*) + `CI_NETIF_PTR +( +tif +, + +353 +tif +-> +e +-> +aive_che +. +ava_ack +)); + +356 + `LOG_EP +( + `ci_log +("Takg cached sock " +NSS_FMT +" fd %d off cachedist", + +357 + `NSS_PRI_ARGS +( +tif +, & +ts +-> +s +),s-> +ched__fd +)); + +359 + `ci_t_e_ +( +tif +, +ts +, 1); + +361 + `ci_as +(!( +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_ORPHAN +)); + +362 + `ci_as +( + `ci_t_is_ched +( +ts +)); + +364 + `CITP_STATS_NETIF +(++ +tif +-> +e +-> +s +. +sockche_h +); + +367  +ts +; + +368 + } +} + +372 +ci_t_e +* + $ci_t_g_e_buf +( +ci_tif +* +tif +) + +374 +cp_waab_obj +* +wo +; + +376 + `ci_as +( +tif +); + +378 +wo + = + `cp_waab_obj_loc +( +tif +); + +379 if! +wo + ) { + +380 + `LOG_TV +( + `ci_log +("%s: [%d] ouosock bufrs", +__FUNCTION__ +, + `NI_ID +( +tif +))); + +381  +NULL +; + +384 + `ci_t_e_ +( +tif +, & +wo +-> +t +, 0); + +385  & +wo +-> +t +; + +386 + } +} + +388  + $ci_ni_aux_me_bufs +( +ci_tif +* +ni +) + +390 +cp_waab_obj +* +wo + = + `cp_waab_obj_loc +( +ni +); + +391 +ci_ni_aux_mem +* +aux +; + +392 +oo_p + + +; + +393  +i +; + +395 if +wo + = +NULL + ) + +398 +wo +-> +hd +. +e + = +CI_TCP_STATE_AUXBUF +; + +399 + + = + `oo_sockp_to_ +( +ni +, + `W_SP +(& +wo +-> +waab +)); + +400 + `ci_as_equ +( + `CI_MEMBER_OFFSET +( +ci_ni_aux_mem +, +lk +), 0); + +402  +aux + = (*)(( +ci_u_t +) +wo + + +CI_AUX_MEM_SIZE +), +i + = 1; + +403 ( +ci_u_t +)( +wo ++1> (ci_u_t) +aux +; + +404 +aux +++, +i +++ ) { + +405 + `OO_P_ADD +( + +, +CI_AUX_MEM_SIZE +); + +406 + `ci_ni_di_lk_ +( +ni +, & +aux +-> +lk +, + +, "faux"); + +407 +aux +-> +no + = +i +; + +408 +ni +-> +e +-> +n_aux_bufs +++; + +411 +aux +-> +lk +. +xt + = +ni +-> +e +-> +_aux_mem +; + +412 +ni +-> +e +-> +_aux_mem + = + +; + +413 +ni +-> +e +-> +n__aux_bufs +++; + +415 + } +} + + @tcp_ioctl.c + +14 #ifde +__lux__ + + +15  + ~ + +18  + ~"_.h +" + +19  + ~ + +20  + ~ + +25  + $ci_t_iol_lk +( +cp_sock +* + +, +ci_fd_t + +fd +,  +que +, + +26 * +g +) + +28 +ci_tif +* +tif + = + +->netif; + +29 +ci_sock_cmn +* +s + = + +->s; + +30 +ci_t_e +* +ts + = +NULL +; + +31  +rc + = 0; + +32  +os_sock_exis + = +s +-> +b +. +sb_aags + & +CI_SB_AFLAG_OS_BACKED +; + +34 if +s +-> +b +. +e + ! +CI_TCP_LISTEN + ) + +35 +ts + = + `SOCK_TO_TCP +( +s +); + +46 if +os_sock_exis + && +que + ! +FIONREAD + &&eque ! +SIOCATMARK + && + +47 +que + ! +FIOASYNC + &&eque ! +TIOCOUTQ + &&eque ! +SIOCOUTQNSD + && + +48 +que + !( +FIONBIO + ) { + +49 +rc + = + `oo_os_sock_iol +( +tif +, +s +-> +b +. +bufid +, +que +, +g +, +NULL +); + +50 if +rc + < 0 ) + +51  +rc +; + +56 + `LOG_TV + + `ci_log +("%s:eque = %d,rg = %ld", +__FUNCTION__ +, +que +, + +57 () +g +)); + +59  +que + ) { + +60  +FIONBIO +: + +61 if + `CI_IOCTL_ARG_OK +(, +g +) ) { + +62 + `CI_CMN_IOCTL_FIONBIO +( + +-> +s +, +g +); + +63 +rc + = 0; + +66  +_u +; + +67  +FIONREAD +: + +68 if! + `CI_IOCTL_ARG_OK +(, +g +) ) + +69  +_u +; + +70 #ifde +__lux__ + + +71 if +s +-> +b +. +e + = +CI_TCP_LISTEN + ) + +72  +_v +; + +74 if +s +-> +b +. +e + = +CI_TCP_SYN_SENT + ) { + +76 if +s +-> +b +. +e + = +CI_TCP_SYN_SENT + || s->b.= +CI_TCP_LISTEN + ) { + +78 + `CI_IOCTL_SETARG +((*) +g +, 0); + +83  +bys__rxq + = + `t_rcv_u +( +ts +); + +84 i( +bys__rxq + && ! ( +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_OOBINLINE +)) { + +86 #ide +_WIN32 + + +87 i( + `t_urg_da +( +ts +& +CI_TCP_URG_PTR_VALID +) { + +89  +adnxt + = + `t_rcv_nxt +( +ts +- +bys__rxq +; + +90 i( + `SEQ_LT +( +adnxt +, + `t_rcv_up +( +ts +))) { + +91 +bys__rxq + = + `t_rcv_up +( +ts +- +adnxt +; + +92 } i( + `SEQ_EQ +( +adnxt +, + `t_rcv_up +( +ts +))) { + +93 +bys__rxq +--; + +104 + `LOG_URG +( + `ci_log +( +TCP_URG_FMT +, + `TCP_URG_ARGS +( +ts +))); + +105 +bys__rxq + - + `ci__queue_n_emy +(& +ts +-> +cv2 +) ? 1 : 0; + +109 + `CI_IOCTL_SETARG +((*) +g +, +bys__rxq +); + +113  +TIOCOUTQ +: + +114  +SIOCOUTQNSD +: + +116 + `CI_BUILD_ASSERT +( +TIOCOUTQ + = +SIOCOUTQ +); + +117 #ifde +__lux__ + + +118  +outq_bys + = 0; + +120 if! + `CI_IOCTL_ARG_OK +(, +g +) ) + +121  +_u +; + +122 if +s +-> +b +. +e + = +CI_TCP_LISTEN + ) + +123  +_v +; + +125 if +s +-> +b +. +e + ! +CI_TCP_SYN_SENT + ) { + +128 if +que + = +TIOCOUTQ + ) + +129 +outq_bys + = + `SEQ_SUB +( + `t_q_nxt +( +ts +), + `t_d_u +(ts)); + +131 +outq_bys + = + `SEQ_SUB +( + `t_q_nxt +( +ts +), + `t_d_nxt +(ts)); + +133 + `CI_IOCTL_SETARG +((*) +g +, +outq_bys +); + +135 #r +TODO + + +140  +SIOCATMARK +: + +142 if! + `CI_IOCTL_ARG_OK +(, +g +) ) + +143  +_u +; + +145 #ifde +_WIN32 + + +146 if(( +s +-> +s_ags + & +CI_SOCK_FLAG_OOBINLINE +) + +147 || ( +s +-> +b +. +e + = +CI_TCP_LISTEN +)) + +150 + `CI_IOCTL_SETARG +(*) +g +, 1); + +151 + `LOG_URG +( + `log +("SIOCATMARKtmark=1 OOBINLINE=%sistening=%s", + +152 ( +s +-> +s_ags + & +CI_SOCK_FLAG_OOBINLINE +)?"TRUE":"FALSE", + +153 +s +-> +b +. +e + = +CI_TCP_LISTEN +?"TRUE":"FALSE")); + +154  +sucss_out +; + +159 + `CI_IOCTL_SETARG +((*) +g +, + +160 ( + `t_urg_da +( +ts +& ( +CI_TCP_URG_COMING + | +CI_TCP_URG_IS_HERE +)) + +162 + `LOG_URG +( + `log +( +NTS_FMT + "SIOCATMARKtmark=%d OOBINLINE=%s URG_COMING=%s URG_HERE=%s", + +163 + `NTS_PRI_ARGS +( + +-> +tif +, +ts +), + +164 (( + `t_urg_da +( +ts +& ( +CI_TCP_URG_COMING + | +CI_TCP_URG_IS_HERE +))? 0 : 1), + +165 ( +s +-> +s_ags + & +CI_SOCK_FLAG_OOBINLINE +)?"TRUE":"FALSE", + +166 ( + `t_urg_da +( +ts +& +CI_TCP_URG_COMING +)?"TRUE":"FALSE", + +167 ( + `t_urg_da +( +ts +& +CI_TCP_URG_IS_HERE +)?"TRUE":"FALSE" + +169  +sucss_out +; + +173 + `CI_IOCTL_SETARG +((*) +g +, 0); + +174 if +s +-> +b +. +e + ! +CI_TCP_LISTEN + ) { + +175  +adnxt +; + +177 +adnxt + = + `SEQ_SUB +( + `t_rcv_nxt +( +ts +), + `t_rcv_u +(ts)); + +178 if~ +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_ACCEPT_DATA + ) + +179 +adnxt + = + `SEQ_SUB +(readnxt, 1); + +180 if + `t_urg_da +( +ts +& +CI_TCP_URG_PTR_VALID + ) + +181 + `CI_IOCTL_SETARG +((*) +g +, +adnxt + = + `t_rcv_up +( +ts +)); + +182 + `LOG_URG +( + `log +( +NTS_FMT + "SIOCATMARKtmark=%deadnxt=%ucv_up=%u%s", + +183 + `NTS_PRI_ARGS +( + +-> +tif +, +ts +), +adnxt + = + `t_rcv_up +(ts), + +184 +adnxt +, + `t_rcv_up +( + `SOCK_TO_TCP +( + +-> +s +)), + +185 ( + `t_urg_da +( +ts +)& +CI_TCP_URG_PTR_VALID +)?"":" (invalid)")); + +191 #ide +__KERNEL__ + + +192  +FIOASYNC +: + +196 +rc + = + `ci_sys_iol +( +fd +, +que +, +g +); + +199  +SIOCSPGRP +: + +200 if! + `CI_IOCTL_ARG_OK +(, +g +) ) + +201  +_u +; + +206 +rc + = + `ci_sys_f +( +fd +, +F_SETOWN +, + `CI_IOCTL_GETARG +(, +g +)); + +207 if +rc + == 0 ) { + +208 +rc + = + `ci_cmn_iol +( +tif +, + +-> +s +, +que +, +g +,c, +os_sock_exis +); + +211 + `CI_SET_ERROR +( +rc +, -rc); + +217 #ide +_WIN32 + + +218  + `ci_cmn_iol +( +tif +, + +-> +s +, +que +, +g +, +rc +, +os_sock_exis +); + +220  +_v +; + +226 #ifde +_WIN32 + + +227 +sucss_out +: + +230  +rc +; + +232 +_v +: + +233 + `LOG_SC +( + `ci_log +("%s: " +NSS_FMT +" unhandledeq %d/%#xrg %ld/%#lx (EINVAL)", + +234 +__FUNCTION__ +, + `NSS_PRI_ARGS +( +tif +, +s +), +que +,equest, + +235 () +g +, ()arg)); + +236  - +EINVAL +; + +238 +_u +: + +239 + `LOG_SC +( + `ci_log +("%s: " +NSS_FMT +" unhandledeq %d/%#xrg %#lx (EFAULT)", + +240 +__FUNCTION__ +, + `NSS_PRI_ARGS +( +tif +, +s +), +que +,equest, + +241 () +g +)); + +242  - +EFAULT +; + +243 + } +} + +258  + $ci_t_iol +( +cp_sock +* + +, +ci_fd_t + +fd +,  +que +, * +g +) + +260  +rc +; + +262 + `ci_tif_lock +( + +-> +tif +); + +263 +rc + = + `ci_t_iol_lk +( + +, +fd +, +que +, +g +); + +264 + `ci_tif_uock +( + +-> +tif +); + +265  +rc +; + +266 + } +} + + @tcp_misc.c + +14  + ~"_.h +" + +15  + ~ + +16  + ~ + +18  + #LPF + "TCP MISC " + + ) + +20  + #VERB +( +x +) + + ) + +22 #ifde +__lux__ + + +25 + mCI_LINUX_TCP_ESTABLISHED + = 1, + +26 + mCI_LINUX_TCP_SYN_SENT +, + +27 + mCI_LINUX_TCP_SYN_RECV +, + +28 + mCI_LINUX_TCP_FIN_WAIT1 +, + +29 + mCI_LINUX_TCP_FIN_WAIT2 +, + +30 + mCI_LINUX_TCP_TIME_WAIT +, + +31 + mCI_LINUX_TCP_CLOSE +, + +32 + mCI_LINUX_TCP_CLOSE_WAIT +, + +33 + mCI_LINUX_TCP_LAST_ACK +, + +34 + mCI_LINUX_TCP_LISTEN +, + +35 + mCI_LINUX_TCP_CLOSING +, + +40 cڡ  + gci_sock_es_lux_m + [] = { + +41 +CI_LINUX_TCP_CLOSE +, + +42 +CI_LINUX_TCP_LISTEN +, + +43 +CI_LINUX_TCP_SYN_SENT +, + +44 +CI_LINUX_TCP_ESTABLISHED +, + +45 +CI_LINUX_TCP_CLOSE_WAIT +, + +46 +CI_LINUX_TCP_LAST_ACK +, + +47 +CI_LINUX_TCP_FIN_WAIT1 +, + +48 +CI_LINUX_TCP_FIN_WAIT2 +, + +49 +CI_LINUX_TCP_CLOSING +, + +52 +CI_LINUX_TCP_CLOSE + + +57 cڡ * + $ty_r +( +ty +) + +59 #ifde +__sun__ + + +60 cڡ * +ty_rs +[] = { + +70 cڡ * +ty_rs +[] = { + +84 #ide +SOCK_TYPE_MASK + + +85  + #SOCK_TYPE_MASK + 0xf + + ) + +88 +ty + & +SOCK_TYPE_MASK +; + +90 i( +ty + < 0 ||y >( ( +ty_rs +) /  (type_strs[0]))) + +93  +ty_rs +[ +ty +]; + +94 + } +} + +96 cڡ * + $doma_r +( +doma +) + +98 cڡ * +doma_rs +[] = { + +102 #ifde +__sun__ + + +163 i( +doma + < 0 || doma >( ( +doma_rs +) /  (domain_strs[0]))) + +166  +doma_rs +[ +doma +]; + +167 + } +} + +169 cڡ * + $_addr_r +( +ci_ut32 + +addr_be32 +) + +171  +buf +[4][16]; + +172  +buf_i +; + +173  +i + = ++ +buf_i + & 3; + +175 + `ci_fm_4_addr +( +buf +[ +i +], +addr_be32 +); + +176  +buf +[ +i +]; + +177 + } +} + +180 cڡ * + $ci_t_e_num_r +( +e_i +) + +182 cڡ * +e_rs +[] = { + +200 if +e_i + < 0 || s_>(( +e_rs +) / (state_strs[0])) ) + +203  +e_rs +[ +e_i +]; + +204 + } +} + +207 cڡ * + $ci_t_cge_r +( +s +) + +209  +s + ) { + +210  +CI_TCP_CONG_OPEN +:  "Open"; + +211  +CI_TCP_CONG_RTO +:  "RTO"; + +212  +CI_TCP_CONG_RTO_RECOV +:  "RTORecovery"; + +213  +CI_TCP_CONG_FAST_RECOV +:  "FastRecovery"; + +214  +CI_TCP_CONG_COOLING +:  "Cooling"; + +215  +CI_TCP_CONG_NOTIFIED +:  "Notified"; + +217 + `ci_log +("BAD CONGESTION STATE %x", +s +); + +220 + } +} + +223  + $__ci_t_e_ +( +ci_tif + * +ni +, +ci_t_e + * +ts +) + +225 + `VERB +( + `ci_log +("%s(" +NTS_FMT +")", +__FUNCTION__ +, + `NTS_PRI_ARGS +( +ni +, +ts +))); + +226 + `ci_as +( +ni +); + +227 + `ci_as +( +ts +); + +230 if + `OO_SP_NOT_NULL +( +ts +-> +lol_ +) ) { + +231 +ci_t_e +* + + = + `ID_TO_TCP +( +ni +, +ts +-> +lol_ +); + +232 if + +-> +lol_ + = + `S_SP +( +ts +) ) + +233 + +-> +lol_ + = +OO_SP_NULL +; + +236 #i +CI_CFG_PIO + + +238 + `ci_t_tm__l +( +ni +, +ts +); + +242 + `ci_ni_di_move_ +( +ni +, & +ts +-> +s +. +b +. +po_pl_lk +); + +243 + `ci_ni_di_move_ +( +ni +, & +ts +-> +s +. +b +. +ady_lk +); + +244 + `ci_ni_di_move_ +( +ni +, & +ts +-> +s +. +_lk +); + +250 + `ci_as +( + `ci_t_ndq_is_emy +( +ts +)); + +251 + `ci_as +( + `ci__queue_is_emy +(& +ts +-> +rob +)); + +252 + `ci_as +( + `ci__queue_is_emy +(& +ts +-> +s +)); + +254 + `ci__queue_dr +( +ni +, & +ts +-> +cv1 +); + +255 + `ci__queue_dr +( +ni +, & +ts +-> +cv2 +); + +257 + `ci_udp_cv_q_dr +( +ni +, & +ts +-> +timeamp_q +); + +259 #i +CI_CFG_FD_CACHING + + +269 + `ci_ni_di_move_ +( +ni +, & +ts +-> +che_lk +); + +272  + #chk +( +x + + `ci_as +(! + `ci__tim_ndg +( +ni +, & +ts +->x)) + + ) + +273 + `chk +( +o_tid +); + +274 + `chk +( +dack_tid +); + +275 + `chk +( +zw_tid +); + +276 + `chk +( +kive_tid +); + +277 + `chk +( +ck_tid +); + +278 + `chk +( +pmtus +. +tid +); + +279 #i +CI_CFG_TCP_SOCK_STATS + + +280 + `chk +( +s_tid +); + +282 #unde +chk + + +283 + } +} + +292  + $ci_t_e_ +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +294 + `VERB +( + `ci_log +("%s(" +NTS_FMT +")", +__FUNCTION__ +, + `NTS_PRI_ARGS +( +ni +, +ts +))); + +295 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +296 + `ci_as +( +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_ORPHAN +); + +298 + `__ci_t_e_ +( +ni +, +ts +); + +299 + `cp_waab_obj_ +( +ni +, & +ts +-> +s +. +b +); + +300 + } +} + +304 +ci_le +  + $ci_t_eabs_hd +( +ci_tif + * +ni +, +ci_t_e + * +ts +,  +e +) + +306 #i +CI_CFG_SUPPORT_STATS_COLLECTION + + +312 if( +ts +-> +s +. +b +. +e + = +CI_TCP_ESTABLISHED + + +313 #ide +__lux__ + + +314 && +e + ! +CI_TCP_CLOSE_WAIT +|| ( +ts +-> +s +. +b +.state == CI_TCP_CLOSE_WAIT + +317 + `CI_TCP_STATS_DEC_CURR_ESTAB +( +ni +); + +319 i(( +e + = +CI_TCP_CLOSED +) && + +320 (( +ts +-> +s +. +b +. +e + = +CI_TCP_ESTABLISHED +) || + +321 ( +ts +-> +s +. +b +. +e + = +CI_TCP_CLOSE_WAIT +))) + +322 + `CI_TCP_STATS_INC_ESTAB_RESETS + +ni + ); + +324 + } +} + +326 +ci_t32 + + $ci_t_rcvbuf_eablished +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +) + +328 + `ci_as +( +s +-> +b +. +e + & +CI_TCP_STATE_TCP +); + +329 if + `NI_OPTS +( +ni +). +t_rcvbuf_ur + != 0 ) + +330  + `oo_adju_SO_XBUF +( + `NI_OPTS +( +ni +). +t_rcvbuf_ur +); + +331 if~ +s +-> +s_ags + & +CI_SOCK_FLAG_SET_RCVBUF + ) { + +332 if + `NI_OPTS +( +ni +). +t_rcvbuf_e_def + > +s +-> +so +. +rcvbuf + ) + +333  + `NI_OPTS +( +ni +). +t_rcvbuf_e_def +; + +334 if +s +-> +so +. +rcvbuf + > + `NI_OPTS +( +ni +). +t_rcvbuf_e_def + * 4 ) { + +336  + `NI_OPTS +( +ni +). +t_rcvbuf_e_def + * 4; + +339  +s +-> +so +. +rcvbuf +; + +340 + } +} + +342  + $ci_t_t_eablished_e +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +344 + `ci_as +( +ts +); + +345 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +347 +ts +-> +s +. +b +. +e + = +CI_TCP_ESTABLISHED +; + +348 + `CI_TCP_STATS_INC_CURR_ESTAB + +ni + ); + +350 +ts +-> +s +. +tx_o + = 0; + +351 +ts +-> +s +. +rx_o + = 0; + +352 +ts +-> +tags + | +CI_TCPT_FLAG_WAS_ESTAB +; + +362 if + `NI_OPTS +( +ni +). +t_dbuf_ur + != 0 ) + +363 +ts +-> +s +. +so +. +dbuf + = + `oo_adju_SO_XBUF +( + `NI_OPTS +( +ni +). +t_dbuf_ur +); + +364 if~ +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_SET_SNDBUF + ) { + +365 if + `NI_OPTS +( +ni +). +t_dbuf_e_def + > +ts +-> +s +. +so +. +dbuf + ) + +366 +ts +-> +s +. +so +. +dbuf + = + `NI_OPTS +( +ni +). +t_dbuf_e_def +; + +367 if +ts +-> +s +. +so +. +dbuf + > + `NI_OPTS +( +ni +). +t_dbuf_e_def + * 4 ) + +368 +ts +-> +s +. +so +. +dbuf + = + `NI_OPTS +( +ni +). +t_dbuf_e_def + * 4; + +371 if + `NI_OPTS +( +ni +). +t_dbuf_mode + =2 && (~ +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_SET_SNDBUF +) ) + +372 + `ci_t_exnd_dbuf +( +ni +, +ts +); + +374 + `ci_t_t_dbuf +( +ni +, +ts +); + +376 +ts +-> +s +. +so +. +rcvbuf + = + `ci_t_rcvbuf_eablished +( +ni +, &ts->s); + +377 + `ci_t_t_rcvbuf +( +ni +, +ts +); + +380 +ts +-> +rcvbuf_drs +. +bys + =s-> +rcv_wnd_advtid +; + +381 +ts +-> +rcvbuf_drs +. +q + =s-> +rcv_dived +; + +382 +ts +-> +rcvbuf_drs +. +time + = + `ci_t_time_now +( +ni +); + +384 #i +CI_CFG_PORT_STRIPING + + +385 if +ts +-> +tags + & +CI_TCPT_FLAG_STRIPE + ) { + +386 +ts +-> +dup_thsh + = + `NI_OPTS +( +ni +). +re_duck_thshd +; + +387 + `LOG_TC +( + `ci_log +( +NT_FMT + "rg o=%x=%x m=%x)", + `NT_PRI_ARGS +( +ni +, +ts +), + +388 + `t_ddr_be32 +( +ts +), + `t_ddr_be32 +(ts), + +389 + `NI_OPTS +( +ni +). +re_tmask_be32 +)); + +393 + `CITP_TCP_FASTSTART +( +ts +-> +硡t_acks + = + `NI_OPTS +( +ni +). +t_硡t_ +); + +395 + `CITP_TCP_FASTSTART +( +ts +-> +taack + = + `t_rcv_nxt +(ts)); + +397 #i +CI_CFG_TAIL_DROP_PROBE + + +398 if( + `NI_OPTS +( +ni +). +_dr_obe +) + +399 +ts +-> +dr_e + = +CI_TCP_TAIL_DROP_ACTIVE +; + +402 if + `ci_t_n_u__th +( +ts +) ) + +403 + `ci_t__th_ab +( +ts +); + +404 + } +} + +407  + $ci_t_t_ow_e +( +ci_tif + * +ni +, +ci_t_e +* +ts +,  +e +) + +409 + `ci_as +( +ts +); + +410 + `ci_as +( +e + & +CI_TCP_STATE_SLOW_PATH +); + +412 #ide +NDEBUG + + +415 if( +ts +-> +s +. +b +. +e + ! +CI_TCP_LISTEN +){ + +416 if(!( +e + & +CI_TCP_STATE_TXQ_ACTIVE +)){ + +417 + `ci_as +( + `ci_t_ndq_is_emy +( +ts +)); + +418 + `ci_as +( + `ci__queue_is_emy +(& +ts +-> +s +)); + +420 if( +e + & +CI_TCP_STATE_NO_TIMERS +){ + +421  + #chk_tim +( +x + + `ci_as +(! + `ci__tim_ndg +( +ni +, & +ts +->x)) + + ) + +422 + `chk_tim +( +o_tid +); + +423 + `chk_tim +( +dack_tid +); + +424 + `chk_tim +( +zw_tid +); + +425 + `chk_tim +( +kive_tid +); + +426 + `chk_tim +( +ck_tid +); + +427 + `chk_tim +( +pmtus +. +tid +); + +428 #i +CI_CFG_TCP_SOCK_STATS + + +429 + `chk_tim +( +s_tid +); + +431 #unde +chk_tim + + +437 i( +CI_TCP_CLOSED + = +e +) { + +438 + `ci_as +( +ts +-> +s +. +rx_o + != 0); + +439 + `ci_as +( +ts +-> +s +. +tx_o + != 0); + +442 if( +ts +-> +s +. +b +. +e + = +CI_TCP_TIME_WAIT +){ + +444 + `ci_as +( +e + ! +CI_TCP_TIME_WAIT +); + +446 + `ci_as +( + `ci_ni_di_is_ +(& +ts +-> +timeout_q_lk +)); + +450 + `ci_t_eabs_hd +( +ni +, +ts +, +e +); + +452 +ts +-> +s +. +b +. +e + = state; + +453 + `ci_t__th_dib +( +ts +); + +454 + } +} + +457  + $ci_t_r_tis +( +ci_tif +* +ni +, +ci_t_rx_pkt +* +rxp +, + +458 +ci_t_tis +* +tts +) + +467 +ci_t_hdr +* +t +; + +468 +ci_ut8 +* +t +; + +469  +i +, +bys +; + +471 + `ci_as +( +rxp +); + +472 + `ci_as +( +rxp +-> +pkt +); + +473 + `ci_as +( +rxp +-> +t +); + +474 + `ci_as +( +rxp +-> +t + = + `PKT_TCP_HDR +xp-> +pkt +)); + +476 +t + = +rxp +->tcp; + +477 +t + = + `CI_TCP_HDR_OPTS +( +t +); + +478 +bys + = + `CI_TCP_HDR_OPT_LEN +( +t +); + +479 +rxp +-> +ags + = 0; + +481 + `LOG_TV +( + `log +( +LPF + "parsing optionsacket %d, optlen %d", + +482 + `OO_PKT_FMT +( +rxp +-> +pkt +), +bys +)); + +485  +bys + > 0 ) { + +486  +t +[0]) { + +487  +CI_TCP_OPT_TIMESTAMP +: + +488 if +bys + < 10 ) { + +489 + `LOG_U +( + `log +( +LPF + "TSopt(truncated)")); + +490  +_out +; + +492 if +t +[1] != 0xa ) { + +493 + `LOG_U +( + `log +( +LPF + "TSt(badgth %d)", ( +t +[1])); + +494  +_out +; + +496 +rxp +-> +ags + | +CI_TCPT_FLAG_TSO +; + +497 if +tts + = +NULL + ) { + +498 +rxp +-> +timeamp + = + `CI_BSWAP_BE32 +(*( +ci_ut32 +*& +t +[2]); + +499 +rxp +-> +timeamp_echo + = + `CI_BSWAP_BE32 +(*( +ci_ut32 +*& +t +[6]); + +501 +t + +10; +bys + -= 10; + +503  +CI_TCP_OPT_SACK +: + +504 if +bys + < 10 || by< +t +[1] ) { + +505 + `LOG_U +( + `log +( +LPF + "SACK(truncated)")); + +506  +_out +; + +508 if +t +[1] < 2 + 8 || (opt[1] & 7) != 2 ) { + +509 + `LOG_U +( + `log +( +LPF + "SACK(badgth %d)", ( +t +[1])); + +510  +_out +; + +512 if +tts + = +NULL + ) { + +513 +rxp +-> +ags + | +CI_TCPT_FLAG_SACK +; + +514 +rxp +-> +ck_blocks + = ()( +t +[1] >> 3u); + +515  +i + = 0; i < 2 * +rxp +-> +ck_blocks +; i++ ) + +516 +rxp +-> +ck +[ +i +] = + `CI_BSWAP_BE32 +(*( +ci_ut32 +*& +t +[2 + i * 4]); + +518 +bys + - +t +[1]; opt += opt[1]; + +520  +CI_TCP_OPT_END +: + +521  +out +; + +522  +CI_TCP_OPT_NOP +: + +523 ++ +t +; -- +bys +; + +525  +CI_TCP_OPT_MSS +: + +526 if +bys + < 4 ) { + +527 + `LOG_U +( + `log +( +LPF + "MSS(truncated)")); + +528  +_out +; + +530 if +t +[1] != 0x4 ) { + +531 + `LOG_U +( + `log +( +LPF + "MSS(badgth %d)", ( +t +[1])); + +532  +_out +; + +534 if +tts + ) { + +535 +tts +-> +smss + = + `CI_BSWAP_BE16 +(*( +ci_ut16 +*)( +t + + 2)); + +538 if +tts +-> +smss + < 64 ) { + +539 + `LOG_U +( + `log +("%s: Clamping smsso 64, value give is %d", + +540 +__FUNCTION__ +, +tts +-> +smss +)); + +541 +tts +-> +smss + = 64; + +544 +t + +4; +bys + -= 4; + +546  +CI_TCP_OPT_WINSCALE +: + +547 if +bys + < 3 ) { + +548 + `LOG_U +( + `log +( +LPF + "WSopt(truncated)")); + +549  +_out +; + +551 if +t +[1] != 0x3 ) { + +552 + `LOG_U +( + `log +( +LPF + "WSt(badgth %d)", ( +t +[1])); + +553  +_out +; + +555 i +t +[2] > +CI_TCP_WSCL_MAX + ) { + +557 + `LOG_U +( + `log + +LPF + "WSCL_SHFT of %uargerhan %d,runcating", + +558 +CI_TCP_WSCL_MAX +, +t +[2])); + +559 +t +[2] = +CI_TCP_WSCL_MAX +; + +561 if +tts + ) { + +562 +tts +-> +ags + | +CI_TCPT_FLAG_WSCL +; + +563 +tts +-> +ws_sh + = +t +[2]; + +565 +t + +3; +bys + -= 3; + +567  +CI_TCP_OPT_SACK_PERM +: + +568 if +bys + < 2 ) { + +569 + `LOG_U +( + `log +( +LPF + "SACKperm(truncated)")); + +570  +_out +; + +572 if +t +[1] != 0x2 ) { + +573 + `LOG_U +( + `log +( +LPF + "SACKrm(badgth %d)", ( +t +[1])); + +574  +_out +; + +576 if +tts + )ts-> +ags + | +CI_TCPT_FLAG_SACK +; + +577 +t + +2; +bys + -= 2; + +580 #i +CI_CFG_PORT_STRIPING + + +581 if +t +[0] = + `NI_OPTS +( +ni +). +re_t_t + ) { + +582 if +bys + < 2 ) { + +583 + `LOG_U +( + `log +( +LPF + "STRIPE(truncated)")); + +584  +_out +; + +586 if +t +[1] != 0x2 ) { + +587 + `LOG_U +( + `log +( +LPF + "STRIPE(badgth %d)", ( +t +[1])); + +588  +_out +; + +590 if +tts + )ts-> +ags + | +CI_TCPT_FLAG_STRIPE +; + +591 +t + +2; +bys + -= 2; + +600 if +bys + < 2 || by< +t +[1] ) { + +601 + `LOG_U +( + `log +( +LPF + "truncated options")); + +602  +_out +; + +604 if( +t +[1] < 2 ) { + +605 + `LOG_U +( + `log +( +LPF + "unknown/invalid TCP option %xength %d [ILLEGAL]", + +606 ( +t +[0], () opt[1])); + +607  +_out +; + +609 + `LOG_U +( + `log +( +LPF + "unknown/invalid TCP option %xength %d", + +610 ( +t +[0], () opt[1])); + +611 +bys + - +t +[1]; opt += opt[1]; + +617 +out +: + +619 +_out +: + +620 + `LOG_U +( + `log +( +LPF + "failedorocess (some) TCP option(s)")); + +622 + } +} + +631  + $ci__tim_r_o +( +ci_tif +* +tif +, +ci__tim +* +tmr +) + +633 + `ci__tim_r +( +tif +, +tmr +); + +634 + } +} + +636  + $ci_t__tims +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +638 + `ci__tim_r_o +( +tif +, & +ts +-> +o_tid +); + +639 + `ci__tim_r_o +( +tif +, & +ts +-> +dack_tid +); + +640 + `ci__tim_r_o +( +tif +, & +ts +-> +zw_tid +); + +641 + `ci__tim_r_o +( +tif +, & +ts +-> +kive_tid +); + +642 + `ci__tim_r_o +( +tif +, & +ts +-> +ck_tid +); + +643 + `ci__tim_r_o +( +tif +, & +ts +-> +pmtus +. +tid +); + +644 #i +CI_CFG_TCP_SOCK_STATS + + +645 + `ci__tim_r_o +( +tif +, & +ts +-> +s_tid +); + +647 #i +CI_CFG_TAIL_DROP_PROBE + + +648 if( + `NI_OPTS +( +tif +). +_dr_obe +) + +649 + `ci__tim_r_o +( +tif +, & +ts +-> +dr_tid +); + +651 + } +} + +657  + $ci__queue_dr +( +ci_tif +* +tif +, +ci__pkt_queue + * +qu +) + +659 +ci__pkt_fmt +* +p +; + +660 + `CI_DEBUG +( +i + = +qu +-> +num +); + +662 + `ci_as +( +tif +); + +663 + `ci_as +( +qu +); + +664 + `ci_as +( + `ci__queue_is_vid +( +tif +, +qu +)); + +666  + `OO_PP_NOT_NULL +( +qu +-> +hd + + `CI_DEBUG +&& +i +-- > 0) ) { + +667 +p + = + `PKT_CHK +( +tif +, +qu +-> +hd +); + +668 +qu +-> +hd + = +p +-> +xt +; + +669 + `ci_tif_pkt_a +( +tif +, +p +); + +671 + `ci_as_equ +( +i +, 0); + +672 + `ci_as +( + `OO_PP_IS_NULL +( +qu +-> +hd +)); + +673 +qu +-> +num + = 0; + +674 + } +} + +677  + $ci_t_tx_dr_queues +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +679 + `ci_t_s_dr +( +ni +, +ts +); + +680 + `ci_t_ndq_dr +( +ni +, +ts +); + +683 + `t_d_nxt +( +ts + + `t_q_nxt +s + `t_d_u +(ts); + +684 +ts +-> +cge + = +CI_TCP_CONG_OPEN +; + +685 +ts +-> +cwnd_exa + = 0; + +686 +ts +-> +dup_acks + = 0; + +687 + } +} + +690 #i +CI_CFG_FD_CACHING + + +696  + $ci_t_e__to_che +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +698  +rc +; + +699 +ci_t_sock_li +* +s +; + +700 +ci_sock_che_t +* +che +; + +702 + `ci_as +( + `ci_t_is_ched +( +ts +)); + +704 if +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_IN_PASSIVE_CACHE + ) { + +708 + `ci_as_qu +( + `t_ddr_be32 +( +ts +), 0); + +709 + `ci_as_qu +( + `t_t_be16 +( +ts +), 0); + +710 +rc + = + `ci_tif_li_lookup +( +tif +, + `t_ddr_be32 +( +ts +), + `t_t_be16 +(ts)); + +714 + `ci_as_ge +( +rc +, 0); + +715 +s + = + `ID_TO_TCP_LISTEN +( +tif +, + `CI_NETIF_FILTER_ID_TO_SOCK_ID +ґif, +rc +)); + +717 + `ci_as_equ +( +s +-> +s +. +b +. +e +, +CI_TCP_LISTEN +); + +718 +che + = & +s +-> +che +; + +721 +che + = & +tif +-> +e +-> +aive_che +; + +728 #i +CI_CFG_DETAILED_CHECKS + + +731 +ci_ni_di_lk + * +lk + = + +732 + `ci_ni_di_t +( +tif +, & +che +-> +ndg +); + +733  +lk + ! + `ci_ni_di_d +( +tif +, & +che +-> +ndg +) ) { + +734 if +ts + = + `CI_CONTAINER + ( +ci_t_e +, +che_lk +, +lk +) ) + +736 + `ci_ni_di_ +( +tif +, +lk +); + +738 + `ci_as_qu +( +lk +, + `ci_ni_di_d +( +tif +, & +che +-> +ndg +)); + +742 + `LOG_EP +( + `ci_log +("Cached sock " +NSS_FMT +" fd %d fromendingo cached", + +743 + `NSS_PRI_ARGS +( +tif +,& +ts +-> +s +),s-> +ched__fd +)); + +744 + `ci_ni_di_lk_as_is__li +( +tif +, & +ts +-> +che_lk +); + +745 + `ci_ni_di_move_ +( +tif +, & +ts +-> +che_lk +); + +756 + `__ci_t_e_ +( +tif +, +ts +); + +757 + `cp_waab_obj__to_che +( +tif +, & +ts +-> +s +. +b +); + +758 + `ci_ni_di_push +( +tif +, & +che +->che, & +ts +-> +che_lk +); + +759 + } +} + +768  + $ci_t_dr +( +ci_tif +* +tif +, +ci_t_e +* +ts +,  +so_r +) + +770  +rc + = 0; + +772 + `ci_as +( + `ci_tif_is_locked +( +tif +)); + +773 + `ci_as +( +ts +-> +s +. +b +. +e + ! +CI_TCP_LISTEN +); + +775 + `LOG_TC +( + `log +( +LPF + "%d TCP_DROP %s->CLOSED so_error=%d%s%s", + +776 + `S_FMT +( +ts +), + `ci_t_e_r +s-> +s +. +b +. +e +), +so_r +, + +777 ( +ts +-> +s +. +b +. +sb_aags +& +CI_SB_AFLAG_ORPHAN +) ? " orphan":"", + +778 ( +ts +-> +s +. +b +. +sb_aags +& +CI_SB_AFLAG_TCP_IN_ACCEPTQ +) ? "cceptq":"")); + +780 if +so_r + != 0 ) + +781 +ts +-> +s +. +so_r + = so_error; + +783 if +ts +-> +s +. +b +. +e + = +CI_TCP_CLOSED + ) { + +785 if( +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_ORPHAN +) && + +786 ! ( +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_TCP_IN_ACCEPTQ +) ) + +787 + `ci_t_e_ +( +tif +, +ts +); + +791 if +ts +-> +s +. +b +. +e + = +CI_TCP_TIME_WAIT + || + `ci_t_is_timeout_ph +(ts) ) + +792 + `ci_tif_timeout_move +( +tif +, +ts +); + +793 + `ci_ni_di_move_ +( +tif +, & +ts +-> +tx_ady_lk +); + +794 + `ci_t_tx_dr_queues +( +tif +, +ts +); + +795 + `ci__queue_dr +( +tif +, & +ts +-> +rob +); + +796 +ts +-> +s +. +tx_o + = +EPIPE +; + +797 +ts +-> +s +. +rx_o + = +CI_SHUT_RD +; + +798 + `ci_t__tims +( +tif +, +ts +); + +799 +ts +-> +acks_ndg + = 0; + +800 if +ts +-> +s +. +b +. +e + = +CI_TCP_SYN_SENT + ) { + +801 +ts +-> +sms + = 0; + +802 +ts +-> +tags + &~ +CI_TCPT_FLAG_NO_ARP +; + +804 + `ci_t_t_ow_e +( +tif +, +ts +, +CI_TCP_CLOSED +); + +806 #i +CI_CFG_FD_CACHING + + +807 if! + `ci_t_is_ched +( +ts +) ) { + +808 if! + `ci_ni_di_is_lf_lked +( +tif +, & +ts +-> +che_lk +) ) { + +809 + `ci_ni_di_move_ +( +tif +, & +ts +-> +che_lk +); + +810 +rc + = + `ci_t__r_frs +( +tif +, + `S_SP +( +ts +), 1); + +813 +rc + = + `ci_t__r_frs +( +tif +, + `S_SP +( +ts +), 0); + +818 + `ci_tif_fr_move +( +tif +, + `S_ID +( +ts +), + `t_ddr_be32 +(ts), + +819 + `t_t_be16 +( +ts +), + `t_ddr_be32 +(ts), + +820 + `t_t_be16 +( +ts +), + `t_oc +(ts)); + +821 +ts +-> +s +. +s_ags + &~( +CI_SOCK_FLAG_FILTER + | +CI_SOCK_FLAG_MAC_FILTER +); + +824 +rc + = + `ci_t__r_frs +( +tif +, + `S_SP +( +ts +), 0); + +827 if +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_TCP_IN_ACCEPTQ + ) { + +830 if +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_ORPHAN + ) { + +831 + `ci_as +(! + `ci_t_is_ched +( +ts +)); + +832 #ifde +__KERNEL__ + + +834 + `__ci_t_e_ +( +tif +, +ts +); + +835 if +rc + =- +EAGAIN + ) { + +836 +t_hr_dpot_t +* + + = + `ci_tif_g_vid_ +( +tif +, + `S_SP +( +ts +)); + +837 + `t_hr_dpot_queue_n_omic +( + +, +OO_THR_EP_AFLAG_NEED_FREE +); + +840 + `ci_as_equ +( +rc +, 0); + +841 + `cp_waab_obj_ +( +tif +, & +ts +-> +s +. +b +); + +844 + `ci_as_equ +( +rc +, 0); + +845 + `ci_t_e_ +( +tif +, +ts +); + +846 () +rc +; + +849 #i +CI_CFG_FD_CACHING + + +850 if + `ci_t_is_ched +( +ts +) ) { + +851 + `ci_t_e__to_che +( +tif +, +ts +); + +855 + `ci_t_wake_possibly_n__pl +( +tif +, +ts +, + +856 +CI_SB_FLAG_WAKE_RX +| +CI_SB_FLAG_WAKE_TX +); + +858 + } +} + +866  + $ci_t_ws_by_buff +( +ci_tif + * +tif +, +ci_t32 + +rcv_buff +) + +868  +ws +; + +870 + `ci_as +( +rcv_buff + > 0); + +871  +ws + = 0; + +872 ( +ws + < + `NI_OPTS +( +tif +). +t_adv_w_s_max +) && + +873 (()( +CI_CFG_TCP_MAX_WINDOW + << +ws +< () +rcv_buff +); + +874 ++ +ws + ); + +876  +ws +; + +877 + } +} + +880  + $ci_t_r_cks +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +884 +ci__pkt_queue +* +q + = & +ts +-> +s +; + +885 +ci__pkt_fmt +* +pkt +; + +886 +oo_pkt_p + +id + = +q +-> +hd +; + +888  + `OO_PP_NOT_NULL +( +id +) ) { + +889 +pkt + = + `PKT_CHK +( +ni +, +id +); + +890 +pkt +-> +pf +. +t_tx +. +block_d + = +OO_PP_NULL +; + +891 +pkt +-> +ags + &=~ +CI_PKT_FLAG_RTQ_SACKED +; + +892 +id + = +pkt +-> +xt +; + +895 +ts +-> +s_q + = + `t_d_u +(ts); + +896 +ts +-> +s_r + = +q +-> +hd +; + +897 + } +} + +900  + $ci_t_s__rs +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +901 * +cov_q_out +) + +903 +ci__pkt_queue +* +q + = & +ts +-> +s +; + +904 +ci__pkt_fmt +* +pkt +; + +906 + `ci_as +(! + `ci__queue_is_emy +( +q +)); + +907 +pkt + = + `PKT_CHK +( +ni +, +q +-> +hd +); + +908 +ts +-> +s_r + = +q +-> +hd +; + +909 +ts +-> +s_q + = +pkt +-> +pf +. +t_tx +. +t_q +; + +912 if +pkt +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED + ) { + +914 * +cov_q_out + = +pkt +-> +pf +. +t_tx +. +t_q +; + +915 +pkt + = + `PKT_CHK +( +ni +,kt-> +pf +. +t_tx +. +block_d +); + +918 if + `OO_PP_IS_NULL +( +pkt +-> +xt +) ) ; + +919 +pkt + = + `PKT_CHK +( +ni +,kt-> +xt +); + +921 + } +} + +924  + $ci_t_g_ck +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +925 * +ck_out +, * +s_da_out +) + +933 +ci__pkt_queue +* +q + = & +ts +-> +s +; + +934 +ci__pkt_fmt +* +block +; + +935 +ci__pkt_fmt +* +d +; + +936  +s_da + = 0; + +937  +ck +; + +939 + `ci_as +(! + `ci__queue_is_emy +( +q +)); + +941 +block + = + `PKT_CHK +( +ni +, +q +-> +hd +); + +942 +ck + = + `t_d_u +( +ts +); + +945 if + `OO_PP_IS_NULL +( +block +-> +pf +. +t_tx +. +block_d +) ) { + +947 + `ci_as +(~ +block +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED +); + +948 + `ci_as +( + `SEQ_LE +( +block +-> +pf +. +t_tx +. +t_q +, +ck +)); + +949 if + `SEQ_LT +( +ck +, +ts +-> +s_q +) ) + +950 +s_da + + + `SEQ_SUB +( +ts +-> +s_q +, +ck +); + +953 +d + = + `PKT_CHK +( +ni +, +block +-> +pf +. +t_tx +. +block_d +); + +955 if +block +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED + ) + +956 +ck + = +d +-> +pf +. +t_tx +. +d_q +; + +957 if + `SEQ_LT +( +block +-> +pf +. +t_tx +. +t_q +, +ts +-> +s_q +) ) { + +959 if + `SEQ_LE +( +d +-> +pf +. +t_tx +. +d_q +, +ts +-> +s_q +) ) + +961 +s_da + + + `SEQ_SUB +( +d +-> +pf +. +t_tx +. +d_q +, + +962 +block +-> +pf +. +t_tx +. +t_q +); + +964 +s_da + + + `SEQ_SUB +( +ts +-> +s_q +, +block +-> +pf +. +t_tx +. +t_q +); + +967 if + `OO_PP_IS_NULL +( +d +-> +xt +) ) ; + +968 +block + = + `PKT_CHK +( +ni +, +d +-> +xt +); + +971 * +ck_out + = +ck +; + +972 * +s_da_out + = +s_da +; + +973 + } +} + +976  + $ci_t_coved +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +978 + `ci_as +( +ts +-> +cge + ! +CI_TCP_CONG_OPEN + && + +979 +ts +-> +cge + ! +CI_TCP_CONG_NOTIFIED +); + +981 if +ts +-> +cge + = +CI_TCP_CONG_FAST_RECOV + ) { + +982 if!( +ts +-> +tags + & +CI_TCPT_FLAG_SACK +) ) + +988 +ts +-> +cwnd + = + `CI_MAX +s-> +shsh +, + `NI_OPTS +( +ni +). +loss_m_cwnd +); + +990 if +ts +-> +cge + = +CI_TCP_CONG_RTO_RECOV + ) { + +991 if +ts +-> +dup_acks + >ts-> +dup_thsh + ) { + +992 + `ci_t_r__covy +( +ni +, +ts +); + +997 +ts +-> +cge + = +CI_TCP_CONG_OPEN +; + +998 +ts +-> +cwnd_exa + = 0; + +999 +ts +-> +dup_acks + = 0; + +1001 + `LOG_TL +( + `log +( +LNT_FMT + "RECOVERED " +TCP_SND_FMT +" cwnd=%d ssthresh=%dto=%d", + +1002 + `LNT_PRI_ARGS +( +ni +, +ts +), + `TCP_SND_PRI_ARG +(ts), + +1003 +ts +-> +cwnd +,s-> +shsh +,s-> +o +)); + +1005 + `ci_as +( +ts +-> +cwnd + > + `t_eff_mss +(ts)); + +1006 + } +} + +1009  +ci_t_rx_pkt_cs +( +ci_tif +* +ni +, +ci__pkt_queue +* +q +, + +1010 +ci__pkt_fmt +* +pkt +, * +p_d + + +1011 + $CI_DEBUG_ARG +( +ci_t_e +* +ts +)) + +1020 +ci_t_hdr +* +pkt_t + = + `PKT_TCP_HDR +( +pkt +); + +1021 * +pkt_yld + = + `CI_TCP_PAYLOAD +( +pkt_t +); + +1022 +oo_offbuf +* +pkt_buf + = & +pkt +-> +buf +; + +1023 * +pkt_buf_d + = (* +pkt + + +CI_CFG_PKT_BUF_SIZE +; + +1025 + `ci_as +( + `oo_offbuf_r +( +pkt_buf +> +pkt_yld +); + +1026 + `PKT_TCP_RX_BUF_ASSERT_VALID +( +ni +, +pkt +); + +1029 if + `oo_offbuf_r +( +pkt_buf +! +pkt_yld + ) { + +1030  +n + = ()( + `oo_offbuf_r +( +pkt_buf +- +pkt_yld +); + +1031 + `memmove +( +pkt_yld +, + `oo_offbuf_r +( +pkt_buf +), + `oo_offbuf_ +(pkt_buf)); + +1032 +pkt_buf +-> +off + - +n +; + +1033 +pkt_buf +-> +d + - +n +; + +1034 +pkt_t +-> +t_q_be32 + = + `CI_BSWAP_BE32 +( + +1035 + `CI_BSWAP_BE32 +( +pkt_t +-> +t_q_be32 ++ +n +); + +1039 +ci__pkt_fmt +* +xt + = + `PKT_CHK +( +ni +, +pkt +->next); + +1040 +oo_offbuf +* +xt_buf + = & +xt +-> +buf +; + +1041  +n +, +a + = ()( +pkt_buf_d + - + `oo_offbuf_d +( +pkt_buf +)); + +1043 if +xt +-> +fcou + !1 || +a + == 0 ) + +1046 +n + = + `oo_offbuf_ +( +xt_buf +); + +1047 +n + = + `CI_MIN +( +a +,); + +1048 + `memy +( + `oo_offbuf_d +( +pkt_buf +), + `oo_offbuf_r +( +xt_buf +), +n +); + +1050 +pkt_buf +-> +d + + +n +; + +1051 +pkt +-> +pf +. +t_rx +. +d_q + + +n +; + +1052 + `oo_offbuf_adv +( +xt_buf +, +n +); + +1054 if + `oo_offbuf_is_emy +( +xt_buf +) ) { + +1055 +pkt +-> +xt + =ext->next; + +1056 if + `OO_PP_IS_NULL +( +pkt +-> +xt +) ) { + +1057 + `ci_as +( + `OO_PP_EQ +( +q +-> + +, + `OO_PKT_P +( +xt +))); + +1058 +q +-> + + = + `OO_PKT_P +( +pkt +); + +1060 + `ci_as +! + `OO_PP_EQ +( +ts +-> +cv1_exa +, + `OO_PKT_P +( +xt +)) ); + +1061 + `ci_tif_pkt_a_rx_1f +( +ni +, +xt +); + +1062 (* +p_d +)++; + +1063 -- +q +-> +num +; + +1066 + `PKT_TCP_RX_BUF_ASSERT_VALID +( +ni +, +pkt +); + +1067 + `PKT_TCP_RX_BUF_ASSERT_VALID +( +ni +, +xt +); + +1070  ()( +pkt_buf_d + - + `oo_offbuf_d +( +pkt_buf +)); + +1072 + } +} + +1075  + $ci_t_rx_cs_cv +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1076 +ci__pkt_queue +* +q +) + +1078 +ci__pkt_fmt +* +pkt +; + +1079  +d + = 0; + +1081 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +1082 + `ci_as +( + `ci_sock_is_locked +( +ni +, & +ts +-> +s +. +b +)); + +1084 if + `OO_PP_IS_NULL +( +q +-> +hd +) ) + +1087 +pkt + = + `PKT_CHK +( +ni +, +q +-> +hd +); + +1088 if +pkt +-> +fcou + != 1 ) + +1089  +d +; + +1092  + `OO_PP_NOT_NULL +( +pkt +-> +xt +) ) + +1093 if! + `ci_t_rx_pkt_cs +( +ni +, +q +, +pkt +, & +d + + `CI_DEBUG_ARG +( +ts +)) ) + +1095 if + `OO_PP_IS_NULL +( +pkt +-> +xt +) ) + +1097 +pkt + = + `PKT_CHK +( +ni +,kt-> +xt +); + +1099  +d +; + +1100 + } +} + +1103  + $ci_t_dr_rob +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +1105  +i +; + +1106 + `ci__queue_dr +( +ni +, & +ts +-> +rob +); + +1107  +i + = 0; i < +CI_TCP_SACK_MAX_BLOCKS +; ++i ) + +1108 +ts +-> +ϡ_ck +[ +i +] = +OO_PP_NULL +; + +1109 +ts +-> +dck_block + = +OO_PP_INVALID +; + +1110 + } +} + +1113  + $ci_t_y_to__pkts +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1114  +dei +) + +1116 + `ci_as +( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_TCP_CONN +); + +1118  +dei + ) { + +1120 if! + `ci_sock_ylock +( +ni +, & +ts +-> +s +. +b +) ) ; + +1122  +d + = 0; + +1123 +ci_t32 + +q_num_b4 + = +ts +-> +cv1 +. +num +; + +1124 + `ci_t_rx__rxq_bufs_socklocked +( +ni +, +ts +); + +1125 +d + + +q_num_b4 + - +ts +-> +cv1 +. +num +; + +1127 +d + + + `ci_t_rx_cs_cv +( +ni +, +ts +, &ts-> +cv1 +); + +1128 +d + + + `ci_t_rx_cs_cv +( +ni +, +ts +, &ts-> +cv2 +); + +1129 + `ci_sock_uock +( +ni +, & +ts +-> +s +. +b +); + +1130  +d +; + +1134  +num + = +ts +-> +rob +.num; + +1135 + `ci_t_dr_rob +( +ni +, +ts +); + +1136  +num +; + +1144 + } +} + +1146  +le +  + +1147 + $ci_t_rcvbuf_ubu_socklocked +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +1149 + `ci_t_rx__rxq_bufs_socklocked +( +ni +, +ts +); + +1150 + `ci_t_rx_cs_cv +( +ni +, +ts +, &ts-> +cv1 +); + +1151 + `ci_t_rx_cs_cv +( +ni +, +ts +, &ts-> +cv2 +); + +1152 + } +} + +1155 + $ci_t_rcvbuf_ubu +( +ci_tif +* +ni +, +ci_t_e +* +ts +,  +sock_locked +) + +1157  +rob_drݳd + = 0; + +1158  +sock_uock + = 0; + +1159 #ide +NDEBUG + + +1160  +pkts + = +ts +-> +cv1 +. +num + +s-> +cv2 +.num +s-> +rob +.num; + +1163 + `CITP_STATS_NETIF_INC +( +ni +, +t_rcvbuf_abud +); + +1164 + `ci_as +( + `ci_t_rcvbuf_abud +( +ni +, +ts +)); + +1165 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +1168 + `ci_t_rx__rxq_bufs +( +ni +, +ts +); + +1169 if! + `ci_t_rcvbuf_abud +( +ni +, +ts +) ) + +1170  +out +; + +1174 if +ts +-> +rob +. +num + >s-> +rcv_wdow_max + /s-> +amss + ) { + +1175 + `CITP_STATS_NETIF_INC +( +ni +, +t_rcvbuf_abud_rob_guty +); + +1176 + `ci_t_dr_rob +( +ni +, +ts +); + +1177 +rob_drݳd + = 1; + +1178 if! + `ci_t_rcvbuf_abud +( +ni +, +ts +) ) + +1179  +out +; + +1183 if! +sock_locked + ) { + +1184 +sock_locked + = +sock_uock + = + `ci_sock_ylock +( +ni +, & +ts +-> +s +. +b +); + +1186 if +sock_locked + ) + +1187 + `ci_as +( + `ci_sock_is_locked +( +ni +, & +ts +-> +s +. +b +)); + +1191 if +sock_locked + ) { + +1192 + `CITP_STATS_NETIF_INC +( +ni +, +t_rcvbuf_abud_cv_csd +); + +1193 + `ci_t_rcvbuf_ubu_socklocked +( +ni +, +ts +); + +1194 if +sock_uock + ) + +1195 + `ci_sock_uock +( +ni +, & +ts +-> +s +. +b +); + +1197 if +ts +-> +cv1 +. +num + +s-> +cv2 +.num > + +1198 ( +ts +-> +s +. +so +. +rcvbuf + +s-> +rcv_wdow_max +/s-> +amss + ) { + +1199  +rc + = + `ci_sock_lock +( +ni +, & +ts +-> +s +. +b +); + +1200 if +rc + == 0 ) { + +1201 + `CITP_STATS_NETIF_INC +( +ni +, +t_rcvbuf_abud_cv_guty +); + +1202 + `ci_t_rcvbuf_ubu_socklocked +( +ni +, +ts +); + +1203 + `ci_sock_uock +( +ni +, & +ts +-> +s +. +b +); + +1204 #ide +NDEBUG + + +1205 +sock_locked + = +sock_uock + = 1; + +1209 if! + `ci_t_rcvbuf_abud +( +ni +, +ts +) ) + +1210  +out +; + +1214 if! +rob_drݳd + ) { + +1215 + `CITP_STATS_NETIF_INC +( +ni +, +t_rcvbuf_abud_rob_dee +); + +1216 + `ci_t_dr_rob +( +ni +, +ts +); + +1219 +out +: + +1220 #ide +NDEBUG + + +1227 if +sock_locked + ) + +1228 + `ci_as +(! + `ci_t_rcvbuf_abud +( +ts +)); + +1232  +t + = 0; + +1234 if + `ci_t_rcvbuf_abud +( +ni +, +ts +) ) { + +1235 + `LOG_U +( +t + = 1); + +1237 + `LOG_TV +( +t + = 1); + +1238 if +t + ) + +1239 + `ci_log +( +LNT_FMT +" %s(%d):ocked=%d from %do %dimited by %d %s", + +1240 + `LNT_PRI_ARGS +( +ni +, +ts +), +__func__ +, + +1241 +sock_locked + && ! +sock_uock +, sock_locked, +pkts +, + +1242 +ts +-> +cv1 +. +num + +s-> +cv2 +.num +s-> +rob +.num, + +1243 ( +ts +-> +s +. +so +. +rcvbuf + +s-> +rcv_wdow_max +/s-> +amss +, + +1244 + `ci_t_rcvbuf_abud +( +ni +, +ts +) ? " ABUSED" : ""); + +1248 if + `ci_t_rcvbuf_abud +( +ni +, +ts +) ) + +1249 + `CITP_STATS_NETIF_INC +( +ni +, +t_rcvbuf_abud_badly +); + +1251 + } +} + +1254 #i +CI_CFG_LIMIT_AMSS + || +CI_CFG_LIMIT_SMSS + + +1255  + ~ + +1256 +ci_ut16 + + $ci_t_lim_mss +( +ci_ut16 + +mss +, +ci_tif +* +ni +, cڡ * +Δ +) + +1258 if +mss + > +ni +-> +e +-> +max_mss + ) { + +1259 #i +CI_CFG_STATS_NETIF + + +1260 i(1 =++ +ni +-> +e +-> +s +. +mss_limis +) { + +1261 + `LOG_U +( + `ci_log +("%s: (%slimg ms%d => %d", +__FUNCTION__ +, +Δ +, + +1262 +mss +, +ni +-> +e +-> +max_mss +)); + +1265 + `ci_log +("%s: (%slimg ms%d => %d", +__FUNCTION__ +, +Δ +, + +1266 +mss +, +ni +-> +e +-> +max_mss +); + +1268 +mss + = +ni +-> +e +-> +max_mss +; + +1270  +mss +; + +1271 + } +} + +1275  + $ci_t_rfm_deed_sock_wk +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +1277  +aags +, +g +; + +1280 + `ci_as +(( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_TCP +) + +1281 && ( +ts +-> +s +. +b +. +e + ! +CI_TCP_LISTEN +)); + +1283 +g + = +CI_SOCK_AFLAG_NEED_ACK + | +CI_SOCK_AFLAG_NEED_SHUT_RD + | + +1284 +CI_SOCK_AFLAG_NEED_SHUT_WR +; + +1290 +aags + = +ts +-> +s +. +s_aags + & +g +; + +1291 + `ci_rmb +(); + +1292 + `ci_t_ndmsg_queue_equeue_deed +( +ni +, +ts +); + +1294 if +aags + ) { + +1295 + `ci_omic32_d +(& +ts +-> +s +. +s_aags +, ~ +aags +); + +1296 if +aags + & +CI_SOCK_AFLAG_NEED_ACK + ) + +1297 + `ci_t_nd_wnd_upde +( +ni +, +ts +, +CI_FALSE +); + +1298  +aags + & ( +CI_SOCK_AFLAG_NEED_SHUT_RD +| +CI_SOCK_AFLAG_NEED_SHUT_WR +) ) { + +1299  +CI_SOCK_AFLAG_NEED_SHUT_RD + | +CI_SOCK_AFLAG_NEED_SHUT_WR +: + +1300 + `__ci_t_shutdown +( +ni +, +ts +, +SHUT_RDWR +); + +1302  +CI_SOCK_AFLAG_NEED_SHUT_RD +: + +1303 + `__ci_t_shutdown +( +ni +, +ts +, +SHUT_RD +); + +1305  +CI_SOCK_AFLAG_NEED_SHUT_WR +: + +1306 + `__ci_t_shutdown +( +ni +, +ts +, +SHUT_WR +); + +1312 + } +} + +1315  + $ci_t_t_dbuf +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +1317  +size + = + `t_eff_mss +( +ts +); + +1318 +ci_t32 + +d_so_dbuf_pkts + = +ts +-> +so_dbuf_pkts +; + +1320 + `ci_as +( + `t_eff_mss +( +ts +) != 0); + +1325 if + `NI_OPTS +( +ni +). +t_dbuf_mode + ) + +1326 +size + = + `CI_MAX +(size, +CI_CFG_TCP_DEFAULT_MSS +); + +1328 +ts +-> +so_dbuf_pkts + = (ts-> +s +. +so +. +dbuf + + +size + - 1) / size; + +1330 if + `NI_OPTS +( +ni +). +t_dbuf_mode + ) { + +1332 +ts +-> +so_dbuf_pkts + =s->so_sndbuf_pkts * 3 / 2; + +1334 if +ts +-> +s +. +timeampg_ags + & +ONLOAD_SOF_TIMESTAMPING_STREAM + ) + +1335 +ts +-> +so_dbuf_pkts + =s->so_sndbuf_pkts * 3 / 2; + +1340 if + `ci_t_tx_advti_a +( +ni +, +ts + ) && + +1341 +d_so_dbuf_pkts + < +ts +-> +so_dbuf_pkts + ) + +1342 + `ci_t_wake_possibly_n__pl +( +ni +, +ts +, +CI_SB_FLAG_WAKE_TX +); + +1343 + } +} + +1345 #ifde +__KERNEL__ + + +1346  + $ci_t_sync_t_ag +( +sock +* +sock +, * +r +, + +1347  +v +,  +݊ame +) + +1349  +tv + = 1; + +1350  +rc +; + +1352 +rc + = + `kl_tsockt +( +sock +, +v +, +݊ame +, (*)& +tv +, (optval)); + +1353 if +rc + < 0 ) { + +1354 + `ci_log +("%s: ERROR (%d) failedo set socket option %d %d on kernel socket", + +1355 +__FUNCTION__ +, +rc +, +v +, +݊ame +); + +1356 * +r + = +rc +; + +1358 + } +} + +1361  + $ci_t_sync_t_timev +( +sock +* +sock +, * +r +, + +1362  +v +,  +݊ame +,  +timev +* +tv +) + +1364  +rc +; + +1366 +rc + = + `kl_tsockt +( +sock +, +v +, +݊ame +, (*)( +ci_u_t +) +tv +, + +1367 ( +timev +)); + +1368 if +rc + < 0 ) { + +1369 + `ci_log +("%s: ERROR (%d) failedo set socket option %d %do val %lx:%lx " + +1371 +__FUNCTION__ +, +rc +, +v +, +݊ame +, +tv +-> +tv_c +,v-> +tv_uc +); + +1372 * +r + = +rc +; + +1374 + } +} + +1377  + $ci_t_sync_t_unsigd +( +sock +* +sock +, * +r +, + +1378  +v +,  +݊ame +, * +tv +) + +1380  +rc +; + +1382 +rc + = + `kl_tsockt +( +sock +, +v +, +݊ame +, (*) +tv +, ()); + +1383 if +rc + < 0 ) { + +1384 + `ci_log +("%s: ERROR (%d) failedo set socket option %d %do val %u on " + +1385 "ksock", +__FUNCTION__ +, +rc +, +v +, +݊ame +, * +tv +); + +1386 * +r + = +rc +; + +1388 + } +} + +1391  + $ci_t_sync_so_sockts +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1392  +sock +* +sock +) + +1394  +r + = 0; + +1395  +rc +; + +1396  +timev + +tv +; + +1397  +tv +; + +1398 +sockn_t + +ݎ +; + +1399  +lg + +l +; + +1401 if +ts +-> +s +. +so +. +rcvtimeo_mc + > 0 ) { + +1402 +ݎ + = ( +tv +); + +1403 +rc + = + `ci_g_s_sock +( +ni +, & +ts +-> +s +, +SO_RCVTIMEO +, & +tv +, & +ݎ +); + +1404 + `ci_as_equ +( +rc +, 0); + +1405 () +rc +; + +1406 + `ci_t_sync_t_timev +( +sock +, & +r +, +SOL_SOCKET +, +SO_RCVTIMEO +, & +tv +); + +1408 if +ts +-> +s +. +so +. +dtimeo_mc + > 0 ) { + +1409 +ݎ + = ( +tv +); + +1410 +rc + = + `ci_g_s_sock +( +ni +, & +ts +-> +s +, +SO_SNDTIMEO +, & +tv +, & +ݎ +); + +1411 + `ci_as_equ +( +rc +, 0); + +1412 () +rc +; + +1413 + `ci_t_sync_t_timev +( +sock +, & +r +, +SOL_SOCKET +, +SO_SNDTIMEO +, & +tv +); + +1415 if +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_KALIVE + ) { + +1416 + `ci_t_sync_t_ag +( +sock +, & +r +, +SOL_SOCKET +, +SO_KEEPALIVE +); + +1418 if +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_OOBINLINE + ) { + +1419 + `ci_t_sync_t_ag +( +sock +, & +r +, +SOL_SOCKET +, +SO_OOBINLINE +); + +1421 if +ts +-> +s +. +so +. +rcvlow + != 1 ) { + +1422 +ݎ + = ( +tv +); + +1423 +rc + = + `ci_g_s_sock +( +ni +, & +ts +-> +s +, +SO_RCVLOWAT +, & +tv +, & +ݎ +); + +1424 + `ci_as_equ +( +r +, 0); + +1425 () +rc +; + +1426 + `ci_t_sync_t_unsigd +( +sock +, & +r +, +SOL_SOCKET +, +SO_RCVLOWAT +, & +tv +); + +1428 if +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_BROADCAST + ) { + +1429 + `ci_t_sync_t_ag +( +sock +, & +r +, +SOL_SOCKET +, +SO_BROADCAST +); + +1431 if +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_REUSEADDR + ) { + +1432 + `ci_t_sync_t_ag +( +sock +, & +r +, +SOL_SOCKET +, +SO_REUSEADDR +); + +1434 if +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_SET_SNDBUF + ) { + +1435 +tv + = +ts +-> +s +. +so +. +dbuf + / 2; + +1436 + `ci_t_sync_t_unsigd +( +sock +, & +r +, +SOL_SOCKET +, +SO_SNDBUF +, & +tv +); + +1438 if +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_SET_RCVBUF + ) { + +1439 +tv + = +ts +-> +s +. +so +. +rcvbuf + / 2; + +1440 + `ci_t_sync_t_unsigd +( +sock +, & +r +, +SOL_SOCKET +, +SO_RCVBUF +, & +tv +); + +1442 if +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_LINGER + ) { + +1443 +l +. +l_off + = 1; + +1444 +l +. +l_lg + = +ts +-> +s +. +so +. +lg +; + +1445 +rc + = + `kl_tsockt +( +sock +, +SOL_SOCKET +, +SO_LINGER +, (*)& +l +, (l)); + +1446 if +rc + < 0 ) { + +1447 + `ci_log +("%s: ERROR (%d) failedo set SO_LINGERo val %d on " + +1448 "ksock", +__FUNCTION__ +, +rc +, +l +. +l_lg +); + +1449 +r + = +rc +; + +1452 if +ts +-> +s +. +so_iܙy + != 0 ) { + +1456 +ݎ + = ( +tv +); + +1457 +rc + = + `ci_g_s_sock +( +ni +, & +ts +-> +s +, +SO_PRIORITY +, & +tv +, & +ݎ +); + +1458 + `ci_as_equ +( +rc +, 0); + +1459 + `ci_t_sync_t_unsigd +( +sock +, & +r +, +SOL_SOCKET +, +SO_PRIORITY +, & +tv +); + +1461 if +ts +-> +s +. + +. +so_bdtodevi + ! +CI_IFID_BAD + ) { + +1466 * +iame +; + +1467  +t_devi + * +dev + = + `dev_g_by_dex +(& +_t +, + +1468 +ts +-> +s +. + +. +so_bdtodevi +); + +1469 if +dev + ) { + +1470 +iame + = +dev +-> +me +; + +1471 +rc + = + `kl_tsockt +( +sock +, +SOL_SOCKET +, +SO_BINDTODEVICE +, +iame +, + +1472 + ` +( +iame +)); + +1473 if +rc + < 0 ) { + +1474 + `ci_log +("%s: ERROR (%d) failedo set SO_BINDTODEVICEo val %s on " + +1475 "ksock", +__FUNCTION__ +, +rc +, +iame +); + +1476 +r + = +rc +; + +1478 + `dev_put +( +dev +); + +1484 + `ci_log +("%s: ERROR couldotetrieve ifname for ifindex %d,ot syncing" + +1486 +__FUNCTION__ +, +ts +-> +s +. + +. +so_bdtodevi +); + +1487 +r + = - +EINVAL +; + +1490 if +ts +-> +s +. +so +. +so_debug + & +CI_SOCKOPT_FLAG_SO_DEBUG + ) { + +1491 + `ci_t_sync_t_ag +( +sock +, & +r +, +SOL_SOCKET +, +SO_DEBUG +); + +1493 if +ts +-> +s +. +cmsg_ags + & +CI_IP_CMSG_TIMESTAMP + ) { + +1494 + `ci_t_sync_t_ag +( +sock +, & +r +, +SOL_SOCKET +, +SO_TIMESTAMP +); + +1496 if +ts +-> +s +. +cmsg_ags + & +CI_IP_CMSG_TIMESTAMPNS + ) { + +1497 + `ci_t_sync_t_ag +( +sock +, & +r +, +SOL_SOCKET +, +SO_TIMESTAMPNS +); + +1499 if +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_REUSEPORT + ) { + +1500 + `ci_t_sync_t_ag +( +sock +, & +r +, +SOL_SOCKET +, +SO_REUSEPORT +); + +1503  +r +; + +1504 + } +} + +1506  + $ci_t_sync__sockts +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1507  +sock +* +sock +) + +1509  +tv +; + +1510  +ݎ +; + +1511  +r + = 0; + +1512  +rc +; + +1514 if +ts +-> +s +. +pkt +. + +. +_tos + != 0 ) { + +1515 +ݎ + = ( +tv +); + +1516 +rc + = + `ci_g_s_sock +( +ni +, & +ts +-> +s +, +IP_TOS +, & +tv +, & +ݎ +); + +1517 + `ci_as_equ +( +rc +, 0); + +1518 () +rc +; + +1519 + `ci_t_sync_t_unsigd +( +sock +, & +r +, +SOL_IP +, +IP_TOS +, & +tv +); + +1521 if +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_SET_IP_TTL + ) { + +1522 +ݎ + = ( +tv +); + +1523 +rc + = + `ci_g_s_sock +( +ni +, & +ts +-> +s +, +IP_TTL +, & +tv +, & +ݎ +); + +1524 + `ci_as_equ +( +rc +, 0); + +1525 () +rc +; + +1526 + `ci_t_sync_t_unsigd +( +sock +, & +r +, +SOL_IP +, +IP_TTL +, & +tv +); + +1528 if +ts +-> +s +. +cmsg_ags + & +CI_IP_CMSG_PKTINFO + ) { + +1529 + `ci_t_sync_t_ag +( +sock +, & +r +, +SOL_IP +, +IP_PKTINFO +); + +1531 if +ts +-> +s +. +s_ags + & ( +CI_SOCK_FLAG_ALWAYS_DF + | +CI_SOCK_FLAG_PMTU_DO +) ) { + +1532 +ݎ + = ( +tv +); + +1533 +rc + = + `ci_g_s_sock +( +ni +, & +ts +-> +s +, +SO_PRIORITY +, & +tv +, & +ݎ +); + +1534 + `ci_as_equ +( +rc +, 0); + +1535 () +rc +; + +1536 + `ci_t_sync_t_unsigd +( +sock +, & +r +, +SOL_IP +, +IP_MTU_DISCOVER +, & +tv +); + +1538 if +ts +-> +s +. +cmsg_ags + & +CI_IP_CMSG_TOS + ) { + +1539 + `ci_t_sync_t_ag +( +sock +, & +r +, +SOL_IP +, +IP_RECVTOS +); + +1541 if +ts +-> +s +. +so +. +so_debug + & +CI_SOCKOPT_FLAG_IP_RECVERR + ) { + +1542 + `ci_t_sync_t_ag +( +sock +, & +r +, +SOL_IP +, +IP_RECVERR +); + +1544 if +ts +-> +s +. +cmsg_ags + & +CI_IP_CMSG_TTL + ) { + +1545 + `ci_t_sync_t_ag +( +sock +, & +r +, +SOL_IP +, +IP_RECVTTL +); + +1547 if +ts +-> +s +. +cmsg_ags + & +CI_IP_CMSG_RECVOPTS + ) { + +1548 + `ci_t_sync_t_ag +( +sock +, & +r +, +SOL_IP +, +IP_RECVOPTS +); + +1550 if +ts +-> +s +. +cmsg_ags + & +CI_IP_CMSG_RETOPTS + ) { + +1551 + `ci_t_sync_t_ag +( +sock +, & +r +, +SOL_IP +, +IP_RETOPTS +); + +1554  +r +; + +1555 + } +} + +1557  + $ci_t_sync_t_sockts +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1558  +sock +* +sock +) + +1560  +tv +; + +1561  +ݎ +; + +1562  +r + = 0; + +1563  +rc +; + +1565 if +ts +-> +s +. +s_aags + & +CI_SOCK_AFLAG_CORK_BIT + ) { + +1566 + `ci_t_sync_t_ag +( +sock +, & +r +, +SOL_TCP +, +TCP_CORK +); + +1568 if +ts +-> +s +. +s_aags + & +CI_SOCK_AFLAG_NODELAY_BIT + ) { + +1569 + `ci_t_sync_t_ag +( +sock +, & +r +, +SOL_TCP +, +TCP_NODELAY +); + +1571 #ifde +TCP_KEEPALIVE_ABORT_THRESHOLD + + +1572 if +ts +-> +c +. +ka_obe_th + ! + `NI_OPTS +( +ni +). +klive_obes + ) { + +1573 +ݎ + = ( +tv +); + +1574 +rc + = + `ci_g_s_t +( +ni +, & +ts +-> +s +, +TCP_KEEPALIVE_ABORT_THRESHOLD +, & +tv +, + +1575 & +ݎ +); + +1576 + `ci_as_equ +( +rc +, 0); + +1577 () +rc +; + +1578 + `ci_t_sync_t_unsigd +( +sock +, & +r +, +SOL_TCP +, +TCP_KEEPALIVE_ABORT_THRESHOLD +, + +1579 & +tv +); + +1582 if +ts +-> +c +. +ur_mss + != 0 ) { + +1583 +ݎ + = ( +tv +); + +1584 +rc + = + `ci_g_s_t +( +ni +, & +ts +-> +s +, +TCP_MAXSEG +, & +tv +, & +ݎ +); + +1585 + `ci_as_equ +( +rc +, 0); + +1586 () +rc +; + +1587 + `ci_t_sync_t_unsigd +( +sock +, & +r +, +SOL_TCP +, +TCP_MAXSEG +, & +tv +); + +1589 if +ts +-> +c +. +t_ka_time + ! + `NI_CONF +( +ni +). +tcڡ_klive_time + ) { + +1590 +ݎ + = ( +tv +); + +1591 +rc + = + `ci_g_s_t +( +ni +, & +ts +-> +s +, +TCP_KEEPIDLE +, & +tv +, & +ݎ +); + +1592 + `ci_as_equ +( +rc +, 0); + +1593 () +rc +; + +1594 + `ci_t_sync_t_unsigd +( +sock +, & +r +, +SOL_TCP +, +TCP_KEEPIDLE +, & +tv +); + +1596 if +ts +-> +c +. +t_ka_tvl + ! + `NI_CONF +( +ni +). +tcڡ_klive_tvl + ) { + +1597 +ݎ + = ( +tv +); + +1598 +rc + = + `ci_g_s_t +( +ni +, & +ts +-> +s +, +TCP_KEEPINTVL +, & +tv +, & +ݎ +); + +1599 + `ci_as_equ +( +rc +, 0); + +1600 () +rc +; + +1601 + `ci_t_sync_t_unsigd +( +sock +, & +r +, +SOL_TCP +, +TCP_KEEPINTVL +, & +tv +); + +1603 if +ts +-> +c +. +ka_obe_th + ! + `NI_CONF +( +ni +). +klive_obes + ) { + +1604 +ݎ + = ( +tv +); + +1605 +rc + = + `ci_g_s_t +( +ni +, & +ts +-> +s +, +TCP_KEEPCNT +, & +tv +, & +ݎ +); + +1606 + `ci_as_equ +( +rc +, 0); + +1607 () +rc +; + +1608 + `ci_t_sync_t_unsigd +( +sock +, & +r +, +SOL_TCP +, +TCP_KEEPCNT +, & +tv +); + +1610 if +ts +-> +c +. +t_der_ac + ! +OO_TCP_DEFER_ACCEPT_OFF + ) { + +1611 +ݎ + = ( +tv +); + +1612 +rc + = + `ci_g_s_t +( +ni +, & +ts +-> +s +, +TCP_DEFER_ACCEPT +, & +tv +, & +ݎ +); + +1613 + `ci_as_equ +( +rc +, 0); + +1614 () +rc +; + +1615 + `ci_t_sync_t_unsigd +( +sock +, & +r +, +SOL_TCP +, +TCP_DEFER_ACCEPT +, & +tv +); + +1618  +r +; + +1619 + } +} + +1643  + $ci_t_sync_sockts_to_os_sock +( +ci_tif +* +ni +, +oo_ + +sock_id +, + +1644  +sock +* +sock +) + +1646  +rc +; + +1647 +ci_t_e +* +ts + = + `SP_TO_TCP +( +ni +, +sock_id +); + +1649 +rc + = + `ci_t_sync_so_sockts +( +ni +, +ts +, +sock +); + +1650 if +rc + < 0 ) + +1651  +rc +; + +1653 +rc + = + `ci_t_sync__sockts +( +ni +, +ts +, +sock +); + +1654 if +rc + < 0 ) + +1655  +rc +; + +1657 +rc + = + `ci_t_sync_t_sockts +( +ni +, +ts +, +sock +); + +1658  +rc +; + +1659 + } +} + +1663  + $ci_t_t_dbuf_om_dbuf_pkts +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +1669  +size + = + `t_eff_mss +( +ts +); + +1671 + `ci_as_qu +( + `t_eff_mss +( +ts +), 0); + +1673 +size + = + `CI_MAX +(size, +CI_CFG_TCP_DEFAULT_MSS +); + +1674 +ts +-> +s +. +so +. +dbuf + =s-> +so_dbuf_pkts + * +size +; + +1677 +ts +-> +s +. +so +. +dbuf + = (ts->s.so.sndbuf / 3) * 2; + +1679 if +ts +-> +s +. +timeampg_ags + & +ONLOAD_SOF_TIMESTAMPING_STREAM + ) + +1680 +ts +-> +s +. +so +. +dbuf + = (ts->s.so.sndbuf / 3) * 2; + +1681 + } +} + +1684  + $ci_t_exnd_dbuf +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +1690  +_gs +; + +1691  +dpkts +; + +1692  +max_dbuf_pkts + = + +1693 + `NI_OPTS +( +ni +). +max_tx_cks + >> NI_OPTSi). +t_sockbuf_max_ai +; + +1696 +_gs + = + `CI_MAX +(10, +ts +-> +cwnd + / + `t_eff_mss +(ts)); + +1699 +dpkts + = 2 * +_gs +; + +1701 if +ts +-> +so_dbuf_pkts + < +dpkts + ) + +1702 +ts +-> +so_dbuf_pkts + = + `CI_MIN +( +dpkts +, +max_dbuf_pkts +); + +1703 + } +} + +1706 +bo + + $ci_t_should_exnd_dbuf +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +1709 if +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_SET_SNDBUF + ) + +1710  +l +; + +1713 if +ni +-> +e +-> +mem_essu + & + +1714 ( +OO_MEM_PRESSURE_CRITICAL + | +OO_MEM_PRESSURE_LOW +) ) + +1715  +l +; + +1718 if + `ci_t_ight +( +ts +>ts-> +cwnd + ) + +1719  +l +; + +1721  +ue +; + +1722 + } +} + +1725  + $ci_t_mode_dbuf +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +1727 cڡ +ci_t32 + +m_dbuf_pkts + = 2; + +1728 if! ( +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_SET_SNDBUF +) ) { + +1729 +ts +-> +so_dbuf_pkts + = + `CI_MIN +(ts->so_sndbuf_pkts, + +1730 + `ci_t_ndq_n_pkts +( +ts +) >> 1); + +1731 +ts +-> +so_dbuf_pkts + = + `CI_MAX +s->so_dbuf_pkts, +m_dbuf_pkts +); + +1733 + } +} + +1736 +ci_t32 + + $ci_t_max_rcvbuf +( +ci_tif +* +ni +, +ci_ut16 + +amss +) + +1740  ( + `NI_OPTS +( +ni +). +max_rx_cks + >> + +1741 + `NI_OPTS +( +ni +). +t_sockbuf_max_ai + ) * +amss +; + +1742 + } +} + + @tcp_recv.c + +14  + ~"_.h +" + +17  + #LPF + "TCP RECV " + + ) + +19 #ifde +_WIN32 + + +20  + #CI_MSG_TRUNC + +MSG_PARTIAL + + + ) + +22  + #CI_MSG_TRUNC + +MSG_TRUNC + + + ) + +26  + st_cv_fo + { + +27  + mrc +; + +28  + mack_locked +; + +29 +ci_iovec_r + + mpiov +; + +30 +ci_ut64 + + mtimeamp +; + +31  +timeec + + mhw_timeamp +; + +32 cڡ +ci_t_cvmsg_gs +* + ma +; + +33  + mmsg_ags +; + +36 #ide +__KERNEL__ + + +37  +ci_t_cvmsg_urg +( +t_cv_fo + * +rf +); + +40  +ci_t_cvmsg_cv2 +( +t_cv_fo + * +rf +); + +46 +ci_le +  + +47 + $ci_t_cv_fl_msgme +( +ci_t_e +* +ts +,  +sockaddr + * +me +, + +48 +sockn_t + * +m +) + +50 #i +CI_CFG_TCP_RECVMSG_MSGNAME + + +51 if +me + ) { + +52  +sockaddr_ +* +sp +; + +53  +sockaddr_ + +s_buf +; + +55 + `ci_as +( +ts +); + +56 + `ci_as +( +m +); + +58 if + `CI_LIKELY +(* +m + >( +sockaddr_ +)) ) { + +59 +sp + = ( +sockaddr_ + *) +me +; + +60 +sp +-> +s_my + = +AF_INET +; + +61 +sp +-> +s_pt + = + `TS_TCP +( +ts +)-> +t_de_be16 +; + +62 +sp +-> +s_addr +. +s_addr + = +ts +-> +s +. +pkt +. + +. +_daddr_be32 +; + +63 * +m + = ( +sockaddr_ +); + +66 +s_buf +. +s_my + = +AF_INET +; + +67 +s_buf +. +s_pt + = + `TS_TCP +( +ts +)-> +t_de_be16 +; + +68 +s_buf +. +s_addr +. +s_addr + = +ts +-> +s +. +pkt +. + +. +_daddr_be32 +; + +69 + `memy +( +me +, & +s_buf +, * +m +); + +73 * +m + = 0; + +75 + } +} + +78  + $ci_t_nd_wnd_upde +( +ci_tif +* +ni +, +ci_t_e +* +ts +,  +sock_locked +) + +80 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +82 if( + `CI_UNLIKELY +! ( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_ACCEPT_DATA +) )) + +85 + `ci_as_ +( + `ci_t_ack_igg_d +( +ts +), + `ci_t_max_rcv_wdow +(ts)); + +87 if + `SEQ_SUB +( +ts +-> +rcv_dived + + + `ci_t_max_rcv_wdow +(ts), + +88 + `t_rcv_wnd_right_edge_ +( +ts +)) + +89 > + `ci_t_ack_igg_d +( +ts +) ) { + +90 +ci__pkt_fmt +* +pkt + = + `ci_tif_pkt_loc +( +ni +); + +91 if +pkt + ) { + +92 + `LOG_TR +( + `log +( +LNTS_FMT + "window updatedvertised=%d", + +93 + `LNTS_PRI_ARGS +( +ni +, +ts +), + `t_rcv_wnd_advtid +(ts))); + +94 + `CITP_STATS_NETIF_INC +( +ni +, +wnd_updes_ +); + +95 + `ci_t_nd_ack +( +ni +, +ts +, +pkt +, +sock_locked +); + +99 +ts +-> +ack_igg + + + `ci_t_ack_igg_d +(ts); + +104 + } +} + +110  + $ci_t_cvmsg_nd_wnd_upde +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +111  +ags +) + +113 if! + `ci_tif_ylock +( +ni +) ) { + +114 + `ci_b_t +(& +ts +-> +s +. +s_aags +, +CI_SOCK_AFLAG_NEED_ACK_BIT +); + +115 if! + `ci_tif_lock__der_wk +( +ni +, & +ts +-> +s +. +b +) ) + +117 + `ci_b_r +(& +ts +-> +s +. +s_aags +, +CI_SOCK_AFLAG_NEED_ACK_BIT +); + +120 + `CHECK_TS +( +ni +, +ts +); + +122 + `LOG_TR +( + `log +( +LNTS_FMT + "ack_trigger=%x c/wcv_delivered=%x " + +124 + `LNTS_PRI_ARGS +( +ni +, +ts +),s-> +ack_igg +,s-> +rcv_dived +, + +125 +ts +-> +rcv_added +,s-> +rcv_wdow_max +, + +126 + `t_rcv_wnd_right_edge_ +( +ts +), + +127 + `t_rcv_wnd_cut +( +ts +))); + +129 if +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_NOT_CONNECTED + )  +out +; + +132 + `ci_t_rx__rxq_bufs +( +ni +, +ts +); + +144 if! + `ci_t_nd_wnd_upde +( +ni +, +ts +, +CI_TRUE +) ) + +148 +ts +-> +ack_igg + =s-> +rcv_dived + + +149 + + `ci_t_ack_igg_d +( +ts +) + +150 - + `SEQ_SUB +( +ts +-> +rcv_dived + +s-> +rcv_wdow_max +, + +151 + `t_rcv_wnd_right_edge_ +( +ts +)); + +153 +out +: + +154 + `CHECK_TS +( +ni +, +ts +); + +156 + `ci_tif_uock +( +ni +); + +157 + } +} + +163  + $ci_t_rcvbuf_drs +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +165 +ci_time_t + +time +; + +166 +ci_ut32 + +rcv_bys +; + +178  +max_rcvbuf_cks + = + +179 + `NI_OPTS +( +tif +). +max_rx_cks + >> NI_OPTSґif). +t_sockbuf_max_ai +; + +181 +time + = + `ci_t_time_now +( +tif +- +ts +-> +rcvbuf_drs +.time; + +182 if +time + < ( +ts +-> + + >> 3) ||s->sa == 0 ) + +186 +rcv_bys + = +ts +-> +rcv_dived + -s-> +rcvbuf_drs +. +q +; + +187 if +rcv_bys + < +ts +-> +rcvbuf_drs +. +bys + ) + +188  +w_riod +; + +196 if! ( +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_SET_SNDBUF +) ) { + +197  +rcv_wnd +, +rcvbuf +; + +200 +rcv_wnd + = ( +rcv_bys + << 1+ 16 * +ts +-> +amss +; + +202 if +rcv_bys + > +ts +-> +rcvbuf_drs +. +bys + + (ts->rcvbuf_drs.bytes >> 2) ) { + +204 i( +rcv_bys + > +ts +-> +rcvbuf_drs +. +bys + + (ts->rcvbuf_drs.bytes >> 1)) + +206 +rcv_wnd + <<= 1; + +209 +rcv_wnd + += (rcv_wnd >> 1); + +212 +rcvbuf + = + `CI_MIN +( +rcv_wnd +, +max_rcvbuf_cks + * +ts +-> +amss +); + +214 if +rcvbuf + > +ts +-> +s +. +so +.rcvbuf ) { + +215 +ts +-> +s +. +so +. +rcvbuf + =cvbuf; + +216 + `ci_t_t_rcvbuf +( +tif +, +ts +); + +220 +ts +-> +rcvbuf_drs +. +bys + = +rcv_bys +; + +222 +w_riod +: + +223 +ts +-> +rcvbuf_drs +. +q + =s-> +rcv_dived +; + +224 +ts +-> +rcvbuf_drs +. +time + = + `ci_t_time_now +( +tif +); + +225 + } +} + +228  +le +  + +229 + $ci_t_cvmsg_g_nݓk +( +ek_off +, +ci_t_e + * +ts +, +ci_tif + * +tif +, + +230 +ci__pkt_fmt + ** +pkt +,  +tٮ +,  +n +,  +max_bys +, + +231  +t_cv_fo + * +rf +) + +233 + `ci_as +( +ek_off + == 0); + +234 +ts +-> +rcv_dived + + +n +; + +235 if + `NI_OPTS +( +tif +). +t_rcvbuf_mode + == 1 ) + +237 + `ci_t_rcvbuf_drs +( +tif +, +ts +); + +238 if + `oo_offbuf_ +(&(* +pkt +)-> +buf +) == 0 ) { + +240 if + `CI_UNLIKELY +( + `SEQ_LE +( +ts +-> +ack_igg +,s-> +rcv_dived +)) ) + +241 + `ci_t_cvmsg_nd_wnd_upde +( +tif +, +ts +, +rf +-> +a +-> +ags +); + +242 if +tٮ + = +max_bys + || + `OO_PP_IS_NULL +((* +pkt +)-> +xt +) ) + +246 +ts +-> +cv1_exa + = (* +pkt +)-> +xt +; + +247 * +pkt + = + `PKT_CHK_NNL +( +tif +, +ts +-> +cv1_exa +); + +248 + `ci_as +( + `oo_offbuf_n_emy +(&(* +pkt +)-> +buf +)); + +251 + } +} + +265 + $ci_t_cvmsg_g +( +t_cv_fo + * +rf +) + +267 +ci_tif +* +tif + = +rf +-> +a +-> +ni +; + +268 +ci_t_e +* +ts + = +rf +-> +a +->ts; + +269  +n +, +ek_off +, +tٮ +; + +270 +ci__pkt_fmt +* +pkt +; + +271  +max_bys +; + +273 + `ci_as +( +tif +); + +274 + `ci_as +( +ts +); + +277 + `ci_as +( + `ci_sock_is_locked +( +tif +, & +ts +-> +s +. +b +)); + +279 +ek_off + = 0; + +280 +tٮ + = 0; + +285 +max_bys + = + `t_rcv_u +( +ts +); + +287 if +max_bys + <0 || + `OO_PP_IS_NULL +( +ts +-> +cv1_exa +)) + +288  +tٮ +; + +290 +pkt + = + `PKT_CHK_NNL +( +tif +, +ts +-> +cv1_exa +); + +291 if + `oo_offbuf_is_emy +(& +pkt +-> +buf +) ) { + +292 if + `OO_PP_IS_NULL +( +pkt +-> +xt + +tٮ +; + +293 +ts +-> +cv1_exa + = +pkt +-> +xt +; + +294 +pkt + = + `PKT_CHK_NNL +( +tif +, +ts +-> +cv1_exa +); + +295 + `ci_as +( + `oo_offbuf_n_emy +(& +pkt +-> +buf +)); + +301 if +rf +-> +rc + == 0 ) { + +302 +rf +-> +timeamp + = +pkt +-> +pf +. +t_rx +. +rx_amp +; + +303 +rf +-> +hw_timeamp +. +tv_c + = +pkt +-> +pf +. +t_rx +. +rx_hw_amp +.tv_sec; + +304 +rf +-> +hw_timeamp +. +tv_nc + = +pkt +-> +pf +. +t_rx +. +rx_hw_amp +.tv_nsec; + +306 if +rf +-> +rc + > 0 ) { + +310 + `ci_as_nags +( +rf +-> +a +-> +ags +, +ONLOAD_MSG_ONEPKT +); + +314 + `ci_as +(0); + +318 + `PKT_TCP_RX_BUF_ASSERT_VALID +( +tif +, +pkt +); + +319 + `ci_as +( + `oo_offbuf_n_emy +(& +pkt +-> +buf +)); + +320 + `ci_as +( + `oo_offbuf_ +(& +pkt +-> +buf +> +ek_off +); + +322 +n + = + `ci__cy_pkt_to_ur +( +tif +, & +rf +-> +piov +. +io +, +pkt +, +ek_off +); + +323 #ifde +__KERNEL__ + + +324 if +n + < 0 )  +tٮ +; + +327 +tٮ + + +n +; + +328 + `ci_as +( +tٮ + < +max_bys +); + +330 if( + `CI_LIKELY +! ( +rf +-> +a +-> +ags + & ( +MSG_PEEK + | +ONLOAD_MSG_ONEPKT +)) )) { + +331 if + `ci_t_cvmsg_g_nݓk +( +ek_off +, +ts +, +tif +, & +pkt +, +tٮ +, +n +, + +332 +max_bys +, +rf +) != 0 ) + +333  +tٮ +; + +336 if +rf +-> +a +-> +ags + & +MSG_PEEK + ) { + +338 + `oo_offbuf_rd +(& +pkt +-> +buf +, +n +); + +340 +ek_off + + +n +; + +341 if + `oo_offbuf_ +(& +pkt +-> +buf +- +ek_off + == 0 ) { + +343 if +tٮ + = +max_bys + || + `OO_PP_IS_NULL +( +pkt +-> +xt +) ) + +345  +tٮ +; + +346 +pkt + = + `PKT_CHK_NNL +( +tif +,kt-> +xt +); + +347 +ek_off + = 0; + +348 + `ci_as +( + `oo_offbuf_n_emy +(& +pkt +-> +buf +)); + +352 if + `ci_t_cvmsg_g_nݓk +( +ek_off +, +ts +, +tif +, & +pkt +, +tٮ +, +n +, + +353 +max_bys +, +rf +) != 0 ) + +354  +tٮ +; + +357 if +rf +-> +a +-> +ags + & +ONLOAD_MSG_ONEPKT + ) + +358  +tٮ +; + +361 if + `CI_IOVEC_LEN +(& +rf +-> +piov +. +io +) == 0 ) { + +363 if +rf +-> +piov +. +iovn + =0 )  +tٮ +; + +364 +rf +-> +piov +. +io + = *Ԛf->piov. +iov +)++; + +365 -- +rf +-> +piov +. +iovn +; + +374 + } +} + +380  + $ci_t_cvmsg_ +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +381 +ci_ut64 + +t_c +) + +383 +ci_ut64 + +now_c +; + +384 +ci_ut64 + +schedu_c + = +t_c +; + +385 #ide +__KERNEL__ + + +386 +cp_sigl_fo +* +si + = + `cp_sigl_g_ecific_ed +(); + +388 +ci_ut64 + +max_ + = +ts +-> +s +. +b +. +_cyes +; + +389  +rc +, +_lim_by_so + = 0; + +391 if +ts +-> +s +. +so +. +rcvtimeo_mc + ) { + +392 +ci_ut64 + +max_so_ + = (ci_ut64) +ts +-> +s +. +so +. +rcvtimeo_mc + * + +393 + `IPTIMER_STATE +( +ni +)-> +khz +; + +394 if +max_so_ + < +max_ + ) { + +395 +max_ + = +max_so_ +; + +396 +_lim_by_so + = 1; + +400 +now_c + = +t_c +; + +403 if + `ci_tif_may_pl +( +ni +) ) { + +404 if + `ci_tif_ed_pl_ng +( +ni +, +now_c +) ) { + +405 if + `ci_tif_ylock +( +ni +) ) { + +406 + `ci_tif_pl_n +( +ni +, + `NI_OPTS +i). +evs_r_pl +); + +407 + `ci_tif_uock +( +ni +); + +410 if! +ni +-> +e +-> +is_r + ) + +411 +ni +-> +e +-> +is_r + = 1; + +413 if + `t_rcv_u +( +ts +|| + `TCP_RX_DONE +(ts) ) { + +414 +ni +-> +e +-> +is_r + = 0; + +417 + `ci_c64 +(& +now_c +); + +418 +rc + = + `OO_SPINLOOP_PAUSE_CHECK_SIGNALS +( +ni +, +now_c +, & +schedu_c +, + +419 +ts +-> +s +. +so +. +rcvtimeo_mc +, &ts->s. +b +, +si +); + +420 if +rc + != 0 ) + +421  +out +; + +422 #i +CI_CFG_SPIN_STATS + + +423 +ni +-> +e +-> +s +. +_t_cv +++; + +425 }  +now_c + - +t_c + < +max_ + ); + +427 +rc + = +_lim_by_so + ? - +EAGAIN + : 0; + +428 +out +: + +429 +ni +-> +e +-> +is_r + = 0; + +430  +rc +; + +431 + } +} + +443  + #FLAGS_AND_LOWAT_PERMIT_FAST_RET_WITH_DATA +( +ts +, +bys +, +ags +) \ + +444 (( +ags + & ( +MSG_DONTWAIT + | +MSG_PEEK +)) || \ + +445 ((~ +ags + & +MSG_WAITALL +&& ( +bys +>( +ts +)-> +s +. +so +. +rcvlow +)) + + ) + +448 #ide +__KERNEL__ + + +454 +ci_le +  + +455 + $ci_t_fl_cv_timeamp +( +t_cv_fo +* +rf +) + +457 +ci_tif +* +ni + = +rf +-> +a +->ni; + +458 +ci_t_e +* +ts + = +rf +-> +a +->ts; + +459 +ci_msghdr +* +msg + = +rf +-> +a +->msg; + +461 #ifde +__lux__ + + +462 if +msg + ! +NULL + && msg-> +msg_cڌn + != 0 ) { + +463  +cmsg_e + cmsg_state; + +464 if + `CI_UNLIKELY + +ts +-> +s +. +cmsg_ags + & +CI_IP_CMSG_TIMESTAMP_ANY + ) ) { + +465 +cmsg_e +. +msg + = msg; + +466 +cmsg_e +. +cmsg_bys_ud + = 0; + +467 +cmsg_e +. +cm + = + `CMSG_FIRSTHDR +( +msg +); + +468 +cmsg_e +. +p_msg_ags + = & +rf +-> +msg_ags +; + +470 i +ts +-> +s +. +cmsg_ags + & +CI_IP_CMSG_TIMESTAMPNS + ) + +471 + `_cmsg_cv_timeams +( +ni +, +rf +-> +timeamp +, & +cmsg_e +); + +473 if +ts +-> +s +. +cmsg_ags + & +CI_IP_CMSG_TIMESTAMP + ) + +474 + `_cmsg_cv_timeamp +( +ni +, +rf +-> +timeamp +, & +cmsg_e +); + +476 if +ts +-> +s +. +cmsg_ags + & +CI_IP_CMSG_TIMESTAMPING + ) { + +477 if!( +rf +-> +hw_timeamp +. +tv_nc + & +CI_IP_PKT_HW_STAMP_FLAG_IN_SYNC +) ) + +478 +ts +-> +s +. +timeampg_ags + &~ +ONLOAD_SOF_TIMESTAMPING_SYS_HARDWARE +; + +479 + `_cmsg_cv_timeampg +( +ni +, +rf +-> +timeamp +, &rf-> +hw_timeamp +, + +480 +ts +-> +s +. +timeampg_ags +, & +cmsg_e +); + +483 +msg +-> +msg_cڌn + = +cmsg_e +. +cmsg_bys_ud +; + +486 +msg +-> +msg_cڌn + = 0; + +489 + } +} + +493  + $ci_t_cvmsg +(cڡ +ci_t_cvmsg_gs +* +a +) + +495  +have_pd +; + +496 +ci_ut64 + +p_q +; + +497 +ci_t_e +* +ts + = +a +->ts; + +498 +ci_tif +* +ni + = +a +->ni; + +499  +ags + = +a +->flags; + +500 +ci_ut64 + +t_c + = 0; + +501  +t_cv_ + = 0; + +502 +ci_ut32 + +timeout + = +ts +-> +s +. +so +. +rcvtimeo_mc +; + +503  +t_cv_fo + +rf +; + +505 + `ci_as +( +a +); + +506 + `ci_as +( +ni +); + +507 + `ci_as +( +ts +); + +508 + `ci_as +( +a +-> +msg +); + +510 +rf +. +ack_locked + = 0; + +511 +rf +. +a + =; + +512 +rf +. +rc + = 0; + +513 +rf +. +msg_ags + = 0; + +515 #i + `defed +( +__sun__ +) + +516 i( +ts +-> +s +. +b +. +e + = +CI_TCP_SYN_SENT +) { + +517 + `CI_SET_ERROR +( +rf +. +rc +, +ENOTCONN +); + +518  +rf +. +rc +; + +525 +rf +. +rc + = + `ci_sock_lock +( +ni +, & +ts +-> +s +. +b +); + +526 if( + `CI_UNLIKELY + +rf +. +rc + != 0 )) { + +527 + `CI_SET_ERROR +( +rf +. +rc +, -rinf.rc); + +528  +rf +. +rc +; + +531 if +ts +-> +s +. +b +. +e + = +CI_TCP_LISTEN + )  +check_o +; + +533 +have_pd + = 0; + +534 + `ci_as_equ +( +rf +. +rc +, 0); + +536 #ide +__KERNEL__ + + +537 if( +ags + & ( +MSG_OOB + | +MSG_ERRQUEUE +)) ) + +538  +ow_th +; + +540 + `ci_as_equ +( +ags + & ~ +MSG_DONTWAIT +, 0); + +544 + `ci_iovec_r__nz +(& +rf +. +piov +, +a +-> +msg +-> +msg_iov +,->msg-> +msg_iovn +); + +546 + `LOG_TR +( + `log +( +LNTS_FMT + "recvmsgen=%d flags=%x bytes_in_rxq=%d", + +547 + `LNTS_PRI_ARGS +( +ni +, +ts +), + +548 + `ci_iovec_r_bys_cou +(& +rf +. +piov +), +ags +, + `t_rcv_u +( +ts +))); + +550 #ide +__KERNEL__ + + +551 +t_cv_ + = + +552 + `oo_r_thad_g +()-> +e + & (1 << +ONLOAD_SPIN_TCP_RECV +); + +554 + `ci_c64 +(& +t_c +); + +556 +pl_cv_queue +: + +557 +rf +. +rc + + + `ci_t_cvmsg_g +(&rinf); + +562 if + `ci_iovec_r_is_emy_ݔ +(& +rf +. +piov +) && + +563 +rf +. +rc + !0 || + `TCP_RX_DONE +( +ts +|| + `t_rcv_u +(ts) ) ) { + +564 if + `CI_UNLIKELY +( +rf +. +rc + =0 +check_o +; + +565  +sucss_uock_out +; + +571 if( +rf +. +a +-> +ags + & +ONLOAD_MSG_ONEPKT +&& (rf. +rc + > 0) ) + +572  +sucss_uock_out +; + +574 if! +have_pd + ) { + +579 +have_pd + = 1; + +581 if + `ci_tif_may_pl +( +ni +&& + `ci_tif_ed_pl_ng +i, +t_c +) ) { + +582 if + `ci_tif_ylock +( +ni +) ) { + +583 +ci_ut32 + +rcv_added_befe + = +ts +-> +rcv_added +; + +584  +y_evs + = + `ci_tif_pl_n +( +ni +, + `NI_OPTS +i). +evs_r_pl +); + +585 if +ts +-> +rcv_added + ! +rcv_added_befe + ) { + +590 +have_pd + = 0; + +592 if +y_evs + ) + +593 + `ci_tif_pl +( +ni +); + +594 + `ci_tif_uock +( +ni +); + +595 if +ts +-> +rcv_added + ! +rcv_added_befe + ) { + +596 if( +ags + & +MSG_PEEK +) ) { + +597 + `ci_iovec_r__nz +(& +rf +. +piov +, +a +-> +msg +-> +msg_iov +,->msg-> +msg_iovn +); + +598 +rf +. +rc + = 0; + +600  +pl_cv_queue +; + +617 if( + `CI_UNLIKELY + + `OO_PP_NOT_NULL +( +ts +-> +cv2 +. +hd +) )) + +618 if + `ci_t_cvmsg_cv2 +(& +rf +) ) + +619  +sucss_uock_out +; + +625 if +rf +. +rc + && + `FLAGS_AND_LOWAT_PERMIT_FAST_RET_WITH_DATA +( +ts +,f.rc, +ags +) ) + +626  +sucss_uock_out +; + +628 if + `TCP_RX_DONE +( +ts + +rx_de +; + +630 if +rf +. +rc + =0 && ( +ags + & +MSG_DONTWAIT +) ) { + +631 + `CI_SET_ERROR +( +rf +. +rc +, +EAGAIN +); + +632  +uock_out +; + +636 + `ci_as +(!( +ags + & +MSG_PEEK +|| +rf +. +rc + == 0); + +641 if +t_cv_ + ) { + +642  +rc2 +; + +644 if( +rc2 + = + `ci_t_cvmsg_ +( +ni +, +ts +, +t_c +)) ) { + +645 if +rc2 + < 0 ) { + +647 + `CI_SET_ERROR +( +rf +. +rc +, - +rc2 +); + +648  +uock_out +; + +650  +pl_cv_queue +; + +653 +t_cv_ + = 0; + +654 if +timeout + ) { + +655 +ci_ut32 + +_ms + = + `NI_OPTS +( +ni +). +_uc + >> 10; + +656 if +_ms + < +timeout + ) + +657 +timeout + - +_ms +; + +659 + `CI_SET_ERROR +( +rf +. +rc +, +EAGAIN +); + +660  +rx_de +; + +667 +p_q + = +ts +-> +s +. +b +.p_q. +l +; + +668 + `ci_rmb +(); + +669 if + `t_rcv_u +( +ts + +pl_cv_queue +; + +670 if + `TCP_RX_DONE +( +ts + +rx_de +; + +679  +rc2 +; + +682 + `ci_as +(! +rf +. +ack_locked +); + +683 +rc2 + = + `ci_sock_p +( +ni +, & +ts +-> +s +. +b +, +CI_SB_FLAG_WAKE_RX +, + +684 +CI_SLEEP_SOCK_LOCKED + | +CI_SLEEP_SOCK_RQ +, + +685 +p_q +, & +timeout +); + +686 if +rc2 + == 0 ) + +687 +rc2 + = + `ci_sock_lock +( +ni +, & +ts +-> +s +. +b +); + +688 if +rc2 + < 0 ) { + +690 if +rf +. +rc + ) { + +691 #ide +__KERNEL__ + + +692 + `ci_t_cv_fl_msgme +( +ts +, ( +sockaddr +* +a +-> +msg +-> +msg_me +, + +693 & +a +-> +msg +-> +msg_m +); + +694 + `ci_t_fl_cv_timeamp +(& +rf +); + +697 + `CI_SET_ERROR +( +rf +. +rc +, - +rc2 +); + +698  +out +; + +701 + `ci_as +( +have_pd +); + +702  +pl_cv_queue +; + +705 #ide +__KERNEL__ + + +706 +ow_th +: + +708 if +ags + & +MSG_ERRQUEUE + ) { + +709 if + `ci_udp_cv_q_n_emy +(& +ts +-> +timeamp_q +) ) { + +710 +ci__pkt_fmt +* +pkt +; + +711  +ld_scm_timeampg_am + +amps +; + +712  +cmsg_e + cmsg_state; + +713  +tx_hw_amp__sync +; + +715 + `ci_rmb +(); + +716 +pkt + = + `ci_udp_cv_q_g +( +ni +, & +ts +-> +timeamp_q +); + +717 + `ci_udp_cv_q_div +( +ni +, & +ts +-> +timeamp_q +, +pkt +); + +719 +cmsg_e +. +msg + = +a +->msg; + +720 +cmsg_e +. +cm + = +a +-> +msg +-> +msg_cڌ +; + +721 +cmsg_e +. +cmsg_bys_ud + = 0; + +722 +cmsg_e +. +p_msg_ags + = & +rf +. +msg_ags +; + +723 + `memt +(& +amps +, 0, (stamps)); + +724 +tx_hw_amp__sync + = +pkt +-> +tx_hw_amp +. +tv_nc + & + +725 +CI_IP_PKT_HW_STAMP_FLAG_IN_SYNC +; + +727 if +pkt +-> +ags + & +CI_PKT_FLAG_RTQ_RETRANS + ) { + +728 if +pkt +-> +pf +. +t_tx +. +f_tx_hw_amp +. +tv_nc + & + +729 +CI_IP_PKT_HW_STAMP_FLAG_IN_SYNC + ) { + +730 +amps +. +f_ +. +tv_c + = +pkt +-> +pf +. +t_tx +. +f_tx_hw_amp +.tv_sec; + +731 +amps +. +f_ +. +tv_nc + = +pkt +-> +pf +. +t_tx +. +f_tx_hw_amp +.tv_nsec; + +733 if +tx_hw_amp__sync + ) { + +734 +amps +. +ϡ_ +. +tv_c + = +pkt +-> +tx_hw_amp +.tv_sec; + +735 +amps +. +ϡ_ +. +tv_nc + = +pkt +-> +tx_hw_amp +.tv_nsec; + +738 if +tx_hw_amp__sync + ) { + +739 +amps +. +f_ +. +tv_c + = +pkt +-> +tx_hw_amp +.tv_sec; + +740 +amps +. +f_ +. +tv_nc + = +pkt +-> +tx_hw_amp +.tv_nsec; + +742 +amps +. +n + = +pkt +-> +pf +. +t_tx +. +d_q + -kt->pf.t_tx. +t_q +; + +745 if + `TX_PKT_TCP +( +pkt +)-> +t_ags + & ( +CI_TCP_FLAG_SYN +| +CI_TCP_FLAG_FIN +) ) + +746 +amps +. +n +--; + +748 + `ci_put_cmsg +(& +cmsg_e +, +SOL_SOCKET +, +ONLOAD_SCM_TIMESTAMPING_STREAM +, + +749 ( +amps +), &stamps); + +751 + `ci__cmsg_fish +(& +cmsg_e +); + +752 +rf +. +msg_ags + | +MSG_ERRQUEUE +; + +754 +rf +. +rc + = 0; + +755  +uock_out +; + +757 +rf +. +rc + = - +EAGAIN +; + +758 + `CI_SET_ERROR +( +rf +. +rc +, -rinf.rc); + +759  +check_o +; + +762 + `ci_as +( +ags + & +MSG_OOB +); + +763 +rf +. +rc + = + `ci_t_cvmsg_urg +(&rinf); + +765 if +rf +. +rc + >0 )  +sucss_uock_out +; + +766 + `CI_SET_ERROR +( +rf +. +rc +, -rinf.rc); + +767  +uock_out +; + +770 +rx_de +: + +771 if + `t_rcv_u +( +ts +&& ! + `ci_iovec_r_is_emy_ݔ +(& +rf +. +piov +) ) + +776  +pl_cv_queue +; + +777 if +rf +. +rc + )  +sucss_uock_out +; + +778 +check_o +: + +780 if +ts +-> +tags + & +CI_TCPT_FLAG_FIN_RECEIVED + ) + +781  +uock_out +; + +782 i( +ts +-> +s +. +so_r +) { + +783 +ci_t32 + +rc1 + = + `ci_g_so_r +(& +ts +-> +s +); + +784 i( +rc1 + != 0) + +785 + `CI_SET_ERROR +( +rf +. +rc +, +rc1 +); + +786 } if + `TCP_RX_ERRNO +( +ts +) ) { + +787 + `CI_SET_ERROR +( +rf +. +rc +, + `TCP_RX_ERRNO +( +ts +)); + +789 #ide +__KERNEL__ + + +790 +a +-> +msg +-> +msg_cڌn + = 0; + +792  +uock_out +; + +794 +sucss_uock_out +: + +795 #ide +__KERNEL__ + + +796 + `ci_t_cv_fl_msgme +( +ts +, ( +sockaddr +* +a +-> +msg +-> +msg_me +, + +797 & +a +-> +msg +-> +msg_m +); + +798 + `ci_t_fl_cv_timeamp +(& +rf +); + +800 +uock_out +: + +805 if( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_RECVD_FIN +&& + `t_rcv_u +(ts) == 0 ) + +806 || +ni +-> +e +-> +mem_essu + ) && + `ci_tif_ylock +(ni) ) { + +807 + `ci_t_rx__rxq_bufs_socklocked +( +ni +, +ts +); + +808 + `ci_tif_uock +( +ni +); + +811 + `ci_sock_uock +( +ni +, & +ts +-> +s +. +b +); + +812 +out +: + +813 if( + `CI_UNLIKELY + +ni +-> +e +-> +rxq_low + )) + +814 + `ci_tif_rxq_low__cv +( +ni +, & +ts +-> +s +, +rf +. +rc +); + +815 #ide +__KERNEL__ + + +816 if +rf +. +rc + >= 0 ) + +817 +a +-> +msg +-> +msg_ags + = +rf +.msg_flags; + +819  +rf +. +rc +; + +820 + } +} + +822  + $move_om_cv2_to_cv1 +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +823 +ci__pkt_fmt +* +hd +, + +824 +ci__pkt_fmt +* + +,  +n +) + +830 +ci__pkt_queue +* +cv1 + = & +ts +->recv1; + +831 +ci__pkt_queue +* +cv2 + = & +ts +->recv2; + +833 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +834 + `ci_as +( + `ci_sock_is_locked +( +ni +, & +ts +-> +s +. +b +)); + +835 + `ci_as +( +n + > 0); + +836 + `ci_as +( +cv2 +-> +num + > +n +); + +837 + `ci_as +( + `OO_PP_EQ +( +cv2 +-> +hd +, + `OO_PKT_P +(head))); + +838 + `ci_as +( +n + < +cv2 +-> +num + || + `OO_PP_IS_NULL +( + +-> +xt +)); + +840 if +n + ) { + +841 + `LOG_URG +( + `log +( +NTS_FMT + "recvmsg: moving %dkts fromecv2oecv1", + +842 + `NTS_PRI_ARGS +( +ni +, +ts +), +n +)); + +843 + `ci__queue_move +( +ni +, +cv2 +, +cv1 +, + +, +n +); + +849 if + `OO_PP_IS_NULL +( +ts +-> +cv1_exa +) ) { + +850 +ts +-> +cv1_exa + = +cv1 +-> +hd +; + +857 + `ci_as +( + `oo_offbuf_is_emy +(&( + `PKT_CHK +( +ni +, +ts +-> +cv1_exa +)-> +buf +))); + +858 +ts +-> +cv1_exa + = + `OO_PKT_P +( +hd +); + +864 if + `OO_PP_IS_NULL +( +cv2 +-> +hd +) ) { + +865 + `LOG_URG +( + `log +( +NTS_FMT + "cvmsg: swchػcv1", + `NTS_PRI_ARGS +( +ni +, +ts +))); + +866 + `TS_QUEUE_RX_SET +( +ts +, +cv1 +); + +867 + `ci_as +(!( + `t_urg_da +( +ts +& +CI_TCP_URG_PTR_VALID +)); + +869 + } +} + +872 #ide +__KERNEL__ + + +873  + $ci_t_cvmsg_urg +( +t_cv_fo + * +rf +) + +875 +ci_tif +* +ni + = +rf +-> +a +->ni; + +876 +ci_t_e +* +ts + = +rf +-> +a +->ts; + +877  +msghdr +* +msg + = +rf +-> +a +->msg; + +878 +ci_iovec_r + +piov +; + +879 +ci_ut8 + +oob +; + +880  +n_wre +; + +881  +rc + = 0; + +883 if! +rf +-> +ack_locked + ) { + +884 +rc + = + `ci_tif_lock +( +ni +); + +885 if +rc + != 0 ) + +886  +rc +; + +887 +rf +-> +ack_locked + = 1; + +889 + `CHECK_TS +( +ni +, +ts +); + +891 + `LOG_URG +( + `ci_log +( +TCP_URG_FMT +, + `TCP_URG_ARGS +( +ts +))); + +893 + `ci_as +( +msg +-> +msg_iovn + > 0); + +894 + `ci_iovec_r__nz +(& +piov +, +msg +-> +msg_iov +, msg-> +msg_iovn +); + +895 +n_wre + = ! + `ci_iovec_r_is_emy_ݔ +(& +piov +); + +897 if +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_OOBINLINE + ) { + +898 + `LOG_URG +( + `ci_log +("%s: OOBINLINE it,c=-EINVAL", +__FUNCTION__ +)); + +899 +rc + = - +EINVAL +; + +900  +out +; + +904 + `ci_tif_pl +( +ni +); + +906 if + `t_urg_da +( +ts +& +CI_TCP_URG_COMING + ) { + +907 + `LOG_URG +( + `log +("%s:OOB by,c=-EINVAL", +__FUNCTION__ +)); + +908 +rc + = - +EAGAIN +; + +909  +out +; + +911 if~ + `t_urg_da +( +ts +& +CI_TCP_URG_IS_HERE + ) { + +912 + `LOG_URG +( + `ci_log +("%s: OOB by ha'rived,c=-EAGAIN", +__FUNCTION__ +)); + +913 +rc + = - +EINVAL +; + +914  +out +; + +917 i( +ts +-> +s +. +b +. +e + = +CI_TCP_CLOSED +) { + +918 + `LOG_URG +( + `ci_log +("%s: s iCLOSED,c=0", +__FUNCTION__ +)); + +919  +out +; + +923 i( +ts +-> +s +. +rx_o + & +CI_SHUT_RD +) { + +924 + `LOG_URG +( + `ci_log +("%s:dg i'possib(SHUT_RD),c=0", +__FUNCTION__ +)); + +925  +out +; + +933 +oob + = + `t_urg_da +( +ts +& +CI_TCP_URG_DATA_MASK +; + +934 #ifde +__lux__ + + +935 +rf +-> +msg_ags + | +MSG_OOB +; + +938 + `LOG_URG +( + `ci_log +("Rdg OOB by, oob=0x%X, fgs=0x%X", +oob +, +rf +-> +a +-> +ags +)); + +941 i(~ +rf +-> +a +-> +ags + & +MSG_PEEK +) + +942 + `t_urg_da +( +ts +&=~ ( +CI_TCP_URG_IS_HERE + | +CI_TCP_URG_DATA_MASK +); + +947 if +rf +-> +a +-> +ags + & +CI_MSG_TRUNC + ) { + +948 +rc + = +n_wre +; + +949  +out +; + +952 if! +n_wre + ) { + +953 #ifde +__lux__ + + +954 +rf +-> +msg_ags + | +CI_MSG_TRUNC +; + +956 +rc + = 0; + +957  +out +; + +964 *(*) + `CI_IOVEC_BASE +(& +piov +. +io + +oob +; + +965 +rc + = 1; + +967 +out +: + +968 + `CHECK_TS +( +ni +, +ts +); + +969 + `ci_tif_uock +( +ni +); + +970 +rf +-> +ack_locked + = 0; + +971  +rc +; + +972 + } +} + +976  + $ci_t_cvmsg_cv2_ek2 +( +t_cv_fo + * +rfo +, + +977  +t_sk +,  +__mk +, + +978  +rd_nxt_q +) + +986 +ci_t_e +* +ts + = +rfo +-> +a +->ts; + +987 +ci_tif +* +ni + = +rfo +-> +a +->ni; + +988 +ci__pkt_queue +* +cv2 + = & +ts +->recv2; + +989 +ci__pkt_fmt +* +pkt + = + `PKT_CHK +( +ni +, +cv2 +-> +hd +); + +990 +oo_offbuf +* +buf + = & +pkt +->buf; + +991  +n +, +ek_off + = +t_sk +; + +992 #ifde +__KERNEL__ + + +993  +rc +; + +996 + `ci_as +( + `oo_offbuf_ +( +buf +> +t_sk +); + +997 + `ci_as +( + `t_urg_da +( +ts +& +CI_TCP_URG_PTR_VALID +); + +998 + `ci_as +(! +__mk + || + `SEQ_LE +( +rd_nxt_q +, + `t_rcv_up +( +ts +))); + +1000 + `LOG_URG +( + `log +( +LNTS_FMT + "recv2_peek: so_far=%d skip=%d stop@mark=%d " + +1001 "rd_nxt_q=%08xcv_up=%08x", + `LNTS_PRI_ARGS +( +ni +, +ts +), + +1002 +rfo +-> +rc +, +t_sk +, +__mk +, + +1003 +rd_nxt_q +, + `t_rcv_up +( +ts +))); + +1005 +rd_nxt_q + + +t_sk +; + +1008 +n + = + `oo_offbuf_ +( +buf +- +ek_off +; + +1009 +n + = + `CI_MIN +, () + `CI_IOVEC_LEN +(& +rfo +-> +piov +. +io +)); + +1010 if +__mk + ) { + +1011  +di_to_urg + = + `t_rcv_up +( +ts +- +rd_nxt_q +; + +1012 if +di_to_urg + == 0 ) + +1014 + `ci_log +("dist_to_urg == 0"); + +1017 +n + = + `CI_MIN +, +di_to_urg +); + +1020 #ifde +__KERNEL__ + + +1021 +rc + = + `cy_to_ur +( + `CI_IOVEC_BASE +(& +rfo +-> +piov +. +io +), + `oo_offbuf_r +( +buf ++ +ek_off +, +n +); + +1022 if +rc + != 0 ) { + +1023 + `LOG_URG +( + `log +( +LNTS_FMT + "%s: copy_to_usereturned %d", + +1024 + `LNTS_PRI_ARGS +( +ni +, +ts +), +__FUNCTION__ +, +rc +)); + +1025 + `ci_as +( +rc + == 0); + +1028 + `memy +( + `CI_IOVEC_BASE +(& +rfo +-> +piov +. +io +), + `oo_offbuf_r +( +buf ++ +ek_off +, +n +); + +1030 +rfo +-> +rc + + +n +; + +1031 + `ci_iovec_r_adv +(& +rfo +-> +piov +, +n +); + +1032 +ek_off + + +n +; + +1033 +rd_nxt_q + + +n +; + +1035 if + `CI_IOVEC_LEN +(& +rfo +-> +piov +. +io +) == 0 ) { + +1036 if +rfo +-> +piov +. +iovn + == 0 ) + +1039 +rfo +-> +piov +. +io + = *Ԛfo->piov. +iov +)++; + +1040 -- +rfo +-> +piov +. +iovn +; + +1042 if + `oo_offbuf_ +( +buf +- +ek_off + == 0 ) { + +1043 if + `OO_PP_IS_NULL +( +pkt +-> +xt +) ) + +1045 +pkt + = + `PKT_CHK +( +ni +,kt-> +xt +); + +1046 +buf + = & +pkt +->buf; + +1047 +ek_off + = 0; + +1050 + } +} + +1053  + $ci_t_cvmsg_cv2_ek +( +t_cv_fo + * +rf +) + +1055 +ci_t_e +* +ts + = +rf +-> +a +->ts; + +1056 +ci_tif +* +ni + = +rf +-> +a +->ni; + +1057 +ci__pkt_queue +* +cv2 + = & +ts +->recv2; + +1058 +ci__pkt_fmt +* +pkt +; + +1059  +sk +, +__mk +; + +1060  +rd_nxt_q +; + +1062 if! +rf +-> +ack_locked + ) { + +1063  +rc + = + `ci_tif_lock +( +ni +); + +1064 if +rc + != 0 ) + +1065  +rc +; + +1066 +rf +-> +ack_locked + = 1; + +1069 +pkt + = + `PKT_CHK +( +ni +, +cv2 +-> +hd +); + +1070 +rd_nxt_q + = + `PKT_RX_BUF_SEQ +( +pkt +); + +1075 if + `OO_PP_NOT_NULL +( +ts +-> +cv1_exa +) ) { + +1076 +ci__pkt_fmt +* +r1pkt + = + `PKT_CHK +( +ni +, +ts +-> +cv1_exa +); + +1077  +q + = + `PKT_RX_BUF_SEQ +( +r1pkt ++ +rf +-> +rc +; + +1082 if +q + ! + `CI_BSWAP_BE32 +( + `PKT_TCP_HDR +( +pkt +)-> +t_q_be32 +) ) + +1088  +out +; + +1094 if + `t_rcv_up +( +ts += +rd_nxt_q + ) { + +1095 +sk + = !( +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_OOBINLINE +); + +1096 +__mk + = 0; + +1099 +sk + = 0; + +1100 +__mk + = 1; + +1102 + `ci_t_cvmsg_cv2_ek2 +( +rf +, +sk +, +__mk +, +rd_nxt_q +); + +1104 +out +: + +1105 + `ci_tif_uock +( +ni +); + +1106 +rf +-> +ack_locked + = 0; + +1107  +rf +-> +rc +; + +1108 + } +} + +1111  + $ci_t_cvmsg_hd_ +( +t_cv_fo + * +rf +) + +1113  +rc +; + +1119 + `ci_tif_uock +( +rf +-> +a +-> +ni +); + +1120 +rf +-> +ack_locked + = 0; + +1121 +rf +-> +rc + + + `ci_t_cvmsg_g +(rinf); + +1122 +rc + = + `ci_tif_lock +( +rf +-> +a +-> +ni +); + +1123 if +rc + != 0 ) + +1124  +rc +; + +1125 +rf +-> +ack_locked + = 1; + +1130  + `ci_iovec_r_is_emy_ݔ +(& +rf +-> +piov +) || + +1131 (( +rf +-> +a +-> +ags + & +ONLOAD_MSG_ONEPKT +&& (rf-> +rc + > 0)); + +1132 + } +} + +1135 +ci_le +  + $ci_t_cv1_is_emy +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +1140 +ci__pkt_fmt + * +pkt +; + +1141 if + `OO_PP_IS_NULL +( +ts +-> +cv1_exa +) )  1; + +1142 +pkt + = + `PKT_CHK_NNL +( +ni +, +ts +-> +cv1_exa +); + +1143  + `oo_offbuf_is_emy +(& +pkt +-> +buf +&& + `OO_PP_IS_NULL +kt-> +xt +); + +1144 + } +} + +1147  + $ci_t_cvmsg_cv2 +( +t_cv_fo + * +rf +) + +1149 +ci_t_e +* +ts + = +rf +-> +a +->ts; + +1150 +ci_tif +* +ni + = +rf +-> +a +->ni; + +1151 +ci__pkt_queue +* +cv2 + = & +ts +->recv2; + +1152 +ci__pkt_fmt +* +pkt +, * +hd_pkt +, * +_pkt +; + +1153 +oo_offbuf +* +buf +; + +1154  +rd_nxt_q +, +n +; + +1155  +mu_tu_om_cv + = 0; + +1157 if +rf +-> +a +-> +ags + & +MSG_PEEK + ) + +1158  + `ci_t_cvmsg_cv2_ek +( +rf +); + +1160 +aga +: + +1161 + `LOG_URG +( + `ci_log +("%s:gac=%d", +__FUNCTION__ +, +rf +-> +rc +)); + +1163 + `ci_as +( + `ci_sock_is_locked +( +ni +, & +ts +-> +s +. +b +)); + +1164 if! +rf +-> +ack_locked + ) { + +1165  +rc + = + `ci_tif_lock +( +ni +); + +1166 if +rc + != 0 ) + +1167  +rc +; + +1168 +rf +-> +ack_locked + = 1; + +1170 + `CHECK_TS +( +ni +, +ts +); + +1173 if! + `ci_t_cv1_is_emy +( +ni +, +ts +) ) { + +1174 +mu_tu_om_cv + = + `ci_t_cvmsg_hd_ +( +rf +); + +1175 if +mu_tu_om_cv + )  +uock_out +; + +1178 + `ci_as +( + `ci_t_cv1_is_emy +( +ni +, +ts +)); + +1180 +pkt + = + `PKT_CHK +( +ni +, +cv2 +-> +hd +); + +1181 +buf + = & +pkt +->buf; + +1182 + `ci_as +( + `oo_offbuf_ +( +buf +)); + +1185 +rd_nxt_q + = + `PKT_RX_BUF_SEQ +( +pkt +); + +1187 + `LOG_URG +( + `log +("%s: " +NTS_FMT + "so_far=%d flags=%xxt_seq=%08xcv_up=%08x " + +1188 "urg_da=%03x", +__FUNCTION__ +, + `NTS_PRI_ARGS +( +ni +, +ts +), + +1189 +rf +-> +rc +,f-> +a +-> +ags +, +rd_nxt_q +, + `t_rcv_up +( +ts +), + +1190 + `t_urg_da +( +ts +))); + +1192 + `ci_as +( + `t_urg_da +( +ts +& +CI_TCP_URG_PTR_VALID +); + +1194 i +rf +-> +rc + == 0 ) + +1195 +rf +-> +timeamp + = +pkt +-> +pf +. +t_rx +. +rx_amp +; + +1197 if + `t_rcv_up +( +ts += +rd_nxt_q + ) { + +1199 + `LOG_URG +( + `ci_log +("%s: We're staringthe oob bytendc=%d", + +1200 +__FUNCTION__ +, +rf +-> +rc +)); + +1205 if +rf +-> +rc + ) { + +1207 + `LOG_URG +( + `ci_log +("%s: We're staringthe oob bytendc=%d", + +1208 +__FUNCTION__ +, +rf +-> +rc +)); + +1209 +mu_tu_om_cv + = 1; + +1210  +uock_out +; + +1214 if! ( +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_OOBINLINE +) ) { + +1218 + `oo_offbuf_adv +( +buf +, 1); + +1219 ++ +ts +-> +rcv_dived +; + +1229 + `t_urg_da_vide +( +ts +); + +1230 + `move_om_cv2_to_cv1 +( +ni +, +ts +, +pkt +, + `PKT_CHK +i, +cv2 +-> + +),ecv2-> +num +); + +1231 + `ci_as +( + `OO_PP_IS_NULL +( +cv2 +-> +hd +)); + +1232 + `ci_as +( + `TS_QUEUE_RX +( +ts +=&ts-> +cv1 +); + +1233 + `ci_tif_uock +( +ni +); + +1234 +rf +-> +ack_locked + = 0; + +1235 +rf +-> +rc + + + `ci_t_cvmsg_g +(rinf); + +1236  +out +; + +1242 +hd_pkt + = +pkt +; + +1243 +n + = 0; + +1244 +_pkt + = 0; + +1245  + `t_rcv_up +( +ts +> +pkt +-> +pf +. +t_rx +. +d_q + ) { + +1246 +_pkt + = +pkt +; + +1247 ++ +n +; + +1248 if + `OO_PP_IS_NULL +( +pkt +-> +xt +) ) ; + +1249 +pkt + = + `PKT_CHK +( +ni +,kt-> +xt +); + +1251 if +n + ) { + +1256 + `move_om_cv2_to_cv1 +( +ni +, +ts +, +hd_pkt +, +_pkt +, +n +); + +1257 + `CHECK_TS +( +ni +, +ts +); + +1258 + `ci_tif_uock +( +ni +); + +1259 +rf +-> +ack_locked + = 0; + +1261 +rf +-> +rc + + + `ci_t_cvmsg_g +(rinf); + +1262 +mu_tu_om_cv + = + `ci_iovec_r_is_emy_ݔ +(& +rf +-> +piov +) || + +1263 (( +rf +-> +a +-> +ags + & +ONLOAD_MSG_ONEPKT +&& (rf-> +rc + > 0)); + +1264 if +mu_tu_om_cv + )  +out +; + +1269 if + `OO_PP_NOT_NULL +( +cv2 +-> +hd + +aga +; + +1270  +out +; + +1276  +n +; + +1277 if + `OO_PP_IS_NULL +( +cv2 +-> +hd + +uock_out +; + +1278 +n + = + `t_rcv_up +( +ts +- +rd_nxt_q +; + +1279 + `LOG_URG +( + `ci_log +("%s:eading %d bytes from urg segment before OOBB", + +1280 +__FUNCTION__ +, +n +)); + +1281 + `ci_as +( +n + > 0); + +1282 + `ci_as_ +( +n +, + `oo_offbuf_ +( +buf +)); + +1283 +n + = + `ci_cy_to_iovec +(& +rf +-> +piov +, + `oo_offbuf_r +( +buf +),); + +1284 +rf +-> +rc + + +n +; + +1285 + `oo_offbuf_adv +( +buf +, +n +); + +1286 +ts +-> +rcv_dived + + +n +; + +1287 + `ci_as +( + `oo_offbuf_ +( +buf +)); + +1291 +mu_tu_om_cv + = 1; + +1295 +uock_out +: + +1296 + `CHECK_TS +( +ni +, +ts +); + +1297 if +rf +-> +ack_locked + ) { + +1298 + `ci_tif_uock +( +ni +); + +1299 +rf +-> +ack_locked + = 0; + +1301 +out +: + +1302 if + `NI_OPTS +( +ni +). +t_rcvbuf_mode + == 1 ) + +1303 + `ci_t_rcvbuf_drs +( +ni +, +ts +); + +1306 +mu_tu_om_cv + | + `ci_iovec_r_is_emy_ݔ +(& +rf +-> +piov +) || + +1307 (( +rf +-> +a +-> +ags + & +ONLOAD_MSG_ONEPKT +&& (rf-> +rc + > 0)); + +1309 + `LOG_URG +( + `ci_log +("%s:eturning %dc=%d " + +1311 +__FUNCTION__ +, +mu_tu_om_cv +, + +1312 +rf +-> +rc +, + +1313 + `ci_iovec_r_is_emy_ݔ +(& +rf +-> +piov +))); + +1315  +mu_tu_om_cv +; + +1316 + } +} + + @tcp_rx.c + +31  + ~"_.h +" + +32  + ~"t_rx.h +" + +34 #ifde +ONLOAD_OFE + + +35  + ~"o/ld.h +" + +39  + #LPF + "TCP RX " + + ) + +42  + #TCP_RX_FMT + "pkt=%08x-%08x " +RCV_WND_FMT + + + ) + +43  + #TCP_RX_ARGS +( +pkt +, +ts +) () \ + +44 + `CI_BSWAP_BE32 +( + `PKT_TCP_HDR +(( +pkt +))-> +t_q_be32 +), \ + +45 ( +pkt +)-> +pf +. +t_rx +. +d_q +, + `RCV_WND_ARGS +( +ts +) + + ) + +47  + #ARP_REINFORCE_ON_SYN + + + ) + +49  +hd_rx_ow +( +ci_t_e +* +ts +, +ci_tif +* +tif +, + +50 +ci_t_rx_pkt +* +rxp +); + +53 +ci__pkt_fmt +* + $__ci_tif_pkt_rx_to_tx +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +, + +54 cڡ * +Δ +) + +56 if +pkt +-> +fcou + == 1 ) { + +57 if~ +pkt +-> +ags + & +CI_PKT_FLAG_RX + ) { + +58 + `ci_as_equ +( +pkt +-> +tf_i +, +OO_INTF_I_LOOPBACK +); + +61 +pkt +-> +ags + &~ +CI_PKT_FLAG_RX +; + +62 -- +ni +-> +e +-> +n_rx_pkts +; + +64 + `CI_DEBUG +( +pkt +-> +pkt_t_off + = 0xff; + +65 +pkt +-> +pkt_h_yld_off + = 0xff); + +70  +d_buft_id +, +w_buft_id +; + +72 +d_buft_id + = + `PKT_SET_ID +( +pkt +); + +73 +w_buft_id + = + `NI_PKT_SET +( +ni +); + +74 + `ci_tif_pkt_a +( +ni +, +pkt +); + +75 if( + `CI_LIKELY + +ni +-> +cks +-> +t +[ +d_buft_id +]. +n_ + > 0 )) + +76 +pkt + = + `ci_tif_pkt_g +( +ni +, +d_buft_id +); + +77 if +d_buft_id + ! +w_buft_id + && + +78 +ni +-> +cks +-> +t +[ +w_buft_id +]. +n_ + > 0 ) + +79 +pkt + = + `ci_tif_pkt_g +( +ni +, +w_buft_id +); + +81 +pkt + = + `ci_tif_pkt_loc_ow +( +ni +, 0, 1); + +82 if +pkt + = +NULL + ) { + +83 + `LOG_U +( + `ci_log +("%s: c'lolyack", +Δ +)); + +84 + `CITP_STATS_NETIF_INC +( +ni +, +pl_no_pkt +); + +85  +NULL +; + +88  +pkt +; + +89 + } +} + +92 +ci_le +  + $ci_t_rx_upde_e__add +( +ci_t_e +* +ts +,  +cvd +) + +95 + `ci_wmb +(); + +97 +ts +-> +rcv_added + + +cvd +; + +101 +ts +-> +ack_igg + =s-> +rcv_dived + + + `ci_t_ack_igg_d +(ts); + +103 +ts +-> +s +. +b +. +sb_ags + | +CI_SB_FLAG_RX_DELIVERED +; + +104 + } +} + +107  + $ci_t_rx__rxq_bufs +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +112 +ci__pkt_queue +* +rxq + = & +ts +-> +cv1 +; + +114 + `ci_as +( + `ci_tif_is_locked +( +tif +)); + +116  ! + `OO_PP_EQ +( +rxq +-> +hd +, +ts +-> +cv1_exa +) ) { + +117 +ci__pkt_fmt +* +pkt + = + `PKT_CHK +( +tif +, +rxq +-> +hd +); + +118 +oo_pkt_p + +xt + = +pkt +->next; + +120 + `ci_tif_pkt_a_rx_1f +( +tif +, +pkt +); + +121 -- +rxq +-> +num +; + +122 +rxq +-> +hd + = +xt +; + +124 + } +} + +126  + $ci_t_rx__rxq_ϡ_buf +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +128 +ci__pkt_fmt +* +pkt + = + `PKT_CHK +( +tif +, +ts +-> +cv1_exa +); + +130 + `ci_as +( + `ci_sock_is_locked +( +tif +, & +ts +-> +s +. +b +)); + +132 if + `oo_offbuf_is_emy +(& +pkt +-> +buf +) ) { + +133 +ts +-> +cv1_exa + =s-> +cv1 +. +hd + = +pkt +-> +xt +; + +134 + `ci_tif_pkt_a_rx_1f +( +tif +, +pkt +); + +135 -- +ts +-> +cv1 +. +num +; + +137 + } +} + +141  + $ci_t_rx_queue_ck +( +ci_tif + * +tif +, +ci_t_e + * +ts +, + +142 +ci__pkt_fmt + * +pkt +) + +144 +ci__pkt_queue +* +rxq + = + `TS_QUEUE_RX +( +ts +); + +145 +oo_pkt_p + +evhd + = +rxq +-> +hd +; + +146  +bys +; + +148 + `ci_as +( + `ci_tif_is_locked +( +tif +)); + +149 + `ci_as_equ +( + `SEQ_SUB +( +pkt +-> +pf +. +t_rx +. +d_q +, + `t_rcv_nxt +( +ts +)) - + +150 (( + `PKT_TCP_HDR +( +pkt +)-> +t_ags + & +CI_TCP_FLAG_FIN +) ? 1 : 0), + +151 + `oo_offbuf_ +(& +pkt +-> +buf +)); + +153 + `t_rcv_nxt +( +ts + +pkt +-> +pf +. +t_rx +. +d_q +; + +155 +bys + = + `oo_offbuf_ +(& +pkt +-> +buf +); + +156 + `ci__queue_queue +( +tif +, +rxq +, +pkt +); + +158 if +rxq + =& +ts +-> +cv1 + ) { + +159 if + `OO_PP_IS_NULL +( +evhd +) ) { + +160 + `ci_as +( + `OO_PP_IS_NULL +( +ts +-> +cv1_exa +)); + +161 +ts +-> +cv1_exa + = +rxq +-> +hd +; + +163 + `ci_t_rx__rxq_bufs +( +tif +, +ts +); + +166 + `ci_t_rx_upde_e__add +( +ts +, +bys +); + +167 + } +} + +170 #ifde +NDEBUG + + +171  + #DO_SLOW_CHAIN_LENGTH_CHECK + 0 + + ) + +173  + #DO_SLOW_CHAIN_LENGTH_CHECK + 1 + + ) + +180  + $ci_t_rx_queue_cha +( +ci_tif + * +tif +, +ci_t_e + * +ts +, + +181 +ci__pkt_queue + * +om +, + +182 +ci__pkt_fmt + * +ϡ +,  +num +) + +193 +ci__pkt_queue + * +rxq + = + `TS_QUEUE_RX +( +ts +); + +194 +oo_pkt_p + +evhd + = +rxq +-> +hd +; + +195  +bys +; + +196 #i +DO_SLOW_CHAIN_LENGTH_CHECK + + +197  +cou + = 0; + +200 + `ci_as +( + `ci_tif_is_locked +( +tif +)); + +202 + `ci_as +( +om +); + +203 + `ci_as +( + `OO_PP_NOT_NULL +( +om +-> +hd +)); + +204 + `ci_as +( +ϡ +); + +206 i( + `ci__queue_is_emy +( +om +)) + +209 #i +DO_SLOW_CHAIN_LENGTH_CHECK + + +211 +ci__pkt_fmt + * +pkt +; + +212 +pkt + = + `PKT_CHK +( +tif +, +om +-> +hd +); + +214  +pkt +) { + +215 +cou + + + `oo_offbuf_ +(& +pkt +-> +buf +); + +216 if + `OO_PP_IS_NULL +( +pkt +-> +xt +) ) + +218 if +pkt + = +ϡ + ) + +220 +pkt + = + `PKT_CHK +( +tif +,kt-> +xt +); + +225 +bys + = +ϡ +-> +pf +. +t_rx +. +d_q + - + `t_rcv_nxt +( +ts +); + +226 if + `PKT_TCP_HDR +( +ϡ +)-> +t_ags + & +CI_TCP_FLAG_FIN + ) + +227 -- +bys +; + +229 #i +DO_SLOW_CHAIN_LENGTH_CHECK + + +230 + `ci_as_equ +( +bys +, +cou +); + +233 + `t_rcv_nxt +( +ts + +ϡ +-> +pf +. +t_rx +. +d_q +; + +235 + `ci__queue_move +( +tif +, +om +, +rxq +, +ϡ +, +num +); + +237 if +rxq + =& +ts +-> +cv1 + ) { + +238 if + `OO_PP_IS_NULL +( +evhd +) ) { + +239 + `ci_as +( + `OO_PP_IS_NULL +( +ts +-> +cv1_exa +)); + +240 +ts +-> +cv1_exa + = +rxq +-> +hd +; + +242 + `ci_t_rx__rxq_bufs +( +tif +, +ts +); + +245 + `ci_t_rx_upde_e__add +( +ts +, +bys +); + +246 + } +} + +249 #ifde +__lux__ + + +251 #ifde +__ci_driv__ + + +252 #i +LINUX_VERSION_CODE + > +KERNEL_VERSION +(2,6,27) + +254  + $ci_kl_oc +( +pid_t + +pid +,  +sig +,  +iv +) + +256  +t +; + +258 + `rcu_ad_lock +(); + +259 +t + = + `kl_pid +( + `fd_vpid +( +pid +), +sig +, +iv +); + +260 + `rcu_ad_uock +(); + +261  +t +; + +262 + } +} + +263  + #kl_oc + +ci_kl_oc + + + ) + +269  + $ci_t_nd_sig_urg +( +ci_t_e + * +ts +) + +271  +rc +; + +273 i(! +ts +-> +s +. +b +. +sigown +) + +276 + `LOG_URG +( + `ci_log +("%s: sdg SIGURGpid %d", +__FUNCTION__ +, +ts +-> +s +. +b +. +sigown +)); + +278 #ifde +__ci_driv__ + + +279 +rc + = + `kl_oc +( +ts +-> +s +. +b +. +sigown +, +SIGURG +, 1); + +281 +rc + = + `kl +( +ts +-> +s +. +b +. +sigown +, +SIGURG +); + +284 i( +rc +) + +285 + `LOG_U +( + `ci_log +("%s: failedo send SIGURGopp,id=%d,s=%p(%d)", + +286 +__FUNCTION__ +, +ts +-> +s +. +b +. +sigown +,s, + `S_FMT +(ts))); + +287 + } +} + +292 #ifde +__sun__ + + +293  + $ci_t_nd_sig_urg +( +ci_t_e + * +ts +) + +295 i(! +ts +-> +s +. +b +. +sigown +) + +298 + `LOG_URG +( + `ci_log +("%s: sdg SIGURGpid %d", +__FUNCTION__ +, +ts +-> +s +. +b +. +sigown +)); + +300 #ifde +__ci_driv__ + + +302 +oc_t + * +p +; + +304 + `mux_r +(& +pidlock +); + +305 +p + = + `fd_ze +( +ts +-> +s +. +b +. +sigown +, +ALL_ZONES +); + +307 i( +p + = +NULL +) { + +308 + `LOG_U +( + `ci_log +("%s: failedo send SIGURGoid=%d (lookup failed)", + +309 +__FUNCTION__ +, +ts +-> +s +. +b +. +sigown +)); + +310  +de +; + +313 i( +p +-> +p_ + = +SIDL +) { + +314 + `LOG_U +( + `ci_log +("%s: failedo send SIGURGoid=%d (pid state)", + +315 +__FUNCTION__ +, +ts +-> +s +. +b +. +sigown +)); + +316  +de +; + +319 + `mux_r +(& +p +-> +p_lock +); + +320 + `sigtroc +( +p +, +NULL +, +SIGURG +); + +321 + `mux_ex +(& +p +-> +p_lock +); + +323 +de +: + +324 + `mux_ex +(& +pidlock +); + +328  +rc +; + +330 +rc + = + `kl +( +ts +-> +s +. +b +. +sigown +, +SIGURG +); + +332 i( +rc +) + +333 + `LOG_U +( + `ci_log +("%s: failedo send SIGURGopp,id=%d,s=%p(%d)", + +334 +__FUNCTION__ +, +ts +-> +s +. +b +. +sigown +,s, + `S_FMT +(ts))); + +337 + } +} + +342  + $ci_t_urg_pkt_oss +( +ci_t_e + * +ts +, +ci_tif + * +tif +, + +343 +ci_t_rx_pkt + * +rxp +) + +345 +ci__pkt_fmt + * +pkt + = +rxp +->pkt; + +346 +ci_t_hdr + * +t + = +rxp +->tcp; + +347 #ide +_WIN32 + + +349  +urg_r_adj + = + `NI_OPTS +( +tif +). +urg_rfc +; + +350  +urg_r_offt + = + `CI_BSWAP_BE16 +( +t +-> +t_urg_r_be16 ++ +urg_r_adj +; + +352  +urg_r_offt + = + `CI_BSWAP_BE16 +( +t +-> +t_urg_r_be16 +); + +355 +ci_ut32 + +rcv_up + = +rxp +-> +q + + +urg_r_offt + - 1; + +356  +ϡq + = + `SEQ_SUB +( +pkt +-> +pf +. +t_rx +. +d_q +, + +357 ( +t +-> +t_ags + & +CI_TCP_FLAG_SYN +) ? 2 : 1); + +359 + `ci_as +( + `ci_tif_is_locked +( +tif +)); + +361 if + `SEQ_LT +( +rcv_up +, + `t_rcv_nxt +( +ts +)) ) { + +363 + `LOG_U +( + `log +( +LPF + "rcv_up(%08x +ack +)); + +569 + `CITP_STATS_NETIF_INC +( +tif +, +ucab_acks +); + +571 if +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_SYNCHRONISED + ) { + +572 +pkt + = + `ci_tif_pkt_rx_to_tx +( +tif +, +rxp +->pkt); + +573 if +pkt + ! +NULL + ) + +574 + `ci_t_nd_ack +( +tif +, +ts +, +pkt +, +CI_FALSE +); + +577 + `CITP_STATS_NETIF_INC +( +tif +, +r__ucab_ack +); + +578 + `ci_t_y_wh_r +( +tif +, +rxp +); + +581 + `CI_TCP_STATS_INC_OUT_SEGS + +tif + ); + +582 + } +} + +589 +ci_le +  + $ci_t_tso_upde +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +590 +ci_ut32 + +beg_q +, ci_ut32 +d_q +, + +591 +ci_ut32 + +tsv +) + +593 if + `SEQ_LE +( +beg_q +, +ts +-> +taack +) && + +594 #i +CI_CFG_TCP_RFC1323_STRICT_TSO + + +595 + `SEQ_LT +( +ts +-> +taack +, +d_q +) + +597 + `SEQ_LE +( +ts +-> +taack +, +d_q +) + +600 +ts +-> +te + = +tsv +; + +601 +ts +-> +taws + = + `ci_t_time_now +( +ni +); + +602 #ide +NDEBUG + + +603 +ts +-> +taq + = +beg_q +; + +606 + } +} + +610 +ci_le +  + $ci_t_ws_check +( +ci_tif +* +tif +, +ci_ut32 + +tsv +, + +611  +taws +,  +te +) + +613 if + `CI_LIKELY +( + `TIME_LE +( +te +, +tsv +)) ) + +621 if( + `ci_t_time_now +( +tif +- +taws + > + `NI_CONF +ґif). +tcڡ_ws_id +){ + +622 + `LOG_TC +( + `log +( +LPF + "PAWs idleimeoutow=0x%xaws_idle=0x%xspaws=0x%x", + +623 + `ci_t_time_now +( +tif +), + +624 + `NI_CONF +( +tif +). +tcڡ_ws_id +, +taws +)); + +629 + `CI_TCP_EXT_STATS_INC_PAWS_ESTAB_REJECTED + +tif + ); + +631  +CI_TCP_PAWS_FAILED +; + +632 + } +} + +638 +ci_le +  + $ci_t_ݒcwnd +( +ci_tif + * +ni +, +ci_t_e +* +ts +) + +640 #i +CI_CFG_CONG_AVOID_NOTIFIED + + +643 if +ts +-> +cge + = +CI_TCP_CONG_NOTIFIED + ){ + +644 if( + `SEQ_LE +( + `t_d_u +( +ts +),s-> +cgcov +)) + +645 +ts +-> +cge + = +CI_TCP_CONG_OPEN +; + +649 if +ts +-> +cwnd + >ts-> +shsh + ) { + +651 #i +CI_CFG_CONG_AVOID_SCALE_BACK + + +652  +tmp + = + `NI_OPTS +( +ni +). +cg_avoid_s_back + >> + `t_ +( +ts +); + +653  +cwnd_sd + = + `CI_MAX +(1, +tmp +* +ts +-> +cwnd +; + +655  +cwnd_sd + = +ts +-> +cwnd +; + +662 + `LOG_TV +( + `log +( +LPF + "%d OPENCWND: CAff_mss=%u bytes_acked=%u cwnd=%u", + +663 + `S_FMT +( +ts +), + `t_eff_mss +s),s-> +bys_acked +,s-> +cwnd +)); + +664 if +ts +-> +bys_acked + > +cwnd_sd + ) { + +665 +ts +-> +bys_acked + - +cwnd_sd +; + +666 +ts +-> +cwnd + + + `t_eff_mss +(ts); + +671  +cwnd_c +; + +672 + `LOG_TV +( + `log +( +LPF + "%d OPENCWND: SSff_mss=%u bytes_acked=%u cwnd=%u", + +673 + `S_FMT +( +ts +), + `t_eff_mss +s),s-> +bys_acked +,s-> +cwnd +)); + +674 if! +CI_CFG_CONG_AVOID_CONSERVATIVE_SLOW_START + && +ts +-> +s +. +os + == 0 ) + +678 +cwnd_c + = + `t_eff_mss +( +ts +* +CI_CFG_CONG_AVOID_RFC3465_L_VALUE +; + +680 +cwnd_c + = + `t_eff_mss +( +ts +); + +681 +cwnd_c + = + `CI_MIN +(cwnd_c, +ts +-> +bys_acked +); + +682 +ts +-> +cwnd + + +cwnd_c +; + +683 +ts +-> +bys_acked + = 0; + +686 + `LOG_TV +( + `log +( +LPF + "%d OPENCWND:nd cwnd=%u", + `S_FMT +( +ts +),s-> +cwnd +)); + +688 + `ci_as_ +( + `t_eff_mss +( +ts +), +CI_MAX_ETH_FRAME_LEN +); + +689 + `ci_as_ge +( +ts +-> +cwnd +, + `t_eff_mss +(ts)); + +690 + `ci_as_ge +( +ts +-> +shsh +, ( +ci_ut32 +)( + `t_eff_mss +(ts) << 1)); + +691 + } +} + +694  + $ci_t_r__covy +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +696 + `ci_as +( +ts +-> +dup_acks + >ts-> +dup_thsh +); + +698 if + `ci__queue_is_emy +(& +ts +-> +s +) ) { + +699 + `LOG_U +( + `log +( +LNT_FMT + "%d DUPACKs, buto dataoetransmit!", + +700 + `LNT_PRI_ARGS +( +ni +, +ts +),s-> +dup_acks +)); + +704 ++ +ts +-> +s +. +_covs +; + +706 +ts +-> +shsh + = + `ci_t_losswnd +(ts); + +707 +ts +-> +cwnd + =s-> +shsh + + ( +ci_ut32 +ts-> +dup_thsh + * + `t_eff_mss +(ts); + +708 +ts +-> +cwnd + = + `CI_MAX +s->cwnd, + `NI_OPTS +( +ni +). +loss_m_cwnd +); + +710 + `ci_as +( +ts +-> +cwnd + > + `t_eff_mss +(ts)); + +712 +ts +-> +cgcov + = + `t_d_nxt +(ts); + +713 + `ci_t_s__rs +( +ni +, +ts +, &ts-> +cgcov +); + +714 if(! + `SEQ_LE +( +ts +-> +cgcov +, + `t_d_nxt +(ts))) + +715 + `LOG_U +( + `log +("Aboutossert on congrecover: %u, %u", + +716 +ts +-> +cgcov +, + `t_d_nxt +(ts))); + +717 + `ci_as +( + `SEQ_LE +( +ts +-> +cgcov +, + `t_d_nxt +(ts))); + +719 + `LOG_TL +( + `log +( +LNT_FMT + "%=> FaRecovy dups=%d " +TCP_SND_FMT +, + +720 + `LNT_PRI_ARGS +( +ni +, +ts +), + `cge_r +s),s-> +dup_acks +, + +721 + `TCP_SND_PRI_ARG +( +ts +)); + +722 + `log +( +LNT_FMT + " " +TCP_CONG_FMT +, + +723 + `LNT_PRI_ARGS +( +ni +, +ts +), + `TCP_CONG_PRI_ARG +(ts))); + +725 +ts +-> +cge + = +CI_TCP_CONG_FAST_RECOV +; + +727 if +ts +-> +tags + & +CI_TCPT_FLAG_SACK + ) + +728 + `ci_t_s_cov +( +ni +, +ts +, 1); + +730 + `ci_t_s_e +( +ts +, +ni +, + `PKT_CHK +i,s-> +s +. +hd +)); + +733 + `ci_t_r_t_timg +( +ts +); + +734 + `ci_t_o_t +( +ni +, +ts +); + +736 + `CI_IP_SOCK_STATS_INC_DUPACKFREC + +ts + ); + +737 if +ts +-> +tags + & +CI_TCPT_FLAG_SACK + ) + +738 + `CI_TCP_EXT_STATS_INC_TCP_SACK_RECOVERY + +ni + ); + +740 + `CI_TCP_EXT_STATS_INC_TCP_RENO_RECOVERY + +ni + ); + +741 + } +} + +747  + $ci_t_rx_duck +( +ci_t_e +* +ts +, +ci_tif +* +tif +, + +748 +ci_t_rx_pkt +* +rxp +) + +750 + `ci_as +( +rxp +-> +pkt +-> +pf +. +t_rx +. +y_n + == 0); + +751 + `ci_as +( + `SEQ_EQ +( + `t_d_u +( +ts +), +rxp +-> +ack +)); + +753 +ts +-> +dup_acks +++; + +754 + `LOG_TL +( + `log +( +LNT_FMT + "DUPACK dups=%d " +TCP_SND_FMT +, + +755 + `LNT_PRI_ARGS +( +tif +, +ts +),s-> +dup_acks +, + `TCP_SND_PRI_ARG +(ts)); + +756 + `log +( +LNT_FMT + " %s cwnd=%i crecover=%08xow-rto_to=%uto=%u", + +757 + `LNT_PRI_ARGS +( +tif +, +ts +), + `cge_r +s),s-> +cwnd +, + +758 +ts +-> +cgcov +, + `ci_t_time_now +( +tif +-s-> +o_tid +. +time +, + +759 +ts +-> +o +)); + +760 + `CI_IP_SOCK_STATS_INC_DUPACK + +ts + ); + +762 if( +ts +-> +cge + = +CI_TCP_CONG_OPEN +) + +763 | ( +ts +-> +cge + = +CI_TCP_CONG_NOTIFIED +) ) { + +765 if +ts +-> +dup_acks + >ts-> +dup_thsh + ) + +766 + `ci_t_r__covy +( +tif +, +ts +); + +768 if +ts +-> +cge + = +CI_TCP_CONG_FAST_RECOV + && + +769 !( +ts +-> +tags + & +CI_TCPT_FLAG_SACK +) ) { + +776 +ts +-> +cwnd + + + `t_eff_mss +(ts); + +777 + `CI_IP_SOCK_STATS_INC_DUPACKCONGFREC + +ts + ); + +779 if +ts +-> +cge + ! +CI_TCP_CONG_COOLING + ) + +780 + `ci_t_s_cov +( +tif +, +ts +, 0); + +782 + `ci_as +( +ts +-> +cwnd + > + `t_eff_mss +(ts)); + +783 + } +} + +790  + $ci_t_y_cwndcov +( +ci_t_e +* +ts +, +ci_tif +* +tif +, + +791 +ci__pkt_fmt +* +pkt +) + +793 +ci__pkt_queue +* +q + = & +ts +-> +s +; + +795 + `ci_as +( +ts +-> +cge + ! +CI_TCP_CONG_OPEN + + +796 && +ts +-> +cge + ! +CI_TCP_CONG_NOTIFIED +); + +798 + `LOG_TL +( + `log +( +LNT_FMT + "%s snd_una=%08x cwnd=%d ssthresh=%d crecover=%08x", + +799 + `LNT_PRI_ARGS +( +tif +, +ts +), + `cge_r +(ts), + +800 + `t_d_u +( +ts +),s-> +cwnd +,s-> +shsh +,s-> +cgcov +)); + +802 if( +ts +-> +cge + & +CI_TCP_CONG_FAST_RECOV +) && + +803 !( +ts +-> +tags + & +CI_TCPT_FLAG_SACK +) ) { + +804 if + `SEQ_LT +( + `t_d_u +( +ts +),s-> +cgcov +) ) + +808 + `ci_t_s_e +( +ts +, +tif +, + `PKT_CHK +ґif, +q +-> +hd +)); + +810 + `ci_t_coved +( +tif +, +ts +); + +813 if +ts +-> +cge + = +CI_TCP_CONG_RTO + ) { + +817 +ts +-> +o + = + `t_ +s+s-> +sv +; + +818 + `ci_t_o_bound +( +tif +, +ts +); + +819 if! + `ci__queue_is_emy +( +q +) ) + +820 + `ci_t_o_t +( +tif +, +ts +); + +822 +ts +-> +cge + = +CI_TCP_CONG_RTO_RECOV +; + +825 if +ts +-> +cge + = +CI_TCP_CONG_COOLING + ) { + +826 if + `SEQ_LE +( +ts +-> +cgcov +, + `t_d_u +(ts)) ) + +827 + `ci_t_coved +( +tif +, +ts +); + +832  +ck +; + +833  +s_da +; + +834 + `ci_t_g_ck +( +tif +, +ts +, & +ck +, & +s_da +); + +835 +ts +-> +cwnd_exa + = + `SEQ_SUB +( +ck +, + `t_d_u +s)- +s_da +; + +836 +ts +-> +cwnd_exa + = + `CI_MAX +(ts->cwnd_extra, 0); + +841 + `ci_t_s_cov +( +tif +, +ts +, 0); + +842 + } +} + +845  + $ci_t_rx_ck_oss_block +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +846  +t +,  +d +) + +848 +ci__pkt_queue +* +q + = & +ts +-> +s +; + +849 +ci__pkt_fmt +* +t_block +; + +850 +ci__pkt_fmt +* +t_block_d +; + +851 +ci__pkt_fmt +* +t_pkt +; + +852 +ci__pkt_fmt +* +t_pkt_ev +; + +853 +ci__pkt_fmt +* +d_block +; + +854 +ci__pkt_fmt +* +d_pkt +; + +855 +ci__pkt_fmt +* +pkt +; + +856 +oo_pkt_p + +xt_ +; + +877 +xt_ + = +q +-> +hd +; + +879 +t_block + = + `PKT_CHK +( +ni +, +xt_ +); + +880 if + `OO_PP_IS_NULL +( +t_block +-> +pf +. +t_tx +. +block_d +) ) { + +882 + `ci_as +(!( +t_block +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED +)); + +883 +t_block_d + = + `PKT_CHK +( +ni +, +q +-> + +); + +884 + `ci_as +( + `SEQ_LE +( +d +, +t_block_d +-> +pf +. +t_tx +. +d_q +)); + +887 +t_block_d + = + `PKT_CHK +( +ni +, +t_block +-> +pf +. +t_tx +. +block_d +); + +888 if + `SEQ_LE +( +t +, +t_block_d +-> +pf +. +t_tx +. +t_q +) ) ; + +889 if( +t_block +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED +) && + +890 + `SEQ_LE +( +t +, +t_block_d +-> +pf +. +t_tx +. +d_q +) ) { + +892 + `LOG_TV +( + `log +( +LNT_FMT + "SACK %08x-%08xartial overlap %08x-%08x", + +893 + `LNT_PRI_ARGS +( +ni +, +ts +), +t +, +d +, + +894 +t_block +-> +pf +. +t_tx +. +t_q +, + +895 +t_block_d +-> +pf +. +t_tx +. +d_q +)); + +896 +t_pkt + = +t_block_d +; + +897 +t_pkt_ev + = 0; + +898  +g_t_pkt +; + +900 +xt_ + = +t_block_d +-> +xt +; + +901 if + `OO_PP_IS_NULL +( +xt_ +) ) ; + +905 +t_pkt_ev + = 0; + +906 +t_pkt + = +t_block +; + +907  + `SEQ_LT +( +t_pkt +-> +pf +. +t_tx +. +t_q +, +t +) ) { + +908 if + `OO_PP_IS_NULL +( +t_pkt +-> +xt +) ) { + +909 + `LOG_TV +( + `log +( +LNT_FMT + "SACK %08x-%08xartial ofast %08x-%08x", + +910 + `LNT_PRI_ARGS +( +ni +, +ts +), +t +, +d +, +t_pkt +-> +pf +. +t_tx +. +t_q +, + +911 +t_pkt +-> +pf +. +t_tx +. +d_q +)); + +914 +t_pkt_ev + = +t_pkt +; + +915 +t_pkt + = + `PKT_CHK +( +ni +, s_pkt-> +xt +); + +917 +g_t_pkt +: + +920 +d_block + = +t_block +; + +921 +pkt + = +t_block_d +; + +923 if + `OO_PP_IS_NULL +( +pkt +-> +xt +) ) ; + +924 +pkt + = + `PKT_CHK +( +ni +,kt-> +xt +); + +925 if + `SEQ_LT +( +d +, +pkt +-> +pf +. +t_tx +. +d_q +) ) ; + +926 +d_block + = +pkt +; + +927 if + `OO_PP_IS_NULL +( +d_block +-> +pf +. +t_tx +. +block_d +) ) ; + +928 +pkt + = + `PKT_CHK +( +ni +, +d_block +-> +pf +. +t_tx +. +block_d +); + +932 if( +t_block +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED +) && + +933 +t_block + = +d_block + ) { + +934 + `LOG_TV +( + `log +( +LNT_FMT + "SACK %08x-%08x duplicate or subset of %08x-%08x", + +935 + `LNT_PRI_ARGS +( +ni +, +ts +), +t +, +d +, + +936 +t_block +-> +pf +. +t_tx +. +t_q +, + +937 +t_block_d +-> +pf +. +t_tx +. +d_q +)); + +945 if +t_block + = +d_block + ) +pkt + = +t_pkt +; + +946 +pkt + = +d_block +; + +947 +d_pkt + = 0; + +949 if + `SEQ_LT +( +d +, +pkt +-> +pf +. +t_tx +. +d_q +) ) ; + +950 +d_pkt + = +pkt +; + +952 if + `SEQ_EQ +( +d +, +pkt +-> +pf +. +t_tx +. +d_q +) ) ; + +953 if + `OO_PP_IS_NULL +( +pkt +-> +xt +) ) ; + +954 +pkt + = + `PKT_CHK +( +ni +, +d_pkt +-> +xt +); + +956 if! +d_pkt + ) { + +960 + `LOG_TV +( + `log +( +LNT_FMT + "SACK %08x-%08x withinkt %08x-%08x", + +961 + `LNT_PRI_ARGS +( +ni +, +ts +), +t +, +d +, + +962 +t_pkt +-> +pf +. +t_tx +. +t_q +, s_pkt->pf.t_tx. +d_q +)); + +970 + `ci_as +( + `SEQ_LE +( +t +, +t_pkt +-> +pf +. +t_tx +. +t_q +) || + +971 (( +t_block +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED +) && + +972 + `SEQ_LT +( +t_block +-> +pf +. +t_tx +. +t_q +, +t +))); + +973 + `ci_as +( + `SEQ_LE +( +d_pkt +-> +pf +. +t_tx +. +d_q +, +d +)); + +975 if!( +t_block +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED +&& +t_pkt_ev + ) { + +983 + `ci_as +( +t_block + ! +t_pkt +); + +985 +t_block +-> +pf +. +t_tx +. +block_d + = + `OO_PKT_P +( +t_pkt_ev +); + +986 if + `OO_PP_EQ +( +t_block +-> +xt +, + `OO_PKT_P +( +t_pkt +)) ) ; + +987 +t_block + = + `PKT_CHK +( +ni +, s_block-> +xt +); + +995 +xt_ + = + `OO_PKT_P +( +d_pkt +); + +996 if + `OO_PP_NOT_NULL +( +d_pkt +-> +xt +) ) { + +997 +pkt + = + `PKT_CHK +( +ni +, +d_pkt +-> +xt +); + +998 if +pkt +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED + ) { + +999 + `LOG_TV +( + `log +( +LNT_FMT + "SACK %08x-%08x inconsistent with %08x-%08x", + +1000 + `LNT_PRI_ARGS +( +ni +, +ts +), +t +, +d +, + +1001 +pkt +-> +pf +. +t_tx +. +t_q +, + +1002 + `PKT_CHK +( +ni +, +pkt +-> +pf +. +t_tx +. +block_d +)->pf.t_tx. +d_q +)); + +1003 +xt_ + = +pkt +-> +pf +. +t_tx +. +block_d +; + +1008 if +t_block +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED + ) + +1009 +pkt + = +t_block +; + +1011 +pkt + = +t_pkt +; + +1012  +pkt + ! +d_pkt + ) { + +1013 +pkt +-> +pf +. +t_tx +. +block_d + = +xt_ +; + +1014 +pkt +-> +ags + | +CI_PKT_FLAG_RTQ_SACKED +; + +1015 +pkt + = + `PKT_CHK +( +ni +,kt-> +xt +); + +1017 +pkt +-> +pf +. +t_tx +. +block_d + = +xt_ +; + +1018 +pkt +-> +ags + | +CI_PKT_FLAG_RTQ_SACKED +; + +1019 + } +} + +1025 +ci_le +  + $ci_t_rx_dck_check +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1026 +ci_t_rx_pkt +* +rxp +) + +1028  +t + = +rxp +-> +ck +[0]; + +1029  +d + = +rxp +-> +ck +[1]; + +1030  +rc + = 0; + +1037 if + `SEQ_LE +( +t +, +rxp +-> +ack +) ) { + +1038 + `LOG_TO +( + `log +( +LNT_FMT + "DSACK option %08x-%08xck=%08x una=%08x", + +1039 + `LNT_PRI_ARGS +( +ni +, +ts +), +t +, +d +, +rxp +-> +ack +, + `t_d_u +(ts))); + +1040 +rxp +-> +ags + | +CI_TCP_DSACK +; + +1041 +rc + = 1; + +1043 if +rxp +-> +ck_blocks + > 1 ) { + +1045  +t1 + = +rxp +-> +ck +[2]; + +1046  +d1 + = +rxp +-> +ck +[3]; + +1047 if + `SEQ_LE +( +t1 +, +t +&& SEQ_LE( +d +, +d1 +) ) { + +1048 + `LOG_TO +( + `log +( +LNT_FMT + "DSACK option %08x-%08x withext %08x-%08x", + +1049 + `LNT_PRI_ARGS +( +ni +, +ts +), +t +, +d +, +t1 +, +d1 +)); + +1050 +rxp +-> +ags + | +CI_TCP_DSACK +; + +1051 +rc + = 1; + +1055  +rc +; + +1056 + } +} + +1065  + $ci_t_rx_ck_oss +( +ci_tif +* +tif +, +ci_t_e +* +ts +, + +1066 +ci_t_rx_pkt +* +rxp +) + +1068  +i +; + +1069  +t +; + +1070  +d +; + +1071  +cked + = 0; + +1073 if!( +ts +-> +tags + & +CI_TCPT_FLAG_SACK +) ) { + +1074 + `LOG_U +( + `log +( +LNT_FMT + "SACKeceived butotegotiated", + +1075 + `LNT_PRI_ARGS +( +tif +, +ts +))); + +1079 + `LOG_TO +( + `log +( +LPF + "%d: %d SACK blocks", + `S_FMT +( +ts +), +rxp +-> +ck_blocks +)); + +1081 + `ci_as +( + `ci__queue_is_vid +( +tif +, & +ts +-> +s +)); + +1082 + `ci_as +( +rxp +-> +ags + & +CI_TCPT_FLAG_SACK +); + +1083 + `ci_as +( + `SEQ_LE +( + `t_d_u +( +ts +), +rxp +-> +ack +)); + +1086 + `ci_as +( +rxp +-> +ck_blocks + >= 1); + +1092 if + `ci__queue_is_emy +(& +ts +-> +s +) | + +1093 ( +rxp +-> +t +-> +t_ags + & +CI_TCP_FLAG_SYN +) ) + +1097 +i + = + `ci_t_rx_dck_check +( +tif +, +ts +, +rxp +); + +1100  ; +i + < +rxp +-> +ck_blocks +; i++ ) { + +1102 +t + = +rxp +-> +ck +[2 * +i +]; + +1103 +d + = +rxp +-> +ck +[2 * +i + + 1]; + +1105 + `LOG_TO +( + `log +( +LNT_FMT + "SACK %d %08x-%08x " +TCP_SND_FMT +, + +1106 + `LNT_PRI_ARGS +( +tif +, +ts +), +i +, +t +, +d +, + `TCP_SND_PRI_ARG +(ts))); + +1116 if! ( + `SEQ_LE +( +t +, +rxp +-> +ack +| + `SEQ_LT +( + `t_d_nxt +( +ts +), +d +) | + +1117 + `SEQ_LE +( +d +, +t +)) ) { + +1118 + `ci_t_rx_ck_oss_block +( +tif +, +ts +, +t +, +d +); + +1119 +cked + = 1; + +1126 + `LOG_U +(if + `SEQ_LE +( +t +, +rxp +-> +ack +) || + +1127 + `SEQ_LT +( + `t_d_nxt +( +ts ++s-> +d_deged +, +d +) || + +1128 + `SEQ_LE +( +d +, +t +) ) + +1129 + `log +( +LNT_FMT + "SACK %d %08x-%08x invalid snd=%08x-%08x", + +1130 + `LNT_PRI_ARGS +( +tif +, +ts +), +i +, +t +, +d +, + +1131 + `t_d_u +( +ts +), + `t_d_nxt +(ts))); + +1135 if +cked + != 0 ) + +1136 +rxp +-> +ags + | +CI_TCP_SACKED +; + +1137 + } +} + +1140  + $ci_t_rx__acked_bufs +( +ci_tif +* +tif +, +ci_t_e +* +ts +, + +1141 +ci_t_rx_pkt +* +rxp +) + +1143  +ci_tif_pl_e +* +ps + = +rxp +-> +pl_e +; + +1144 +ci__pkt_queue +* +q + = & +ts +-> +s +; + +1146 + `ci_as +( + `ci__queue_is_vid +( +tif +, +q +)); + +1147 +ts +-> +sms +=0; + +1149 if + `ci__queue_is_emy +( +q +) ) { + +1150 + `ci_as +( +ts +-> +d_deged +); + +1151 + `ci_as +( + `SEQ_GE +( + `t_d_nxt +( +ts ++s-> +d_deged +, +rxp +-> +ack +)); + +1152  +de +; + +1156 +ci__pkt_fmt +* +p + = + `PKT_CHK +( +tif +, +q +-> +hd +); + +1158 if + `SEQ_LT +( +rxp +-> +ack +, +p +-> +pf +. +t_tx +. +d_q +) ) { + +1160 + `ci_t_o_t +( +tif +, +ts +); + +1163 + `LOG_TV +( + `log +( +LNT_FMT + "ACKED id=%d seq=%08x-%08x [" +CI_TCP_FLAGS_FMT +"]" + +1164 " (%08x%d", + `LNT_PRI_ARGS +( +tif +, +ts +), + `OO_PKT_FMT +( +p +), + +1165 +p +-> +pf +. +t_tx +. +t_q +,->pf.t_tx. +d_q +, + +1166 + `CI_TCP_HDR_FLAGS_PRI_ARG +( + `PKT_TCP_HDR +( +p +)), +rxp +-> +ack +, +q +-> +num +)); + +1168 + `ci__queue_dequeue +( +tif +, +q +, +p +); + +1170 + `ci_as +( +p +-> +fcou + > 0); + +1172 if +p +-> +ags + & +CI_PKT_FLAG_TX_TIMESTAMPED + && + +1173 ( +ts +-> +s +. +timeampg_ags + & +ONLOAD_SOF_TIMESTAMPING_STREAM +) ) { + +1174 + `ci_udp_cv_q_put +( +tif +, & +ts +-> +timeamp_q +, +p +); + +1177 +ts +-> +s +. +b +. +sb_ags + | +CI_SB_FLAG_RX_DELIVERED +; + +1180 + `ci_tif_pkt_a__pl +( +tif +, +p +, +ps +); + +1183 if + `ci__queue_is_emy +( +q +) ) { + +1185 + `ci_t_o_r +( +tif +, +ts +); + +1186 + `ci_t_kive_t +( +tif +, +ts +, + `ci_t_kive_id_g +(ts)); + +1194 if +ts +-> +s +. +b +. +sb_ags + & +CI_SB_FLAG_RX_DELIVERED + ) { + +1195 + `ci_tif_put__po_pl +( +tif +, & +ts +-> +s +. +b +); + +1196 + `ci_t_wake +( +tif +, +ts +, +CI_SB_FLAG_WAKE_RX +); + +1199 +de +: + +1200 + `ci_as +(! + `ci__queue_is_emy +( +q +|| + `SEQ_EQ +( +rxp +-> +ack +, + `t_d_nxt +( +ts +)) || + +1201 +ts +-> +d_deged + != 0); + +1202 + `t_d_u +( +ts + +rxp +-> +ack +; + +1205 if + `NI_OPTS +( +tif +). +t_dbuf_mode + >= 1 && + +1206 + `ci_t_tx_advti_a +( +tif +, +ts +||s-> +s +. +tx_o + ) ) + +1207 + `ci_t_wake +( +tif +, +ts +, +CI_SB_FLAG_WAKE_TX +); + +1208 + } +} + +1217 +ci_le +  + $ci_t_rx_y_d_wnd_e +( +ci_t_e + * +ts +, + +1218 +ci_t_rx_pkt + * +rxp +) + +1220 +ci__pkt_fmt + * +pkt + = +rxp +->pkt; + +1235 + `ci_as +( + `SEQ_LE +( +ts +-> +d_u +, +rxp +-> +ack +)); + +1236 + `ci_as +( + `SEQ_LE +( +rxp +-> +ack +, +ts +-> +d_nxt + +s-> +d_deged +)); + +1242 #i +CI_CFG_NOTICE_WINDOW_SHRINKAGE + + +1243 + `SEQ_LT +( +ts +-> +d_u +, +rxp +-> +ack +) || + +1244 + `SEQ_LT +( +ts +-> +d_wl1 +, +rxp +-> +q +) || + +1245 + `SEQ_EQ +( +ts +-> +d_wl1 +, +rxp +-> +q +) && + +1247 + `SEQ_LT +( +ts +-> +d_max +, +rxp +-> +ack + + +pkt +-> +pf +. +t_rx +. +wdow +) + +1249 #i +CI_CFG_NOTICE_WINDOW_SHRINKAGE + + +1253 +ci_ut32 + +ev_d_max + = +ts +-> +d_max +; + +1254 + `ci_t_t_d_max +( +ts +, +rxp +-> +q +,xp-> +ack +, +pkt +-> +pf +. +t_rx +. +wdow +); + +1255 + `ci_as +( + `SEQ_GE +( +ts +-> +d_max +,s-> +d_u +)); + +1256  +ts +-> +d_max + - +ev_d_max +; + +1260 + } +} + +1268  + $ci_t_rx_hd_ack +( +ci_t_e +* +ts +, +ci_tif +* +tif +, + +1269 +ci_t_rx_pkt +* +rxp +) + +1271 +ci__pkt_fmt +* +pkt + = +rxp +->pkt; + +1272  +d_max_dif +; + +1279 + `ci_as +( + `SEQ_LE +( +rxp +-> +ack +, + `t_d_nxt +( +ts ++s-> +d_deged +)); + +1280 + `ci_as +( + `SEQ_LE +( + `t_d_u +( +ts +), +rxp +-> +ack +)); + +1281 + `ci_as + + `OO_SP_IS_NULL +( +ts +-> +lol_ +) ); + +1283 i( +ts +-> +d_max + = +rxp +-> +ack +) + +1284 + `CI_TCP_EXT_STATS_INC_TCP_FULL_UNDO + +tif + ); + +1286 +d_max_dif + = + `ci_t_rx_y_d_wnd_e +( +ts +, +rxp +); + +1288 if + `SEQ_LT +( + `t_d_u +( +ts +), +rxp +-> +ack +) ) { + +1290  +acked + = + `SEQ_SUB +( +rxp +-> +ack +, + `t_d_u +( +ts +)); + +1294 +ts +-> +zw_obes + = 0; + +1295 +ts +-> +zw_acks + = 0; + +1298 if +ts +-> +tags + & +CI_TCPT_FLAG_TSO + ) { + +1299 + `ci_t_upde_t +( +tif +, +ts +, + +1300 + `ci_t_time_now +( +tif +- +rxp +-> +timeamp_echo +); + +1302 if + `SEQ_LE +( + `t_d_u +( +ts +),s-> +timed_q +) && + +1303 + `SEQ_LT +( +ts +-> +timed_q +, +rxp +-> +ack +) && + +1304 (( +ts +-> +cge + = +CI_TCP_CONG_OPEN +) | + +1305 ( +ts +-> +cge + = +CI_TCP_CONG_NOTIFIED +)) ) { + +1312 + `ci_t_upde_t +( +tif +, +ts +, + `ci_t_time_now +ґif-s-> +timed_ts +); + +1316 +ts +-> +bys_acked + + +acked +; + +1317 + `ci_t_ݒcwnd +( +tif +, +ts +); + +1320 +ts +-> +dup_acks + = 0; + +1323 + `ci_t_rx__acked_bufs +( +tif +, +ts +, +rxp +); + +1325 if +ts +-> +cge + ! +CI_TCP_CONG_OPEN + &&s->cg! +CI_TCP_CONG_NOTIFIED +) + +1327 + `ci_t_y_cwndcov +( +ts +, +tif +, +pkt +); + +1329 if + `NI_OPTS +( +tif +). +t_dbuf_mode + == 2 && + +1330 + `ci_t_should_exnd_dbuf +( +tif +, +ts +) ) + +1331 + `ci_t_exnd_dbuf +( +tif +, +ts +); + +1358 if + `SEQ_EQ +( +pkt +-> +pf +. +t_rx +. +d_q +, +rxp +-> +q +) && + +1359 ! +d_max_dif + ) { + +1360 if! ( +rxp +-> +ags + & +CI_TCP_DSACK +) + +1361 && +pkt +-> +pf +. +t_rx +. +wdow + > + `t_eff_mss +( +ts +) + +1362 && ! + `ci__queue_is_emy +(& +ts +-> +s +) ) + +1363 + `ci_t_rx_duck +( +ts +, +tif +, +rxp +); + +1366 +ts +-> +dup_acks + = 0; + +1370 +ts +-> +dup_acks + = 0; + +1374 if + `SEQ_SUB +( +ts +-> +d_max +, +rxp +-> +ack +< + `t_eff_mss +(ts) && + +1375 + `ci__queue_is_emy +(& +ts +-> +s +) && + +1376 + `OO_SP_IS_NULL +( +ts +-> +lol_ +) ) { + +1386 if + `ci__tim_ndg +( +tif +, & +ts +-> +zw_tid +) ) { + +1387 if +ts +-> +zw_obes + > 0 ) { + +1388 ++ +ts +-> +zw_acks +; + +1389 +ts +-> +zw_obes + = 0; + +1391 + `ci__tim_r +( +tif +, & +ts +-> +zw_tid +); + +1393 + `ci_t_zw_t +( +tif +, +ts +); + +1394 + `CI_IP_SOCK_STATS_INC_ZWIN +( +ts +); + +1399 + `ci_t_kive_t +( +tif +, +ts +); + +1400 + } +} + +1406  + $ci_t_rx_oss_f +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +1408 + `CI_DEBUG +( +ev_e + = +ts +-> +s +. +b +. +e +); + +1410 if! + `ci__queue_is_emy +(& +ts +-> +rob +) ) { + +1411 + `LOG_U +( + `log +( +LNTS_FMT + "n-emy ROB FIN", + `LNTS_PRI_ARGS +( +tif +, +ts +))); + +1412 + `ci__queue_dr +( +tif +, & +ts +-> +rob +); + +1418 +ts +-> +tags + | +CI_TCPT_FLAG_FIN_RECEIVED +; + +1419 #ifde +_WIN32 + + +1426 +ts +-> +s +. +rx_o + | +CI_SHUT_RD +; + +1428 +ts +-> +s +. +rx_o + = +CI_SHUT_RD +; + +1430 if +ts +-> +s +. +b +. +e + = +CI_TCP_ESTABLISHED + ) { + +1431 + `ci_t_t_ow_e +( +tif +, +ts +, +CI_TCP_CLOSE_WAIT +); + +1432 } if +ts +-> +s +. +b +. +e + = +CI_TCP_FIN_WAIT1 + ) { + +1433 if + `SEQ_EQ +( + `t_d_u +( +ts +), + `t_q_nxt +(ts)) ) { + +1434 + `ci_as +( + `ci_t_ndq_is_emy +( +ts +)); + +1435 + `ci_as +( + `ci__queue_is_emy +(& +ts +-> +s +)); + +1436 + `ci_tif_timewa_r +( +tif +, +ts +); + +1437 + `ci_t_t_ow_e +( +tif +, +ts +, +CI_TCP_TIME_WAIT +); + +1440 + `ci_t_t_ow_e +( +tif +, +ts +, +CI_TCP_CLOSING +); + +1443 + `ci_as +( +ts +-> +s +. +b +. +e + = +CI_TCP_FIN_WAIT2 +); + +1444 + `ci_as +( + `ci_t_ndq_is_emy +( +ts +)); + +1445 + `ci_as +( + `ci__queue_is_emy +(& +ts +-> +s +)); + +1447 + `ci_tif_timewa_r +( +tif +, +ts +); + +1448 + `ci_t_t_ow_e +( +tif +, +ts +, +CI_TCP_TIME_WAIT +); + +1450 + `LOG_TC +( + `log +( +LPF + "%d FIN %s->%s", + `S_FMT +( +ts +), + +1451 + `ci_t_e_r +( +ev_e +), + `e_r +( +ts +))); + +1455 + `ci_t_rx__rxq_bufs +( +tif +, +ts +); + +1456 if + `t_rcv_u +( +ts +=0 && + `ci_sock_ylock +( +tif +, &ts-> +s +. +b +) ) { + +1457 + `ci_as_equ +( + `t_rcv_u +( +ts +), 0); + +1458 if + `OO_PP_NOT_NULL +( +ts +-> +cv1_exa +) ) + +1459 + `ci_t_rx__rxq_ϡ_buf +( +tif +, +ts +); + +1461 + `ci_as_equ +( +ts +-> +cv1 +. +num +, 0); + +1462 + `ci_sock_uock +( +tif +, & +ts +-> +s +. +b +); + +1465 + `ci_t_wake +( +tif +, +ts +, +CI_SB_FLAG_WAKE_RX +); + +1467 if + `OO_SP_NOT_NULL +( +ts +-> +lol_ +) ) { + +1469 +ci_t_e +* + + = + `ID_TO_TCP +( +tif +, +ts +-> +lol_ +); + +1470 if + +-> +s +. +b +. +e + = +CI_TCP_LAST_ACK + ) + +1471 + `ci_t_dr +( +tif +, + +, 0); + +1473 + `ci_t_t_ow_e +( +tif +, + +, +CI_TCP_FIN_WAIT2 +); + +1476 + } +} + +1478 #i +CI_CFG_PORT_STRIPING + + +1479  + $ci_t_check_ooo_re +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +1481 +ci__pkt_fmt +* +block_pkt + = + `PKT_CHK +( +tif +, +ts +-> +rob +. +hd +); + +1482  +g_t_qno + = + `t_rcv_nxt +( +ts +); + +1483  +g_pt_sw +; + +1485  +g_found +[2] = {0, 0}; + +1488 +g_pt_sw + = + `ci_ts_pt_sw +( +g_t_qno +, +ts +); + +1489 +g_found +[ +g_pt_sw +] = 1; + +1490 if +g_found +[0] && gap_found[1] ) + +1492 if + `PKT_TCP_RX_ROB +( +block_pkt +)-> +xt_block + < 0 ) ; + +1493 +g_t_qno + = + `PKT_TCP_RX_ROB +( +block_pkt +)-> +d_block_q +; + +1494 +block_pkt + = + `PKT_CHK +( +tif +, + `PKT_TCP_RX_ROB +(block_pkt)-> +xt_block +); + +1497 + } +} + +1501  + $ci_t_rx_div_rob +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +1503 +ci__pkt_fmt +* +pkt +; + +1504 +ci__pkt_fmt +* +d_pkt + = +NULL +; + +1505 +oo_pkt_p + +d_block_id +, +id +; + +1506 +ci_t_hdr +* +t +; + +1507 +ci__pkt_queue +* +rob +; + +1508 +ci_ut32 + +ϡ_q +; + +1509  +num +; + +1510 +ci_ut32 + +q +; + +1512 ++ +ts +-> +s +. +rx_ooo_fl +; + +1513 +rob + = & +ts +->rob; + +1514 + `ci_as +( + `ci__queue_is_vid +( +tif +, +rob +)); + +1515 +id + = +rob +-> +hd +; + +1516 +pkt + = + `PKT_CHK +( +tif +, +id +); + +1517 +q + = + `CI_BSWAP_BE32 +( + `PKT_TCP_HDR +( +pkt +)-> +t_q_be32 +); + +1520 +d_block_id + = + `PKT_TCP_RX_ROB +( +pkt +)-> +d_block +; + +1521 + `ASSERT_VALID_PKT_ID +( +tif +, +d_block_id +); + +1522  + `SEQ_LE +( +pkt +-> +pf +. +t_rx +. +d_q +, + `t_rcv_nxt +( +ts +)) ) { + +1526 + `LOG_TR +( + `log +( +LPF + "%d dropacket from ROB %d: %x-%x", + +1527 + `S_FMT +( +ts +), + `OO_PP_FMT +( +id +), +q +, + +1528 +pkt +-> +pf +. +t_rx +. +d_q +)); + +1529 if +ts +-> +tags + & +CI_TCPT_FLAG_SACK + ) { + +1530  +i +; + +1531  +i + = 0; i < +CI_TCP_SACK_MAX_BLOCKS +; i++ ) + +1532 if + `OO_PP_EQ +( +ts +-> +ϡ_ck +[ +i +], +id +) ) + +1533 +ts +-> +ϡ_ck +[ +i +] = +OO_PP_NULL +; + +1538 + `ci__queue_dequeue +( +tif +, +rob +, +pkt +); + +1539 if + `OO_PP_EQ +( +id +, +d_block_id +) ) + +1540 +d_block_id + = +OO_PP_NULL +; + +1541 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +1542 if + `ci__queue_is_emy +( +rob +) ) + +1544 +id + = +rob +-> +hd +; + +1545 +pkt + = + `PKT_CHK +( +tif +, +id +); + +1546 +q + = + `CI_BSWAP_BE32 +( + `PKT_TCP_HDR +( +pkt +)-> +t_q_be32 +); + +1547 if + `OO_PP_IS_NULL +( +d_block_id +) ) { + +1548 +d_block_id + = + `PKT_TCP_RX_ROB +( +pkt +)-> +d_block +; + +1549 + `ASSERT_VALID_PKT_ID +( +tif +, +d_block_id +); + +1552 +t + = + `PKT_TCP_HDR +( +pkt +); + +1555 if + `SEQ_LT +( + `t_rcv_nxt +( +ts +), +q +) ) { + +1556 + `LOG_TV +( + `log +("%d %s ROB can't delivercv_nxt=%08xob_nxt=%08x", + +1557 + `S_FMT +( +ts +), + `e_r +s), + `t_rcv_nxt +s), +q +)); + +1558 #i +CI_CFG_PORT_STRIPING + + +1559 if +ts +-> +tags + & +CI_TCPT_FLAG_STRIPE + ) + +1560  + `ci_t_check_ooo_re +( +tif +, +ts +); + +1566 + `LOG_TO +( + `log +( +LPF + "%d ROB delivercv=%08x-%08x cur %08xob_seq=%08x-%08x", + +1567 + `S_FMT +( +ts +), + `t_rcv_nxt +s), + `t_rcv_wnd_right_edge_ +(ts), + +1568 + `t_rcv_wnd_cut +( +ts +), +q +, + +1569 + `PKT +( +tif +, +d_block_id +)-> +pf +. +t_rx +. +d_q +)); + +1570 + `ci_as +( + `SEQ_LE +( + `t_rcv_nxt +( +ts +), + +1571 + `PKT +( +tif +, +d_block_id +)-> +pf +. +t_rx +. +d_q +)); + +1573 if +ts +-> +tags + & +CI_TCPT_FLAG_SACK + ) { + +1574  +i +; + +1575  +i + = 0; i < +CI_TCP_SACK_MAX_BLOCKS +; i++ ) + +1576 if + `OO_PP_EQ +( +ts +-> +ϡ_ck +[ +i +], +id +) ) + +1577 +ts +-> +ϡ_ck +[ +i +] = +OO_PP_NULL +; + +1583 +ϡ_q + = + `t_rcv_nxt +( +ts +); + +1584 +num + = 0; + +1586 + `LOG_TV +( + `log +( +LPF + "%d ROB deliveracket %d: %x-%x,ast_seq = %x, " + +1587 "y_%d", + `S_FMT +( +ts +), + `OO_PP_FMT +( +id +), +q +, + +1588 +pkt +-> +pf +. +t_rx +. +d_q +, +ϡ_q +,kt->pf.t_rx. +y_n +)); + +1589 + `ci_as +( + `SEQ_LE +( +q +, +ϡ_q +)); + +1590 + `ci_as +( + `SEQ_LT +( +ϡ_q +, +pkt +-> +pf +. +t_rx +. +d_q +)); + +1591 + `oo_offbuf_ +(& +pkt +-> +buf +, + +1592 + `CI_TCP_PAYLOAD +( +t ++ ( +ϡ_q + - +q +), + +1593 +pkt +-> +pf +. +t_rx +. +y_n + - ( +ϡ_q + - +q +)); + +1595 #ifde +_WIN32 + + +1602 if( + `CI_UNLIKELY +( +t +-> +t_ags + & +CI_TCP_FLAG_URG +) && + +1603 ! ( +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_OOBINLINE +) )) { + +1604 + `LOG_URG +( + `ci_log +("%s: URG found", +__FUNCTION__ +)); + +1605 + `ci_t_urg_pkt_oss +( +ts +, +tif +, +pkt +, +t +); + +1610 if + `CI_UNLIKELY +( +t +-> +t_ags + & +CI_TCP_FLAG_FIN +) ) { + +1611 + `LOG_TC +( + `log +( +LPF + "%d out-of-d FIN", + `S_FMT +( +ts +))); + +1614 + `ci_as +( + `oo_offbuf_n_emy +(& +pkt +-> +buf +)); + +1616 +num +++; + +1617 +d_pkt + = +pkt +; + +1618 +ϡ_q + = +pkt +-> +pf +. +t_rx +. +d_q +; + +1619 if + `OO_PP_EQ +( + `OO_PKT_P +( +pkt +), +d_block_id +) ) + +1621 +id + = +pkt +-> +xt +; + +1622 +pkt + = + `PKT_CHK +( +tif +, +id +); + +1623 +t + = + `PKT_TCP_HDR +( +pkt +); + +1624 +q + = + `CI_BSWAP_BE32 +( +t +-> +t_q_be32 +); + +1631 + `ci_as +( +num + > 0 || ( +t +-> +t_ags + & +CI_TCP_FLAG_FIN +)); + +1634 if +num + != 0 ) + +1635 + `ci_t_rx_queue_cha +( +tif +, +ts +, +rob +, +d_pkt +, +num +); + +1637 if( + `CI_UNLIKELY + +t +-> +t_ags + & +CI_TCP_FLAG_FIN + )) { + +1638 if +ts +-> +tags + & +CI_TCPT_FLAG_SACK + ) { + +1639  +i +; + +1640  +i + = 0; i < +CI_TCP_SACK_MAX_BLOCKS +; i++ ) { + +1641 if + `OO_PP_EQ +( +ts +-> +ϡ_ck +[ +i +], + `OO_PKT_P +( +pkt +)) ) { + +1642 +ts +-> +ϡ_ck +[ +i +] = +OO_PP_NULL +; + +1648 + `ci__queue_dequeue +( +tif +, +rob +, +pkt +); + +1650 if +pkt +-> +pf +. +t_rx +. +d_q + - +q + != 1 ) { + +1651 + `ci_t_rx_queue_ck +( +tif +, +ts +, +pkt +); + +1653 + `t_rcv_nxt +( +ts + +pkt +-> +pf +. +t_rx +. +d_q +; + +1654 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +1656 + `ci_t_rx_oss_f +( +tif +, +ts +); + +1659 + `ci_as +( + `ci__queue_is_vid +( +tif +, +rob +)); + +1661 if + `ci_t_n_u__th +( +ts +) ) + +1662 + `ci_t__th_ab +( +ts +); + +1669 #i +CI_CFG_PORT_STRIPING + + +1670 if +ts +-> +tags + & +CI_TCPT_FLAG_STRIPE + ) { + +1671 if + `ci__queue_n_emy +(& +ts +-> +rob +) ) { + +1672 if + `ci_t_check_ooo_re +( +tif +, +ts +) ) { + +1673 + `TCP_FORCE_ACK +( +ts +); + +1688 + `TCP_FORCE_ACK +( +ts +); + +1689  + `ci__queue_n_emy +(& +ts +-> +rob +); + +1691 + } +} + +1694 +ci_le +  + $ci_t_rx_div_to_cvq +( +ci_t_e +* +ts +, +ci_tif +* +tif +, + +1695 +ci_t_rx_pkt + * +rxp +) + +1697 +ci__pkt_fmt + * +pkt + = +rxp +->pkt; + +1698 +ci_t_hdr + * +t + = +rxp +->tcp; + +1699  +rc + = 0; + +1705 + `ci_as +( + `SEQ_LE +( +rxp +-> +q +, + `t_rcv_nxt +( +ts +))); + +1706 + `ci_as +( +pkt +-> +pf +. +t_rx +. +y_n +); + +1708 + `oo_offbuf_ +(& +pkt +-> +buf +, + `CI_TCP_PAYLOAD +( +t +),kt-> +pf +. +t_rx +. +y_n +); + +1711 + `oo_offbuf_adv +(& +pkt +-> +buf +, + `SEQ_SUB +( + `t_rcv_nxt +( +ts +), +rxp +-> +q +)); + +1712 + `ci_as +( + `oo_offbuf_n_emy +(& +pkt +-> +buf +)); + +1714 + `ci_t_rx_queue_ck +( +tif +, +ts +, +pkt +); + +1716 if! + `ci__queue_is_emy +(& +ts +-> +rob +) ) + +1717 +rc + = + `ci_t_rx_div_rob +( +tif +, +ts +); + +1719 + `ci_t_wake +( +tif +, +ts +, +CI_SB_FLAG_WAKE_RX +); + +1720  +rc +; + +1721 + } +} + +1724  + $ci_t_rx_div2 +( +ci_t_e +* +ts +, +ci_tif +* +tif +, + +1725 +ci_t_rx_pkt +* +rxp +) + +1728 + `ci_t_rx_div_to_cvq +( +ts +, +tif +, +rxp +); + +1729 + } +} + +1739  + $ci_t_rx_glue_rob +( +ci_tif +* +tif +, +ci_t_e +* +ts +, + +1740 +ci__pkt_fmt +* +pkt +) + +1742 +oo_pkt_p + +ϡ_id +; + +1743  +ϡ_q +; + +1744 +ci__pkt_fmt +* +xt_pkt +; + +1745 +oo_pkt_p + +xt_id +; + +1746 +ci__pkt_fmt +* +tmp +; + +1747 +oo_pkt_p + +tmp_id +; + +1749  +xt_id + = + `PKT_TCP_RX_ROB +( +pkt +)-> +xt_block +; + +1750 + `OO_PP_NOT_NULL +( +xt_id +); + +1751 +xt_id + = + `PKT_TCP_RX_ROB +( +pkt +)-> +xt_block +) { + +1752 +xt_pkt + = + `PKT_CHK +( +tif +, +xt_id +); + +1753 +ϡ_q + = + `PKT_TCP_RX_ROB +( +pkt +)-> +d_block_q +; + +1754 if + `SEQ_LT +( +ϡ_q +, + `CI_BSWAP_BE32 +( + `PKT_TCP_HDR +( +xt_pkt +)-> +t_q_be32 +)) ) + +1756 + `LOG_TV +( + `log +( +LPF + "ROB glue %dnd %d blocks", + +1757 + `OO_PKT_FMT +( +pkt +), + `OO_PP_FMT +( +xt_id +))); + +1760 if +ts +-> +tags + & +CI_TCPT_FLAG_SACK +) { + +1761  +i +; + +1762  +i + = 0; i < +CI_TCP_SACK_MAX_BLOCKS +; i++ ) + +1763 if + `OO_PP_EQ +( +xt_id +, +ts +-> +ϡ_ck +[ +i +]) ) + +1764 +ts +-> +ϡ_ck +[ +i +] = + `OO_PKT_P +( +pkt +); + +1770 +ϡ_id + = + `PKT_TCP_RX_ROB +( +pkt +)-> +d_block +; + +1771 + `ASSERT_VALID_PKT_ID +( +tif +, +ϡ_id +); + +1772 + `PKT_TCP_RX_ROB +( +pkt +)-> +xt_block + = PKT_TCP_RX_ROB( +xt_pkt +)->next_block; + +1774 if + `SEQ_LT +( +ϡ_q +, + `PKT_TCP_RX_ROB +( +xt_pkt +)-> +d_block_q +) ) { + +1776 + `PKT_TCP_RX_ROB +( +pkt +)-> +d_block + = PKT_TCP_RX_ROB( +xt_pkt +)->end_block; + +1777 + `PKT_TCP_RX_ROB +( +pkt +)-> +d_block_q + = PKT_TCP_RX_ROB( +xt_pkt +)->end_block_seq; + +1778 + `PKT_TCP_RX_ROB +( +pkt +)-> +num + +PKT_TCP_RX_ROB( +xt_pkt +)->num; + +1781  +tmp_id + = +xt_id +, +tmp + = +xt_pkt +; + +1782 + `OO_PP_NOT_NULL +( +tmp_id +&& + `SEQ_LE +( +tmp +-> +pf +. +t_rx +. +d_q +, +ϡ_q +); + +1783 +tmp_id + = +xt_id +, +tmp + = + `PKT_CHK +( +tif +,mp_id)) { + +1784 + `ci_as +! + `OO_PP_EQ +( +tmp_id +, + `PKT_TCP_RX_ROB +( +pkt +)-> +d_block +) ); + +1785 +xt_id + = +tmp +-> +xt +; + +1786 + `ci_tif_pkt_a_rx +( +tif +, +tmp +); + +1787 + `PKT_TCP_RX_ROB +( +pkt +)-> +num +--; + +1788 +ts +-> +rob +. +num +--; + +1790 + `PKT_CHK +( +tif +, +ϡ_id +)-> +xt + = +xt_id +; + +1791 if + `OO_PP_IS_NULL +( +xt_id +) ) + +1792 +ts +-> +rob +. + + = + `OO_PKT_P +( +pkt +); + +1795 + `PKT +( +tif +, +ϡ_id +)-> +xt + = + `PKT_TCP_RX_ROB +( +xt_pkt +)-> +xt_block +; + +1796 if + `OO_PP_IS_NULL +( + `PKT +( +tif +, +ϡ_id +)-> +xt +) ) + +1797 +ts +-> +rob +. + + = +ϡ_id +; + +1799 +ϡ_id + = + `PKT_TCP_RX_ROB +( +xt_pkt +)-> +xt_block +; + +1800  +tmp_id + = +xt_id +; + +1801 + `OO_PP_NOT_NULL +( +tmp_id +&& ! + `OO_PP_EQ +mp_id, +ϡ_id +); + +1802 +tmp_id + = +xt_id + ) { + +1803 + `ci_as +! + `OO_PP_EQ +( +tmp_id +, + `PKT_TCP_RX_ROB +( +pkt +)-> +d_block +) ); + +1804 +tmp + = + `PKT_CHK +( +tif +, +tmp_id +); + +1805 +xt_id + = +tmp +-> +xt +; + +1806 + `ci_tif_pkt_a_rx +( +tif +, +tmp +); + +1807 + `PKT_TCP_RX_ROB +( +pkt +)-> +num +--; + +1808 +ts +-> +rob +. +num +--; + +1813 + } +} + +1816 #i +CI_CFG_PORT_STRIPING + + +1822  + $ci_t_rx_ooo_re +( +ci_tif +* +tif +, +ci_t_e +* +ts +, + +1823 +ci_t_rx_pkt +* +rxp +) + +1825 +ci__pkt_queue +* +rob + = & +ts +->rob; + +1826 +ci__pkt_fmt +* +block_pkt + = + `PKT_CHK +( +tif +, +rob +-> +hd +); + +1831  +g_pt_sw +; + +1836  +tx_pt_sw + = + `ci_ts_pt_sw +( +rxp +-> +q +, +ts +); + +1842  +g_t_qno + = + `t_rcv_nxt +( +ts +); + +1844 + `LOG_TV +( + `log +( +LNT_FMT + "OOOt_sw=%d s=%08x-%08x", + `LNT_PRI_ARGS +( +tif +, +ts +), + +1845 +tx_pt_sw +, +rxp +-> +q +,xp-> +pkt +-> +pf +. +t_rx +. +d_q +)); + +1851 if + `SEQ_LE +( +rxp +-> +q +, +g_t_qno +) ) { + +1855 + `LOG_TV +( + `log +( +LNT_FMT + "OOOerminatedt gap %08x-%08x", + +1856 + `LNT_PRI_ARGS +( +tif +, +ts +), +g_t_qno +, + +1857 + `CI_BSWAP_BE32 +( + `PKT_TCP_HDR +( +block_pkt +)-> +t_q_be32 +))); + +1861 +g_pt_sw + = + `ci_ts_pt_sw +( +g_t_qno +, +ts +); + +1862 + `LOG_TV +( + `log +( +LNT_FMT + "OOO comparingort %d gap %08x-%08x", + +1863 + `LNT_PRI_ARGS +( +tif +, +ts +), +g_pt_sw +, +g_t_qno +, + +1864 + `CI_BSWAP_BE32 +( + `PKT_TCP_HDR +( +block_pkt +)-> +t_q_be32 +))); + +1866 if +g_pt_sw + = +tx_pt_sw + ) { + +1868 + `LOG_TV +( + `log +( +LNT_FMT + "OOOequesting dupack for %08x", + +1869 + `LNT_PRI_ARGS +( +tif +, +ts +), + `t_rcv_nxt +(ts))); + +1874 if + `PKT_TCP_RX_ROB +( +block_pkt +)-> +xt_block + < 0 ) ; + +1876 +g_t_qno + = + `PKT_TCP_RX_ROB +( +block_pkt +)-> +d_block_q +; + +1877 +block_pkt + = + `PKT_CHK +( +tif +, + `PKT_TCP_RX_ROB +(block_pkt)-> +xt_block +); + +1882 + } +} + +1890  + $ci_t_rx_queue_ooo +( +ci_tif +* +tif +, +ci_t_e +* +ts +, + +1891 +ci_t_rx_pkt +* +rxp +) + +1893 +ci__pkt_fmt +* +pkt + = +rxp +->pkt; + +1894 +ci__pkt_queue +* +rob + = & +ts +->rob; + +1896 +oo_pkt_p + +ev_id +; + +1897 +ci__pkt_fmt +* +ev_pkt + = +NULL +; + +1898 +oo_pkt_p + +block_id +; + +1899 +ci__pkt_fmt +* +block_pkt + = +NULL +; + +1901 + `CITP_STATS_NETIF_INC +( +tif +, +rx_out_of_d +); + +1902 + `CI_IP_SOCK_STATS_INC_OOO + +ts + ); + +1903 ++ +ts +-> +s +. +rx_ooo_pkts +; + +1904 + `LOG_TO +( + `log +( +LNT_FMT + "ENQ-OOO " +TCP_RCV_FMT +" s=%08x", + +1905 + `LNT_PRI_ARGS +( +tif +, +ts +), + `TCP_RCV_PRI_ARG +s), +rxp +-> +q +)); + +1907 + `ci_as +( + `OO_SP_IS_NULL +( +ts +-> +lol_ +)); + +1908 + `ci_as +( + `ci__queue_is_vid +( +tif +, +rob +)); + +1909  +ev_id + = +OO_PP_NULL +, +block_id + = +rob +-> +hd +; + +1910 + `OO_PP_NOT_NULL +( +block_id +) && + +1911 ( +block_pkt + = + `PKT_CHK +( +tif +, +block_id +), + +1912 + `SEQ_LT +( + `CI_BSWAP_BE32 +( + `PKT_TCP_HDR +( +block_pkt +)-> +t_q_be32 +), + +1913 +rxp +-> +q +)); + +1914 +ev_id + = +block_id +, +ev_pkt + = +block_pkt +, + +1915 +block_id + = + `PKT_TCP_RX_ROB +( +block_pkt +)-> +xt_block + ) { + +1917 + `LOG_TV +( + `log +( +LNT_FMT + "OOO check: from %08x-%08xo %08x-%08x", + +1918 + `LNT_PRI_ARGS +( +tif +, +ts +), + +1919 + `OO_PP_NOT_NULL +( +ev_id +) ? + +1920 + `CI_BSWAP_BE32 +( + `PKT_TCP_HDR +( +ev_pkt +)-> +t_q_be32 +) : 0, + +1921 + `OO_PP_NOT_NULL +( +ev_id +) ? + +1922 + `PKT_TCP_RX_ROB +( +ev_pkt +)-> +d_block_q + : 0, + +1923 + `OO_PP_NOT_NULL +( +block_id +) ? + +1924 + `CI_BSWAP_BE32 +( + `PKT_TCP_HDR +( +block_pkt +)-> +t_q_be32 +) : 0, + +1925 + `OO_PP_NOT_NULL +( +block_id +) ? + +1926 + `PKT_TCP_RX_ROB +( +block_pkt +)-> +d_block_q + : 0)); + +1930 if( + `OO_PP_NOT_NULL +( +ev_id +) && + +1931 + `SEQ_LE +( +pkt +-> +pf +. +t_rx +. +d_q +, + +1932 + `PKT_TCP_RX_ROB +( +ev_pkt +)-> +d_block_q +)) || + +1933 ( + `OO_PP_NOT_NULL +( +block_id +) && + +1934 + `SEQ_EQ +( +rxp +-> +q +, + +1935 + `CI_BSWAP_BE32 +( + `PKT_TCP_HDR +( +block_pkt +)-> +t_q_be32 +)) && + +1936 + `SEQ_LE +( +pkt +-> +pf +. +t_rx +. +d_q +, + +1937 + `PKT_TCP_RX_ROB +( +block_pkt +)-> +d_block_q +)) ) { + +1938 + `LOG_TL +( + `log +( +LNT_FMT + "OOO DROP duplicate %08x-%08x", + +1939 + `LNT_PRI_ARGS +( +tif +, +ts +), +rxp +-> +q +, + +1940 + `PKT_TCP_RX_ROB +( +pkt +)-> +d_block_q +)); + +1941 if( +ts +-> +tags + & +CI_TCPT_FLAG_SACK +) ) { + +1942 +ts +-> +dck_t + = +rxp +-> +q +; + +1943 +ts +-> +dck_d + = +pkt +-> +pf +. +t_rx +. +d_q +; + +1944 +ts +-> +dck_block + = +ev_id +; + +1946 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +1947 + `ci_as +( + `ci__queue_is_vid +( +tif +, +rob +)); + +1952 + `LOG_TV +( + `log +( +LNT_FMT + "OOO %d bw%dnd %d", + `LNT_PRI_ARGS +( +tif +, +ts +), + +1953 + `OO_PKT_FMT +( +pkt +), + `OO_PP_FMT +( +ev_id +), OO_PP_FMT( +block_id +))); + +1955 if +ts +-> +tags + & +CI_TCPT_FLAG_SACK + ) { + +1956 +ts +-> +ϡ_ck +[0] = + `OO_PKT_P +( +pkt +); + +1958 +pkt +-> +xt + = +block_id +; + +1960 + `PKT_TCP_RX_ROB +( +pkt +)-> +xt_block + = +block_id +; + +1961 + `PKT_TCP_RX_ROB +( +pkt +)-> +d_block + = + `OO_PKT_P +(pkt); + +1962 + `PKT_TCP_RX_ROB +( +pkt +)-> +d_block_q + =kt-> +pf +. +t_rx +. +d_q +; + +1963 + `PKT_TCP_RX_ROB +( +pkt +)-> +num + = 1; + +1965 +rob +-> +num +++; + +1967 if + `OO_PP_IS_NULL +( +block_id +) ) + +1968 +rob +-> + + = + `OO_PKT_P +( +pkt +); + +1974 if + `OO_PP_IS_NULL +( +ev_id +) ) { + +1975 +rob +-> +hd + = + `OO_PKT_P +( +pkt +); + +1976 + `ci_t_rx_glue_rob +( +tif +, +ts +, +pkt +); + +1978 + `ci_t_rx_glue_rob +( +tif +, +ts +, +pkt +); + +1979 + `PKT_CHK +( +tif +, + `PKT_TCP_RX_ROB +( +ev_pkt +)-> +d_block +)-> +xt + = + `OO_PKT_P +( +pkt +); + +1980 + `PKT_TCP_RX_ROB +( +ev_pkt +)-> +xt_block + = + `OO_PKT_P +( +pkt +); + +1981 + `ci_t_rx_glue_rob +( +tif +, +ts +, +ev_pkt +); + +1984 + `CHECK_TS +( +tif +, +ts +); + +1986 + `ci_t__th_dib +( +ts +); + +1988 #i +CI_CFG_PORT_STRIPING + + +1989 if +ts +-> +tags + & +CI_TCPT_FLAG_STRIPE + ) + +1990  + `ci_t_rx_ooo_re +( +tif +, +ts +, +rxp +); + +1994 + } +} + +2000 +ci_nole +  + $mac_upde_if_mac_mch +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +2001 +ci__pkt_fmt +* +pkt +) + +2003 if + `memcmp +( + `ci__che_h_dho +(& +ts +-> +s +. +pkt +), + `oo_h_sho +(pkt), + +2004 +ETH_ALEN +) == 0 ) + +2005 + `ci__che_mac_upde +( +ni +, & +ts +-> +s +. +pkt +, 1 ); + +2006 + } +} + +2009 +ci_nole +  + $mac_upde_if_ack_w__mac_mch +( +ci_tif +* +ni +, + +2010 +ci_t_e +* +ts +, + +2011 cڡ +ci_t_rx_pkt +* +rxp +) + +2013 if + `SEQ_GT +( +rxp +-> +ack +, + `t_d_u +( +ts +)) || + +2014 + `memcmp +( + `ci__che_h_dho +(& +ts +-> +s +. +pkt +), + +2015 + `oo_h_sho +( +rxp +-> +pkt +), +ETH_ALEN +) == 0 ) + +2016 + `ci__che_mac_upde +( +ni +, & +ts +-> +s +. +pkt +, 1 ); + +2017 + } +} + +2020  + $hd_rx_li_r +( +ci_tif +* +ni +, +ci_t_sock_li +* +s +, + +2021 +ci_t_rx_pkt +* +rxp +) + +2023 +ci__pkt_fmt +* +pkt + = +rxp +->pkt; + +2024 #ide +NDEBUG + + +2025 +ci_4_hdr +* + + = + `oo__hdr +( +pkt +); + +2027 +ci_t_hdr +* +t + = +rxp +->tcp; + +2028 +ci_t_e_syecv +* +t +; + +2041 if +pkt +-> +pf +. +t_rx +. +y_n + ) { + +2042 + `LOG_U +( + `log +( +LPF + "%d RST with data (%d bytes)", + +2043 + `S_FMT +( +s +), +pkt +-> +pf +. +t_rx +. +y_n +)); + +2044 + `LOG_DU +( + `ci_hex_dump +( +ci_log_ +, + `PKT_START +( +pkt +), + +2045 + `oo_h_hdr_size +( +pkt +) + + +2046 + `CI_BSWAP_BE16 +( + +-> +_t_n_be16 +), 0)); + +2049 if( +t +-> +t_ags + & ~( +CI_TCP_FLAG_RST +| +CI_TCP_FLAG_ACK +) + +2050 & +CI_TCP_FLAG_MASK +) ) + +2051 + `LOG_U +( + `log +( +LPF + "%d RST wh uxed fg(%x)", + `S_FMT +( +s +), + +2052 ( +t +-> +t_ags +)); + +2058 +t + = + `ci_t_liq_lookup +( +ni +, +s +, +rxp +); + +2060 if +t + ) { + +2061  +t_rcv_wnd + = + `ci_t_rcvbuf2wdow +( +s +-> +s +. +so +. +rcvbuf +, + +2062 +t +-> +amss +,-> +rcv_ws +); + +2063 if + `SEQ_LE +( +t +-> +rcv_nxt +, +rxp +-> +q +) && + +2064 + `SEQ_LT +( +rxp +-> +q +, +t +-> +rcv_nxt + + +t_rcv_wnd +) ) { + +2065 + `ci_t_liq_move +( +ni +, +s +, +t +); + +2066 + `ci_t_syecv_ +( +ni +, +t +); + +2067 + `CITP_STATS_NETIF_INC +( +ni +, +r_cv_syecv +); + +2068 + `LOG_TC +( + `log +( +LPF + "%d SYNRECV %s:%d->%s:%d RST", + +2069 + `S_FMT +( +s +), + +2070 + `_addr_r +( + +-> +_ddr_be32 +), + +2071 ( + `CI_BSWAP_BE16 +( +t +-> +t_sour_be16 +), + +2072 + `_addr_r +( + +-> +_daddr_be32 +), + +2073 ( + `CI_BSWAP_BE16 +( +t +-> +t_de_be16 +))); + +2076 + `LOG_U +( + `log +( +LPF + "%d SYNRECV %s:%d->%s:%d RST ucab", + `S_FMT +( +s +), + +2077 + `_addr_r +( + +-> +_ddr_be32 +), + +2078 ( + `CI_BSWAP_BE16 +( +t +-> +t_sour_be16 +), + +2079 + `_addr_r +( + +-> +_daddr_be32 +), + +2080 ( + `CI_BSWAP_BE16 +( +t +-> +t_de_be16 +))); + +2081 + `CITP_STATS_NETIF_INC +( +ni +, +r_cv_ucab +); + +2089 + `LOG_TR +( + `log +( +LPF + "%d LISTEN %s:%d->%s:%d RST ignored (no SYNRECV)", + +2090 + `S_FMT +( +s +), + `_addr_r +( + +-> +_ddr_be32 +), + +2091 ( + `CI_BSWAP_BE16 +( +t +-> +t_sour_be16 +), + +2092 + `_addr_r +( + +-> +_daddr_be32 +), + +2093 ( + `CI_BSWAP_BE16 +( +t +-> +t_de_be16 +))); + +2096 + `ci_tif_pkt_a_rx +( +ni +, +pkt +); + +2097 + } +} + +2099  + $hd_rx_r +( +ci_t_e +* +ts +, +ci_tif +* +tif +, + +2100 +ci_t_rx_pkt +* +rxp +) + +2108 +ci__pkt_fmt +* +pkt + = +rxp +->pkt; + +2109 +ci_t_hdr +* +t + = +rxp +->tcp; + +2111 + `LOG_TC +( + `log +( +FNTS_FMT + "RST " +TCP_RCV_FMT +" PKT seq=%08xck=%08x", + +2112 + `FNTS_PRI_ARGS +( +tif +, +ts +), + `TCP_RCV_PRI_ARG +(ts), + +2113 +rxp +-> +q +,xp-> +ack +)); + +2119 if +pkt +-> +pf +. +t_rx +. +y_n + ) { + +2120 + `LOG_U +( + `log +( +LPF + "%d RST with data (%d bytes)", + +2121 + `S_FMT +( +ts +), +pkt +-> +pf +. +t_rx +. +y_n +)); + +2122 + `LOG_DU +( + `ci_hex_dump +( +ci_log_ +, + `PKT_START +( +pkt +), + +2123 + `oo_h_hdr_size +( +pkt +) + + +2124 + `CI_BSWAP_BE16 +( + `oo__hdr +( +pkt +)-> +_t_n_be16 +), 0)); + +2127 if( +t +-> +t_ags + & ~( +CI_TCP_FLAG_RST +| +CI_TCP_FLAG_ACK +) + +2128 & +CI_TCP_FLAG_MASK +) ) + +2129 + `LOG_U +( + `log +( +LPF + "%d RST wh uxed fg(%x)", + `S_FMT +( +ts +), + +2130 ( +t +-> +t_ags +)); + +2132 if +ts +-> +s +. +b +. +e + = +CI_TCP_SYN_SENT + ) { + +2139 if( +t +-> +t_ags + & +CI_TCP_FLAG_ACK +) && + +2140 + `SEQ_LE +( + `t_d_u +( +ts +), +rxp +-> +ack +) && + +2141 + `SEQ_LE +( +rxp +-> +ack +, + `t_d_nxt +( +ts +)) ) { + +2142 + `LOG_TC +( + `log +( +LPF + "%d SYN-SENT->CLOSED (RESET)", + `S_FMT +( +ts +))); + +2143 + `ci_t_dr +( +tif +, +ts +, +ECONNREFUSED +); + +2146  +ucab_r +; + +2148  +pkt_out +; + +2159 if + `ci_t_q_obably_ucab +( + `t_rcv_nxt +( +ts +), + +2160 + `t_rcv_wnd_right_edge_ +( +ts +), + +2161 +rxp +-> +q +,xp->seq) ) { + +2162  +ucab_r +; + +2165 #i +CI_CFG_STATS_NETIF + + +2166 if +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_TCP_IN_ACCEPTQ + ) + +2167 + `CITP_STATS_NETIF_INC +( +tif +, +r_cv_acq +); + +2168 if + `t_rcv_u +( +ts +) ) + +2169 + `CITP_STATS_NETIF_INC +( +tif +, +r_cv_has_cvq +); + +2170 if! + `SEQ_EQ +( + `t_q_nxt +( +ts +), + `t_d_nxt +(ts)) ) + +2171 + `CITP_STATS_NETIF_INC +( +tif +, +r_cv_has_ndq +); + +2172 if! + `SEQ_EQ +( + `t_d_nxt +( +ts +), + `t_d_u +(ts)) ) + +2173 + `CITP_STATS_NETIF_INC +( +tif +, +r_cv_has_uck +); + +2177  +ts +-> +s +. +b +. +e + ) { + +2178  +CI_TCP_ESTABLISHED +: + +2179  +CI_TCP_FIN_WAIT1 +: + +2180  +CI_TCP_FIN_WAIT2 +: + +2181  +CI_TCP_CLOSING +: + +2182  +CI_TCP_LAST_ACK +: + +2183 + `LOG_TC +( + `log +( +LPF +"%d %s->CLOSED (RESET)", + `S_FMT +( +ts +), + `e_r +(ts))); + +2184 + `ci_t_dr +( +tif +, +ts +, +ECONNRESET +); + +2185  +pkt_out +; + +2186  +CI_TCP_CLOSE_WAIT +: + +2187 + `ci_t_dr +( +tif +, +ts +, +EPIPE +); + +2188  +pkt_out +; + +2189  +CI_TCP_TIME_WAIT +: + +2190  +CI_TCP_CLOSED +: + +2191  +ucab_r +; + +2194 + `log +( +LPF +"Uxed vus->s.b.%d", +ts +-> +s +. +b +. +e +); + +2195 + `ci_as +(0); + +2198 +ucab_r +: + +2199 + `LOG_U +( + `log +( +FNTS_FMT + "UNACCEPTABLE RST " +TCP_RCV_FMT +" PKT seq=%08xck=%08x", + +2200 + `FNTS_PRI_ARGS +( +tif +, +ts +), + `TCP_RCV_PRI_ARG +(ts), + +2201 +rxp +-> +q +,xp-> +ack +)); + +2202 + `CITP_STATS_NETIF_INC +( +tif +, +r_cv_ucab +); + +2204 +pkt_out +: + +2205 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +2207 + } +} + +2214  + $hd_rx_syecv_ack +( +ci_tif +* +tif +, +ci_t_sock_li +* +s +, + +2215 +ci_t_e_syecv +* +t +, + +2216 +ci_t_rx_pkt +* +rxp +, + +2217 +ci__ched_hdrs +* +che +) + +2219 +ci__pkt_fmt +* +pkt + = +rxp +->pkt; + +2220 +ci_t_hdr +* +t + = +rxp +->tcp; + +2221  +t_rcv_wnd + = + `ci_t_rcvbuf2wdow +( +s +-> +s +. +so +. +rcvbuf +, +t +-> +amss +, + +2222 +t +-> +rcv_ws +); + +2223 +ci_t_e +* +ts +; + +2225 + `ci_as +( +tif +); + +2226 + `ci_as +( +s +); + +2227 + `ci_as +( +s +-> +s +. +b +. +e + = +CI_TCP_LISTEN +); + +2228 + `ci_as +( +t +); + +2229 + `ASSERT_VALID_PKT +( +tif +, +pkt +); + +2231 + `LOG_TC +( + `log +( +LNT_FMT + "SYN-RECV %s:%d->%s:%d on socket %s:%d", + +2232 + `LNT_PRI_ARGS +( +tif +, +s +), + +2233 + `_addr_r +( + `oo__hdr +( +pkt +)-> +_ddr_be32 +), + +2234 ( + `CI_BSWAP_BE16 +( +t +-> +t_sour_be16 +), + +2235 + `_addr_r +( + `oo__hdr +( +pkt +)-> +_daddr_be32 +), + +2236 ( + `CI_BSWAP_BE16 +( +t +-> +t_de_be16 +), + +2237 + `_addr_r +( + `t_ddr_be32 +( +s +)), + +2238 ( + `CI_BSWAP_BE16 +( + `t_t_be16 +( +s +)))); + +2253 if +t +-> +t_ags + & +CI_TCP_FLAG_SYN + ) { + +2254 if! + `SEQ_EQ +( +rxp +-> +q ++1, +t +-> +rcv_nxt +) ) { + +2255 + `LOG_U +( + `log +( +LNT_FMT + "SYNRECVon-dup SYN willesetkt=%08x-%08x" + +2256 "cv=%08x-%08x", + `LNT_PRI_ARGS +( +tif +, +s +), + +2257 +rxp +-> +q +, +pkt +-> +pf +. +t_rx +. +d_q +, + +2258 +t +-> +rcv_nxt +,->rcv_nx+ +t_rcv_wnd +)); + +2260 + `CITP_STATS_NETIF_INC +( +tif +, +r__syecv_bad_syn +); + +2261  +t_out +; + +2263 + `LOG_TV +( + `log +( +LNT_FMT + "SYNRECV duSYN", + `LNT_PRI_ARGS +( +tif +, +s +))); + +2265  +sm_syck +; + +2269 if + `ci_t_q_obably_ucab +( +t +-> +rcv_nxt +, + +2270 +t_rcv_wnd ++ +t +-> +rcv_nxt +, + +2271 +rxp +-> +q +, + +2272 +pkt +-> +pf +. +t_rx +. +d_q +) ) { + +2273 + `LOG_U +( + `log +( +LNT_FMT + "SYNRECV unacceptable SEQkt=%08x-%08x " + +2274 "[" +CI_TCP_FLAGS_FMT +"]cv=%08x-%08x", + `LNT_PRI_ARGS +( +tif +, +s +), + +2275 +rxp +-> +q +, +pkt +-> +pf +. +t_rx +. +d_q +, + +2276 + `CI_TCP_HDR_FLAGS_PRI_ARG +( +t +), + +2277 +t +-> +rcv_nxt +,->rcv_nx+ +t_rcv_wnd +)); + +2279  +sm_syck +; + +2283 + `ci_as +(~ +t +-> +t_ags + & +CI_TCP_FLAG_RST +); + +2286 if +t +-> +tts +. +ags + & +CI_TCPT_FLAG_TSO + ) { + +2287 if(~ +rxp +-> +ags + & +CI_TCPT_FLAG_TSO +) || + +2288 + `ci_t_ws_check +( +tif +, +rxp +-> +timeamp +, + +2289 +t +-> +time +,-> +tr +) ) { + +2290 + `LOG_U +( + `log +( +LNT_FMT + "SYNRECV PAWS failedkt=%08x-%08x " + +2291 "rcv=%08x-%08x", + `LNT_PRI_ARGS +( +tif +, +s +), + +2292 +rxp +-> +q +, +pkt +-> +pf +. +t_rx +. +d_q +, + +2293 +t +-> +rcv_nxt +,->rcv_nx+ +t_rcv_wnd +)); + +2294  +sm_syck +; + +2297 +t +-> +tr + = +rxp +-> +timeamp +; + +2301 if~ +t +-> +t_ags + & +CI_TCP_FLAG_ACK + ) { + +2302 + `LOG_U +( + `log +( +LNT_FMT + "SYNRECVon ACK", + +2303 + `LNT_PRI_ARGS +( +tif +, +s +))); + +2305  +pkt_out +; + +2309 if! + `SEQ_EQ +( +t +-> +d_i ++1, +rxp +-> +ack +) ) { + +2310 + `LOG_U +( + `log +( +LNT_FMT + "SYNRECV bad ACK", + +2311 + `LNT_PRI_ARGS +( +tif +, +s +))); + +2313 + `CITP_STATS_NETIF_INC +( +tif +, +r__syecv_bad_ack +); + +2314  +t_out +; + +2318 +t +-> +s + | +CI_FLAG_TSR_RETRIES_ACKED +; + +2319 if( +s +-> +c +. +t_der_ac + ! +OO_TCP_DEFER_ACCEPT_OFF + ) && + +2320 + `SEQ_EQ +( +rxp +-> +q +, +pkt +-> +pf +. +t_rx +. +d_q +) && + +2321 ( +t +-> +s + & +CI_FLAG_TSR_RETRIES_MASK +< +s +-> +c +. +t_der_ac + ) { + +2322 + `CITP_STATS_TCP_LISTEN +(++ +tif +-> +e +-> +s +. +acs_deed +); + +2323 + `ci_tif_pkt_a +( +tif +, +pkt +); + +2325 if + `ci_t_liq_y_ome +( +tif +, +s +, +t +, +che +, & +ts +) < 0 ) { + +2326 + `CI_TCP_EXT_STATS_INC_LISTEN_DROPS + +tif + ); + +2327 + `LOG_U +( + `log +( +LNT_FMT + "SYNRECV failedoromoteocceptq, seq=%08x", + +2328 + `LNT_PRI_ARGS +( +tif +, +s +), +rxp +-> +q +)); + +2329 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +2333 +pkt +-> +pf +. +t_rx +. +y_n + + + `CI_TCP_HDR_LEN +( +t +- +ts +-> +comg_t_hdr_n +; + +2336 if +ts +-> +tags + & +CI_TCPT_FLAG_TSO + ) + +2337 + `ci_t_upde_t +( +tif +, +ts +, + +2338 + `ci_t_time_now +( +tif +- +rxp +-> +timeamp_echo +); + +2339 if~ +ts +-> +tags + & +CI_TCPT_FLAG_SYNCOOKIE + ) + +2340 + `ci_t_upde_t +( +tif +, +ts +, + `ci_t_time_now +ґif-s-> +timed_ts +); + +2344 if! + `SEQ_EQ +( +rxp +-> +q +, +pkt +-> +pf +. +t_rx +. +d_q +) ) + +2345 + `TCP_FORCE_ACK +( +ts +); + +2347 + `hd_rx_ow +( +ts +, +tif +, +rxp +); + +2351 +pkt_out +: + +2352 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +2354 +sm_syck +: + +2355 +pkt + = + `ci_tif_pkt_rx_to_tx +( +tif +,kt); + +2356 if +pkt + ! +NULL + ) + +2357 + `ci_t_syecv_nd +( +tif +, +s +, +t +, +pkt +, + +2358 +CI_TCP_FLAG_SYN + | +CI_TCP_FLAG_ACK +, +NULL +); + +2360 +t_out +: + +2362 + `ci_t_y_wh_r +( +tif +, +rxp +); + +2364 + } +} + +2377  + $hd_rx_li +( +ci_tif +* +tif +, +ci_t_sock_li +* +s +, + +2378 +ci_t_rx_pkt +* +rxp +,  +ady_rd +) + +2380 +ci__pkt_fmt +* +pkt + = +rxp +->pkt; + +2381 +ci__pkt_fmt +* +tx_pkt +; + +2382 +ci_4_hdr +* + + = + `oo__hdr +( +pkt +); + +2383 +ci_t_hdr +* +t + = +rxp +->tcp; + +2384 +ci_t_e_syecv +* +t +; + +2385 +ci__ched_hdrs + +che +; + +2386 +oo_ + +lol_ + = +OO_SP_NULL +; + +2387  +do_syncook + = 0; + +2389 + `ci_as +( +s +); + +2390 + `ci_as +( +s +-> +s +. +b +. +e + = +CI_TCP_LISTEN +); + +2392 if + `NI_OPTS +( +tif +). +t_rx_checks + ) + +2393 + `ci_t_li_rx_checks +( +tif +, +s +, +pkt +); + +2395 + `ci_tif_put__po_pl +( +tif +, & +s +-> +s +. +b +); + +2397 if +pkt +-> +tf_i + = +OO_INTF_I_LOOPBACK + ) { + +2398 +lol_ + = +pkt +-> +pf +. +t_rx +. +lo +. +tx_sock +; + +2399 + `ci_as_equ +( +pkt +-> +pf +. +t_rx +. +lo +. +rx_sock +, +s +-> +s +. +b +. +bufid +); + +2401 +pkt +-> +pf +. +t_rx +. +wdow + = + `CI_BSWAP_BE16 +( +t +-> +t_wdow_be16 +); + +2402 +pkt +-> +pf +. +t_rx +. +y_n + - + `CI_TCP_HDR_LEN +( +t +); + +2403 +pkt +-> +pf +. +t_rx +. +d_q + = +rxp +-> +q + +kt->pf.t_rx. +y_n +; + +2404 +pkt +-> +pf +. +t_rx +. +d_q + += + +2405 ( +t +-> +t_ags + & +CI_TCP_FLAG_SYN +>> +CI_TCP_FLAG_SYN_BIT +; + +2406 +pkt +-> +pf +. +t_rx +. +d_q + += + +2407 ( +t +-> +t_ags + & +CI_TCP_FLAG_FIN +>> +CI_TCP_FLAG_FIN_BIT +; + +2412 + `ci_as_ge +( +pkt +-> +pf +. +t_rx +. +y_n +, 0); + +2414 if + `CI_TCP_HDR_LEN +( +t +< ( +ci_t_hdr +) ) { + +2415 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +2418 if + `CI_UNLIKELY +( +t +-> +t_ags + & +CI_TCP_FLAG_RST +) ) { + +2419 + `hd_rx_li_r +( +tif +, +s +, +rxp +); + +2423 i(! +ady_rd + + `ci_t_r_tis +( +tif +, +rxp +, +NULL +); + +2426 + `ci_as +(~ +t +-> +t_ags + & +CI_TCP_FLAG_RST +); + +2428 if( +t +-> +t_ags + & +CI_TCP_FLAG_MASK += +CI_TCP_FLAG_SYN + ) { + +2434 if +s +-> +n_liq_w + > + `CI_MIN +ls-> +acq_max +, + +2435 + `ci_t_liq_max +( +tif +)) / 4 && + +2436 ( + `ci_t_acq_n +( +s +>s-> +acq_max + || + +2437 ( + `OO_SP_IS_NULL +( +tif +-> +e +-> +_s_hd +) && + +2438 +tif +-> +e +-> +n__bufs + =tif->e-> +max__bufs + + +2440 + `CITP_STATS_NETIF +(++ +tif +-> +e +-> +s +. +syn_dr_busy +); + +2441  +pkt_out +; + +2445 if( +s +-> +n_liq + > + `ci_t_liq_max +( +tif +)) | + +2446 ! + `ci_ni_aux_n_loc +( +tif +) ) ) { + +2449 if + `NI_OPTS +( +tif +). +t_syncooks + ) + +2450 +do_syncook + = 1; + +2460 if + `ci_t_acq_n +( +s +>s-> +acq_max + ) + +2461 + `ci_t_liq_dr_de +( +tif +, +s +); + +2465 if +s +-> +n_liq + > + `ci_t_liq_max +( +tif +) ) + +2466 + `CITP_STATS_TCP_LISTEN +(++ +s +-> +s +. +n_liq_ovow +); + +2468 + `CITP_STATS_TCP_LISTEN +(++ +s +-> +s +. +n_liq_no_syecv +); + +2469 if! +do_syncook + ) + +2470  +pkt_out +; + +2483 + `ci__che_ +(& +che +); + +2484 +che +. + +. +_daddr_be32 + = ip-> +_ddr_be32 +; + +2485 +che +. +dpt_be16 + = +t +-> +t_sour_be16 +; + +2486 if + `CI_UNLIKELY + +pkt +-> +tf_i + = +OO_INTF_I_LOOPBACK + ) ) { + +2490 +che +. +us + = +rc_loou +; + +2491 +che +. +p +. +ty + = +CICP_LLAP_TYPE_SFC +; + +2492 +che +. +h_offt + = 4; + +2493 +che +. +tf_i + = +OO_INTF_I_LOOPBACK +; + +2494 +che +. +mtu + = +tif +-> +e +-> +max_mss +; + +2495 + `ci_mac_t_moly_vid +( + `CICP_USER_MIBS +( + `CICP_HANDLE +( +tif +)). +mac_ub +, + +2496 & +che +. +mac_gry +); + +2498 if + `NI_OPTS +( +tif +). +t_li_s_back + ) { + +2499 +ci_ifid_t + +ifdex +; + +2500  +rc +; + +2502 if +pkt +-> +vn + ) { + +2503 +che +. +p +. +ty + = +CICP_LLAP_TYPE_VLAN +; + +2504 +che +. +p +. +vn_id + = +pkt +-> +vn +; + +2506 +che +. +p +. +ty + = +CICP_LLAP_TYPE_SFC +; + +2507 +che +. +p +. +vn_id + = 0; + +2509 + `ci_che_vn_t +(& +che +); + +2510 +che +. +tf_i + = +pkt +->intf_i; + +2511 +rc + = + `ci_έ_fd +( + `CICP_HANDLE +( +tif +), & +ifdex +, + +2512 +tif +-> +e +-> +tf_i_to_hwpt +[ +che +. +tf_i +], + +2513 +che +. +p +. +vn_id +); + +2514 if +rc + == 0 ) { + +2515 +rc + = + `ci_έ_ve +( + `CICP_HANDLE +( +tif +), + +2516 +ifdex +, & +che +. +mtu +, + +2517 +NULL +, NULL, NULL, NULL, NULL); + +2519 if +rc + == 0 ) { + +2520 + `ci_as +( +che +. +mtu +); + +2521 +che +. +_ddr_be32 + = + +2522 +che +. + +. +_ddr_be32 + = ip-> +_daddr_be32 +; + +2523 + `CI_MAC_ADDR_SET +( + `ci__che_h_dho +(& +che +), + +2524 + `oo_h_sho +( +pkt +)); + +2525 + `CI_MAC_ADDR_SET +( + `ci__che_h_sho +(& +che +), + +2526 + `oo_h_dho +( +pkt +)); + +2527 + `ci_mac_t_moly_vid +( + `CICP_USER_MIBS +( + `CICP_HANDLE +( +tif +)). +mac_ub +, + +2528 & +che +. +mac_gry +); + +2529 +che +. +us + = +rc_sucss +; + +2532 +che +. +us + = +rc_ou +; + +2537  +oo_sock_ + +sock_ + = +s +-> +s +. + +; + +2538 +sock_ +. +_ddr_be32 + = + +-> +_daddr_be32 +; + +2539 +sock_ +. +t_be16 + = +t +-> +t_de_be16 +; + +2540 + `ci_ur_ve +( +tif +, & +che +, & +sock_ +); + +2543  +che +. +us + ) { + +2544  +rc_sucss +: + +2545  +rc_nomac +: + +2547  +rc_loou +: + +2548 +che +. +ags + | +CI_IP_CACHE_IS_LOCALROUTE +; + +2549 +che +. +_ddr_be32 + = ipche. + +._ddr_be32 = ip-> +_daddr_be32 +; + +2552 + `LOG_U +( + `ci_log +("%s:oeturnouteo %sxists, droppingistenesponsekt", + +2553 +__FUNCTION__ +, + `_addr_r +( + +-> +_ddr_be32 +))); + +2554 + `LOG_DU +( + `ci_hex_dump +( +ci_log_ +, + `PKT_START +( +pkt +), + +2555 + `_pkt_dump_n +( + `CI_BSWAP_BE16 +( + +-> +_t_n_be16 +)), + +2557 + `CITP_STATS_NETIF +(++ +tif +-> +e +-> +s +. +syn_dr_no_tu_rou +); + +2558  +pkt_out +; + +2562 if( +t + = + `ci_t_liq_lookup +( +tif +, +s +, +rxp +)) ) { + +2564 + `hd_rx_syecv_ack +( +tif +, +s +, +t +, +rxp +, & +che +); + +2569 if + `NI_OPTS +( +tif +). +t_syncooks + && ( +t +-> +t_ags + & +CI_TCP_FLAG_ACK +) && + +2570 + `ci_t_acq_n +( +s + +acq_max + ) { + +2571 +ci_t_e_syecv +* +t +; + +2572 + `ci_t_syncook_ack +( +tif +, +s +, +rxp +, & +t +); + +2573 if +t + ! +NULL + ) { + +2574 +t +-> +amss + = +che +. +mtu + - ( +ci_t_hdr +- ( +ci_4_hdr +); + +2575 #i +CI_CFG_LIMIT_AMSS + + +2576 +t +-> +amss + = + `ci_t_lim_mss +Ѥ->amss, +tif +, +__FUNCTION__ +); + +2578 + `hd_rx_syecv_ack +( +tif +, +s +, +t +, +rxp +, & +che +); + +2587 + `LOG_TC +( + `log +( +LNT_FMT + "LISTEN %s:%d->%s:%d on socket %s:%d", + +2588 + `LNT_PRI_ARGS +( +tif +, +s +), + `_addr_r +( + +-> +_ddr_be32 +), + +2589 ( + `CI_BSWAP_BE16 +( +t +-> +t_sour_be16 +), + +2590 + `_addr_r +( + +-> +_daddr_be32 +), + +2591 ( + `CI_BSWAP_BE16 +( +t +-> +t_de_be16 +), + +2592 + `_addr_r +( + `t_ddr_be32 +( +s +)), + +2593 ( + `CI_BSWAP_BE16 +( + `t_t_be16 +( +s +)))); + +2597 if( + `CI_UNLIKELY +! +do_syncook + && + +2598 +s +-> +n_liq + > + `ci_t_liq_max +( +tif +) )) { + +2599 + `CITP_STATS_TCP_LISTEN +(++ +s +-> +s +. +n_liq_ovow +); + +2600  +pkt_out +; + +2602 if( + `CI_UNLIKELY +! +do_syncook + && ! + `ci_ni_aux_n_loc +( +tif +) )) { + +2603 + `CITP_STATS_TCP_LISTEN +(++ +s +-> +s +. +n_liq_no_syecv +); + +2604  +pkt_out +; + +2607 if +t +-> +t_ags + & +CI_TCP_FLAG_ACK + ) { + +2610 + `LOG_TC +( + `log +( +LNT_FMT +"LISTEN g ACK, wȻt", + `LNT_PRI_ARGS +( +tif +, +s +))); + +2611 + `CITP_STATS_TCP_LISTEN +(++ +s +-> +s +. +n_acks_t +); + +2612 + `CITP_STATS_NETIF_INC +( +tif +, +r__li_g_ack +); + +2613  +t_out +; + +2616 if~ +t +-> +t_ags + & +CI_TCP_FLAG_SYN + ) { + +2617 + `LOG_U +( + `log +( +LNT_FMT + "LISTEN gotacket without SYN, will drop", + +2618 + `LNT_PRI_ARGS +( +tif +, +s +))); + +2619 + `LOG_DU +( + `ci_hex_dump +( +ci_log_ +, + `PKT_START +( +pkt +), + +2620 + `_pkt_dump_n +( + `CI_BSWAP_BE16 +( + +-> +_t_n_be16 +)), + +2623  +pkt_out +; + +2627 if( +t +-> +t_ags + & +CI_TCP_FLAG_MASK +! +CI_TCP_FLAG_SYN + ) { + +2628 + `LOG_U +( + `log +( +LNT_FMT + "LISTEN got SYN with other flags", + +2629 + `LNT_PRI_ARGS +( +tif +, +s +))); + +2630 + `LOG_DU +( + `ci_hex_dump +( +ci_log_ +, + `PKT_START +( +pkt +), + +2631 + `_pkt_dump_n +( + `CI_BSWAP_BE16 +( + +-> +_t_n_be16 +)), + +2637 ( + +-> +_daddr_be32 + =-> +_ddr_be32 + && + +2638 +pkt +-> +tf_i + ! +OO_INTF_I_LOOPBACK +) + +2640 || (0 = + +-> +_ddr_be32 +) || (0xffffffff == ip->ip_saddr_be32) + +2642 || ( + `CI_IP_ADDR_EQUAL +( + +-> +_ddr_be32 +, 127,0,0,0, 0xff000000) && + +2643 +pkt +-> +tf_i + ! +OO_INTF_I_LOOPBACK +) + +2644 || (! + `NI_OPTS +( +tif +). +uncfe_syn + && + +2646 ( + `CI_IP_ADDR_EQUAL +( + +-> +_ddr_be32 +, 10,0,0,0, 0xff000000) && + +2647 ! + `CI_IP_ADDR_EQUAL +( + +-> +_daddr_be32 +, 10,0,0,0, 0xff000000)) + +2649 || ( + `CI_IP_ADDR_EQUAL +( + +-> +_ddr_be32 +, 172,16,0,0, 0xffff0000) && + +2650 ! + `CI_IP_ADDR_EQUAL +( + +-> +_daddr_be32 +, 172,16,0,0, 0xffff0000)) + +2652 || ( + `CI_IP_ADDR_EQUAL +( + +-> +_ddr_be32 +, 192,168,0,0, 0xffff0000) && + +2653 ! + `CI_IP_ADDR_EQUAL +( + +-> +_daddr_be32 +, 192,168,0,0, 0xffff0000)) + +2656 + `LOG_U +( + `log +( +LNT_FMT + "LISTEN ignoring SYN: bad src/dst", + +2657 + `LNT_PRI_ARGS +( +tif +, +s +)); + +2658 + `log +( +LPF + " ----> S[%s], D[%s]", + `_addr_r +( + +-> +_ddr_be32 +), + +2659 + `_addr_r +( + +-> +_daddr_be32 +))); + +2660  +pkt_out +; + +2667 if +pkt +-> +pf +. +t_rx +. +y_n + ) { + +2668 + `LOG_U +( + `log +( +LPF + "%d LISTEN SYN wh d(%d bys)", + `S_FMT +( +s +), + +2669 +pkt +-> +pf +. +t_rx +. +y_n +)); + +2670 + `LOG_DU +( + `ci_hex_dump +( +ci_log_ +, + `PKT_START +( +pkt +), + +2671 + `_pkt_dump_n +( + `CI_BSWAP_BE16 +( + +-> +_t_n_be16 +)), + +2676 if +t +-> +t_ags + & +CI_TCP_FLAG_FIN + ) { + +2677 + `LOG_U +( + `log +( +LPF + "%d LISTEN g segmwh FIN, wdr", + `S_FMT +( +s +))); + +2678  +pkt_out +; + +2682 if +do_syncook + ) { + +2683 +t + = + `ci_loc +(( +ci_t_e_syecv +)); + +2688 +t + = + `ci_ni_aux_p2syecv +( +tif +, + +2689 + `ci_ni_aux_loc +( +tif +, + +2690 +CI_TCP_AUX_TYPE_SYNRECV +)); + +2691 +t +-> +buck_lk + = +OO_P_NULL +; + +2692 +t +-> +hash + = +rxp +->hash; + +2696 + `memt +(& +t +-> +tts +, 0, (tsr->tcpopts)); + +2697 +t +-> +tts +. +smss + = +CI_CFG_TCP_DEFAULT_MSS +; + +2698 if +che +. +ags + & +CI_IP_CACHE_IS_LOCALROUTE + ) + +2699 +t +-> +lol_ + =ocal_peer; + +2701 +t +-> +lol_ + = +OO_SP_NULL +; + +2703 +t +-> +tts +. +ags + = 0; + +2704 if + `ci_t_r_tis +( +tif +, +rxp +, & +t +-> +tts +) < 0 ) { + +2705 #i +CI_CFG_TCP_INVALID_OPT_RST + + +2707 + `LOG_U +( + `log +( +LPF + "%d LISTEN bad SYN oiڠwȻt", + `S_FMT +( +s +))); + +2708 if +do_syncook + ) + +2709 + `ci_ +( +t +); + +2711 + `ci_t_syecv_ +( +tif +, +t +); + +2712 + `CITP_STATS_NETIF_INC +( +tif +, +r__bad_tis +); + +2713  +t_out +; + +2717 +t +-> +tts +. +ags + | +rxp +->ag& +CI_TCPT_FLAG_TSO +; + +2718 if +t +-> +tts +. +ags + & +CI_TCPT_FLAG_TSO + ) + +2719 +t +-> +tr + = +rxp +-> +timeamp +; + +2721 if! +do_syncook + ) { + +2722 if! + `ci_t_n_re +( +tif +, + +-> +_daddr_be32 +,-> +_ddr_be32 +) ) + +2723 +t +-> +tts +. +ags + &=~ +CI_TCPT_FLAG_STRIPE +; + +2724 +t +-> +tts +. +ags + & + `NI_OPTS +( +tif +). +syn_ts + | +CI_TCPT_FLAG_STRIPE +; + +2728 +t +-> +l_addr + = + +-> +_daddr_be32 +; + +2729 +t +-> +r_addr + = + +-> +_ddr_be32 +; + +2730 +t +-> +r_pt + = +t +-> +t_sour_be16 +; + +2733 +t +-> +time + = + `ci_t_time_now +( +tif +); + +2734 +t +-> +rcv_nxt + = +rxp +-> +q + + 1; + +2735 if + `NI_OPTS +( +tif +). +t_rcvbuf_mode + == 1 ) + +2737 +t +-> +rcv_ws + = ( +ci_ut8 +) + +2738 + `ci_t_ws_by_buff +( +tif +, + +2739 + `ci_t_max_rcvbuf +( +tif +,if-> +e +-> +max_mss +)); + +2741 +t +-> +rcv_ws + = ( +ci_ut8 +) + +2742 + `ci_t_ws_by_buff +( +tif +, + +2743 + `ci_t_rcvbuf_eablished +( +tif +, & +s +-> +s +)); + +2745 if +do_syncook + ) + +2746 + `ci_t_syncook_syn +( +tif +, +s +, +t +); + +2748 +t +-> +d_i + = + `ci_t_l_qno +( +tif +); + +2751 + `ci_t_liq_ +( +tif +, +s +, +t +); + +2752 + `CITP_STATS_NETIF +(++ +tif +-> +e +-> +s +. +li2syecv +); + +2755 + `LOG_TC +(if +t +-> +amss + =0 )->ams +tif +-> +e +-> +max_mss +; + +2756 + `log +( +LNT_FMT + "SYN-RECVcv=%08x-%08x snd=%08x-%08x", + +2757 + `LNT_PRI_ARGS +( +tif +, +s +), + +2758 +t +-> +rcv_nxt +,sr->rcv_nxt + + +2759 + `ci_t_rcvbuf2wdow +( +s +-> +s +. +so +. +rcvbuf +, + +2760 +t +-> +amss +,-> +rcv_ws +), + +2761 +t +-> +d_i +,->d_i + +pkt +-> +pf +. +t_rx +. +wdow +)); + +2764 + `CI_TCP_STATS_INC_PASSIVE_OPENS + +tif + ); + +2765 if + `OO_SP_NOT_NULL +( +t +-> +lol_ +) ) + +2766 + `ci_tif_pkt_hd +( +tif +, +pkt +); + +2767 +tx_pkt + = + `ci_tif_pkt_rx_to_tx +( +tif +, +pkt +); + +2768 if +tx_pkt + ! +NULL + ) + +2769 + `ci_t_syecv_nd +( +tif +, +s +, +t +, +tx_pkt +, + +2770 +CI_TCP_FLAG_SYN + | +CI_TCP_FLAG_ACK +, & +che +); + +2772 if + `OO_SP_NOT_NULL +( +t +-> +lol_ +) ) { + +2773 +ci_t_e + * +ts + = +NULL +; + +2774 +ci_t_e +* + + = + `ID_TO_TCP +( +tif +, +t +-> +lol_ +); + +2776 if( +s +-> +c +. +t_der_ac + ! +OO_TCP_DEFER_ACCEPT_OFF + ) && + +2777 + `SEQ_EQ +( +rxp +-> +q + + 1, +pkt +-> +pf +. +t_rx +. +d_q +) ) { + +2778 + `CITP_STATS_TCP_LISTEN +(++ +tif +-> +e +-> +s +. +acs_deed +); + +2779 + +-> +tags + | +CI_TCPT_FLAG_LOOP_DEFERRED +; + +2780 + `LOG_TC +( + `log +( +LNT_FMT + "loopback connection deferred", + +2781 + `LNT_PRI_ARGS +( +tif +, + +))); + +2783 if + `ci_t_liq_y_ome +( +tif +, +s +, +t +, & +che +, & +ts +) < 0 ) { + +2784 + `CI_TCP_EXT_STATS_INC_LISTEN_DROPS + +tif + ); + +2785 + `LOG_U +( + `log +( +LNT_FMT + "SYNRECV failedoromoteocal connection " + +2786 "tacq", + `LNT_PRI_ARGS +( +tif +, +s +))); + +2787 + `ci_t_dr +( +tif +, + +, +EBUSY +); + +2789 + `ci_tif_pkt_a +( +tif +, +pkt +); + +2792 if +do_syncook + ) + +2793 + `ci_ +( +t +); + +2796 +pkt_out +: + +2797 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +2800 +t_out +: + +2802 + `ci_t_y_wh_r +( +tif +, +rxp +); + +2804 + } +} + +2810  + $hd_syn__ts +( +ci_tif +* +tif +, +ci_t_e +* +ts +, + +2811 +ci_t_rx_pkt +* +rxp +) + +2813 +ci_t_tis + +tts +; + +2814  +ݎ + = 0; + +2817 + `memt +(& +tts +, 0, (tcpopts)); + +2818 +tts +. +smss + = +CI_CFG_TCP_DEFAULT_MSS +; + +2820 +tts +. +ags + = 0; + +2821 if + `ci_t_r_tis +( +tif +, +rxp +, & +tts +) < 0 ) { + +2822 #i +CI_CFG_TCP_INVALID_OPT_RST + + +2824 + `LOG_U +( + `log +( +LPF + "%d SYN-SENTrror in options willeset", + +2825 + `S_FMT +( +ts +))); + +2826 + `ci_t_dr +( +tif +, +ts +, +ECONNRESET +); + +2828 + `ci_t_t_ags +( +ts +, +CI_TCP_FLAG_ACK +); + +2829 + `CITP_STATS_NETIF_INC +( +tif +, +r__bad_tis +); + +2830 + `ci_t_y_wh_r +( +tif +, +rxp +); + +2834 +tts +. +ags + | +rxp +->ag& +CI_TCPT_FLAG_TSO +; + +2836 if +ts +-> +tags + & +tts +. +ags + & +CI_TCPT_FLAG_WSCL + ) { + +2837 +ts +-> +d_ws + = +tts +. +ws_sh +; + +2838 + `CI_IP_SOCK_STATS_VAL_TXWSCL + +ts +,s-> +d_ws + ); + +2841 +ts +-> +d_ws + =s-> +rcv_ws + = 0u; + +2842 + `CI_IP_SOCK_STATS_VAL_TXWSCL + +ts +,s-> +d_ws + ); + +2843 + `CI_IP_SOCK_STATS_VAL_RXWSCL + +ts +,s-> +rcv_ws + ); + +2844 +ts +-> +tags + &=~ +CI_TCPT_FLAG_WSCL +; + +2847 +ts +-> +taack + = + `t_rcv_nxt +(ts); + +2848 if +ts +-> +tags + & +CI_TCPT_FLAG_TSO + ) { + +2849 if +rxp +-> +ags + & +CI_TCPT_FLAG_TSO +) { + +2851 +ts +-> +comg_t_hdr_n + += 12; + +2852 +ݎ + = 12; + +2854 #ide +NDEBUG + + +2855 +ts +-> +taq + = +rxp +-> +q +; + +2857 +ts +-> +te + = +rxp +-> +timeamp +; + +2858 +ts +-> +taws + = + `ci_t_time_now +( +tif +); + +2861 +oo_pkt_p + +id +; + +2862 +ci__pkt_queue + * +txq + = & +ts +-> +nd +; + +2863 +ci__pkt_fmt + * +p +; + +2864 +ci_ut8 + * +t +; + +2866  +id + = +txq +-> +hd +; + `OO_PP_NOT_NULL +(id); id = +p +-> +xt + ) { + +2867 +p + = + `PKT_CHK +( +tif +, +id +); + +2868 +t + = + `CI_TCP_HDR_OPTS +( + `TX_PKT_TCP +( +p +)); + +2869 if + `CI_TCP_HDR_OPT_LEN +( + `TX_PKT_TCP +( +p +)) >= 12 ) + +2870 * +t + = 0; + +2872 +ts +-> +tags + &~ +CI_TCPT_FLAG_TSO +; + +2875 if!( +tts +. +ags + & +CI_TCPT_FLAG_SACK +) ) + +2876 +ts +-> +tags + &=~ +CI_TCPT_FLAG_SACK +; + +2877 if!( +tts +. +ags + & +CI_TCPT_FLAG_STRIPE +) ) + +2878 +ts +-> +tags + &=~ +CI_TCPT_FLAG_STRIPE +; + +2880 +ts +-> +outgog_hdrs_n + = ( +ci_4_hdr ++ ( +ci_t_hdr ++ +ݎ +; + +2881 + `ci_t_t_hdr_n +( +ts +, ( +ci_t_hdr ++ +ݎ +); + +2883 +ts +-> +smss + = +tts +.smss; + +2884 i( +ts +-> +c +. +ur_mss + &&s->c.ur_ms +smss +) + +2885 +ts +-> +smss + =s-> +c +. +ur_mss +; + +2886 #i +CI_CFG_LIMIT_SMSS + + +2887 +ts +-> +smss + = + `ci_t_lim_mss +s->smss, +tif +, +__FUNCTION__ +); + +2889 + `ci_as_gt +( +ts +-> +smss +, 0); + +2890 + `ci_t_t_eff_mss +( +tif +, +ts +); + +2891 + `ci_t_t_lcwnd +( +tif +, +ts +); + +2893 + } +} + +2896  + $hd_rx_syn_ +( +ci_tif +* +tif +, +ci_t_e +* +ts +, + +2897 +ci_t_rx_pkt +* +rxp +) + +2899 +ci__pkt_fmt +* +pkt + = +rxp +->pkt; + +2900 +ci_t_hdr +* +t + = +rxp +->tcp; + +2903 + `ci_as +(~ +t +-> +t_ags + & +CI_TCP_FLAG_RST +); + +2906 if +pkt +-> +tf_i + = +OO_INTF_I_LOOPBACK + ) { + +2907 +ci_t_e +* + + = + `ID_TO_TCP +( +tif +, +ts +-> +lol_ +); + +2908 + `ci_as +( +ts +-> +s +. +pkt +. +ags + & +CI_IP_CACHE_IS_LOCALROUTE +); + +2909 if + `hd_syn__ts +( +tif +, +ts +, +rxp +) < 0 ) ; + +2910 +ts +-> +d_u + =s-> +d_nxt +; + +2914 +ts +-> +d_max + =s-> +d_nxt + + + +-> +s +. +so +. +rcvbuf +; + +2916 if + +-> +s +. +b +. +e + ! +CI_TCP_LISTEN + ) + +2917 + +-> +d_max + =r-> +d_u + + +ts +-> +s +. +so +. +rcvbuf +; + +2919  +t_i +; + +2923 + `ci_as +(! + `ci__queue_is_emy +(& +ts +-> +s +)); + +2933 if +t +-> +t_ags + & +CI_TCP_FLAG_FIN + ) { + +2934 + `LOG_U +( + `log +( +LPF + "%d SYN-SENT got segment with FIN (ignored)", + +2935 + `S_FMT +( +ts +))); + +2936  +_out +; + +2944 if +t +-> +t_ags + & +CI_TCP_FLAG_ACK + ) { + +2945 if + `SEQ_LE +( +rxp +-> +ack +, + `t_d_u +( +ts +)) || + +2946 + `SEQ_LT +( + `t_d_nxt +( +ts +), +rxp +-> +ack +) ) { + +2947 + `LOG_U +( + `log +( +LPF + "%d SYN-SENT unacceptable ACK willeset", + +2948 + `S_FMT +( +ts +))); + +2949 + `CITP_STATS_NETIF_INC +( +tif +, +r__ucab_ack +); + +2950 + `ci_t_y_wh_r +( +tif +, +rxp +); + +2957 + `ci_as +(~ +t +-> +t_ags + & +CI_TCP_FLAG_RST +); + +2964 if +t +-> +t_ags + & +CI_TCP_FLAG_SYN + ) { + +2965 if~ +t +-> +t_ags + & +CI_TCP_FLAG_ACK + ) { + +2967 + `LOG_U +( + `log +( +LPF + "%d SYN-SENT simuɪeouݒ", + `S_FMT +( +ts +))); + +2968  +_out +; + +2973 + `LOG_U +( + `log +( +LPF + "%d SYN-SENT ignoredacket without SYN/RST flags=0x%x " + +2975 + `S_FMT +( +ts +), +t +-> +t_ags +)); + +2976  +_out +; + +2985 if + `hd_syn__ts +( +tif +, +ts +, +rxp +) < 0 ) ; + +2989 + `ci_as +( +t +-> +t_ags + & +CI_TCP_FLAG_ACK +); + +2990 + `ci_t_rx_hd_ack +( +ts +, +tif +, +rxp +); + +2996 + `ci_t_t_d_max +( +ts +, +rxp +-> +q +,xp-> +ack +, +pkt +-> +pf +. +t_rx +. +wdow +); + +2998 +t_i +: + +3000 + `ci_t_rx_t_i +( +ts +, +pkt +-> +pf +. +t_rx +. +d_q +); + +3002 + `ci_t_t_eablished_e +( +tif +, +ts +); + +3003 + `CITP_STATS_NETIF +(++ +tif +-> +e +-> +s +. +aive_ݒs +); + +3005 + `ci_as +( + `CI_TCP_HDR_LEN +( + `TS_TCP +( +ts +)) == + +3006 ( +ci_t_hdr ++ + `t_outgog_ts_n +( +ts +)); + +3007 + `ci_t_t_lcwnd +( +tif +, +ts +); + +3008 + `ci_as_gt +( +ts +-> +rcv_wdow_max +,0); + +3009 + `ci_t__rcv_wnd +( +ts +, "SYN SENT"); + +3011 + `LOG_TC +( + `log +( +LPF + "%d SYN-SENT->ESTABLISHED " +RCV_WND_FMT + " snd=%08x-%08x-%08x" + +3013 + `S_FMT +( +ts +), + `RCV_WND_ARGS +(ts), + +3014 + `t_d_u +( +ts +), + `t_d_nxt +s),s-> +d_max +, + `t_q_nxt +(ts))); + +3017 if + `ci_t_ndq_n_emy +( +ts +) ) { + +3018 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +3019 + `ci_t_tx_adv +( +ts +, +tif +); + +3021 i + `OO_SP_NOT_NULL +( +ts +-> +lol_ +) ) { + +3022 + `ci_t_nd_ack_loback +( +tif +, +ts +, +CI_FALSE +); + +3023 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +3026 +pkt + = + `ci_tif_pkt_rx_to_tx +( +tif +,kt); + +3027 if +pkt + ! +NULL + ) + +3028 + `ci_t_nd_ack +( +tif +, +ts +, +pkt +, +CI_FALSE +); + +3031 + `ci_t_wake +( +tif +, +ts +, +CI_SB_FLAG_WAKE_RX + | +CI_SB_FLAG_WAKE_TX +); + +3034 +_out +: + +3035 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +3037 + } +} + +3040  + $hd_rx_o_wa +( +ci_t_e +* +ts +, +ci_tif +* +tif +, + +3041 +ci_t_rx_pkt +* +rxp +) + +3043 +ci__pkt_fmt +* +pkt + = +rxp +->pkt; + +3046 + `ci_as +(~ +rxp +-> +t +-> +t_ags + & +CI_TCP_FLAG_RST +); + +3048 #ide +NDEBUG + + +3052 if + `SEQ_LT +( + `t_rcv_nxt +( +ts +), +pkt +-> +pf +. +t_rx +. +d_q +) ) { + +3053 + `LOG_U +( + `log +( +LPF + "%d CLOSE-WAIT da FIN " +TCP_RX_FMT +, + +3054 + `S_FMT +( +ts +), + `TCP_RX_ARGS +( +pkt +,s))); + +3056 if +pkt +-> +pf +. +t_rx +. +y_n + ) { + +3057 + `LOG_TR +( + `log +( +LPF + "%d CLOSE-WAIT dui d" +TCP_RX_FMT +, + +3058 + `S_FMT +( +ts +), + `TCP_RX_ARGS +( +pkt +,s))); + +3060 if +rxp +-> +t +-> +t_ags + & +CI_TCP_FLAG_SYN + ) + +3061 + `LOG_U +( + `log +( +LPF + "%d CLOSE-WAIT g SYN", + `S_FMT +( +ts +))); + +3064 if + `ci_t_ndq_n_emy +( +ts +) ) + +3065 + `ci_t_tx_adv +( +ts +, +tif +); + +3067 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +3068 + } +} + +3071  + $hd_rx_ϡ_ack__osg +( +ci_t_e +* +ts +, +ci_tif +* +tif +, + +3072 +ci_t_rx_pkt +* +rxp +, + +3073  +xt_e +) + +3075 +ci__pkt_fmt +* +pkt + = +rxp +->pkt; + +3078 + `ci_as +(~ +rxp +-> +t +-> +t_ags + & +CI_TCP_FLAG_RST +); + +3080 #ide +NDEBUG + + +3081 if +rxp +-> +t +-> +t_ags + & +CI_TCP_FLAG_SYN + ) + +3082 + `LOG_U +( + `log +( +LPF + "%d %w SYN!", + `S_FMT +( +ts +), + `e_r +(ts))); + +3087 if + `SEQ_EQ +( + `t_d_u +( +ts +), + `t_q_nxt +(ts)) ) { + +3088 + `ci_as +( + `ci_t_ndq_is_emy +( +ts +)); + +3089 + `ci_as +( + `ci__queue_is_emy +(& +ts +-> +s +)); + +3094 + `ci_as +( + `SEQ_EQ +( +rxp +-> +ack +, + `t_d_nxt +( +ts +))); + +3099 if +pkt +-> +pf +. +t_rx +. +y_n + ) { + +3100 + `LOG_U +( + `log +( +LPF + "%d %bad d" +TCP_RX_FMT +, + +3101 + `S_FMT +( +ts +), + `e_r +s), + `TCP_RX_ARGS +( +pkt +,s))); + +3104 + `LOG_TC +( + `log +( +LNT_FMT + "%s->%s", + `LNT_PRI_ARGS +( +tif +, +ts +), + `e_r +(ts), + +3105 + `ci_t_e_r +( +xt_e +))); + +3107 + `ci_t_wake +( +tif +, +ts +, +CI_SB_FLAG_WAKE_RX + | +CI_SB_FLAG_WAKE_TX +); + +3112 if +xt_e + = +CI_TCP_CLOSED + ) { + +3113 + `ci_t_dr +( +tif +, +ts +, 0); + +3120 if +ts +-> +tags + & +CI_TCPT_FLAG_ACTIVE_WILD + ) + +3121 + `ci_tif_aive_wd_sh_od +( +tif +, & +ts +-> +s +); + +3124 + `ci_as +( +xt_e + = +CI_TCP_TIME_WAIT +); + +3125 +ts +-> +s +. +tx_o + = +EPIPE +; + +3126 +ts +-> +s +. +rx_o + | +CI_SHUT_RD +; + +3127 + `ci_as +( + `ci_t_ndq_is_emy +( +ts +)); + +3128 + `ci_as +( + `ci__queue_is_emy +(& +ts +-> +s +)); + +3129 + `ci_as +( + `ci__queue_is_emy +(& +ts +-> +rob +)); + +3130 + `ci_tif_timewa_r +( +tif +, +ts +); + +3131 + `ci_t_t_ow_e +( +tif +, +ts +, +xt_e +); + +3135 if + `ci_t_ndq_n_emy +( +ts +) ) + +3136 + `ci_t_tx_adv +( +ts +, +tif +); + +3138 #ide +NDEBUG + + +3142 if + `SEQ_LT +( + `t_rcv_nxt +( +ts +), +pkt +-> +pf +. +t_rx +. +d_q +) ) { + +3143 + `LOG_U +( + `log +( +LPF + "%d %da " +TCP_RX_FMT +, + +3144 + `S_FMT +( +ts +), + `e_r +s), + `TCP_RX_ARGS +( +pkt +,s))); + +3146 if +pkt +-> +pf +. +t_rx +. +y_n + ) { + +3147 + `LOG_TR +( + `log +( +LPF + "%d %dui d" +TCP_RX_FMT +, + +3148 + `S_FMT +( +ts +), + `e_r +s), + `TCP_RX_ARGS +( +pkt +,s))); + +3153 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +3154 + } +} + +3157 +ci_le +  + $hd_rx_f_wa_1 +( +ci_t_e +* +ts +, +ci_tif +* +tif +) + +3159 if + `ci_t_ndq_is_emy +( +ts +) && + +3160 + `ci__queue_is_emy +(& +ts +-> +s +) ) { + +3162 + `LOG_TC +( + `log +( +LPF + "%d FIN-WAIT1->FIN-WAIT2", + `S_FMT +( +ts +))); + +3163 + `ci_t_t_ow_e +( +tif +, +ts +, +CI_TCP_FIN_WAIT2 +); + +3164 + `ci_t_wake +( +tif +, +ts +, +CI_SB_FLAG_WAKE_TX +); + +3166 i + `ci_t_is_timeout_ph +( +ts +) ) + +3167 + `ci_tif_timeout_t +( +tif +, +ts +); + +3169 + } +} + +3177  + $hd_rx_m_es +( +ci_t_e +* +ts +, +ci_tif +* +tif +, + +3178 +ci_t_rx_pkt +* +rxp +) + +3180 +ci__pkt_fmt +* +pkt + = +rxp +->pkt; + +3181 +ci_t_hdr +* +t + = +rxp +->tcp; + +3183  +ts +-> +s +. +b +. +e + ) { + +3184  +CI_TCP_SYN_SENT +: + +3185 + `hd_rx_syn_ +( +tif +, +ts +, +rxp +); + +3187  +CI_TCP_CLOSE_WAIT +: + +3188 + `hd_rx_o_wa +( +ts +, +tif +, +rxp +); + +3190  +CI_TCP_LAST_ACK +: + +3191 + `hd_rx_ϡ_ack__osg +( +ts +, +tif +, +rxp +, +CI_TCP_CLOSED +); + +3193  +CI_TCP_CLOSING +: + +3194 + `hd_rx_ϡ_ack__osg +( +ts +, +tif +, +rxp +, +CI_TCP_TIME_WAIT +); + +3196  +CI_TCP_FIN_WAIT1 +: + +3200 + `hd_rx_f_wa_1 +( +ts +, +tif +); + +3201 + `ci_tif_pkt_a_rx +( +tif +, +rxp +-> +pkt +); + +3203  +CI_TCP_TIME_WAIT +: + +3211 if( +t +-> +t_ags + & +CI_TCP_FLAG_SYN +) { + +3212 i( + `SEQ_LT +( + `t_rcv_nxt +( +ts +), +rxp +-> +q +) || + +3213 (( +ts +-> +tags + & +rxp +-> +ags + & +CI_TCPT_FLAG_TSO +) && + +3214 + `TIME_GE +( +rxp +-> +timeamp +, +ts +-> +te +)) ){ + +3215  +fr_id +; + +3216 + `LOG_TV +( + +3217 i(! + `SEQ_LT +( + `t_rcv_nxt +( +ts +), +rxp +-> +q +)) + +3218 + `log +( +LPF + "old SYN sequmberccepted usingimestamp %x >= %x", + +3219 +rxp +-> +timeamp +, +ts +-> +te +); + +3226 + `LOG_TV +( + `log +( +LPF + "SYN in TIME WAIT state,ecycling connection")); + +3227 + `ci_tif_timeout_ave +( +tif +, +ts +); + +3229 +fr_id + = + `ci_tif_li_lookup +( +tif +, + +3230 + `oo__hdr +( +pkt +)-> +_daddr_be32 +, + +3231 +t +-> +t_de_be16 +); + +3233 if +fr_id + >= 0 ) { + +3234 +ci_t_sock_li +* +s +; + +3235 +s + = + `SP_TO_TCP_LISTEN +( +tif +, + +3236 + `CI_NETIF_FILTER_ID_TO_SOCK_ID +( +tif +, +fr_id +)); + +3237 + `ci_as +( +s +-> +s +. +b +. +e + = +CI_TCP_LISTEN +); + +3241 +pkt +-> +pf +. +t_rx +. +y_n + + + `CI_TCP_HDR_LEN +( +t +); + +3242 + `hd_rx_li +( +tif +, +s +, +rxp +, 1); + +3246 + `LOG_U +( + `log +( +LPF + "no matchingistener for SYN in TIME_WAIT")); + +3249 + `LOG_U +( + `log +( +LPF + "SYN in TIME_WAIT has old SEQ - staying in TIME_WAIT")); + +3252 + `LOG_U +( + `log +( +LPF + "unexpectedacketeceived while in TIME_WAIT")); + +3253 + `LOG_DU +( + `ci_hex_dump +( +ci_log_ +, + `PKT_START +( +pkt +), 64, 0)); + +3254 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +3256  +CI_TCP_CLOSED +: + +3269 + `ci_as +( +pkt +-> +tf_i + = +OO_INTF_I_LOOPBACK +); + +3270 if(!( +pkt +-> +tf_i + = +OO_INTF_I_LOOPBACK +)) + +3271 + `LOG_E +( + `ci_log +( +LNT_FMT + "ERROR demuxo CLOSED socket", + +3272 + `LNT_PRI_ARGS +( +tif +, +ts +))); + +3273 + `CITP_STATS_NETIF_INC +( +tif +, +r__no_mch +); + +3274 + `ci_t_y_wh_r +( +tif +, +rxp +); + +3281 + } +} + +3284 #ide +NDEBUG + + +3286  + $exa_why_q_ucab +( +ci_tif +* +tif +, +ci_t_e +* +ts +, + +3287 +ci_t_rx_pkt +* +rxp +) + +3289 +ci__pkt_fmt +* +pkt + = +rxp +->pkt; + +3291 + `log +( +LNTS_FMT + "SEQ UNACCEPTABLE " +TCP_RX_FMT +" ...", + +3292 + `LNTS_PRI_ARGS +( +tif +, +ts +), + `TCP_RX_ARGS +( +rxp +-> +pkt +,s)); + +3295 if! + `SEQ_EQ +( +pkt +-> +pf +. +t_rx +. +d_q +, +rxp +-> +q +) && + +3296 + `t_rcv_wnd_right_edge_ +( +ts += + `t_rcv_nxt +(ts) && + +3297 + `SEQ_LT +( +pkt +-> +pf +. +t_rx +. +d_q +-1, + `t_rcv_nxt +( +ts +)) && + +3298 (~ +ci__log + & +CI_TP_LOG_TV +) ) + +3303 if +ts +-> +tags + & +rxp +-> +ags + & +CI_TCPT_FLAG_TSO + ) { + +3304 if + `ci_t_ws_check +( +tif +, +rxp +-> +timeamp +, + +3305 +ts +-> +taws +,s-> +te +) ) { + +3310 if + `SEQ_EQ +( +rxp +-> +q +, +ts +-> +taack +) + +3311 && + `SEQ_EQ +( +ts +-> +taack +,s-> +taq +) + +3312 && + `SEQ_EQ +( +rxp +-> +q +, +pkt +-> +pf +. +t_rx +. +d_q +) ) + +3313 + `log +("\tPAWSeorderedsval=0x%xsrecent=0x%x " + +3314 "taack=0x%xaq=0x%x", +rxp +-> +timeamp +, + +3315 +ts +-> +te +,s-> +taack +,s-> +taq +); + +3317 + `log +("\tPAWS FAILEDsval=0x%xsrecent=0x%x " + +3318 "taack=0x%xaq=0x%x", +rxp +-> +timeamp +, + +3319 +ts +-> +te +,s-> +taack +,s-> +taq +); + +3322 if +ts +-> +tags + & +CI_TCPT_FLAG_TSO + ) + +3323 + `log +("\tTSO missing"); + +3325 if + `SEQ_EQ +( +pkt +-> +pf +. +t_rx +. +d_q +, +rxp +-> +q +) ) { + +3326 if + `t_rcv_wnd_right_edge_ +( +ts += + `t_rcv_nxt +(ts) ) { + +3328 if! + `SEQ_EQ +( +rxp +-> +q +, + `t_rcv_nxt +( +ts +)) ) + +3329 + `log +("\tseg.len=0,cv.wnd=0, seg.seq!=rcv.nxt"); + +3331 if + `SEQ_LT +( +rxp +-> +q +, + `t_rcv_nxt +( +ts +)) ) + +3332 + `log +("\tseg.len=0,cv.wnd>0, seg.seq +q +) ) + +3334 + `log +("\tseg.len=0,cv.wnd>0, seg.seq>rcv.nxt+rcv.wnd"); + +3336 if( + `t_rcv_wnd_right_edge_ +( +ts += + `t_rcv_nxt +(ts)) { + +3338 + `log +("\tseg.len>0,cv.wnd=0"); + +3342 if + `SEQ_LT +( +pkt +-> +pf +. +t_rx +. +d_q +-1, + `t_rcv_nxt +( +ts +)) ) { + +3343 + `log +("\tseg.len>0,cv.wnd>0, " + +3345 + `log +("\tIfxperiencingoss &eordering,robably unnecessary " + +3348 if + `SEQ_LE +( + `t_rcv_wnd_right_edge_ +( +ts +), +rxp +-> +q +) ) + +3349 + `log +("\tseg.len>0,cv.wnd>0, seg.seq>=rcv.nxt+rcv.wnd," + +3352 + } +} + +3354  + $exa_why__ow_th +( +ci_tif +* +tif +, +ci_t_e +* +ts +, + +3355 +ci_t_rx_pkt +* +rxp +) + +3357 +ci__pkt_fmt +* +pkt + = +rxp +->pkt; + +3358 +ci_t_hdr +* +t + = +rxp +->tcp; + +3360 + `log +( +LPF + "%d SLOW...", + `S_FMT +( +ts +)); + +3362 if +ts +-> +_th_check + =~ +CI_TCP_FAST_PATH_MASK + ) + +3363 + `log +("\tfast_disabled"); + +3364 if( + `CI_TCP_FAST_PATH_WORD +( +t +& +CI_TCP_FAST_PATH_MASK +) + +3365 ! +ts +-> +_th_check + ) + +3366 + `log +("\tfast_check(%x,%x)", + +3367 ()( + `CI_TCP_FAST_PATH_WORD +( +t +)& +CI_TCP_FAST_PATH_MASK +), + +3368 () +ts +-> +_th_check +); + +3369 if +rxp +-> +q + - + `t_rcv_nxt +( +ts +) ) + +3370 + `log +("\tq(%08x)!cv_nxt(%08x)", +rxp +-> +q +, + `t_rcv_nxt +( +ts +)); + +3371 if + `SEQ_LT +( + `t_rcv_wnd_right_edge_ +( +ts +), +pkt +-> +pf +. +t_rx +. +d_q +) ) + +3372 + `log +("\__w(" +RCV_WND_FMT + "nd_seq=%08x)", + +3373 + `RCV_WND_ARGS +( +ts +), +pkt +-> +pf +. +t_rx +. +d_q +); + +3374 if + `t_d_u +( +ts +- +rxp +-> +ack + ) + +3375 + `log +("\ew_ack(u=%08xck=%08x)", + `t_d_u +( +ts +), +rxp +-> +ack +); + +3376 if +pkt +-> +pf +. +t_rx +. +y_n + <= 0 ) + +3377 + `log +("\tshtay_n=%d)", +pkt +-> +pf +. +t_rx +. +y_n +); + +3378 + } +} + +3381  + $hd_ucab_q +( +ci_tif +* +tif +, +ci_t_e +* +ts +, + +3382 +ci_t_rx_pkt +* +rxp +) + +3384 +ci__pkt_fmt +* +pkt + = +rxp +->pkt; + +3385 +ci_t_hdr +* +t + = +rxp +->tcp; + +3386  +e +; + +3389 if +ts +-> +s +. +b +. +e + = +CI_TCP_SYN_SENT + ) { + +3390 + `hd_rx_syn_ +( +tif +, +ts +, +rxp +); + +3392 +ts +-> +dck_block + = +OO_PP_INVALID +; + +3405 if + `SEQ_GT +( +pkt +-> +pf +. +t_rx +. +d_q +, +rxp +-> +q +) && + +3406 + `SEQ_BTW +( +rxp +-> +q +, + `SEQ_SUB +( + `t_rcv_nxt +( +ts +), 0x2000), + +3407 + `t_rcv_nxt +( +ts +)) && + +3408 + `SEQ_GE +( +rxp +-> +ack +, +ts +-> +d_u +) && + +3409 + `SEQ_LE +( +rxp +-> +ack +, +ts +-> +d_nxt +) && + +3410 + `SEQ_GT +( +rxp +-> +ack + +xp-> +pkt +-> +pf +. +t_rx +. +wdow +, + +3411 +ts +-> +d_max +) && + +3412 ( +e + = + `ci_t_rx_y_d_wnd_e +( +ts +, +rxp +)) > 0 ) { + +3413 i + `ci_t_ndq_n_emy +( +ts +) ) { + +3414 + `LOG_TR +( + `log +( +LNTS_FMT + "%08x-%08x ucab " +TCP_RCV_FMT +, + +3415 + `LNTS_PRI_ARGS +( +tif +, +ts +), +rxp +-> +q +, + +3416 +pkt +-> +pf +. +t_rx +. +d_q +, + `TCP_RCV_PRI_ARG +( +ts +))); + +3417 + `LOG_TR +( + `log +(" ined wdow by %d", +e +)); + +3418 + `ci_t_tx_adv +( +ts +, +tif +); + +3425 #i +CI_CFG_PORT_STRIPING + + +3429 if( +ts +-> +tags + & +CI_TCPT_FLAG_STRIPE +) + +3430 && + `SEQ_EQ +( +pkt +-> +pf +. +t_rx +. +d_q +, +rxp +-> +q +) + +3431 && + `SEQ_LE +( +rxp +-> +q +, + `t_rcv_nxt +( +ts +)) ) { + +3437 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +3442 +ts +-> +dck_block + = +OO_PP_INVALID +; + +3447 if + `SEQ_EQ +( +pkt +-> +pf +. +t_rx +. +d_q +, +rxp +-> +q +) ) { + +3449 ++ +ts +-> +s +. +rx_ack_q_rs +; + +3450 #ide +NDEBUG + + +3451 if +ts +-> +s +. +rx_ack_q_rs + < + `NI_OPTS +( +tif +). +t_max_qr_msg + ) + +3452 + `LOG_U +( + `exa_why_q_ucab +( +tif +, +ts +, +rxp +)); + +3456 + `CITP_TCP_FASTSTART +( +ts +-> +硡t_acks + = + `NI_OPTS +( +tif +). +t_硡t_loss +); + +3457 ++ +ts +-> +s +. +rx_q_rs +; + +3458 #ide +NDEBUG + + +3459 if +ts +-> +s +. +rx_q_rs + < + `NI_OPTS +( +tif +). +t_max_qr_msg + ) + +3460 + `LOG_U +( + `exa_why_q_ucab +( +tif +, +ts +, +rxp +)); + +3465 if +ts +-> +s +. +b +. +e + = +CI_TCP_TIME_WAIT + ) { + +3466 if +t +-> +t_ags + & +CI_TCP_FLAG_FIN + && + +3467 + `SEQ_EQ +( +rxp +-> +q ++1, + `t_rcv_nxt +( +ts +)) ) { + +3468 + `LOG_TC +( + `log +( +LNT_FMT + "dup FIN in TIME_WAITestarting 2MSL", + +3469 + `LNT_PRI_ARGS +( +tif +, +ts +))); + +3470 + `ci_tif_timeout_t +( +tif +, +ts +); + +3475 if +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_SYNCHRONISED + ) { + +3476 +pkt + = + `ci_tif_pkt_rx_to_tx +( +tif +,kt); + +3477 if +pkt + ! +NULL + ) + +3478 + `ci_t_nd_ack +( +tif +, +ts +, +pkt +, +CI_FALSE +); + +3481 + `LOG_U +( + `log +( +LPF + "%d handle unacceptable seq RSTACKeeded because " + +3482 "n isynchrized s", + `S_FMT +( +ts +))); + +3483 + `CITP_STATS_NETIF_INC +( +tif +, +r__bad_q +); + +3484 + `ci_t_y_wh_r +( +tif +, +rxp +); + +3488 +ts +-> +dck_block + = +OO_PP_INVALID +; + +3490 + } +} + +3493  + $hd_rx_ow +( +ci_t_e +* +ts +, +ci_tif +* +tif +, + +3494 +ci_t_rx_pkt +* +rxp +) + +3496 +ci__pkt_fmt +* +pkt + = +rxp +->pkt; + +3497 +ci_t_hdr +* +t + = +rxp +->tcp; + +3499 + `CI_IP_SOCK_STATS_INC_RXSLOW + +ts + ); + +3500 + `ci_as +( +ts +-> +s +. +b +. +e + ! +CI_TCP_LISTEN +); + +3502 + `LOG_TV +( + `exa_why__ow_th +( +tif +, +ts +, +rxp +)); + +3503 + `CITP_STATS_NETIF_INC +( +tif +, +rx_ow +); + +3508 +pkt +-> +pf +. +t_rx +. +y_n + - + `CI_TCP_HDR_LEN +( +t +- +ts +-> +comg_t_hdr_n +; + +3509 +pkt +-> +pf +. +t_rx +. +d_q + = +rxp +-> +q + +kt->pf.t_rx. +y_n +; + +3510 +pkt +-> +pf +. +t_rx +. +d_q + += + +3511 ( +t +-> +t_ags + & +CI_TCP_FLAG_SYN +>> +CI_TCP_FLAG_SYN_BIT +; + +3512 +pkt +-> +pf +. +t_rx +. +d_q + += + +3513 ( +t +-> +t_ags + & +CI_TCP_FLAG_FIN +>> +CI_TCP_FLAG_FIN_BIT +; + +3514 +pkt +-> +pf +. +t_rx +. +wdow + = + `ci_t_wnd_om_hdr +( +t +, +ts +-> +d_ws +); + +3519 + `ci_as_ge +( +pkt +-> +pf +. +t_rx +. +y_n +, 0); + +3521 if( + `CI_UNLIKELY + + `CI_TCP_HDR_LEN +( +t +< ( +ci_t_hdr +) )) + +3522  +bad_pkt +; + +3523 if( + `CI_UNLIKELY + +t +-> +t_ags + & +CI_TCP_FLAG_RST + )) + +3524  +hd_r +; + +3527 + `LOG_TR +(if +t +-> +t_ags + & ( +CI_TCP_FLAG_ECE +| +CI_TCP_FLAG_CWR +) ) + +3528 + `log +( +LNT_FMT + "ECN flags=%xot implemented (ignored)", + +3529 + `LNT_PRI_ARGS +( +tif +, +ts +), ( +t +-> +t_ags +)); + +3531 + `ci_as_equ +( + `oo__hdr +( +pkt +)-> +_ddr_be32 +, +ts +-> +s +.pkt. + +. +_daddr_be32 +); + +3532 + `ci_as_equ +( + `oo__hdr +( +pkt +)-> +_daddr_be32 +, +ts +-> +s +.pkt. + +. +_ddr_be32 +); + +3533 + `ci_as_equ +( +t +-> +t_sour_be16 +, + `TS_TCP +( +ts +)-> +t_de_be16 +); + +3534 + `ci_as_equ +( +t +-> +t_de_be16 +, + `TS_TCP +( +ts +)-> +t_sour_be16 +); + +3539 if +ts +-> +tags + & +rxp +-> +ags + & +CI_TCPT_FLAG_TSO + ) { + +3540 if + `ci_t_ws_check +( +tif +, +rxp +-> +timeamp +, + +3541 +ts +-> +taws +,s-> +te +) ) + +3542  +ucab_ws +; + +3543 + `ci_t_tso_upde +( +tif +, +ts +, +rxp +-> +q +, + +3544 +pkt +-> +pf +. +t_rx +. +d_q +, +rxp +-> +timeamp +); + +3546 if + `CI_UNLIKELY +( +ts +-> +tags + & +CI_TCPT_FLAG_TSO +) ) + +3547  +ucab_ws +; + +3549 +n_ucab_ws +: + +3560 if + `ci_t_q_obably_ucab +( + `t_rcv_nxt +( +ts +), + +3561 + `t_rcv_wnd_right_edge_ +( +ts +), + +3562 +rxp +-> +q +, + +3563 +pkt +-> +pf +. +t_rx +. +d_q +) ) + +3564  +ucab_q +; + +3565 +n_ucab_qno +: + +3567 if( + `CI_UNLIKELY + +tif +-> +e +-> +mem_essu + & +OO_MEM_PRESSURE_CRITICAL + )) + +3568  +mem_essu +; + +3569 +ctue_mem_essu +: + +3575 if +pkt +-> +pf +. +t_rx +. +y_n + ) + +3576 +ts +-> +t_ϡ_cv_yld + = + `ci_t_time_now +( +tif +); + +3578 +ts +-> +t_ϡ_cv_ack + = + `ci_t_time_now +( +tif +); + +3581 if( + `CI_UNLIKELY + +ts +-> +s +. +pkt +. +ags + & +CI_IP_CACHE_NEED_UPDATE_SOON + )) { + +3594 + `mac_upde_if_ack_w__mac_mch +( +tif +, +ts +, +rxp +); + +3602 if + `CI_LIKELY +( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_SYNCHRONISED +) ) { + +3606 if + `CI_UNLIKELY +( + `SEQ_LT +( + `t_d_nxt +( +ts ++s-> +d_deged +, +rxp +-> +ack +)) ) + +3612  +obably_ucab_ack +; + +3614 if + `CI_LIKELY +( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_TXQ_ACTIVE +) ) { + +3616 if + `SEQ_LE +( + `t_d_u +( +ts +), +rxp +-> +ack +) ) { + +3619 if +rxp +-> +ags + & +CI_TCPT_FLAG_SACK + ) + +3620 + `ci_t_rx_ck_oss +( +tif +, +ts +, +rxp +); + +3622 if + `OO_SP_IS_NULL +( +ts +-> +lol_ +) ) + +3623 + `ci_t_rx_hd_ack +( +ts +, +tif +, +rxp +); + +3625 + `ci_as_equ +( + `t_d_u +( +ts +), +rxp +-> +ack +); + +3627 if + `ci_t_ndq_is_emy +( +ts +) && + +3628 ( +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_LINGER +) && + +3629 + `ci__queue_is_emy +(& +ts +-> +s +) ) + +3631 + `ci_t_wake +( +tif +, +ts +, +CI_SB_FLAG_WAKE_TX +); + +3635 + `ci_t_kive_t +( +tif +, +ts +); + +3638 #i +CI_CFG_TAIL_DROP_PROBE + + +3640 +ci__pkt_queue + * +q + = & +ts +-> +s +; + +3642 if( +ts +-> +dr_e + = +CI_TCP_TAIL_DROP_PROBED +){ + +3643 + `ci_as +( + `NI_OPTS +( +tif +). +_dr_obe +); + +3645 if( + `ci__queue_n_emy +( +q +)){ + +3646 +ci__pkt_fmt + * +q_ + = + `PKT_CHK +( +tif +, +q +-> + +); + +3647  +q__q + = + `CI_BSWAP_BE32 +( + `TX_PKT_TCP +( +q_ +)-> +t_q_be32 +); + +3649 + `LOG_TV +( + `log +("Receivedeplyoail droprobe, mark==tail %d (%08x), sack %d, dsack %d,ail sacked %d", + +3650 + `SEQ_LE +( +q__q +, +ts +-> +dr_mk +), + +3651 +q__q +, + +3652 +rxp +-> +ags + & +CI_TCP_SACKED +, + +3653 +rxp +-> +ags + & +CI_TCP_DSACK +, + +3654 +q_ +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED +)); + +3655 if( + `SEQ_LE +( +q__q +, +ts +-> +dr_mk +) + +3656 && ( +rxp +-> +ags + & +CI_TCPT_FLAG_SACK +) + +3657 && ( +q_ +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED +)){ + +3659 +ts +-> +dup_acks + =s-> +dup_thsh +; + +3660 + `ci_t_r__covy +( +tif +, +ts +); + +3661 +ts +-> +dr_e + = +CI_TCP_TAIL_DROP_ACTIVE +; + +3664 +ts +-> +dr_e + = +CI_TCP_TAIL_DROP_ACTIVE +; + +3669 +ts +-> +dr_e + = +CI_TCP_TAIL_DROP_ACTIVE +; + +3671 } i( +ts +-> +dr_e + = +CI_TCP_TAIL_DROP_PRIMED +){ + +3672 + `ci_as +( + `NI_OPTS +( +tif +). +_dr_obe +); + +3675 if( + `ci__queue_n_emy +( +q +)) + +3676 + `ci_t_dr_t +( +tif +, +ts +); + +3678 + `ci_t_dr_r +( +tif +, +ts +); + +3679 +ts +-> +dr_e + = +CI_TCP_TAIL_DROP_ACTIVE +; + +3685 +n_ucab_ack +: + +3687 if + `CI_LIKELY +( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_ACCEPT_DATA +) ) { + +3690 #ide +_WIN32 + + +3691 if + `CI_UNLIKELY +( +t +-> +t_ags + & +CI_TCP_FLAG_URG +)) + +3692 + `ci_t_urg_pkt_oss +( +ts +, +tif +, +rxp +); + +3695 if + `CI_UNLIKELY +( +t +-> +t_ags + & +CI_TCP_FLAG_SYN +) ) { + +3707 + `LOG_TC +( + `log +( +LNTS_FMT + "SYN (dui?igned " +TCP_RX_FMT +, + +3708 + `LNTS_PRI_ARGS +( +tif +, +ts +), + `TCP_RX_ARGS +( +pkt +,s))); + +3709 ++ +rxp +-> +q +; + +3710 +t +-> +t_ags + &=~ +CI_TCP_FLAG_SYN +; + +3716 if +pkt +-> +pf +. +t_rx +. +y_n + ) { + +3717 if + `CI_UNLIKELY +( +ts +-> +s +. +rx_o +) ) { + +3724 if( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_RECVD_FIN +) || + +3725 +ts +-> +s +. +tx_o + != 0 ) + +3727 + `LOG_U +( + `log +( +LNTS_FMT +" datarrived with SHUT_RD (rx=%xx=%x)", + +3728 + `LNTS_PRI_ARGS +( +tif +, +ts +),s-> +s +. +rx_o +,s->s. +tx_o +)); + +3729 + `ci_t_y_wh_r +( +tif +, +rxp +); + +3730 + `ci_t_dr +( +tif +, +ts +, +ECONNRESET +); + +3738 if + `SEQ_LT +( + `t_rcv_wnd_right_edge_ +( +ts +), +pkt +-> +pf +. +t_rx +. +d_q +) ) { + +3744  +n += + `SEQ_SUB +( +pkt +-> +pf +. +t_rx +. +d_q +, + `t_rcv_wnd_right_edge_ +( +ts +)); + +3745 + `LOG_U +( + `log +( +LPF + "%d %EXCEEDS WIN by %d " +TCP_RX_FMT +, + +3746 + `S_FMT +( +ts +), + `e_r +s), +n +, + `TCP_RX_ARGS +( +pkt +,s))); + +3747 + `ci_as + + `OO_SP_IS_NULL +( +ts +-> +lol_ +) ); + +3748 +pkt +-> +pf +. +t_rx +. +d_q + - +n +; + +3749 +pkt +-> +pf +. +t_rx +. +y_n + - +n +; + +3750 if + `SEQ_LE +( +pkt +-> +pf +. +t_rx +. +d_q +, + `t_rcv_nxt +( +ts +)) ) { + +3752 +pkt + = + `ci_tif_pkt_rx_to_tx +( +tif +,kt); + +3753 if +pkt + ! +NULL + ) + +3754 + `ci_t_nd_ack +( +tif +, +ts +, +pkt +, +CI_FALSE +); + +3761 if + `SEQ_LE +( +rxp +-> +q +, + `t_rcv_nxt +( +ts +)) ) { + +3764 if! ( +t +-> +t_ags + & +CI_TCP_FLAG_FIN +) ){ + +3765 if + `ci_t_rx_div_to_cvq +( +ts +, +tif +, +rxp +) == 0 ) + +3766 + `TCP_NEED_ACK +( +ts +); + +3772 + `TCP_FORCE_ACK +( +ts +); + +3773 + `CITP_STATS_NETIF_INC +( +tif +, +rx_rob_n_emy +); + +3774 + `CITP_TCP_FASTSTART +( +ts +-> +硡t_acks + = + +3775 + `NI_OPTS +( +tif +). +t_硡t_loss +); + +3782 if( + `SEQ_LT +( + `t_rcv_nxt +( +ts +), +pkt +-> +pf +. +t_rx +. +d_q +-1)){ + +3783 + `ci_t_rx_div_to_cvq +( +ts +, +tif +, +rxp +); + +3787 if( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_ACCEPT_DATA +) { + +3788 + `ci_t_rx_oss_f +( +tif +, +ts +); + +3794 + `ci_as +( + `SEQ_EQ +( +pkt +-> +pf +. +t_rx +. +d_q +, + `t_rcv_nxt +( +ts +) + 1)); + +3795 + `t_rcv_nxt +( +ts + +pkt +-> +pf +. +t_rx +. +d_q +; + +3796 + `ci_t_rx_oss_f +( +tif +, +ts +); + +3797 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +3799 + `TCP_FORCE_ACK +( +ts +); + +3807 if + `ci_t_rx_queue_ooo +( +tif +, +ts +, +rxp +) ) { + +3808 + `CITP_TCP_FASTSTART +( +ts +-> +硡t_acks + = + +3809 + `NI_OPTS +( +tif +). +t_硡t_loss +); + +3810 if +ts +-> +acks_ndg + ) { + +3815 +ci__pkt_fmt +* +ackpkt + = + `ci_tif_pkt_loc +( +tif +); + +3816 if +ackpkt + ) + `ci_t_nd_ack +( +tif +, +ts +,ckpkt, +CI_FALSE +); + +3818 + `TCP_FORCE_ACK +( +ts +); + +3822 if + `CI_UNLIKELY +( +t +-> +t_ags + & +CI_TCP_FLAG_FIN +) ) { + +3824 + `ci_as +(! +pkt +-> +pf +. +t_rx +. +y_n +); + +3826 if( + `SEQ_EQ +( +rxp +-> +q +, + `t_rcv_nxt +( +ts +))) { + +3828 + `ci_as +( + `SEQ_EQ +( +pkt +-> +pf +. +t_rx +. +d_q +, +rxp +-> +q + + 1)); + +3829 + `t_rcv_nxt +( +ts + +pkt +-> +pf +. +t_rx +. +d_q +; + +3831 + `ci_t_rx_oss_f +( +tif +, +ts +); + +3833 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +3834 + `TCP_FORCE_ACK +( +ts +); + +3836 if + `ci_t_rx_queue_ooo +( +tif +, +ts +, +rxp +) ) + +3837 + `TCP_FORCE_ACK +( +ts +); + +3842 + `ci_as +(! +pkt +-> +pf +. +t_rx +. +y_n +); + +3843 + `ci_as +(( +t +-> +t_ags + & ~ +CI_TCP_FLAG_ACK +) == 0); + +3844 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +3847 if + `TCP_ACK_FORCED +( +ts +) ) { + +3852 +pkt + = + `ci_tif_pkt_loc +( +tif +); + +3853 if +pkt + ) + `ci_t_nd_ack +( +tif +, +ts +,kt, +CI_FALSE +); + +3857 +ts +-> +s +. +b +. +sb_ags + | +CI_SB_FLAG_TCP_POST_POLL +; + +3862 if +ts +-> +s +. +b +. +e + = +CI_TCP_ESTABLISHED + ) + +3865 if +ts +-> +s +. +b +. +e + = +CI_TCP_FIN_WAIT1 + ) + +3866 + `hd_rx_f_wa_1 +( +ts +, +tif +); + +3871 if +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_TXQ_ACTIVE + ) + +3873 +ts +-> +s +. +b +. +sb_ags + | +CI_SB_FLAG_TCP_POST_POLL +; + +3875 i! + `hd_rx_m_es +( +ts +, +tif +, +rxp +) ) { + +3877 + `ci_log +("Unknow%d ('%s')\n", +ts +-> +s +. +b +. +e +, + `e_r +(ts)); + +3878 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +3879 + `ci_as +(0); + +3884 +obably_ucab_ack +: + +3885 i(!( +t +-> +t_ags + & +CI_TCP_FLAG_ACK +)) { + +3888 i(!( +ts +-> +s +. +b +. +e + = +CI_TCP_TIME_WAIT + && + +3889 ( +t +-> +t_ags + & +CI_TCP_FLAG_SYN +))) { + +3891 + `LOG_U +( + `log +( +LPF + "%d %ck whACK fg%x " +TCP_RX_FMT +, + +3892 + `S_FMT +( +ts +), + `e_r +s), +t +-> +t_ags +, + +3893 + `TCP_RX_ARGS +( +pkt +, +ts +))); + +3896  +n_ucab_ack +; + +3898 + `hd_ucab_ack +( +tif +, +ts +, +rxp +); + +3901 +ucab_q +: + +3903 if +ts +-> +s +. +b +. +e + = +CI_TCP_TIME_WAIT + && + +3904 ( +t +-> +t_ags + & ( +CI_TCP_FLAG_SYN + | +CI_TCP_FLAG_ACK +)) + +3905 = +CI_TCP_FLAG_SYN + ) + +3906  +n_ucab_qno +; + +3907 if! + `ci_t_q_defy_ucab +( + `t_rcv_nxt +( +ts +), + +3908 + `t_rcv_wnd_right_edge_ +( +ts +), + +3909 +rxp +-> +q +, + +3910 +pkt +-> +pf +. +t_rx +. +d_q +) ) + +3911  +n_ucab_qno +; + +3914 if( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_SYNCHRONISED +) && + +3915 + `SEQ_EQ +( +rxp +-> +q + + 1, + `t_rcv_nxt +( +ts +)) ) { + +3916 +ci_ut32 + +d_nxt_befe +, +d_nxt_a +; + +3917 + `LOG_TR +( + `log +( +LNT_FMT + "ZWINrob" +TCP_RX_FMT +, + +3918 + `LNT_PRI_ARGS +( +tif +, +ts +), + `TCP_RX_ARGS +( +pkt +,s))); + +3919 +d_nxt_befe + = + `t_d_nxt +( +ts +); + +3923 if +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_TXQ_ACTIVE + && + +3924 + `SEQ_GE +( + `t_d_nxt +( +ts +), +rxp +-> +ack +) && + +3925 + `SEQ_LE +( + `t_d_u +( +ts +), +rxp +-> +ack +) ) { + +3926 + `ci_t_rx_hd_ack +( +ts +, +tif +, +rxp +); + +3929 + `ci_tif_pkt_hd +( +tif +, +pkt +); + +3937 if! + `hd_rx_m_es +( +ts +, +tif +, +rxp +) ) + +3938 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +3939 if + `ci_t_ndq_n_emy +( +ts +) ) + +3940 + `ci_t_tx_adv +( +ts +, +tif +); + +3943 +d_nxt_a + = + `t_d_nxt +( +ts +); + +3945 if +d_nxt_befe + = +d_nxt_a + ) { + +3946 +pkt + = + `ci_tif_pkt_rx_to_tx +( +tif +,kt); + +3947 if +pkt + ! +NULL + ) + +3948 + `ci_t_nd_ack +( +tif +, +ts +, +pkt +, +CI_FALSE +); + +3951 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +3952 + `ci_t_wake +( +tif +, +ts +, +CI_SB_FLAG_WAKE_TX +); + +3958 if( +ts +-> +tags + & +CI_TCPT_FLAG_SACK +) && + +3959 + `SEQ_LE +( +pkt +-> +pf +. +t_rx +. +d_q +, + `t_rcv_nxt +( +ts +)) && + +3960 + `SEQ_LT +( +rxp +-> +q +, +pkt +-> +pf +. +t_rx +. +d_q +) ) { + +3962 +ts +-> +dck_t + = +rxp +-> +q +; + +3963 +ts +-> +dck_d + = +pkt +-> +pf +. +t_rx +. +d_q +; + +3964 +ts +-> +dck_block + = +OO_PP_NULL +; + +3966 + `hd_ucab_q +( +tif +, +ts +, +rxp +); + +3969 +ucab_ws +: + +3973 if +ts +-> +s +. +b +. +e + = +CI_TCP_TIME_WAIT + && + +3974 ( +t +-> +t_ags + & ( +CI_TCP_FLAG_SYN + | +CI_TCP_FLAG_ACK +)) + +3975 = +CI_TCP_FLAG_SYN + ) + +3976  +n_ucab_ws +; + +3977 + `hd_ucab_q +( +tif +, +ts +, +rxp +); + +3980 +mem_essu +: + +3981 if +pkt +-> +pf +. +t_rx +. +y_n + <= 0 ) + +3983  +ctue_mem_essu +; + +3984 + `CITP_STATS_NETIF_INC +( +tif +, +memy_essu_drs +); + +3985 +ts +-> +tags + | +CI_TCPT_FLAG_MEM_DROP +; + +3986 + `ci_t_dr_rob +( +tif +, +ts +); + +3987  +dr +; + +3989 +hd_r +: + +3990 + `hd_rx_r +( +ts +, +tif +, +rxp +); + +3993 +bad_pkt +: + +3994 + `LOG_U +( + `log +( +LPF + "BAD PACKET (short TCP headeren %d)", + +3995 ( + `CI_TCP_HDR_LEN +( +t +))); + +3996 + `LOG_DU +( + `ci_hex_dump +( +ci_log_ +, + `PKT_START +( +pkt +), 64, 0)); + +3998 +dr +: + +3999 + `ci_tif_pkt_a_rx +( +tif +, +pkt +); + +4001 + } +} + +4004  + $hd_no_mch +( +ci_tif +* +ni +, +ci_t_rx_pkt +* +rxp +) + +4011 +ci__pkt_fmt +* +pkt + = +rxp +->pkt; + +4012 +ci_4_hdr +* + + = + `oo__hdr +( +pkt +); + +4013 +ci_t_hdr +* +t + = +rxp +->tcp; + +4014  +t + = 1; + +4017 + `LOG_TR +( + +4020 if!( +t +-> +t_ags + & +CI_TCP_FLAG_RST +) ) + +4021 + `log +( +LN_FMT + "NO MATCH %s:%u->%s:%u [" +CI_TCP_FLAGS_FMT +"] " + +4022 "s=%08x=%08x", + `LN_PRI_ARGS +( +ni +), + +4023 + `_addr_r +( + +-> +_ddr_be32 +), + +4024 ( + `CI_BSWAP_BE16 +( +t +-> +t_sour_be16 +), + +4025 + `_addr_r +( + +-> +_daddr_be32 +), + +4026 ( + `CI_BSWAP_BE16 +( +t +-> +t_de_be16 +), + +4027 + `CI_TCP_HDR_FLAGS_PRI_ARG +( +t +), + +4028 + `SEQ +( +rxp +-> +q +), SEQxp-> +ack +)) + +4037 if! + `ci_ur_is_lol_addr +( + `CICP_HANDLE +( +ni +), & + +-> +_daddr_be32 +) ) { + +4042 + `LOG_U +( + `log +( +LN_FMT + "Non-local dest IP, ignored. Prob wrong switchort.", + +4043 + `LN_PRI_ARGS +( +ni +))); + +4044 +t + = 0; + +4046 if + `ci_ur_is_lol_addr +( + `CICP_HANDLE +( +ni +), & + +-> +_ddr_be32 +) ) { + +4053 + `LOG_U +( + `ci_log +("STRANGE: Received TCPkt fromocalddr")); + +4054 +t + = 0; + +4058 if +t +-> +t_ags + & +CI_TCP_FLAG_RST + ) + +4060 +t + = 0; + +4063 if +t + ) { + +4064 +pkt +-> +pf +. +t_rx +. +y_n + - + `CI_TCP_HDR_LEN +( +t +); + +4065 +pkt +-> +pf +. +t_rx +. +d_q + = +rxp +-> +q + +kt->pf.t_rx. +y_n +; + +4066 +pkt +-> +pf +. +t_rx +. +d_q + += + +4067 ( +t +-> +t_ags + & +CI_TCP_FLAG_SYN +>> +CI_TCP_FLAG_SYN_BIT +; + +4068 + `CITP_STATS_NETIF_INC +( +ni +, +r__no_mch +); + +4069 + `ci_t_y_wh_r +( +ni +, +rxp +); + +4072 + `ci_tif_pkt_a_rx_1f +( +ni +, +pkt +); + +4073 + } +} + +4076  + $ci_t_rx_div_to_cn +( +ci_sock_cmn +* +s +, * +aque_g +) + +4078 +ci_t_rx_pkt +* +rxp + = +aque_g +; + +4079 +ci_t_e +* +ts + = + `SOCK_TO_TCP +( +s +); + +4080 +ci__pkt_fmt +* +pkt + = +rxp +->pkt; + +4081 +ci_t_hdr +* +t + = +rxp +->tcp; + +4082 +ci_tif +* +ni + = +rxp +->ni; + +4083  +n_ +; + +4085 + `CHECK_TS +( +ni +, +ts +); + +4087 #ifde +ONLOAD_OFE + + +4088 if +s +-> +o_code_t + ! +OFE_ADDR_NULL + && + +4089 + `o_oss_ck +( +ni +-> +o_chl +, +s +-> +o_code_t +, + `ci__time_now +(ni), + +4090 + `oo_h_hdr +( +pkt +),kt-> +y_n +,kt-> +vn +, + +4091 + `CI_BSWAP_BE16 +( + `oo_h_ty_g +( +pkt +)), + +4092 + `oo__hdr +( +pkt +)) + +4093 ! +OFE_ACCEPT + ) { + +4094 + `ci_tif_pkt_a +( +ni +, +pkt +); + +4095 +rxp +-> +pkt + = +NULL +; + +4100 + `ci_as_equ +( + `oo__hdr +( +pkt +)-> +_daddr_be32 +, +s +->pkt. + +. +_ddr_be32 +); + +4101 #ide +NDEBUG + + +4102 if + `NI_OPTS +( +ni +). +t_rx_checks + ) + +4103 + `ci_t_rx_checks +( +ni +, +ts +, +pkt +); + +4109 + `ci_tif_put__po_pl +( +ni +, & +ts +-> +s +. +b +); + +4111 + `CI_IP_SOCK_STATS_ADD_RXBYTE + +ts +, +pkt +-> +pf +. +t_rx +. +y_n + ); + +4113 + `LOG_TR +( + `log +( +LNTS_FMT + +RCV_WND_FMT + " snd=%08x-%08x-%08x", + +4114 + `LNTS_PRI_ARGS +( +ni +, +ts +), + `RCV_WND_ARGS +(ts), + +4115 + `t_d_u +( +ts +), + `t_d_nxt +s),s-> +d_max +); + +4116 + `log +( +LNT_FMT + "[" +CI_TCP_FLAGS_FMT +"] id=%d s=%08x-%08x=%08x " + +4117 "w=%u(%uhn=%dayn=%d", + `LNT_PRI_ARGS +( +ni +, +ts +), + +4118 + `CI_TCP_HDR_FLAGS_PRI_ARG +( +t +), + `OO_PKT_FMT +( +pkt +), +rxp +-> +q +, + +4119 +rxp +-> +q + + +pkt +-> +pf +. +t_rx +. +y_n + - + `CI_TCP_HDR_LEN +( +t +), + +4120 +rxp +-> +ack +, + +4121 ()( + `CI_BSWAP_BE16 +( +t +-> +t_wdow_be16 +)), + +4122 + `ci_t_wnd_om_hdr +( +t +, +ts +-> +d_ws +), + +4123 + `CI_TCP_HDR_LEN +( +t +), + +4124 +pkt +-> +pf +. +t_rx +. +y_n + - + `CI_TCP_HDR_LEN +( +t +))); + +4130 +ci_ut8 +* +t + = + `CI_TCP_HDR_OPTS +( +t +); + +4131 if +t +-> +t_hdr_n_4 + =(( +ci_t_hdr +) + 12u) << 2u && + +4132 *( +ci_ut32 +* +t + = +CI_TCP_TSO_WORD + ) { + +4133 +rxp +-> +timeamp + = + `CI_BSWAP_BE32 +(*( +ci_ut32 +*& +t +[4]); + +4134 +rxp +-> +timeamp_echo + = + `CI_BSWAP_BE32 +(*( +ci_ut32 +*& +t +[8]); + +4135 +rxp +-> +ags + = +CI_TCPT_FLAG_TSO +; + +4138 + `ci_t_r_tis +( +ni +, +rxp +, +NULL +); + +4144 +pkt +-> +pf +. +t_rx +. +y_n + - +ts +-> +comg_t_hdr_n +; + +4145 +pkt +-> +pf +. +t_rx +. +d_q + = +rxp +-> +q + +kt->pf.t_rx. +y_n +; + +4147 #i +CI_CFG_BURST_CONTROL + + +4148 +ts +-> +bur_wdow + = 0; + +4155 +n_ + = ( + +4157 (( + `CI_TCP_FAST_PATH_WORD +( +t +& +CI_TCP_FAST_PATH_MASK +) + +4158 - +ts +-> +_th_check +) | + +4160 ( +rxp +-> +q + - + `t_rcv_nxt +( +ts +)) | + +4162 + `SEQ_LT +( + `t_rcv_wnd_right_edge_ +( +ts +), + +4163 +pkt +-> +pf +. +t_rx +. +d_q +) | + +4165 ( + `t_d_u +( +ts +- +rxp +-> +ack +) | + +4167 ( +pkt +-> +pf +. +t_rx +. +y_n + <= 0) | + +4169 ( +ni +-> +e +-> +mem_essu + & +OO_MEM_PRESSURE_CRITICAL +)); + +4175 + `ci_ss_as_ +( +ni +, +ts +-> +s +. +b +. +e + = +CI_TCP_LISTEN +, + +4176 + `OO_PP_EQ +( +ts +-> +dck_block +, +OO_PP_INVALID +)); + +4178 if +n_ + == 0 ) { + +4183 +ts +-> +t_ϡ_cv_yld + = + `ci_t_time_now +( +ni +); + +4189 + `ci_as +( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_ACCEPT_DATA +); + +4190 + `ci_as +( + `ci__queue_is_emy +(& +ts +-> +rob +)); + +4192 +pkt +-> +pf +. +t_rx +. +wdow + = + +4193 ( + `CI_BSWAP_BE16 +( +t +-> +t_wdow_be16 +<< +ts +-> +d_ws +; + +4195 if +ts +-> +tags + & +rxp +-> +ags + & +CI_TCPT_FLAG_TSO + ) { + +4200 #i +CI_CFG_TCP_PAWS_ON_FASTPATH + + +4201 if( + `CI_UNLIKELY + + `TIME_GT +( +ts +-> +te +, +rxp +-> +timeamp +) )) + +4202  +ws____th +; + +4204 + `ci_t_tso_upde +( +ni +, +ts +, +rxp +-> +q +, + +4205 +pkt +-> +pf +. +t_rx +. +d_q +, +rxp +-> +timeamp +); + +4214 #i +CI_CFG_NOTICE_WINDOW_SHRINKAGE + + +4218 + `ci_t_t_d_max +( +ts +, +rxp +-> +q +,xp-> +ack +, +pkt +-> +pf +. +t_rx +. +wdow +); + +4220 if + `SEQ_LT +( +ts +-> +d_max +, +rxp +-> +ack + + +pkt +-> +pf +. +t_rx +. +wdow +) ) + +4221 + `ci_t_t_d_max +( +ts +, +rxp +-> +q +,xp-> +ack +, +pkt +-> +pf +. +t_rx +. +wdow +); + +4224 + `TCP_NEED_ACK +( +ts +); + +4225 +ts +-> +s +. +b +. +sb_ags + | +CI_SB_FLAG_TCP_POST_POLL +; + +4226 + `ci_t_wake +( +ni +, +ts +, +CI_SB_FLAG_WAKE_RX +); + +4228 + `oo_offbuf_ +(& +pkt +-> +buf +, (* +t + + +ts +-> +comg_t_hdr_n +, + +4229 +pkt +-> +pf +. +t_rx +. +y_n +); + +4230 + `ci_t_rx_queue_ck +( +ni +, +ts +, +pkt +); + +4232 if( + `CI_UNLIKELY + +ts +-> +s +. +pkt +. +ags + & +CI_IP_CACHE_NEED_UPDATE_SOON + )) + +4234 + `mac_upde_if_mac_mch +( +ni +, +ts +, +pkt +); + +4236 +rxp +-> +pkt + = +NULL +; + +4241 + `hd_rx_ow +( +ts +, +ni +, +rxp +); + +4242 +rxp +-> +pkt + = +NULL +; + +4245 #i +CI_CFG_TCP_PAWS_ON_FASTPATH + + +4246 +ws____th +: + +4247 + `LOG_U +( + `log +( +LPF + "%d PAWS faed (tsv=%xe=%x", + `S_FMT +( +ts +), + +4248 +rxp +-> +timeamp +, +ts +-> +te +)); + +4249 + `hd_ucab_q +( +ni +, +ts +, +rxp +); + +4250 +rxp +-> +pkt + = +NULL +; + +4253 + } +} + +4256  + $ci_t_rx_div_to_li +( +ci_sock_cmn +* +s +, * +aque_g +) + +4258 +ci_t_rx_pkt +* +rxp + = +aque_g +; + +4260 #ifde +ONLOAD_OFE + + +4261 if +s +-> +o_code_t + ! +OFE_ADDR_NULL + && + +4262 + `o_oss_ck +( +rxp +-> +ni +-> +o_chl +, +s +-> +o_code_t +, + +4263 + `ci__time_now +( +rxp +-> +ni +), + +4264 + `oo_h_hdr +( +rxp +-> +pkt +),xp->pkt-> +y_n +, + +4265 +rxp +-> +pkt +-> +vn +, + +4266 + `CI_BSWAP_BE16 +( + `oo_h_ty_g +( +rxp +-> +pkt +)), + +4267 + `oo__hdr +( +rxp +-> +pkt +)) + +4268 ! +OFE_ACCEPT + ) { + +4269 + `ci_tif_pkt_a +( +rxp +-> +ni +,xp-> +pkt +); + +4270 +rxp +-> +pkt + = +NULL +; + +4275 if +s +-> +b +. +e + ! +CI_TCP_STATE_ACTIVE_WILD + ) { + +4276 + `hd_rx_li +( +rxp +-> +ni +, + `SOCK_TO_TCP_LISTEN +( +s +),xp, 0); + +4277 +rxp +-> +pkt + = +NULL +; + +4280 + } +} + +4283  + $ci_t_hd_rx +( +ci_tif +* +tif +,  +ci_tif_pl_e +* +ps +, + +4284 +ci__pkt_fmt +* +pkt +, +ci_t_hdr +* +t +,  +_yn +) + +4286 +ci_4_hdr +* + + = + `oo__hdr +( +pkt +); + +4287 +ci_t_rx_pkt + +rxp +; + +4289 + `ci_as +( +tif +); + +4290 + `ASSERT_VALID_PKT +( +tif +, +pkt +); + +4291 + `ci_ss_as_eq +( +tif +, + +-> +_oc +, +IPPROTO_TCP +); + +4292 + `ci_as_equ +( + `oo_offbuf_r +(& +pkt +-> +buf +), + `PKT_START +(pkt)); + +4294 + `CI_TCP_STATS_INC_IN_SEGS + +tif + ); + +4296 if + `OO_PP_NOT_NULL +( +pkt +-> +ag_xt +) ) + +4297  +sed +; + +4299 +rxp +. +ni + = +tif +; + +4300 +rxp +. +pl_e + = +ps +; + +4301 +rxp +. +pkt + =kt; + +4302 +rxp +. +t + =cp; + +4303 + `ci_as_gt +( +pkt +-> +y_n +, +_yn +); + +4304 +pkt +-> +pf +. +t_rx +. +y_n + = +_yn +; + +4305 +pkt +-> +pf +. +t_rx +. +rx_amp + = + `IPTIMER_STATE +( +tif +)-> +c +; + +4307 +rxp +. +q + = + `CI_BSWAP_BE32 +( +t +-> +t_q_be32 +); + +4308 +rxp +. +ack + = + `CI_BSWAP_BE32 +( +t +-> +t_ack_be32 +); + +4310 if +pkt +-> +tf_i + = +OO_INTF_I_LOOPBACK + ) { + +4311 +ci_sock_cmn + * +s + = + `ID_TO_SOCK_CMN +( +tif +, +pkt +-> +pf +. +t_rx +. +lo +. +rx_sock +); + +4312 +ci_sock_cmn + * +nd + = + `ID_TO_SOCK_CMN +( +tif +, +pkt +-> +pf +. +t_rx +. +lo +. +tx_sock +); + +4313  +bad_c + = ( +s + = +NULL +) || + +4314 (~ +s +-> +b +. +e + & +CI_TCP_STATE_TCP +) || + +4315 ( +t +-> +t_de_be16 + ! + `S_TCP_HDR +( +s +)-> +t_sour_be16 +); + +4318 if! +bad_c + && +nd + ! +NULL + && + +4319 ( +nd +-> +b +. +e + & +CI_TCP_STATE_TCP +) && + +4320 +nd +-> +b +. +e + ! +CI_TCP_LISTEN + && + +4321 + `SOCK_TO_TCP +( +nd +)-> +lol_ + = +pkt +-> +pf +. +t_rx +. +lo +. +rx_sock + && + +4322 +s +-> +b +. +e + ! +CI_TCP_LISTEN + && + +4323 + `SOCK_TO_TCP +( +s +)-> +lol_ + = +pkt +-> +pf +. +t_rx +. +lo +. +tx_sock + ) { + +4324 + `ci_t_rx_div_to_cn +( +s +, & +rxp +); + +4328 if! +bad_c + && +t +-> +t_de_be16 + ! + `S_TCP_HDR +( +s +)-> +t_sour_be16 + ) + +4329 +bad_c + = 1; + +4331 if! +bad_c + && +s +-> +b +. +e + = +CI_TCP_LISTEN + && + +4332 +s +-> +pkt +. + +. +_ddr_be32 + = +INADDR_ANY + || + +4333 +s +-> +pkt +. + +. +_ddr_be32 + =-> +_daddr_be32 + )) { + +4334 + `ci_as +(( +t +-> +t_ags + & +CI_TCP_FLAG_SYN +) && + +4335 ! ( +t +-> +t_ags + & +CI_TCP_FLAG_ACK +)) || + +4336 (! ( +t +-> +t_ags + & +CI_TCP_FLAG_SYN +) && + +4337 ( +t +-> +t_ags + & +CI_TCP_FLAG_ACK +) && + +4338 ( + `SOCK_TO_TCP +( +nd +)-> +tags + & + +4339 +CI_TCPT_FLAG_LOOP_DEFERRED +)) ); + +4341 +rxp +. +hash + = + `ci_tif_fr_hash +( +tif +, + +4342 + +-> +_daddr_be32 +, +t +-> +t_de_be16 +, + +4343 + +-> +_ddr_be32 +, +t +-> +t_sour_be16 +, + +4344 +IPPROTO_TCP +); + +4345 + `ci_t_rx_div_to_li +( +s +, & +rxp +); + +4347 if! +bad_c + && +s +-> +b +. +e + & +CI_TCP_STATE_TCP_CONN + && + +4348 + +-> +_daddr_be32 + = +s +-> +pkt +.. +_ddr_be32 + && + +4349 + +-> +_ddr_be32 + = +s +-> +pkt +.. +_daddr_be32 + && + +4350 +t +-> +t_sour_be16 + = + `S_TCP_HDR +( +s +)-> +t_de_be16 +) { + +4352 + `ci_as +( +t +-> +t_ags + & ( +CI_TCP_FLAG_FIN + | +CI_TCP_FLAG_RST +)) || + +4353 ( +t +-> +t_ags + & +CI_TCP_FLAG_SYN +) && + +4354 ( +t +-> +t_ags + & +CI_TCP_FLAG_ACK +) ) ); + +4355 + `ci_t_rx_div_to_cn +( +s +, & +rxp +); + +4358 + `ci_log +( +FN_FMT + "loopbackacketo destroyed socket: %d -> %d", + +4359 + `FN_PRI_ARGS +( +tif +), +pkt +-> +pf +. +t_rx +. +lo +. +tx_sock +, + +4360 +pkt +-> +pf +. +t_rx +. +lo +. +rx_sock +); + +4361 if( +nd +-> +b +. +e + & +CI_TCP_STATE_TCP_CONN +) && + +4362 +nd +-> +b +. +e + ! +CI_TCP_TIME_WAIT + && + +4363 + +-> +_daddr_be32 + = +nd +-> +pkt +.ip.ip_daddr_be32 && + +4364 + +-> +_ddr_be32 + = +nd +-> +pkt +.ip.ip_saddr_be32 && + +4365 +t +-> +t_sour_be16 + = + `S_TCP_HDR +( +nd +)->tcp_source_be16 && + +4366 +t +-> +t_de_be16 + = + `S_TCP_HDR +( +nd +)->tcp_dest_be16 ) + +4367 + `ci_t_dr +( +tif +, + `SOCK_TO_TCP +( +nd +), +ECONNRESET +); + +4368 + `ci_tif_pkt_a +( +tif +, +pkt +); + +4373 + `ci_tif_fr_f_ch_mch +( +tif +, + +4374 + +-> +_daddr_be32 +, +t +-> +t_de_be16 +, + +4375 + +-> +_ddr_be32 +, +t +-> +t_sour_be16 +, + +4376 +IPPROTO_TCP +, +pkt +-> +tf_i +,kt-> +vn +, + +4377 +ci_t_rx_div_to_cn +, & +rxp +, + +4378 & +rxp +. +hash +); + +4379 if( + `CI_LIKELY + +rxp +. +pkt + = +NULL + )) + +4382 + `ci_tif_fr_f_ch_mch +( +tif +, + +4383 + +-> +_daddr_be32 +, +t +-> +t_de_be16 +, + +4384 0, 0, +IPPROTO_TCP +, +pkt +-> +tf_i +,kt-> +vn +, + +4385 +ci_t_rx_div_to_li +, & +rxp +, +NULL +); + +4386 if( + `CI_LIKELY + +rxp +. +pkt + = +NULL + )) + +4389 + `ci_tif_fr_f_ch_mch +( +tif +, + +4390 0, +t +-> +t_de_be16 +, + +4391 0, 0, +IPPROTO_TCP +, +pkt +-> +tf_i +,kt-> +vn +, + +4392 +ci_t_rx_div_to_li +, & +rxp +, +NULL +); + +4393 if( + `CI_LIKELY + +rxp +. +pkt + = +NULL + )) + +4396 + `hd_no_mch +( +tif +, & +rxp +); + +4399 +sed +: + +4400 + `LOG_E +( + `ci_log +( +FN_FMT + "scatteredacket dropped,robablyarge jumbo " + +4401 "(q %08x, %d IP bys),", + `FN_PRI_ARGS +( +tif +), + +4402 + `CI_BSWAP_BE32 +( +t +-> +t_q_be32 +), +_yn +)); + +4403 + `ci_tif_pkt_a_rx_1f +( +tif +, +pkt +); + +4404 + } +} + + @tcp_rx.h + +1 #ide +__TCP_RX_H__ + + +2  + #__TCP_RX_H__ + + + ) + +4  + ~ + +7 +ci_le +  + $ci_t_rx_t_i +( +ci_t_e +* +ts +,  +i +) + +9 + `ci_as_equ +( + `t_rcv_u +( +ts +), 0); + +10 +ts +-> +s +. +rx_i + = +i +; + +11 + `t_rcv_nxt +( +ts + +i +; + +12 +ts +-> +rcv_added + =s-> +rcv_dived + = +i +; + +13 + } +} + +16 +ci_le +  + $ci_t_ed_ack +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +26 #i +CI_CFG_DYNAMIC_ACK_RATE + + +31 (( +ts +-> +acks_ndg + & +CI_TCP_ACKS_PENDING_MASK +> + `NI_OPTS +( +ni +). +dyck_thsh +) + +33 (( +ts +-> +acks_ndg + & +CI_TCP_ACKS_PENDING_MASK +> + `NI_OPTS +( +ni +). +dack_thsh +) + +35 || ( + `SEQ_GE +( +ts +-> +rcv_dived + +s-> +rcv_wdow_max +, + +36 +ts +-> +rcv_wnd_right_edge_ ++ + `ci_t_ack_igg_d +(ts)) | + +37 ( + `ci_t_is__硡t +( +ts +) ) ); + +38 + } +} + +41 +ci_le +  + $ci_t_rx_po_pl +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +43 + `LOG_TR +( + `ci_log +("%s: " +NTS_FMT + "acks=%x %s", +__FUNCTION__ +, + +44 + `NTS_PRI_ARGS +( +ni +, +ts +),s-> +acks_ndg +, + +45 + `ci_t_ndq_n_emy +( +ts +) ? " SENDQ":"")); + +47 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +48 + `ci_as +( +ts +-> +s +. +b +. +sb_ags + & +CI_SB_FLAG_TCP_POST_POLL +); + +50 +ts +-> +s +. +b +. +sb_ags + &=~ +CI_SB_FLAG_TCP_POST_POLL +; + +52 if + `ci_t_ndq_n_emy +( +ts +) ) + +53 + `ci_t_tx_adv +( +ts +, +ni +); + +55 #i +CI_CFG_TCP_FASTSTART + + +56 if + `ci_t_time_now +( +ni +- +ts +-> +t_ev_cv_yld + > + `NI_CONF +i). +tcڡ_id + ) { + +57 if +ts +-> +tags + & +CI_TCPT_FLAG_NO_QUICKACK + ) + +58 +ts +-> +tags + &=~ +CI_TCPT_FLAG_NO_QUICKACK +; + +60 +ts +-> +硡t_acks + = + `NI_OPTS +( +ni +). +t_硡t_id +; + +62 +ts +-> +t_ev_cv_yld + =s-> +t_ϡ_cv_yld +; + +65 if +ts +-> +acks_ndg + ) { + +66 #ide +NDEBUG + + +67 if + `TCP_ACK_FORCED +( +ts +) ) + +68 + `ci_log +("%s: " +NTS_FMT + "ACK_FORCED flag set unexpectedly: %x", + +69 +__FUNCTION__ +, + `NTS_PRI_ARGS +( +ni +, +ts +),s-> +acks_ndg +); + +72 if + `OO_SP_NOT_NULL +( +ts +-> +lol_ +) ) { + +73 if +ts +-> +acks_ndg + ) + +74 + `ci_t_nd_ack_loback +( +ni +, +ts +, +CI_FALSE +); + +77 if + `ci_t_ed_ack +( +ni +, +ts +) ) { + +78 +ci__pkt_fmt +* +pkt + = + `ci_tif_pkt_loc +( +ni +); + +79 if( + `CI_LIKELY + +pkt + ! +NULL + )) { + +80 + `ci_t_nd_ack +( +ni +, +ts +, +pkt +, +CI_FALSE +); + +84 #i +CI_CFG_DYNAMIC_ACK_RATE + + +86 if + `NI_OPTS +( +ni +). +dyck_thsh + > NI_OPTSi). +dack_thsh +) { + +93 if( +ts +-> +acks_ndg + & +CI_TCP_ACKS_PENDING_MASK +) <= + +94 + `NI_OPTS +( +ni +). +dack_thsh + ) + +95 + `ci_t_dack_check_d_t +( +ni +, +ts +); + +96 if!( +ts +-> +acks_ndg + & +CI_TCP_DELACK_SOON_FLAG +) ) + +97 + `ci_t_dack_so +( +ni +, +ts +); + +99 + `ci_t_dack_check_d_t +( +ni +, +ts +); + +101 + `ci_t_dack_check_d_t +( +ni +, +ts +); + +104 + } +} + +115 +ci_le +  + $ci_t_t_d_max +( +ci_t_e + * +ts +, +ci_ut32 + +q +, + +116 +ci_ut32 + +ack +, ci_ut32 +wnd +) + +118 #i +CI_CFG_NOTICE_WINDOW_SHRINKAGE + + +119 +ts +-> +d_wl1 + = +q +; + +121 +ts +-> +d_max + = +ack + + +wnd +; + +122 + } +} + + @tcp_send.c + +14  + ~"_.h +" + +15  + ~"t_tx.h +" + +16  + ~"_tx.h +" + +18 #i! +defed +( +__KERNEL__ +) + +19  + ~ + +20  + ~ + +22  + ~ + +23  + ~ + +24  + ~ + +25  + ~ + +28  + #LPF + "TCP SEND " + + ) + +31 #i +defed +( +__KERNEL__ +&& defed( +__lux__ +) + +32  + #OO_EINTR + +ERESTARTSYS + + + ) + +34  + #OO_EINTR + +EINTR + + + ) + +40  + #ONLOAD_MSG_DELEGATED + 0x1000 + + ) + +49  + #ylock +( +ni +, +locked +) \ + +50 (( +locked +|| ( + `ci_tif_ylock +( +ni +&& (ocked1))) + + ) + +51  + #si_ylock +( +ni +, +sf +) \ + +52 + `ylock +(( +ni +), ( +sf +)-> +ack_locked +) + + ) + +54  + st_nd_fo + { + +55  + mrc +; + +56 +ci_ut32 + + mtimeout +; + +57 +ci_ut32 + + md_t_d_nxt +; + +58 #i +CI_CFG_BURST_CONTROL + + +59 +ci_ut32 + + md_bur_wdow +; + +61 +ci_ut64 + + mt_c +; + +62  + mt_o +; + +63  + mack_locked +; + +64  + mtٮ_un +; + +65  + mtٮ_ +; + +66  + mndq_ed +; + +67  + mn_eded +; + +68  + mn_fd +; + +69  + mfl_li_bys +; + +70  + mt_nd_ +; + +71 +ci__pkt_fmt +* + mfl_li +; + +72  +oo_pkt_fr + + mpf +; + +76  + $ci_t_tx_adv_g +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +83 +ci__pkt_queue +* +ndq + = & +ts +-> +nd +; + +84 +ci__pkt_fmt +* +pkt + = +NULL +; + +86 + `ci_as +( + `ci__queue_is_vid +( +ni +, +ndq +)); + +87 + `ci_as +(! + `ci__queue_is_emy +( +ndq +)); + +89 if( +ndq +-> +num + !1| ( + `ci_t_ight +( +ts +) == 0) | + +90 + `OO_SP_NOT_NULL +( +ts +-> +lol_ +)) { + +91 +adv_now +: + +93 + `ci__time_sync +( + `IPTIMER_STATE +( +ni +)); + +94 + `ci_t_tx_adv +( +ts +, +ni +); + +95 if( + `CI_UNLIKELY + +ni +-> +ags + & +CI_NETIF_FLAG_MSG_WARM + )) + +97  +pl_d_out +; + +100 + `ci_as +(! ( +ni +-> +ags + & +CI_NETIF_FLAG_MSG_WARM +)); + +106 +pkt + = + `PKT_CHK +( +ni +, +ndq +-> +hd +); + +107 + `ci_as +(!( + `TX_PKT_TCP +( +pkt +)-> +t_ags + & ( +CI_TCP_FLAG_SYN +| +CI_TCP_FLAG_FIN +))); + +109 if( + `PKT_TCP_TX_SEQ_SPACE +( +pkt +> + `t_eff_mss +( +ts +)) | + +110 ( + `SEQ_LT +( + `t_d_u +( +ts +), + `t_d_up +(ts)) ) ) + +111  +adv_now +; + +113 if +ts +-> +s +. +s_aags + & +CI_SOCK_AFLAG_NODELAY + ) { + +121 if +ts +-> +s +. +num + < + `NI_OPTS +( +ni +). +nag_ight_max + || + +122 ( +ts +-> +eff_mss + *s-> +s +. +num + < + `ci_t_ight +(ts) * 2) ) + +123  +adv_now +; + +126 + `LOG_TV +( + `log +( +LPF + "%d Nagle snd=%08x-%08x-%08xnq=%08xkt=%x-%x", + +127 + `S_FMT +( +ts +), + `t_d_u +s), + `t_d_nxt +(ts), + +128 +ts +-> +d_max +, + `t_q_nxt +(ts), + +129 +pkt +-> +pf +. +t_tx +. +t_q +,kt->pf.t_tx. +d_q +)); + +130 ++ +ts +-> +s +. +tx__g +; + +132 +pl_d_out +: + +133 if + `ci_tif_may_pl +( +ni +&& + `ci_tif_has_evt +(ni) ) + +134 + `ci_tif_pl +( +ni +); + +135 + } +} + +138 +ci_le +  + $ci_t_tx_n_pkts_eded +( +eff_mss +,  +maxbys +, + +139  +maxbufs +,  +ndq_ed +) { + +143  +n + = ( +maxbys + + +eff_mss + - 1) /ff_mss; + +144 if +n + > +ndq_ed + ) = sendq_credit; + +145 if +n + > +maxbufs + ) = maxbufs; + +146  +n +; + +147 + } +} + +150 +ci_le +  + $__ci_t_tx_pkt_ +( +ci__pkt_fmt +* +pkt +,  +hd +,  +maxn +) + +152 + `oo_offbuf_ +(& +pkt +-> +buf +, ( +ut8_t +* + `oo_tx_h_da +kt+ +hd +, +maxn +); + +153 +pkt +-> +buf_n + =kt-> +y_n + = +hd + + + `oo_h_hdr_size +(pkt); + +154 +pkt +-> +pf +. +t_tx +. +t_q + = +hd +; + +155 +pkt +-> +pf +. +t_tx +. +d_q + = 0; + +156 + } +} + +159 +ci_le +  + $ci_t_tx_pkt_ +( +ci__pkt_fmt +* +pkt +,  +hd +,  +maxn +) + +161 + `oo_tx_pkt_yout_ +( +pkt +); + +162 + `__ci_t_tx_pkt_ +( +pkt +, +hd +, +maxn +); + +163 + } +} + +167  +ci_t_ndmsg_fl_pkt +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +168  +t_nd_fo +* +sf +, + +169 +ci_iovec_r +* +piov +,  +hd +, + +170  +maxn + + +171 + $CI_KERNEL_ARG +( +ci_addr_c_t + +addr_c +)) + +174  +n +; + +175 +ci__pkt_fmt +* +pkt + = + `oo_pkt_fr_xt_pkt +( +ni +, & +sf +-> +pf +, sf-> +ack_locked +); + +177 + `ci_as +( +pkt +); + +178 + `ci_as +(! + `ci_iovec_r_is_emy_ݔ +( +piov +)); + +179 + `ci_t_tx_pkt_ +( +pkt +, +hd +, +maxn +); + +180 + `oo_pkt_fr_ +(& +sf +-> +pf +, +pkt +, + +181 ( +ut8_t +* + `oo_tx_h_da +( +pkt ++ +hd +); + +183 #ide +NDEBUG + + +184 + `ci_as_equ +( +pkt +-> +n_bufrs +, 1); + +185 + `ci_as_equ +( +pkt +-> +buf_n +, + `TX_PKT_LEN +(pkt)); + +188 +n + = +sf +-> +tٮ_un + - sf-> +fl_li_bys +; + +189 +n + = + `CI_MIN +( +maxn +,); + +190 +sf +-> +rc + = + `oo_pkt_fl +( +ni +, & +ts +-> +s +, +NULL + , + +191 +CI_FALSE + , & +sf +-> +pf +, +piov +, + +192 +n + + `CI_KERNEL_ARG +( +addr_c +)); + +195 #ifde +__KERNEL__ + + +196 if + `CI_UNLIKELY + +sf +-> +rc + < 0 ) ) { + +197 + `ci_as_equ +( +sf +-> +rc +, - +EFAULT +); + +198  +fl_ed +; + +201 + `ci_as_equ +( +sf +-> +rc +, 0); + +207 + `ci_as_ge +( + `oo_offbuf_ +(& +pkt +-> +buf +), +n +); + +208 + `oo_offbuf_adv +(& +pkt +-> +buf +, +n +); + +211 + `LOG_TV +( + `log +("%s: iov.n=%d iovn=%d=%dkt=%de=%d", +__FUNCTION__ +, + +212 ( + `CI_IOVEC_LEN +(& +piov +-> +io +),iov-> +iovn +, +n +, + +213 + `OO_PKT_FMT +( +pkt +), + `oo_offbuf_ +(&pkt-> +buf +))); + +214 #ide +__KERNEL__ + + +217 + `ci_as +( + `ci_iovec_r_is_emy_ݔ +( +piov +) || + +218 + `oo_offbuf_ +(& +pkt +-> +buf +) == 0 || + +219 +pkt +-> +n_bufrs + = +CI_IP_PKT_SEGMENTS_MAX +); + +221 #ide +NDEBUG + + +222 if(!( + `ci_iovec_r_is_emy_ݔ +( +piov +) || + +223 + `oo_offbuf_ +(& +pkt +-> +buf +) == 0 || + +224 +pkt +-> +n_bufrs + = +CI_IP_PKT_SEGMENTS_MAX +)) + +225 + `LOG_U +( + `ci_log +("%s: couldn't copy data,robably bad user-levelointer", + +226 +__FUNCTION__ +)); + +235 +pkt +-> +pf +. +t_tx +. +d_q + = +n +; + +237 + `ci_as_equ +( + `TX_PKT_LEN +( +pkt +), + +238 + `oo_offbuf_r +(& +pkt +-> +buf +- + `PKT_START +(pkt)); + +239  +n +; + +241 #ifde +__KERNEL__ + + +242 +fl_ed +: + +243 + `LOG_U +( + `ci_log +("%s: fed: %d\n", +__FUNCTION__ +, +sf +-> +rc +)); + +244 + `ci_as +(0); + +247 + } +} + +250  +ci_t_fl_ޒ_bufr +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +, + +251 +ci_iovec_r +* +piov + + +252 + $CI_KERNEL_ARG +( +ci_addr_c_t + +addr_c +)) + +257  +n +; + +259 +n + = + `ci__cy_pkt_om_piov +( +ni +, +pkt +, +piov +, +addr_c +); + +262 + `LOG_TV +( + `log +("%s: iov.n=%d iovn=%d=%dkt=%de=%d", +__FUNCTION__ +, + +263 ( + `CI_IOVEC_LEN +(& +piov +-> +io +),iov-> +iovn +, +n +, + +264 + `OO_PKT_FMT +( +pkt +), + `oo_offbuf_ +(&pkt-> +buf +))); + +265 #ide +__KERNEL__ + + +268 + `ci_as +( + `ci_iovec_r_is_emy +( +piov +) || + +269 + `oo_offbuf_ +(& +pkt +-> +buf +) == 0 || + +270 +pkt +-> +n_bufrs + = +CI_IP_PKT_SEGMENTS_MAX +); + +272 #ide +NDEBUG + + +273 if(!( + `ci_iovec_r_is_emy +( +piov +) || + +274 + `oo_offbuf_ +(& +pkt +-> +buf +) == 0 || + +275 +pkt +-> +n_bufrs + = +CI_IP_PKT_SEGMENTS_MAX +)) + +276 + `LOG_U +( + `ci_log +("%s: couldn't copy data,robably bad user-levelointer", + +277 +__FUNCTION__ +)); + +281 +pkt +-> +pf +. +t_tx +. +d_q + + +n +; + +283  +n +; + +284 + } +} + +288  +ci_t_tx_fl_ndq_ +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +289 +ci_iovec_r +* +piov +, + +290  +t_nd_fo +* +sf + + +291 + $CI_KERNEL_ARG +( +ci_addr_c_t + +addr_c +)) + +293 +ci__pkt_queue +* +ndq + = & +ts +-> +nd +; + +294 +ci__pkt_fmt +* +pkt +; + +295  +n +; + +297 if + `ci__queue_n_emy +( +ndq +&& +ts +-> +s +. +tx_o + == 0 ) { + +298 +pkt + = + `PKT_CHK +( +ni +, +ndq +-> + +); + +299 if + `oo_offbuf_ +(& +pkt +-> +buf +) > 0 ) { + +300 +n + = + `ci_t_fl_ޒ_bufr +( +ni +, +pkt +, +piov + + `CI_KERNEL_ARG +( +addr_c +)); + +301 + `LOG_TV +( + `ci_log +("%s: " +NT_FMT + "sq=%d if=%d bytes=%diov.left=%d " + +302 "pkt.=%d", +__FUNCTION__ +, + `NT_PRI_ARGS +( +ni +, +ts +), + +303 + `SEQ_SUB +( + `t_q_nxt +( +ts +), + `t_d_nxt +(ts)), + +304 + `ci_t_ight +( +ts +), +n +, + `ci_iovec_r_bys_cou +( +piov +), + +305 + `oo_offbuf_ +(& +pkt +-> +buf +))); + +306 + `t_q_nxt +( +ts ++ +n +; + +307 +sf +-> +tٮ_ + + +n +; + +308 +sf +-> +tٮ_un + - +n +; + +319 + } +} + +322 +ci_le +  + $ci_t_ndmsg__pkt +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +323 +ci__pkt_fmt +* +pkt +,  +q +) + +325  +ig_hd +, +exa_ts +; + +328 + `ci_pkt__om_che +( +pkt +, & +ts +-> +s +.pkt); + +334 +ig_hd + = () +pkt +-> +pf +. +t_tx +. +t_q +; + +340 +pkt +-> +pf +. +t_tx +. +t_q + = +q +; + +341 +pkt +-> +pf +. +t_tx +. +d_q + + +q +; + +343 +pkt +-> +pf +. +t_tx +. +block_d + = +OO_PP_NULL +; + +345 + `LOG_TV +( + `log +( +LPF + "%s: %d: %x-%x", +__FUNCTION__ +, + `OO_PKT_FMT +( +pkt +), + +346 +pkt +-> +pf +. +t_tx +. +t_q +,kt->pf.t_tx. +d_q +)); + +357 +exa_ts + = +ts +-> +outgog_hdrs_n + - +ig_hd +; + +358 if +exa_ts + ) + +359 + `ci_t_tx__ti_a +( +ni +, +ts +, +pkt +, + +360 +ig_hd + + + `oo_h_hdr_size +( +pkt +), + +361 +exa_ts +); + +364 + `ci_as_equ +(( + `oo_offbuf_r +(& +pkt +-> +buf +) - + +365 ( + `PKT_START +( +pkt ++ + `oo_h_hdr_size +(pkt) + + +366 ( +ci_4_hdr +) + + +367 ( +ci_t_hdr ++ + `CI_TCP_HDR_OPT_LEN +( + `TX_PKT_TCP +( +pkt +)))), + +368 + `SEQ_SUB +( +pkt +-> +pf +. +t_tx +. +d_q +,pkt->pf.t_tx. +t_q +)); + +371 + `ci_t_tx_pkt_t_d +( +ts +, +pkt +); + +372 + } +} + +375 #i +CI_CFG_PIO + + +377  + $ci_t_tm_offt +() + +379  +CI_CFG_PKT_BUF_SIZE + - ( +t_nd_fo +) - + +380 ( +oo_msg_me +); + +381 + } +} + +384  +oo_msg_me +* + $ci_t_tm_pkt_to_omt +( +ci__pkt_fmt +* +pkt +) + +386  (*((* +pkt + + + `ci_t_tm_offt +()); + +387 + } +} + +390  + $__ci_t_tm_hd_nic_t +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +392 +oo_pkt_p +* + +; + +393  + + = & +ts +-> +tm_hd +; + `OO_PP_NOT_NULL +(*pp); ) { + +394 +ci__pkt_fmt +* +tm + = + `PKT_CHK +( +ni +, * + +); + +395 if +tm +-> +pio_addr + >= 0 ) { + +396 if +ni +-> +e +-> +nic +[ +tm +-> +tf_i +]. +oo_vi_ags + & +OO_VI_FLAGS_PIO_EN + ) { + +397 + `CI_DEBUG_TRY +( + `ef_pio_memy +(& +ni +-> +nic_hw +[ +tm +-> +tf_i +]. +vi +, + +398 + `PKT_START +( +tm +), + +399 +tm +-> +pio_addr +,m-> +buf_n +)); + +402 + `ci_pio_buddy_ +( +ni +, &ni-> +e +-> +nic +[ +tm +-> +tf_i +]. +pio_buddy +, + +403 +tm +-> +pio_addr +,m-> +pio_d +); + +404 +tm +-> +pio_addr + = -1; + +407 + + = & +tm +-> +xt +; + +409 + } +} + +415  + $ci_t_tm_hd_nic_t +( +ci_tif +* +ni +) + +417  +i +; + +419  +i + = 0; i < +ni +-> +e +-> +n__bufs +; ++i ) { + +420 +cp_waab_obj +* +wo + = + `SP_TO_WAITABLE_OBJ +( +ni +, +i +); + +421 +cp_waab +* +w + = & +wo +-> +waab +; + +422 if( +w +-> +e + & +CI_TCP_STATE_TCP_CONN +|| w->= +CI_TCP_CLOSED + ) { + +423 +ci_t_e +* +ts + = & +wo +-> +t +; + +424 if + `OO_PP_NOT_NULL +( +ts +-> +tm_hd +) ) + +425 + `__ci_t_tm_hd_nic_t +( +ni +, +ts +); + +428 + } +} + +433  + $ci_t_tm_move +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +434 +ci__pkt_fmt +* +tm +) + +436  +oo_msg_me +* +omt + = + `ci_t_tm_pkt_to_omt +( +tm +); + +437 +oo_pkt_p +* + +; + +439  + + = & +ts +-> +tm_hd +; * ! + `OO_PKT_P +( +tm +); ) + +440 + + = &( + `PKT_CHK +( +ni +, *)-> +xt +); + +441 * + + = +tm +-> +xt +; + +442 --( +ts +-> +s +. +tx_tm_aive +); + +443 +omt +-> +oomt_sock_id + = +OO_SP_NULL +; + +444 + } +} + +452  + $ci_t_tm_ +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +453 +ci__pkt_fmt +* +tm +,  +_li +) + +455 + `ci_as +( +ni +); + +456 + `ci_as +( +ts +); + +457 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +459 if +tm +-> +pio_addr + >= 0 ) { + +460 + `ci_pio_buddy_ +( +ni +, &ni-> +e +-> +nic +[ +tm +-> +tf_i +]. +pio_buddy +, + +461 +tm +-> +pio_addr +,m-> +pio_d +); + +462 +tm +-> +pio_addr + = -1; + +464 if +_li + ) + +465 + `ci_t_tm_move +( +ni +, +ts +, +tm +); + +466 -- +ni +-> +e +-> +n_async_pkts +; + +467 + `ci_tif_pkt_a_1f +( +ni +, +tm +); + +468 + } +} + +475  + $ci_t_tm__l +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +477 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +478  + `OO_PP_NOT_NULL +( +ts +-> +tm_hd +) ) { + +479 +ci__pkt_fmt +* +tm + = + `PKT_CHK +( +ni +, +ts +-> +tm_hd +); + +480 +ts +-> +tm_hd + = +tm +-> +xt +; + +481 + `ci_t_tm_ +( +ni +, +ts +, +tm +, 0); + +483 + } +} + +486 #ide +__KERNEL__ + + +488  +ci__pkt_fmt +* + $ci_t_tm_omt_to_pkt +( +oo_msg_me +* +omt +) + +490  (*((* +omt + - + `ci_t_tm_offt +()); + +491 + } +} + +494  +t_nd_fo +* + +495 + $ci_t_tm_omt_to_sf +( +oo_msg_me +* +omt +) + +497  (*( +omt + + 1); + +498 + } +} + +510  + $__ci_t_tm_nm_nd +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +511 +ci__pkt_fmt +* +tm +, + +512  +t_nd_fo +* +sf +,  +ags +) + +514  + #CI_NOT_NULL + ((*)-1) + + ) + +515  +iovec + +iov +[1]; + +516  +rc +; + +518 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +520 +iov +[0]. +iov_ba + = + `CI_TCP_PAYLOAD +( + `PKT_TCP_HDR +( +tm +)); + +521 +iov +[0]. +iov_n + = +sf +-> +tٮ_un +; + +523 if +ts +-> +s +. +b +. +sb_aags + & ( +CI_SB_AFLAG_O_NONBLOCK + | +CI_SB_AFLAG_O_NDELAY +) ) + +524 +ags + | +MSG_DONTWAIT +; + +526 ++ +ts +-> +s +. +tx_tm_nd_ow +; + +529 + `ci_tif_uock +( +ni +); + +530 +rc + = + `ci_t_ndmsg +( +ni +, +ts +, +iov +, 1, +ags + & ~ +ONLOAD_TEMPLATE_FLAGS_SEND_NOW +); + +531 if +rc + < 0 ) { + +532 +rc + = - +o +; + +534 if +rc + < +sf +-> +tٮ_un + ) { + +536 +rc + = - +ts +-> +s +. +tx_o +; + +539 + `ci_as_equ +( +rc +, +sf +-> +tٮ_un +); + +540 +rc + = 0; + +543 + `ci_tif_lock +( +ni +); + +544 + `ci_t_tm_ +( +ni +, +ts +, +tm +, 1); + +545 + `ci_tif_uock +( +ni +); + +547  +rc +; + +548 + } +} + +551  + $ci_t_tm_loc +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +552  +oo_msg_me +** +omt_ +, + +553 cڡ  +iovec +* +l_msg +,  +mn +,  +ags +) + +555  +i +, +max_yld +; + +556  +rc + = 0; + +557 +size_t + +tٮ_un + = 0; + +558 +ci__ched_hdrs +* +che + = & +ts +-> +s +. +pkt +; + +559  +tf_i +; + +560 +ci_tif_e_nic_t +* +n +; + +561 +ci__pkt_fmt +* +pkt +; + +562 +ci_iovec_r + +piov +; + +563 +ci_4_hdr +* + +; + +564  +oo_msg_me +* +omt +; + +565  +t_nd_fo +* +sf +; + +567 #i + `defed +( +__powpc64__ +) + +568 + `LOG_U +( + `ci_log +("%s: ThiAPI in su܋d oPowPC y.", +__FUNCTION__ +)); + +569  - +ENOSYS +; + +580 if( + `CI_UNLIKELY + +ags + & ~ +ONLOAD_TEMPLATE_FLAGS_PIO_RETRY + )) { + +581 + `LOG_E +( + `ci_log +("%s: cd wh unsu܋d fgs=%x", +__FUNCTION__ +, +ags +)); + +582  - +EINVAL +; + +585 + `ci_tif_lock +( +ni +); + +587 if( + `CI_UNLIKELY +(~ +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_SYNCHRONISED +) )) { + +590 + `LOG_U +( + `ci_log +("ci_tcp_tmpl_alloc:ot synchronized\n")); + +591 +rc + = - +ENOTCONN +; + +592  +out +; + +594 + `ci_as_equ +( +ts +-> +s +. +tx_o +, 0); + +598 if( + `CI_UNLIKELY +! + `ci__che_is_vid +( + `CICP_HANDLE +( +ni +), +che +) )) { + +599 + `ci_ur_ve +( +ni +, +che +, & +ts +-> +s +. + +); + +600  +che +-> +us + ) { + +601  +rc_sucss +: + +607  +rc_nomac +: + +618  +rc_loou +: + +619  +lol_rou +; + +622 + `LOG_U +( + `ci_log +("%s: cus=%d", +__FUNCTION__ +, +che +-> +us +)); + +623 +rc + = - +EHOSTUNREACH +; + +624  +out +; + +628 if +che +-> +ags + & +CI_IP_CACHE_IS_LOCALROUTE + ) { + +629 +lol_rou +: + +630 + `LOG_U +( + `ci_log +("%s:emplated sendsot supported onoopback connections", + +631 +__FUNCTION__ +)); + +632 +rc + = - +EOPNOTSUPP +; + +633  +out +; + +636 +tf_i + = +che +->intf_i; + +637 +n + = & +ni +-> +e +-> +nic +[ +tf_i +]; + +640  +i + = 0; i < +mn +; ++i ) { + +641 #ide +NDEBUG + + +642 if +l_msg +[ +i +]. +iov_ba + = +NULL + ) { + +643 +rc + = - +EFAULT +; + +644  +out +; + +647 +tٮ_un + + +l_msg +[ +i +]. +iov_n +; + +661  +max_pio_pkt +, +max_buf_pkt +; + +662 +max_pio_pkt + = +n +-> +pio_io_n + - +ETH_VLAN_HLEN +; + +663 +max_buf_pkt + = + +664 +CI_CFG_PKT_BUF_SIZE + - + `CI_MEMBER_OFFSET +( +ci__pkt_fmt +, +dma_t +); + +665 +max_yld + = + `CI_MIN +( +max_buf_pkt +, +max_pio_pkt +); + +666 +max_yld + - +ts +-> +outgog_hdrs_n + + +ETH_HLEN +; + +667 +max_yld + -( +t_nd_fo +); + +668 +max_yld + -( +oo_msg_me +); + +670 if +tٮ_un + > +max_yld + ) { + +671 +rc + = - +E2BIG +; + +672  +out +; + +676 if( +pkt + = + `ci_tif_pkt_tx_t_loc +( +ni +, +ts +)= +NULL + ) { + +677 +rc + = - +EBUSY +; + +678  +out +; + +680 ++( +ni +-> +e +-> +n_async_pkts +); + +688 + `ci_as_equ +( +pkt +-> +pio_addr +, -1); + +689 +pkt +-> +tf_i + = intf_i; + +690 +pkt +-> +pio_d + = + `ci_log2_ge +( +ts +-> +outgog_hdrs_n + + +ETH_HLEN + + +ETH_VLAN_HLEN + + +691 + +tٮ_un +, +CI_CFG_MIN_PIO_BLOCK_ORDER +); + +692 +pkt +-> +pio_addr + = + `ci_pio_buddy_loc +( +ni +, & +n +-> +pio_buddy +,kt-> +pio_d +); + +693 if +pkt +-> +pio_addr + < 0 ) { + +694 +pkt +-> +pio_addr + = -1; + +695 if! ( +ags + & +ONLOAD_TEMPLATE_FLAGS_PIO_RETRY +) ) { + +696 + `ci_tif_pkt_a_1f +( +ni +, +pkt +); + +697 --( +ni +-> +e +-> +n_async_pkts +); + +698 +rc + = - +ENOMEM +; + +699  +out +; + +703 +omt + = + `ci_t_tm_pkt_to_omt +( +pkt +); + +704 * +omt_ + = +omt +; + +705 +omt +-> +oomt_sock_id + = + `S_SP +( +ts +); + +707 +sf + = + `ci_t_tm_omt_to_sf +( +omt +); + +708 +sf +-> +n_eded + = 1; + +709 +sf +-> +tٮ_un + =otal_unsent; + +710 +sf +-> +tٮ_ + = 0; + +711 +sf +-> +pf +. +loc_pkt + = +NULL +; + +712 +sf +-> +fl_li + = 0; + +713 +sf +-> +fl_li_bys + = 0; + +714 +sf +-> +n_fd + = 0; + +715 + `oo_pkt_fr_add_pkt +(& +sf +-> +pf +, +pkt +); + +716 +pkt +-> +xt + = +ts +-> +tm_hd +; + +717 +ts +-> +tm_hd + = + `OO_PKT_P +( +pkt +); + +721 if +ts +-> +s +. +timeampg_ags + & +ONLOAD_SOF_TIMESTAMPING_TX_HARDWARE + ) + +722 +pkt +-> +ags + | +CI_PKT_FLAG_TX_TIMESTAMPED +; + +726 + `ci_iovec_r__nz +(& +piov +, +l_msg +, +mn +); + +727 +sf +-> +fl_li_bys + += + +728 + `ci_t_ndmsg_fl_pkt +( +ni +, +ts +, +sf +, & +piov +,s-> +outgog_hdrs_n +, + +729 + `t_eff_mss +( +ts +)); + +730 ++ +sf +-> +n_fd +; + +731 + `CI_USER_PTR_SET +( +sf +-> +pf +. +pkt +->pf. +t_tx +. +xt +, sf-> +fl_li +); + +732 +sf +-> +fl_li + = sf-> +pf +. +pkt +; + +733 + `ci_t_ndmsg__pkt +( +ni +, +ts +, +pkt +, + `t_q_nxt +(ts)); + +735 + `TX_PKT_TCP +( +sf +-> +fl_li +)-> +t_ags + = + +736 +CI_TCP_FLAG_PSH + | +CI_TCP_FLAG_ACK +; + +740 + + = + `oo_tx__hdr +( +pkt +); + +741 + `ci_t_tx_fish +( +ni +, +ts +, +pkt +); + +742 + `ci_t__hdr_ +( + +, + `TX_PKT_LEN +( +pkt +- + `oo_h_hdr_size +(pkt)); + +750 + `ci__t_mac_d_pt +( +ni +, +che +, +pkt +); + +752 if +pkt +-> +pio_addr + >= 0 ) { + +753 +rc + = + `ef_pio_memy +(& +ni +-> +nic_hw +[ +tf_i +]. +vi +, + `PKT_START +( +pkt +), + +754 +pkt +-> +pio_addr +,kt-> +buf_n +); + +755 + `ci_as_equ +( +rc +, 0); + +758 ++ +ts +-> +s +. +tx_tm_aive +; + +760 +out +: + +761 + `ci_tif_uock +( +ni +); + +762  +rc +; + +763 + } +} + +767 + $ci_t_tm_upde +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +768  +oo_msg_me +* +omt +, + +769 cڡ  +ld_me_msg_upde_iovec +* +updes +, + +770  +un +,  +ags +) + +779  +i +, +diff +, +rc +, +_is_vid +; + +780 +ci__ched_hdrs +* +che +; + +781 +ci__pkt_fmt +* +pkt +; + +782 +ci_t_hdr +* +t +; + +783 +ef_vi +* +vi +; + +784 +ci_ut8 +* +t_ts +; + +785  +t_nd_fo +* +sf +; + +790 if( + `CI_UNLIKELY + +ags + & ~( +ONLOAD_TEMPLATE_FLAGS_SEND_NOW + | + +791 +ONLOAD_TEMPLATE_FLAGS_DONTWAIT +) )) { + +792 + `LOG_E +( + `ci_log +("%s: cd wh unsu܋d fgs=%x", +__FUNCTION__ +, +ags +)); + +793  - +EINVAL +; + +796 + `ci_tif_lock +( +ni +); + +798 +che + = & +ts +-> +s +. +pkt +; + +799 +pkt + = + `ci_t_tm_omt_to_pkt +( +omt +); + +800 +t + = + `TX_PKT_TCP +( +pkt +);; + +801 +vi + = & +ni +-> +nic_hw +[ +pkt +-> +tf_i +].vi; + +802 +t_ts + = + `CI_TCP_HDR_OPTS +( +t +); + +803 +sf + = + `ci_t_tm_omt_to_sf +( +omt +); + +805 if( + `CI_UNLIKELY + +omt +-> +oomt_sock_id + ! + `S_SP +( +ts +) )) { + +806 +rc + = - +EINVAL +; + +807 + `ci_t_tm_ +( +ni +, +ts +, +pkt +, 1); + +808  +out +; + +810 if( + `CI_UNLIKELY + +ts +-> +s +. +so_r + )) { + +811 +rc + = - + `ci_g_so_r +(& +ts +-> +s +); + +812 if +rc + < 0 ) { + +813 + `ci_t_tm_ +( +ni +, +ts +, +pkt +, 1); + +814  +out +; + +817 if( + `CI_UNLIKELY + +ts +-> +s +. +tx_o + )) { + +818 +rc + = - +ts +-> +s +. +tx_o +; + +819 + `ci_t_tm_ +( +ni +, +ts +, +pkt +, 1); + +820  +out +; + +823 if( + `CI_UNLIKELY + +pkt +-> +pio_addr + == -1 && + +824 ! ( +ags + & +ONLOAD_TEMPLATE_FLAGS_SEND_NOW +) )) { + +825 +pkt +-> +pio_addr + = + +826 + `ci_pio_buddy_loc +( +ni +, &ni-> +e +-> +nic +[ +pkt +-> +tf_i +]. +pio_buddy +, + +827 +pkt +-> +pio_d +); + +828 if +pkt +-> +pio_addr + >= 0 ) { + +829 +rc + = + `ef_pio_memy +(& +ni +-> +nic_hw +[ +pkt +-> +tf_i +]. +vi +, + `PKT_START +(pkt), + +830 +pkt +-> +pio_addr +,kt-> +buf_n +); + +831 + `ci_as +( +rc + == 0); + +834 +pkt +-> +pio_addr + = -1; + +840  +i + = 0; i < +un +; ++i ) { + +842 if +updes +[ +i +]. +mu_n + == 0 || + +843 +updes +[ +i +]. +mu_offt + < 0 || + +844 #ide +NDEBUG + + +845 +updes +[ +i +]. +mu_ba + = +NULL + || + +847 +updes +[ +i +]. +mu_offt + + updes[i]. +mu_n + > +sf +-> +tٮ_un + ) { + +848 +rc + = - +EINVAL +; + +849  +out +; + +851 + `ci_as +(( + `CI_TCP_PAYLOAD +( + `PKT_TCP_HDR +( +pkt +)- + `PKT_START +(pkt)) + + +852 +updes +[ +i +]. +mu_offt + >= 0); + +854 if( + `CI_UNLIKELY + +pkt +-> +pio_addr + != -1 )) { + +855 +rc + = + `ef_pio_memy +( +vi +, +updes +[ +i +]. +mu_ba +, + +856 +pkt +-> +pio_addr + + ( +ci_ut32 +) + +857 ( + `CI_TCP_PAYLOAD +( + `PKT_TCP_HDR +( +pkt +)- + `PKT_START +(pkt)) + + +858 +updes +[ +i +]. +mu_offt +, + +859 +updes +[ +i +]. +mu_n +); + +860 + `ci_as_equ +( +rc +, 0); + +862 + `memy +((*) + `CI_TCP_PAYLOAD +( + `PKT_TCP_HDR +( +pkt +)+ +updes +[ +i +]. +mu_offt +, + +863 +updes +[ +i +]. +mu_ba +, updes[i]. +mu_n +); + +866 if! ( +ags + & +ONLOAD_TEMPLATE_FLAGS_SEND_NOW +) ) { + +872 +rc + = 0; + +873  +out +; + +876 +_is_vid + = + `ci__che_is_vid +( + `CICP_HANDLE +( +ni +), +che +); + +877 if +_is_vid + && + +878 ! + `memcmp +( + `oo_tx_h_hdr +( +pkt +), + `ci__che_h_hdr +( +che +), + +879 + `oo_h_hdr_size +( +pkt +)) && + +880 +pkt +-> +pio_addr + != -1 ) { + +885 if +pkt +-> +pio_addr + == -1 ) { + +891  + `__ci_t_tm_nm_nd +( +ni +, +ts +, +pkt +, +sf +, +ags +); + +893 if +_is_vid + ) { + +901 + `ci_as_ge +( +pkt +-> +pio_addr +, 0); + +902 + `ci__t_mac_d_pt +( +ni +, +che +, +pkt +); + +903 if + `oo_h_hdr_size +( +pkt +) == + +904 (*)& +che +-> + + - (*) + `ci__che_h_hdr +(ipcache) ) + +906 +rc + = + `ef_pio_memy +( +vi +, + `PKT_START +( +pkt +),kt-> +pio_addr +, + +907 (*) + `PKT_TCP_HDR +( +pkt +- + `PKT_START +(pkt)); + +909 +rc + = + `ef_pio_memy +( +vi +, + `PKT_START +( +pkt +),kt-> +pio_addr +,kt-> +buf_n +); + +910 + `ci_as_equ +( +rc +, 0); + +915  + `__ci_t_tm_nm_nd +( +ni +, +ts +, +pkt +, +sf +, +ags +); + +918 + `ci_as_ge +( +pkt +-> +pio_addr +, 0); + +920 if + `ci__queue_is_emy +(& +ts +-> +nd +&& + `ef_vi_sm_a +( +vi +) > 0 && + +921 + `ci_t_ight +( +ts ++s-> +smss + < + `CI_MIN +s-> +cwnd +, + `t_d_wnd +(ts)) ) { + +926 if + `CI_BSWAP_BE32 +( +t +-> +t_q_be32 +! + `t_q_nxt +( +ts +) ) { + +930 +diff + = + `t_q_nxt +( +ts +- + `CI_BSWAP_BE32 +( +t +-> +t_q_be32 +); + +931 +pkt +-> +pf +. +t_tx +. +d_q + + +diff +; + +932 +pkt +-> +pf +. +t_tx +. +t_q + + +diff +; + +933 +t +-> +t_q_be32 + = + `CI_BSWAP_BE32 +( + `t_q_nxt +( +ts +)); + +937 +t +-> +t_ack_be32 + = + `CI_BSWAP_BE32 +( + `t_rcv_nxt +( +ts +)); + +938 + `ci_t_lc_rcv_wnd +( +ts +, "tmpl_update"); + +939 +t +-> +t_wdow_be16 + = + `TS_TCP +( +ts +)->tcp_window_be16; + +942 if +ts +-> +tags + & +CI_TCPT_FLAG_TSO + ) { + +943  +now + = + `ci_t_time_now +( +ni +); + +944 + `ci_t_tx_t_tso +(& +t_ts +, +now +, +ts +-> +te +); + +947 + `ci_tif_pkt_hd +( +ni +, +pkt +); + +948 + `__ci_tif_dmaq___pkt +( +ni +, +pkt +); + +953 +rc + = + `ef_pio_memy +( +vi +, + `TX_PKT_TCP +( +pkt +), + +954 +pkt +-> +pio_addr + + (* + `TX_PKT_TCP +(pkt) - + +955 + `PKT_START +( +pkt +), + `CI_TCP_PAYLOAD +( + `PKT_TCP_HDR +(pkt)) - + +956 (*) + `TX_PKT_TCP +( +pkt +)); + +957 + `ci_as_equ +( +rc +, 0); + +961 +rc + = + `ef_vi_sm_pio +( +vi +, +pkt +-> +pio_addr +,kt-> +y_n +, + `OO_PKT_ID +(pkt)); + +962 + `ci_as_equ +( +rc +, 0); + +965 + `t_d_nxt +( +ts + +pkt +-> +pf +. +t_tx +. +d_q +; + +966 + `t_q_nxt +( +ts + +pkt +-> +pf +. +t_tx +. +d_q +; + +967 +pkt +-> +pf +. +t_tx +. +block_d + = +OO_PP_NULL +; + +968 + `ci_t_tm_move +( +ni +, +ts +, +pkt +); + +969 + `ci__queue_queue +( +ni +, & +ts +-> +s +, +pkt +); + +970 -- +ni +-> +e +-> +n_async_pkts +; + +971 ++ +ts +-> +s +. +tx_tm_nd_ +; + +978  + `__ci_t_tm_nm_nd +( +ni +, +ts +, +pkt +, +sf +, +ags +); + +981 +out +: + +982 + `ci_tif_uock +( +ni +); + +983  +rc +; + +984 + } +} + +987  + $ci_t_tm_abt +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +988  +oo_msg_me +* +omt +) + +990 +ci__pkt_fmt +* +tm + = + `ci_t_tm_omt_to_pkt +( +omt +); + +991  +rc + = 0; + +992 + `ci_tif_lock +( +ni +); + +993 if +omt +-> +oomt_sock_id + ! + `S_SP +( +ts +) ) { + +994 +rc + = - +EINVAL +; + +995  +out +; + +997 + `ci_t_tm_ +( +ni +, +ts +, +tm +, 1); + +998 +out +: + +999 + `ci_tif_uock +( +ni +); + +1000  +rc +; + +1001 + } +} + +1007  + $ci_t_ndmsg_queue +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1008 +ci__pkt_fmt +* +v_li +, + +1009  +tٮ_bys +, + +1010 +ci__pkt_queue +* +ndq +) + +1012  +q + = + `t_q_nxt +( +ts ++ +tٮ_bys +; + +1013 +oo_pkt_p + +_pkt_id + = + `OO_PKT_P +( +v_li +); + +1014 +oo_pkt_p + +nd_li + = +OO_PP_NULL +; + +1015 +ci__pkt_fmt +* +pkt +; + +1016  +n_pkts + = 0; + +1018 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +1019 + `ci_as_equ +( +ts +-> +s +. +tx_o +, 0); + +1022 +pkt + = +v_li +; + +1023 +v_li + = ( +ci__pkt_fmt + *) + `CI_USER_PTR_GET +( +pkt +-> +pf +. +t_tx +. +xt +); + +1025 +q + - +pkt +-> +pf +. +t_tx +. +d_q +; + +1026 + `ci_t_ndmsg__pkt +( +ni +, +ts +, +pkt +, +q +); + +1028 +pkt +-> +xt + = +nd_li +; + +1029 +nd_li + = + `OO_PKT_P +( +pkt +); + +1030 ++ +n_pkts +; + +1032  +v_li + ); + +1034 + `ci_as_equ +( + `t_q_nxt +( +ts +), +q +); + +1035 + `t_q_nxt +( +ts ++ +tٮ_bys +; + +1038 +ni +-> +e +-> +n_async_pkts + - +n_pkts +; + +1039 +ndq +-> +num + + +n_pkts +; + +1040 if + `OO_PP_IS_NULL +( +ndq +-> +hd +) ) + +1041 +ndq +-> +hd + = +nd_li +; + +1043 + `PKT_CHK +( +ni +, +ndq +-> + +)-> +xt + = +nd_li +; + +1044 +ndq +-> + + = +_pkt_id +; + +1046 + `LOG_TV +( + `ci_log +("%s: " +NT_FMT + "sendq.num=%dnq_nxt=%x", + +1047 +__FUNCTION__ +, + `NT_PRI_ARGS +( +ni +, +ts +), + +1048 +ndq +-> +num +, + `t_q_nxt +( +ts +))); + +1049 + `CHECK_TS +( +ni +, +ts +); + +1051  +n_pkts +; + +1052 + } +} + +1055  + $ci_t_tx_equeue +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1056 +ci__pkt_fmt +* +fl_li +) + +1058 +ci__pkt_fmt +* +xt +; + +1059 +ci__pkt_fmt +* +pkt +; + +1060  +n_pkts + = 0; + +1063 +pkt + = +fl_li +; + +1065 ++ +n_pkts +; + +1066 if! ( +xt + = + `CI_USER_PTR_GET +( +pkt +-> +pf +. +t_tx +.next)) ) ; + +1067 +pkt +-> +xt + = + `OO_PKT_P +(next); + +1068 +pkt + = +xt +; + +1071 + `oo_omic_add +(& +ts +-> +nd_equeue_ +, +n_pkts +); + +1072 ++ +ts +-> +s +. +tx_der +; + +1076 + `OO_PP_INIT +( +ni +, +pkt +-> +xt +, +ts +-> +nd_equeue +); + +1077  + `ci_s32_ +(& +ts +-> +nd_equeue +, + +1078 + `OO_PP_ID +( +pkt +-> +xt +), + `OO_PKT_ID +( +fl_li +)) ); + +1079 + } +} + +1082  + $ci_t_ndmsg_queue_equeue +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +1084 +ci__pkt_queue +* +ndq + = & +ts +-> +nd +; + +1085 +ci__pkt_fmt +* +pkt +; + +1086 +oo_pkt_p + +_pkt_id +, +nd_li +, +id +; + +1087  +bys +, +n_pkts + = 0; + +1088 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +1089 + `ci_as +( +ts +-> +s +. +tx_o + == 0); + +1093 + `OO_PP_INIT +( +ni +, +id +, +ts +-> +nd_equeue +); + +1094 if + `OO_PP_IS_NULL +( +id +) ) ; + +1095 }  + `ci_s32_ +(& +ts +-> +nd_equeue +, + `OO_PP_ID +( +id +), +OO_PP_ID_NULL +) ); + +1098 +nd_li + = +OO_PP_NULL +; + +1100 +pkt + = + `PKT_CHK +( +ni +, +id +); + +1101 +id + = +pkt +-> +xt +; + +1102 +pkt +-> +xt + = +nd_li +; + +1103 +nd_li + = + `OO_PKT_P +( +pkt +); + +1104 ++ +n_pkts +; + +1106  + `OO_PP_NOT_NULL +( +id +) ); + +1110 +bys + = +pkt +-> +pf +. +t_tx +. +d_q +; + +1111 + `ci_t_ndmsg__pkt +( +ni +, +ts +, +pkt +, + `t_q_nxt +(ts)); + +1112 if +pkt +-> +ags + & +CI_PKT_FLAG_TX_PSH + ) + +1113 + `TX_PKT_TCP +( +pkt +)-> +t_ags + | +CI_TCP_FLAG_PSH +; + +1114 + `t_q_nxt +( +ts ++ +bys +; + +1116 if + `OO_PP_IS_NULL +( +pkt +-> +xt +) ) ; + +1117 +pkt + = + `PKT_CHK +( +ni +,kt-> +xt +); + +1121 +ni +-> +e +-> +n_async_pkts + - +n_pkts +; + +1122 +ndq +-> +num + + +n_pkts +; + +1126 +_pkt_id + = + `OO_PKT_P +( +pkt +); + +1127 if + `OO_PP_IS_NULL +( +ndq +-> +hd +) ) { + +1128 +ndq +-> +hd + = +nd_li +; + +1129 +pkt + = + `PKT_CHK +( +ni +, +nd_li +); + +1132 +pkt + = + `PKT_CHK +( +ni +, +ndq +-> + +); + +1133 +pkt +-> +xt + = +nd_li +; + +1135 +ndq +-> + + = +_pkt_id +; + +1140  + `OO_PP_NOT_NULL +( +pkt +-> +xt +) ) { + +1141 +ci__pkt_fmt +* +xt + = + `PKT_CHK +( +ni +, +pkt +->next); + +1142 if + `oo_offbuf_ +(& +pkt +-> +buf +> + `PKT_TCP_TX_SEQ_SPACE +( +xt +) ) { + +1143 + `LOG_TT +( + `ci_log +("%s: coalesce %d (bytes=%d) into %d (space=%d)", + +1144 +__FUNCTION__ +, + `OO_PKT_FMT +( +xt +), + `PKT_TCP_TX_SEQ_SPACE +(next), + +1145 + `OO_PKT_FMT +( +pkt +), + `oo_offbuf_ +(&pkt-> +buf +))); + +1146 + `ci_t_tx_cs +( +ni +, +ts +, +ndq +, +pkt +, +CI_TRUE +); + +1147 if! + `OO_PP_EQ +( +pkt +-> +xt +, + `OO_PKT_P +(next)) ) ; + +1148 if + `OO_PP_IS_NULL +( +pkt +-> +xt +) ) ; + +1151 +pkt + = + `PKT_CHK +( +ni +,kt-> +xt +); + +1154 +pkt + = +xt +; + +1156 + } +} + +1159  + $ci_t_ndmsg__pkt_li +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1160 +oo_pkt_p + +pkt_li +,  +tif_locked +, + +1161  +check_a +) + +1166 +ci__pkt_fmt +* +pkt +; + +1167  +n_pkts + = 0; + +1169 + `ci_as +( + `OO_PP_NOT_NULL +( +pkt_li +)); + +1170 + `ci_as +! +tif_locked + || + `ci_tif_is_locked +( +ni +)); + +1172 if! +tif_locked + && ! + `ci_tif_ylock +( +ni +) ) { + +1174 +pkt + = + `PKT +( +ni +, +pkt_li +); + +1175 +pkt_li + = +pkt +-> +xt +; + +1177 + `ci_as_equ +( +pkt +-> +fcou +, 1); + +1178 + `ci_as +(!( +pkt +-> +ags + & +CI_PKT_FLAG_RX +)); + +1179 +pkt +-> +fcou + = 0; + +1180 + `__ci_tif_pkt_n +( +pkt +); + +1181 + `ci_tif_pkt__nb_li +( +ni +, + `OO_PKT_P +( +pkt +),kt); + +1182 ++ +n_pkts +; + +1183 }  + `OO_PP_NOT_NULL +( +pkt_li +) ); + +1187 +pkt + = + `PKT_CHK +( +ni +, +pkt_li +); + +1188 +pkt_li + = +pkt +-> +xt +; + +1189 + `ci_tif_pkt_a_1f +( +ni +, +pkt +); + +1190 ++ +n_pkts +; + +1191 }  + `OO_PP_NOT_NULL +( +pkt_li +) ); + +1192 +ni +-> +e +-> +n_async_pkts + - +n_pkts +; + +1193 if! +tif_locked + ) + `ci_tif_uock +( +ni +); + +1196  +n_pkts +; + +1197 + } +} + +1203  + $ci_tif_pkt_cvt_r_li +( +ci_tif +* +ni +, +ci__pkt_fmt +* +li +) + +1205 +ci__pkt_fmt +* +xt +; + +1206  + `CI_USER_PTR_GET +( +li +-> +pf +. +t_tx +. +xt +) ) { + +1207 +xt + = ( +ci__pkt_fmt +* + `CI_USER_PTR_GET +( +li +-> +pf +. +t_tx +.next); + +1208 +li +-> +xt + = + `OO_PKT_P +(next); + +1209 +li + = +xt +; + +1211 +li +-> +xt + = +OO_PP_NULL +; + +1212 + } +} + +1215  + $ci_t_tx__equeue +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1216  +tif_locked +) + +1218  +n_pkts +; + +1219 +oo_pkt_p + +id +; + +1221 + `ci_as +! +tif_locked + || + `ci_tif_is_locked +( +ni +)); + +1226 + `OO_PP_INIT +( +ni +, +id +, +ts +-> +nd_equeue +); + +1227 if + `OO_PP_IS_NULL +( +id +) ) ; + +1228 }  + `ci_s32_ +(& +ts +-> +nd_equeue +, + `OO_PP_ID +( +id +), +OO_PP_ID_NULL +) ); + +1230 +n_pkts + = + `ci_t_ndmsg__pkt_li +( +ni +, +ts +, +id +, +tif_locked +, 1); + +1232 + `oo_omic_add +(& +ts +-> +nd_equeue_ +, - +n_pkts +); + +1233 + } +} + +1236  + $ci_t_ndmsg_queue_equeue_deed +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +1238 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +1240 if +ts +-> +s +. +tx_o + ) { + +1244 + `LOG_TC +( + `log +("%s: " +NTS_FMT + "tx_o=%d", +__FUNCTION__ +, + +1245 + `NTS_PRI_ARGS +( +ni +, +ts +),s-> +s +. +tx_o +)); + +1246 + `ci_t_tx__equeue +( +ni +, +ts +, 1 ); + +1250 + `ci_t_ndmsg_queue_equeue +( +ni +, +ts +); + +1252 if + `ci_t_ndq_n_emy +( +ts +) ) { + +1256 + `ci_t_tx_adv +( +ts +, +ni +); + +1258 + } +} + +1261 +ci_le +  + $ci_t_ndmsg__unud_pkts +( +ci_tif +* +ni +, + +1262  +t_nd_fo +* +sf +) + +1264 + `oo_pkt_fr__unud_pkts +( +ni +, & +sf +-> +ack_locked +, &sf-> +pf +); + +1265 + } +} + +1268  + $ci_t_ndmsg_nsynchrid +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1269  +ags +,  +t_nd_fo +* +sf +) + +1271 +sf +-> +rc + = 1; + +1275 if +ts +-> +s +. +b +. +e + = +CI_TCP_CLOSED + ) + +1276 +sf +-> +rc + = 0; + +1280 #ifde +__sun__ + + +1282 +sf +-> +rc + = - +ENOTCONN +; + +1284 if +ags + & +MSG_DONTWAIT + ) + +1285 +sf +-> +rc + = - +EAGAIN +; + +1288 if +sf +-> +rc + <= 0 ) + +1291  + #CONNECT_IN_PROGRESS + (( +ts +-> +s +. +b +. +e + = +CI_TCP_SYN_SENT +) && \ + +1292 +ts +-> +s +. +tx_o + =0) + + ) + +1294 if! +sf +-> +ack_locked + ) { + +1295 if( +sf +-> +rc + = + `ci_tif_lock +( +ni +)) ) + +1297 +sf +-> +ack_locked + = 1; + +1299 + `CI_TCP_SLEEP_WHILE +( +ni +, +ts +, +CI_SB_FLAG_WAKE_RX +,s-> +s +. +so +. +rcvtimeo_mc +, + +1300 +CONNECT_IN_PROGRESS +, & +sf +-> +rc +); + +1301 if +sf +-> +rc + !0 || +ts +-> +s +. +tx_o + != 0 ) + +1305 + } +} + +1308  + $ci_t_ndmsg_hd_rc__tx_o +( +ci_tif +* +ni +, + +1309 +ci_t_e +* +ts +, + +1310  +ags +, + +1311  +t_nd_fo +* +sf +) + +1313 +sf +-> +t_o + = 0; + +1315 if +sf +-> +rc + ) { + +1316 +sf +-> +rc + = -sinf->rc; + +1317 +sf +-> +t_o + = 1; + +1320 if +sf +-> +tٮ_ + ) { + +1321 +sf +-> +rc + = sf-> +tٮ_ +; + +1322 +sf +-> +t_o + = 0; + +1325 #i! + `defed +( +__sun__ +) + +1326 if +ts +-> +s +. +so_r + ) { + +1327 +ci_t32 + +rc1 + = + `ci_g_so_r +(& +ts +-> +s +); + +1328 if +rc1 + != 0 ) { + +1329 +sf +-> +rc + = +rc1 +; + +1330 +sf +-> +t_o + = 1; + +1334 if +sf +-> +rc + =0 && +ts +-> +s +. +tx_o + ) { + +1335 + `LOG_TC +( + `log +( +LNT_FMT + "tx_errno=%d flags=%xotal_sent=%d", + +1336 + `LNT_PRI_ARGS +( +ni +, +ts +),s-> +s +. +tx_o +, +ags +, +sf +-> +tٮ_ +)); + +1337 +sf +-> +rc + = +ts +-> +s +. +tx_o +; + +1338 +sf +-> +t_o + = 1; + +1341 + `ci_t_ndmsg__unud_pkts +( +ni +, +sf +); + +1342 if +sf +-> +ack_locked + ) { + +1343 + `ci_tif_uock +( +ni +); + +1344 +sf +-> +ack_locked + = 0; + +1346 + } +} + +1349  + $ci_t_ndmsg_hd_zo__tx_o +( +ci_tif +* +ni +, + +1350 +ci_t_e +* +ts +, + +1351  +ags +, + +1352  +t_nd_fo +* +sf +) + +1354 +sf +-> +rc + = 0; + +1355  + `ci_t_ndmsg_hd_rc__tx_o +( +ni +, +ts +, +ags +, +sf +); + +1356 + } +} + +1359  + $ci_t_ndmsg__fl_li +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1360  +ags +, + +1361  +t_nd_fo +* +sf +) + +1363 if +sf +-> +fl_li + ) { + +1364 + `ci_tif_pkt_cvt_r_li +( +ni +, +sf +-> +fl_li +); + +1365 + `ci_t_ndmsg__pkt_li +( +ni +, +ts +, + `OO_PKT_P +( +sf +-> +fl_li +), + +1366 +sf +-> +ack_locked +, 0); + +1368 + } +} + +1371  + $ci_t_ndmsg_hd_tx_o +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1372  +ags +, + +1373  +t_nd_fo +* +sf +) + +1375 + `ci_t_ndmsg__fl_li +( +ni +, +ts +, +ags +, +sf +); + +1376 + `ci_t_ndmsg__unud_pkts +( +ni +, +sf +); + +1377 + `ci_t_tx__equeue +( +ni +, +ts +, +sf +-> +ack_locked +); + +1378  + `ci_t_ndmsg_hd_zo__tx_o +( +ni +, +ts +, +ags +, +sf +); + +1379 + } +} + +1382  + $ci_t_ndmsg_hd___rc +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1383  +ags +, + +1384  +t_nd_fo +* +sf +) + +1386 + `ci_t_ndmsg__fl_li +( +ni +, +ts +, +ags +, +sf +); + +1387 + `ci_t_ndmsg__unud_pkts +( +ni +, +sf +); + +1388 if +sf +-> +ack_locked + ) { + +1389 + `ci_tif_uock +( +ni +); + +1390 +sf +-> +ack_locked + = 0; + +1392 if +sf +-> +tٮ_ + ) { + +1393 +sf +-> +rc + = sf-> +tٮ_ +; + +1394 +sf +-> +t_o + = 0; + +1397 +sf +-> +rc + = -sinf->rc; + +1398 +sf +-> +t_o + = 1; + +1400 + } +} + +1403  + $ci_t_ndmsg_no_pkt_buf +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1404  +ags +,  +t_nd_fo +* +sf +) + +1406 +ci__pkt_fmt +* +pkt +; + +1408 +pkt + = + `ci_tif_pkt_loc_nb +( +ni +); + +1409 if +pkt + ) + +1410 + `oo_pkt_fr_add_pkt +(& +sf +-> +pf +, +pkt +); + +1413 }  -- +sf +-> +n_eded + > 0 ); + +1415 if +sf +-> +n_eded + == 0 ) + +1418 + `CITP_STATS_NETIF_INC +( +ni +, +t_nd_nb_po_emy +); + +1419 if! + `si_ylock +( +ni +, +sf +) ) { + +1420 if +sf +-> +n_fd + ) + +1422 if( +sf +-> +rc + = + `ci_tif_lock +( +ni +)) != 0 ) { + +1423 + `ci_t_ndmsg_hd___rc +( +ni +, +ts +, +ags +, +sf +); + +1426 +sf +-> +ack_locked + = 1; + +1427 + `CITP_STATS_NETIF_INC +( +ni +, +t_nd_ni_lock_cڋnds +); + +1429 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +1431 if + `ci_tif_may_pl +( +ni +&& + `ci_tif_ed_pl +(ni) && + +1432 ! + `ci_tif_pkt_tx_may_loc +( +ni +) ) + +1436 + `ci_tif_pl +( +ni +); + +1439 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +1441 +pkt + = + `ci_tif_pkt_tx_t_loc +( +ni +, +ts +); + +1442 if +pkt + ) { + +1446 +pkt +-> +ags + = +CI_PKT_FLAG_NONB_POOL +; + +1447 ++ +ni +-> +e +-> +n_async_pkts +; + +1448 + `oo_pkt_fr_add_pkt +(& +sf +-> +pf +, +pkt +); + +1450 if +sf +-> +n_fd + ) { + +1456 }  -- +sf +-> +n_eded + > 0 ); + +1458 if +sf +-> +n_eded + == 0 ) + +1461 + `ci_as +( +sf +-> +fl_li + == 0); + +1464 if( +ags + & +MSG_DONTWAIT +) && + +1465 ( + `NI_OPTS +( +ni +). +t_nblock_no_pkts_mode + == 1) ) { + +1469 +sf +-> +rc + = - +ENOBUFS +; + +1470 + `ci_t_ndmsg_hd___rc +( +ni +, +ts +, +ags +, +sf +); + +1474 +sf +-> +rc + = + `ci_tif_pkt_wa +( +ni +, & +ts +-> +s +, sf-> +ack_locked + ? + +1475 +CI_SLEEP_NETIF_LOCKED + : 0); + +1476 +sf +-> +ack_locked + = 0; + +1477 if + `ci_tif_pkt_wa_was_ued +( +sf +-> +rc +) ) { + +1478 + `ci_t_ndmsg_hd___rc +( +ni +, +ts +, +ags +, +sf +); + +1482 +pkt + = + `ci_tif_pkt_loc_nb +( +ni +); + +1483 if +pkt + ) + +1484 + `oo_pkt_fr_add_pkt +(& +sf +-> +pf +, +pkt +); + +1487 }  -- +sf +-> +n_eded + > 0 ); + +1489 if +ts +-> +s +. +tx_o + ) { + +1490 + `ci_t_ndmsg_hd_tx_o +( +ni +, +ts +, +ags +, +sf +); + +1494 if +sf +-> +n_eded + == 0 ) + +1498 + `ci_as +( +sf +-> +ack_locked + == 0); + +1499 if! + `si_ylock +( +ni +, +sf +) ) { + +1500 if( +sf +-> +rc + = + `ci_tif_lock +( +ni +)) != 0 ) { + +1501 + `ci_t_ndmsg_hd___rc +( +ni +, +ts +, +ags +, +sf +); + +1504 +sf +-> +ack_locked + = 1; + +1505 + `CITP_STATS_NETIF_INC +( +ni +, +t_nd_ni_lock_cڋnds +); + +1510 + `ci_as +(0); + +1512 + } +} + +1515 +ci_le +  + $ci_t_ndmsg_ +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1516  +ags +,  +t_nd_fo +* +sf +) + +1518 +ci_ut64 + +now_c +; + +1519 +ci_ut64 + +schedu_c +; + +1520 +ci_ut64 + +max_ + = +ts +-> +s +. +b +. +_cyes +; + +1521  +_lim_by_so + = 0; + +1522 #ide +__KERNEL__ + + +1523 +cp_sigl_fo +* +si + = + `cp_sigl_g_ecific_ed +(); + +1526 + `ci_c64 +(& +now_c +); + +1527 +schedu_c + = +now_c +; + +1529 if +ts +-> +s +. +so +. +dtimeo_mc + ) { + +1530 +ci_ut64 + +max_so_ + = (ci_ut64) +ts +-> +s +. +so +. +dtimeo_mc + * + +1531 + `IPTIMER_STATE +( +ni +)-> +khz +; + +1532 if +max_so_ + < +max_ + ) { + +1533 +max_ + = +max_so_ +; + +1534 +_lim_by_so + = 1; + +1539 if + `ci_tif_may_pl +( +ni +) ) { + +1540 if + `ci_tif_ed_pl_ng +( +ni +, +now_c +&& + `si_ylock +i, +sf +) ) { + +1541 + `ci_tif_pl_n +( +ni +, + `NI_OPTS +i). +evs_r_pl +); + +1542 +sf +-> +ndq_ed + = + `ci_t_tx_nd_a +( +ni +, +ts +); + +1543 if +sf +-> +ndq_ed + > 0 ) { + +1544 +ni +-> +e +-> +is_r + = 0; + +1547 if +ts +-> +s +. +tx_o + ) { + +1548 +ni +-> +e +-> +is_r + = 0; + +1549 + `ci_t_ndmsg_hd_tx_o +( +ni +, +ts +, +ags +, +sf +); + +1553 if! +ni +-> +e +-> +is_r + ) + +1554 +ni +-> +e +-> +is_r + = 1; + +1556 if +sf +-> +ack_locked + ) { + +1557 + `ci_tif_uock +( +ni +); + +1558 +sf +-> +ack_locked + = 0; + +1560 + `ci_c64 +(& +now_c +); + +1561 +sf +-> +rc + = + `OO_SPINLOOP_PAUSE_CHECK_SIGNALS +( +ni +, +now_c +, & +schedu_c +, + +1562 +ts +-> +s +. +so +. +dtimeo_mc +, + +1563 +NULL +, +si +); + +1564 if +sf +-> +rc + != 0 ) { + +1565 +ni +-> +e +-> +is_r + = 0; + +1566 + `ci_t_ndmsg_hd___rc +( +ni +, +ts +, +ags +, +sf +); + +1569 #i +CI_CFG_SPIN_STATS + + +1570 +ni +-> +e +-> +s +. +_t_nd +++; + +1572 }  +now_c + - +sf +-> +t_c + < +max_ + ); + +1573 +ni +-> +e +-> +is_r + = 0; + +1575 if +_lim_by_so + && +now_c + - +sf +-> +t_c + > +max_ + ) { + +1576 +sf +-> +rc + = - +EAGAIN +; + +1577 + `ci_t_ndmsg_hd___rc +( +ni +, +ts +, +ags +, +sf +); + +1581 if +sf +-> +timeout + ) { + +1582 +ci_ut32 + +time_ + = + `NI_OPTS +( +ni +). +_uc + >> 10; + +1583 if +time_ + > +sf +-> +timeout + ) { + +1584 +sf +-> +rc + = - +EAGAIN +; + +1585 + `ci_t_ndmsg_hd___rc +( +ni +, +ts +, +ags +, +sf +); + +1588 +sf +-> +timeout + - +time_ +; + +1591 + } +} + +1595  + $ci_t_ndmsg_block +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1596  +ags +,  +t_nd_fo +* +sf +) + +1598 +ci_ut64 + +p_q +; + +1600 + `CI_IP_SOCK_STATS_INC_TXSTUCK + +ts + ); + +1603 if +ts +-> +s +. +tx_o + ) { + +1604 + `ci_t_ndmsg_hd_tx_o +( +ni +, +ts +, +ags +, +sf +); + +1611 +p_q + = +ts +-> +s +. +b +.p_q. +l +; + +1612 + `ci_rmb +(); + +1613 +sf +-> +ndq_ed + = + `ci_t_tx_nd_a +( +ni +, +ts +); + +1614 if +sf +-> +ndq_ed + > 0 ) + +1617 + `CI_IP_SOCK_STATS_INC_TXSLEEP + +ts + ); + +1619 +sf +-> +rc + = + +1620 + `ci_sock_p +( +ni +, & +ts +-> +s +. +b +, +CI_SB_FLAG_WAKE_TX +, + +1621 +sf +-> +ack_locked + ? +CI_SLEEP_NETIF_LOCKED + : 0, + +1622 +p_q +, & +sf +-> +timeout +); + +1624 +sf +-> +ack_locked + = 0; + +1626 if +sf +-> +rc + < 0 ) { + +1627 + `ci_t_ndmsg_hd___rc +( +ni +, +ts +, +ags +, +sf +); + +1631 + } +} + +1634  +ci_t_ndmsg_owth +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1635 cڡ +ci_iovec +* +iov +,  +iovn +, + +1636  +ags +,  +t_nd_fo +* +sf + + +1637 + $CI_KERNEL_ARG +( +ci_addr_c_t + +addr_c +)) + +1647  +rc +; + +1648  +q_nxt_befe +; + +1650 if! +sf +-> +tٮ_un + ) { + +1651 +sf +-> +rc + = 0; + +1655 + `ci_as +( +ags + & +MSG_OOB +); + +1657 +rc + = + `ci_tif_lock +( +ni +); + +1658 if +rc + != 0 ) { + +1659 +sf +-> +rc + =c; + +1664 if + `ci_tif_may_pl +( +ni +&& + `ci_tif_ed_pl +(ni) ) + +1665 + `ci_tif_pl +( +ni +); + +1672 + `t_d_up +( +ts + + `t_q_nxt +s+ +sf +-> +tٮ_un +; + +1673 +q_nxt_befe + = + `t_q_nxt +( +ts +); + +1675 +ts +-> +tags + | +CI_TCPT_FLAG_NO_TX_ADVANCE +; + +1677 + `ci_tif_uock +( +ni +); + +1679 +sf +-> +rc + = + `ci_t_ndmsg +( +ni +, +ts +, +iov +, +iovn +, ( +ags + &~ +MSG_OOB +) + +1680 + `CI_KERNEL_ARG +( +addr_c +)); + +1682 +rc + = + `ci_tif_lock +( +ni +); + +1683 if +rc + != 0 ) { + +1688 +sf +-> +rc + =c; + +1697 if +sf +-> +rc + > 0 ) { + +1699 + `t_d_up +( +ts + +q_nxt_befe + + +sf +-> +rc +; + +1700 +ts +-> +tags + &~ +CI_TCPT_FLAG_NO_TX_ADVANCE +; + +1701 + `ci_t_tx_adv +( +ts +, +ni +); + +1704 + `ci_tif_uock +( +ni +); + +1706 + } +} + +1709  + $n_do_msg_wm +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1710  +t_nd_fo +* +sf +,  +tٮ_un +, + +1711  +ags +) + +1723  + `si_ylock +( +ni +, +sf +) && + +1724 + `ci__queue_is_emy +(& +ts +-> +nd +) && + +1725 + `ci__queue_is_emy +(& +ts +-> +s +) && + +1726 ! ( +ags + & +MSG_MORE +) && + +1727 +tٮ_un + < + `t_eff_mss +( +ts +) && + +1728 +tٮ_un + > 0 && + +1729 ! ( +ts +-> +s +. +s_aags + & +CI_SOCK_AFLAG_CORK +) && + +1730 ! +ts +-> +s +. +tx_o + && + +1731 + `SEQ_LE +( + `t_q_nxt +( +ts ++ +tٮ_un +,s-> +d_max +) && + +1732 #i +CI_CFG_PORT_STRIPING + + +1733 ! ( +ts +-> +tags + & +CI_TCPT_FLAG_STRIPE +) && + +1735 ! ( +ts +-> +s +. +pkt +. +ags + & +CI_IP_CACHE_IS_LOCALROUTE +); + +1736 + } +} + +1739  +__ibu__ + (( +__nole__ +))  + +1740 + $ul_msg_wm +( +ci_tif +* +ni +, +ci_t_e +* +ts +,  +t_nd_fo +* +sf +, + +1741  +is_zc_nd +) + +1743 +ci__pkt_fmt +* +pkt +; + +1744 ++ +ts +-> +s +. +tx_msg_wm +; + +1745 +ni +-> +ags + &~ +CI_NETIF_FLAG_MSG_WARM +; + +1746 + `ci__queue_ +(& +ts +-> +nd +); + +1747 +ts +-> +nd_ + = 0; + +1748 + `t_q_nxt +( +ts +- +sf +-> +fl_li_bys +; + +1749 #i +CI_CFG_BURST_CONTROL + + +1750 +ts +-> +bur_wdow + = +sf +-> +d_bur_wdow +; + +1752 + `t_d_nxt +( +ts + +sf +-> +d_t_d_nxt +; + +1753 -- +ts +-> +s +. +tx__p +; + +1754 + `CI_TCP_STATS_DEC_OUT_SEGS +( +ni +); + +1755 if! +is_zc_nd + ) { + +1756 +pkt + = + `PKT_CHK +( +ni +, +ts +-> +nd +. + +); + +1757 + `ci_tif_pkt_a_1f +( +ni +, +pkt +); + +1763 +ni +-> +e +-> +n_async_pkts +++; + +1765 + } +} + +1770 + $ci_t_nd_loc_pkts +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1771  +t_nd_fo +* +sf +,  +g +) + +1773 +ci__pkt_fmt +* +pkt +; + +1774  +rc +; + +1776 + `ci_as_gt +( +sf +-> +tٮ_un +, 0); + +1777 + `ci_as_gt +( +sf +-> +ndq_ed +, 0); + +1779 +sf +-> +n_eded + = + `ci_t_tx_n_pkts_eded +( +ts +-> +eff_mss +, sf-> +tٮ_un +, + +1780 +CI_CFG_TCP_TX_BATCH +, + +1781 +sf +-> +ndq_ed +); + +1782 +rc + = +sf +-> +n_eded +; + +1783 +sf +-> +fl_li + = 0; + +1784 +sf +-> +fl_li_bys + = 0; + +1785 +sf +-> +n_fd + = 0; + +1787 +sf +-> +n_eded + - +g +; + +1789  +sf +-> +n_eded + > 0 ) { + +1790 if + `si_ylock +( +ni +, +sf +) ) { + +1791 if( +pkt + = + `ci_tif_pkt_tx_t_loc +( +ni +, +ts +)) ) { + +1792 ++ +ni +-> +e +-> +n_async_pkts +; + +1793 + `oo_pkt_fr_add_pkt +(& +sf +-> +pf +, +pkt +); + +1796  +rc +;; + +1798  +rc +; + +1799 +sf +-> +n_eded +--; + +1802  +rc +; + +1803 + } +} + +1806 +ci_t_nd_fl_pkts +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1807  +t_nd_fo +* +sf +, +ci_iovec_r +* +piov +, + +1808  +n_pkts + + +1809 + $CI_KERNEL_ARG +( +ci_addr_c_t + +addr_c +)) + +1811 + `ci_as +(! + `ci_iovec_r_is_emy_ݔ +( +piov +)); + +1812 + `ci_as_equ +( +sf +-> +n_eded +, 0); + +1815 +sf +-> +fl_li_bys + += + +1816 + `ci_t_ndmsg_fl_pkt +( +ni +, +ts +, +sf +, +piov +,s-> +outgog_hdrs_n +, + +1817 +ts +-> +eff_mss + + `CI_KERNEL_ARG +( +addr_c +)); + +1818 ++ +sf +-> +n_fd +; + +1820 + `CI_USER_PTR_SET +( +sf +-> +pf +. +pkt +->pf. +t_tx +. +xt +, sf-> +fl_li +); + +1821 +sf +-> +fl_li + = sf-> +pf +. +pkt +; + +1823  -- +n_pkts + > 0 ); + +1824 + } +} + +1828  +ci_t_ndmsg +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1829 cڡ +ci_iovec +* +iov +,  +iovn +, + +1830  +ags + + +1831 + $CI_KERNEL_ARG +( +ci_addr_c_t + +addr_c +)) + +1833 +ci__pkt_queue +* +ndq + = & +ts +-> +nd +; + +1834 +ci__pkt_fmt +* +pkt +; + +1835 +ci_iovec_r + +piov +; + +1836  +m +; + +1837  +t_nd_fo + +sf +; + +1839 + `ci_as +( +iov + ! +NULL +); + +1840 + `ci_as_gt +( +iovn +, 0); + +1841 + `ci_as +( +ts +); + +1842 + `ci_as +( +ts +-> +s +. +b +. +e + ! +CI_TCP_LISTEN +); + +1844 if +ts +-> +d_deged + ) { + +1845  +rc +; + +1848 + `CI_SET_ERROR +( +rc +, +EBUSY +); + +1849  +rc +; + +1852 +sf +. +rc + = 0; + +1853 +sf +. +ack_locked + = 0; + +1854 +sf +. +tٮ_un + = 0; + +1855 +sf +. +tٮ_ + = 0; + +1856 +sf +. +pf +. +loc_pkt + = +NULL +; + +1857 +sf +. +timeout + = +ts +-> +s +. +so +. +dtimeo_mc +; + +1858 +sf +. +ndq_ed + = 0; + +1859 #ide +__KERNEL__ + + +1860 +sf +. +t_nd_ + = + +1861 + `oo_r_thad_g +()-> +e + & (1 << +ONLOAD_SPIN_TCP_SEND +); + +1862 if +sf +. +t_nd_ + ) + +1863 + `ci_c64 +(& +sf +. +t_c +); + +1865 +sf +. +t_nd_ + = 0; + +1869 if( + `CI_UNLIKELY +(~ +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_SYNCHRONISED +) )) + +1870  +n_synchrid +; + +1872 +is_sync +: + +1873  +m + = 0; m < () +iovn +; ++m ) { + +1874 +sf +. +tٮ_un + + + `CI_IOVEC_LEN +(& +iov +[ +m +]); + +1875 if( + `CI_UNLIKELY + + `CI_IOVEC_BASE +(& +iov +[ +m +]= +NULL + && + +1876 + `CI_IOVEC_LEN +(& +iov +[ +m +]) > 0 )) { + +1877 +sf +. +rc + = - +EFAULT +; + +1878 + `ci_t_ndmsg_hd_rc__tx_o +( +ni +, +ts +, +ags +, & +sf +); + +1879 if +sf +. +t_o + ) + `CI_SET_ERROR +(sf. +rc +, sinf.rc); + +1880  +sf +. +rc +; + +1884 if( + `CI_UNLIKELY +! +sf +. +tٮ_un + || + +1885 ( +ags + & ( +MSG_OOB + | +ONLOAD_MSG_WARM +)) )) + +1886  +ow_th +; + +1888 +_th +: + +1889 + `ci_iovec_r__nz +(& +piov +, +iov +, +iovn +); + +1891 + `ci_as_ +( + `t_eff_mss +( +ts +), + +1892 +CI_MAX_ETH_DATA_LEN + - ( +ci_t_hdr +- ( +ci_4_hdr +)); + +1894 if + `si_ylock +( +ni +, & +sf +&& + `ci__queue_n_emy +( +ndq +) ) { + +1895 + `ci_as +(! ( +ags + & +ONLOAD_MSG_WARM +)); + +1900 + `ci_t_tx_fl_ndq_ +( +ni +, +ts +, & +piov +, & +sf + + `CI_KERNEL_ARG +( +addr_c +)); + +1902 if +sf +. +tٮ_un + > 0 ) + +1903  +n_ +; + +1907 +pkt + = + `PKT_CHK +( +ni +, +ndq +-> + +); + +1908 if( +ags + & +MSG_MORE +|| ( +ts +-> +s +. +s_aags + & +CI_SOCK_AFLAG_CORK +) ) + +1909 +pkt +-> +ags + | +CI_PKT_FLAG_TX_MORE +; + +1911 +pkt +-> +ags + &~ +CI_PKT_FLAG_TX_MORE +; + +1912 + `TX_PKT_TCP +( +pkt +)-> +t_ags + | +CI_TCP_FLAG_PSH +; + +1924 #ifde +MSG_SENDPAGE_NOTLAST + + +1925 if~ +ags + & +MSG_SENDPAGE_NOTLAST + || + +1926 + `ci_t_tx_nd_a +( +ni +, +ts +) <= 0 ) + +1928 + `ci_t_tx_adv_g +( +ni +, +ts +); + +1930 if +sf +. +ack_locked + ) + `ci_tif_uock +( +ni +); + +1931  +sf +. +tٮ_ +; + +1934 +n_ +: + +1935 + `ci_as +( +sf +. +tٮ_un + > 0); + +1936 + `ci_as +(! + `ci_iovec_r_is_emy_ݔ +(& +piov +)); + +1939 +sf +. +ndq_ed + = + `ci_t_tx_nd_a +( +ni +, +ts +); + +1946 if +sf +. +ndq_ed + <0 && + `NI_OPTS +( +ni +). +t_dbuf_mode + && + +1947 +sf +. +tٮ_ + && + +1948 +ts +-> +cge + = +CI_TCP_CONG_OPEN + || + +1949 +ts +-> +cge + = +CI_TCP_CONG_FAST_RECOV + ) ) + +1950 +sf +. +ndq_ed + + +ts +-> +s +. +num + >> 1; + +1952 if +sf +. +ndq_ed + <0 )  +nd_q_fu +; + +1954 +y_aga +: + +1957 +m + = + `ci_t_nd_loc_pkts +( +ni +, +ts +, & +sf +, 0); + +1958 if +sf +. +n_eded + > 0 ) + +1959  +no_pkt_buf +; + +1961 +g_pkt_buf +: + +1962 + `ci_t_nd_fl_pkts +( +ni +, +ts +, & +sf +, & +piov +, +m + + `CI_KERNEL_ARG +( +addr_c +)); + +1963 +m + = 0; + +1964 #ifde +__unix__ + + +1966 if( +ags + & +MSG_MORE +|| ( +ts +-> +s +. +s_aags + & +CI_SOCK_AFLAG_CORK +) ) { + +1967 +sf +. +pf +. +pkt +-> +ags + | +CI_PKT_FLAG_TX_MORE +; + +1971 +fd_some_pkts +: + +1972 if +ts +-> +s +. +tx_o + ) { + +1973 + `ci_as +(! ( +ags + & +ONLOAD_MSG_WARM +)); + +1974 + `ci_t_ndmsg_hd_tx_o +( +ni +, +ts +, +ags +, & +sf +); + +1975 if +sf +. +t_o + ) + `CI_SET_ERROR +(sf. +rc +, sinf.rc); + +1976  +sf +. +rc +; + +1982 if + `si_ylock +( +ni +, & +sf +) ) { + +1984 +ts +-> +nd_ + + + `ci_t_ndmsg_queue +( +ni +,s, + +1985 +sf +. +fl_li +, + +1986 +sf +. +fl_li_bys +, + +1987 & +ts +-> +nd +); + +1988 +sf +. +tٮ_ + +sf. +fl_li_bys +; + +1989 +sf +. +tٮ_un + -sf. +fl_li_bys +; + +1995 if +sf +. +tٮ_un + == 0 ) { + +1996 if( +sf +. +fl_li +-> +ags + & +CI_PKT_FLAG_TX_MORE +) ) + +1997 + `TX_PKT_TCP +( +sf +. +fl_li +)-> +t_ags + = +CI_TCP_FLAG_ACK +; + +1999 + `TX_PKT_TCP +( +sf +. +fl_li +)-> +t_ags + = + +2000 +CI_TCP_FLAG_PSH + | +CI_TCP_FLAG_ACK +; + +2001 #ifde +MSG_SENDPAGE_NOTLAST + + +2002 if~ +ags + & +MSG_SENDPAGE_NOTLAST + || + +2003 + `ci_t_tx_nd_a +( +ni +, +ts +) <= 0 ) + +2006 + `ci_t_tx_adv_g +( +ni +, +ts +); + +2007 if( + `CI_UNLIKELY + +ags + & +ONLOAD_MSG_WARM + )) + +2008 + `ul_msg_wm +( +ni +, +ts +, & +sf +, 0); + +2011 + `ci_as_equ +( +sf +. +pf +. +loc_pkt +, +NULL +); + +2012 if +sf +. +ack_locked + ) + `ci_tif_uock +( +ni +); + +2013  +sf +. +tٮ_ +; + +2016 #ifde +MSG_SENDPAGE_NOTLAST + + +2017 if(~ +ags + & +MSG_SENDPAGE_NOTLAST +) || + +2018 + `ci_t_tx_nd_a +( +ni +, +ts +) <= 0 ) + +2022 + `ci_as +(! ( +ags + & +ONLOAD_MSG_WARM +)); + +2023 if + `ci_tif_may_pl +( +ni +&& + `ci_tif_ed_pl +(ni) ) + +2024 + `ci_tif_pl +( +ni +); + +2025 +sf +. +fl_li + = 0; + +2026 if +ts +-> +s +. +tx_o + ) { + +2027 + `ci_t_ndmsg_hd_tx_o +( +ni +, +ts +, +ags +, & +sf +); + +2028 if +sf +. +t_o + ) + `CI_SET_ERROR +(sf. +rc +, sinf.rc); + +2029  +sf +. +rc +; + +2031 if( + `CI_LIKELY +! + `ci__queue_is_emy +( +ndq +) )) + +2032 + `ci_t_tx_adv +( +ts +, +ni +); + +2036 if +sf +. +tٮ_un + =sf. +fl_li_bys + ) + +2038 i! ( +sf +. +fl_li +-> +ags + & +CI_PKT_FLAG_TX_MORE +) ) + +2039 +sf +. +fl_li +-> +ags + | +CI_PKT_FLAG_TX_PSH +; + +2042 + `ci_t_tx_equeue +( +ni +, +ts +, +sf +. +fl_li +); + +2043 +sf +. +tٮ_ + +sf. +fl_li_bys +; + +2044 +sf +. +tٮ_un + -sf. +fl_li_bys +; + +2045 + `ci_as_equ +( +sf +. +ack_locked +, 0); + +2046 if + `ci_tif_lock__der_wk +( +ni +, & +ts +-> +s +. +b +) ) { + +2047 +sf +. +ack_locked + = 1; + +2048 +sf +. +fl_li + = 0; + +2049 if +ts +-> +s +. +tx_o + ) { + +2050 + `ci_t_ndmsg_hd_tx_o +( +ni +, +ts +, +ags +, & +sf +); + +2051 if +sf +. +t_o + ) + `CI_SET_ERROR +(sf. +rc +, sinf.rc); + +2052  +sf +. +rc +; + +2054 + `ci_t_ndmsg_queue_equeue +( +ni +, +ts +); + +2055 if( + `CI_LIKELY +! + `ci__queue_is_emy +( +ndq +) )) { + +2056 if +sf +. +tٮ_un + =0 ) + `ci_t_tx_adv_g +( +ni +, +ts +); + +2057 + `ci_t_tx_adv +( +ts +, +ni +); + +2060 if +sf +. +tٮ_un + == 0 ) { + +2062 + `ci_as_equ +( +sf +. +pf +. +loc_pkt +, +NULL +); + +2063 if +sf +. +ack_locked + ) + `ci_tif_uock +( +ni +); + +2064  +sf +. +tٮ_ +; + +2069 +sf +. +ndq_ed + -sf. +n_fd +; + +2070 if +sf +. +ndq_ed + <= 0 ) { + +2073 +sf +. +ndq_ed + = + `ci_t_tx_nd_a +( +ni +, +ts +); + +2074 if +sf +. +ndq_ed + <0 )  +nd_q_fu +; + +2078 +nd_q_fu +: + +2080 + `ci_as +(! ( +ags + & +ONLOAD_MSG_WARM +)); + +2081 + `ci_as +( +sf +. +tٮ_un + > 0); + +2082 +sf +. +fl_li + = 0; + +2084 if + `ci_tif_may_pl +( +ni +&& + `ci_tif_ed_pl +(ni) && + +2085 + `si_ylock +( +ni +, & +sf +) ) { + +2086 + `ci_tif_pl +( +ni +); + +2087 if +ts +-> +s +. +tx_o + ) { + +2088 + `ci_t_ndmsg_hd_tx_o +( +ni +, +ts +, +ags +, & +sf +); + +2089 if +sf +. +t_o + ) + `CI_SET_ERROR +(sf. +rc +, sinf.rc); + +2090  +sf +. +rc +; + +2092 +sf +. +ndq_ed + = + `ci_t_tx_nd_a +( +ni +, +ts +); + +2093 if +sf +. +ndq_ed + > 0 )  +y_aga +; + +2100 if +ags + & +MSG_DONTWAIT + ) { + +2106 +sf +. +rc + = - +EAGAIN +; + +2107 + `ci_t_ndmsg_hd___rc +( +ni +, +ts +, +ags +, & +sf +); + +2108 if +sf +. +t_o + ) + `CI_SET_ERROR +(sf. +rc +, sinf.rc); + +2109  +sf +. +rc +; + +2112 if +sf +. +t_nd_ + ) { + +2113  +rc +; + +2114 +rc + = + `ci_t_ndmsg_ +( +ni +, +ts +, +ags +, & +sf +); + +2115 if +rc + == 0 ) + +2116  +y_aga +; + +2117 if +rc + == -1 ) { + +2118 if +sf +. +t_o + ) + `CI_SET_ERROR +(sf. +rc +, sinf.rc); + +2119  +sf +. +rc +; + +2121 +sf +. +t_nd_ + = 0; + +2124 if + `ci_t_ndmsg_block +( +ni +, +ts +, +ags +, & +sf +) == 0 ) + +2125  +y_aga +; + +2127 if +sf +. +t_o + ) + `CI_SET_ERROR +(sf. +rc +, sinf.rc); + +2128  +sf +. +rc +; + +2131 +no_pkt_buf +: + +2133  +rc +; + +2134 if( + `CI_UNLIKELY + +ags + & +ONLOAD_MSG_WARM + )) { + +2139 ++ +ts +-> +s +. +tx_msg_wm_abt +; + +2140 + `ci_as_equ +( +sf +. +pf +. +loc_pkt +, +NULL +); + +2141 if +sf +. +ack_locked + ) + +2142 + `ci_tif_uock +( +ni +); + +2145 +rc + = + `ci_t_ndmsg_no_pkt_buf +( +ni +, +ts +, +ags +, & +sf +); + +2146 if +rc + == 0 ) + +2147  +g_pkt_buf +; + +2148 if +rc + == 1 ) + +2149  +fd_some_pkts +; + +2151 + `ci_as +( +rc + == -1); + +2152 if +sf +. +t_o + ) + `CI_SET_ERROR +(sf. +rc +, sinf.rc); + +2153  +sf +. +rc +; + +2157 +n_synchrid +: + +2158 if( + `CI_UNLIKELY + +ags + & +ONLOAD_MSG_WARM + )) { + +2159 ++ +ts +-> +s +. +tx_msg_wm_abt +; + +2160 if +sf +. +ack_locked + ) + +2161 + `ci_tif_uock +( +ni +); + +2165 if + `ci_t_ndmsg_nsynchrid +( +ni +, +ts +, +ags +, & +sf +) == -1 ) { + +2166 + `ci_t_ndmsg_hd_rc__tx_o +( +ni +, +ts +, +ags +, & +sf +); + +2167 if +sf +. +t_o + ) + `CI_SET_ERROR +(sf. +rc +, sinf.rc); + +2168  +sf +. +rc +; + +2170  +is_sync +; + +2172 +ow_th +: + +2173 if( + `CI_UNLIKELY + +ags + & +ONLOAD_MSG_WARM + )) { + +2174 if + `n_do_msg_wm +( +ni +, +ts +, & +sf +, sf. +tٮ_un +, +ags +) ) { + +2175 +ni +-> +ags + | +CI_NETIF_FLAG_MSG_WARM +; + +2176 #i +CI_CFG_BURST_CONTROL + + +2177 +sf +. +d_bur_wdow + = +ts +-> +bur_wdow +; + +2179 +sf +. +d_t_d_nxt + = + `t_d_nxt +( +ts +); + +2180  +_th +; + +2182 ++ +ts +-> +s +. +tx_msg_wm_abt +; + +2183 if +sf +. +ack_locked + ) + +2184 + `ci_tif_uock +( +ni +); + +2185 if +sf +. +tٮ_un + > + `t_eff_mss +( +ts +) ) + +2186  - +EINVAL +; + +2189 if + `ci_t_ndmsg_owth +( +ni +, +ts +, +iov +, +iovn +, +ags +, & +sf + + +2190 + `CI_KERNEL_ARG +( +addr_c +)) == -1 ) { + +2191 + `ci_t_ndmsg_hd_rc__tx_o +( +ni +, +ts +, +ags +, & +sf +); + +2192 if +sf +. +t_o + ) + `CI_SET_ERROR +(sf. +rc +, sinf.rc); + +2193  +sf +. +rc +; + +2195  +sf +. +rc +; + +2196 + } +} + +2199 #ide +__KERNEL__ + + +2210  + $ci_t_zc_nd +( +ci_tif +* +ni +, +ci_t_e +* +ts +,  +ld_zc_mmsg +* +msg +, + +2211  +ags +) + +2213  +t_nd_fo + +sf +; + +2214 +ci__pkt_fmt +* +pkt +; + +2215  +j +; + +2216  +eff_mss +; + +2218 + `ci_as +( +msg + ! +NULL +); + +2219 + `ci_as +( +ts +); + +2220 + `ci_as +( +ts +-> +s +. +b +. +e + ! +CI_TCP_LISTEN +); + +2221 + `ci_as +( +msg +->msg. +msghdr +. +msg_iovn +); + +2223 if!( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_SYNCHRONISED +) ) { + +2224 +msg +-> +rc + = +ts +-> +s +. +tx_o + ? -ts->s.tx_: - +EPIPE +; + +2228 +sf +. +rc + = 0; + +2229 +sf +. +ack_locked + = 0; + +2230 +sf +. +fl_li + = 0; + +2231 +sf +. +fl_li_bys + = 0; + +2232 +sf +. +n_fd + = 0; + +2233 +sf +. +tٮ_ + = 0; + +2234 +sf +. +pf +. +loc_pkt + = +NULL +; + +2235 +sf +. +timeout + = +ts +-> +s +. +so +. +dtimeo_mc +; + +2236 #ide +__KERNEL__ + + +2237 +sf +. +t_nd_ + = + +2238 + `oo_r_thad_g +()-> +e + & (1 << +ONLOAD_SPIN_TCP_SEND +); + +2239 if +sf +. +t_nd_ + ) + +2240 + `ci_c64 +(& +sf +. +t_c +); + +2242 +sf +. +t_nd_ + = 0; + +2245 +eff_mss + = + `t_eff_mss +( +ts +); + +2246 + `ci_as_ +( +eff_mss +, + +2247 +CI_MAX_ETH_DATA_LEN + - ( +ci_t_hdr +- ( +ci_4_hdr +)); + +2249 +j + = 0; + +2251 +sf +. +ndq_ed + = + `ci_t_tx_nd_a +( +ni +, +ts +); + +2255 if +sf +. +ndq_ed + <0 || +ags + & +ONLOAD_MSG_WARM + ) { + +2256 if( + `CI_UNLIKELY + +ags + & +ONLOAD_MSG_WARM + )) { + +2257 if! + `n_do_msg_wm +( +ni +, +ts +, & +sf +, +msg +->msg. +iov +[0]. +iov_n +, +ags +) ) { + +2258 ++ +ts +-> +s +. +tx_msg_wm_abt +; + +2259 if +sf +. +ack_locked + ) + +2260 + `ci_tif_uock +( +ni +); + +2261 +msg +-> +rc + = 0; + +2262 if +msg +->msg. +iov +[0]. +iov_n + > + `t_eff_mss +( +ts +) ) + +2263 +msg +-> +rc + = - +EINVAL +; + +2266 +ni +-> +ags + | +CI_NETIF_FLAG_MSG_WARM +; + +2267 #i +CI_CFG_BURST_CONTROL + + +2268 +sf +. +d_bur_wdow + = +ts +-> +bur_wdow +; + +2270 +sf +. +d_t_d_nxt + = + `t_d_nxt +( +ts +); + +2273  +nd_q_fu +; + +2277 +nd_q_n_fu +: + +2278  +j + < +msg +->msg. +msghdr +. +msg_iovn + ) { + +2279 +pkt + = ( +ci__pkt_fmt +*) +msg +->msg. +iov +[ +j +]. +buf +; + +2281 + `ci_as_equ +( +pkt +-> +ack_id +, +ni +-> +e +->stack_id); + +2282 + `ci_as +( +msg +->msg. +iov +[ +j +]. +iov_ba + ! +NULL +); + +2283 + `ci_as_gt +( +msg +->msg. +iov +[ +j +]. +iov_n +, 0); + +2284 + `ci_as_ +( +msg +->msg. +iov +[ +j +]. +iov_n +, +eff_mss +); + +2285 + `ci_as_gt +((*) +msg +->msg. +iov +[ +j +]. +iov_ba +, + +2286 + `PKT_START +( +pkt ++ +ts +-> +outgog_hdrs_n +); + +2287 + `ci_as_ +((*) +msg +->msg. +iov +[ +j +]. +iov_ba + + + +2288 +msg +->msg. +iov +[ +j +]. +iov_n +, + +2289 ((*) +pkt ++ +CI_CFG_PKT_BUF_SIZE +); + +2291 if +pkt +-> +ack_id + ! +ni +-> +e +->stack_id || + +2292 +msg +->msg. +iov +[ +j +]. +iov_n + <= 0 || + +2293 +msg +->msg. +iov +[ +j +]. +iov_n + > +eff_mss + || + +2294 (*) +msg +->msg. +iov +[ +j +]. +iov_ba + < + +2295 + `PKT_START +( +pkt ++ +ts +-> +outgog_hdrs_n + || + +2296 (*) +msg +->msg. +iov +[ +j +]. +iov_ba + + msg->msg.iov[j]. +iov_n + > + +2297 ((*) +pkt ++ +CI_CFG_PKT_BUF_SIZE + ) + +2298  +bad_bufr +; + +2300 + `__ci_t_tx_pkt_ +( +pkt +, (( +ut8_t +* +msg +->msg. +iov +[ +j +]. +iov_ba + - + +2301 ( +ut8_t +* + `oo_tx_h_da +( +pkt +)), +eff_mss +); + +2302 +pkt +-> +n_bufrs + = 1; + +2303 +pkt +-> +buf_n + + +msg +->msg. +iov +[ +j +]. +iov_n +; + +2304 +pkt +-> +y_n + + +msg +->msg. +iov +[ +j +]. +iov_n +; + +2305 + `oo_offbuf_adv +(& +pkt +-> +buf +, +msg +->msg. +iov +[ +j +]. +iov_n +); + +2306 +pkt +-> +pf +. +t_tx +. +d_q + = +msg +->msg. +iov +[ +j +]. +iov_n +; + +2308 + `ci_as_equ +( + `TX_PKT_LEN +( +pkt +), + `oo_offbuf_r +(&pkt-> +buf +- + `PKT_START +(pkt)); + +2310 + `CI_USER_PTR_SET +( +pkt +-> +pf +. +t_tx +. +xt +, +sf +. +fl_li +); + +2311 +sf +. +fl_li + = +pkt +; + +2312 +sf +. +fl_li_bys + + +msg +->msg. +iov +[ +j +]. +iov_n +; + +2315 if +j + == 0 ) + +2316 +msg +-> +rc + = msg->msg. +iov +[ +j +]. +iov_n +; + +2318 +msg +-> +rc + +msg->msg. +iov +[ +j +]. +iov_n +; + +2320 ++ +sf +. +n_fd +; + +2321 ++ +j +; + +2322 -- +sf +. +ndq_ed +; + +2323 if +sf +. +ndq_ed + <= 0 ) + +2327 if(( +ags + & +MSG_MORE +|| ( +ts +-> +s +. +s_aags + & +CI_SOCK_AFLAG_CORK +)) ) + +2328 +sf +. +fl_li +-> +ags + | +CI_PKT_FLAG_TX_MORE +; + +2333 if + `si_ylock +( +ni +, & +sf +) ) { + +2334 if +ts +-> +s +. +tx_o + ) + +2335  +tx_o +; + +2336 +ts +-> +nd_ + + + `ci_t_ndmsg_queue +( +ni +,s, + +2337 +sf +. +fl_li +, + +2338 +sf +. +fl_li_bys +, + +2339 & +ts +-> +nd +); + +2341 if( +sf +. +fl_li +-> +ags + & +CI_PKT_FLAG_TX_MORE +) ) + +2342 + `TX_PKT_TCP +( +sf +. +fl_li +)-> +t_ags + = +CI_TCP_FLAG_ACK +; + +2344 + `TX_PKT_TCP +( +sf +. +fl_li +)-> +t_ags + = +CI_TCP_FLAG_PSH +| +CI_TCP_FLAG_ACK +; + +2345 + `ci_t_tx_adv_g +( +ni +, +ts +); + +2346 if( + `CI_UNLIKELY + +ags + & +ONLOAD_MSG_WARM + )) { + +2347 + `ul_msg_wm +( +ni +, +ts +, & +sf +, 1); + +2351 if +ts +-> +s +. +tx_o + ) + +2352  +tx_o +; + +2354 if!( +sf +. +fl_li +-> +ags + & +CI_PKT_FLAG_TX_MORE +) ) + +2355 +sf +. +fl_li +-> +ags + | +CI_PKT_FLAG_TX_PSH +; + +2357 + `ci_t_tx_equeue +( +ni +, +ts +, +sf +. +fl_li +); + +2358 +sf +. +fl_li + = 0; + +2360 + `ci_as_equ +( +sf +. +ack_locked +, 0); + +2361 if + `ci_tif_lock__der_wk +( +ni +, & +ts +-> +s +. +b +) ) { + +2362 +sf +. +ack_locked + = 1; + +2363 if +ts +-> +s +. +tx_o + ) + +2364  +tx_o +; + +2365 + `ci_t_ndmsg_queue_equeue +( +ni +, +ts +); + +2366 if( + `CI_LIKELY +! + `ci__queue_is_emy +(& +ts +-> +nd +) )) + +2367 + `ci_t_tx_adv_g +( +ni +, +ts +); + +2371 if +sf +. +n_fd + < +msg +->msg. +msghdr +. +msg_iovn + ) { + +2372 +sf +. +fl_li + = 0; + +2373 +sf +. +fl_li_bys + = 0; + +2374 +sf +. +ndq_ed + = + `ci_t_tx_nd_a +( +ni +, +ts +); + +2375 if +sf +. +ndq_ed + > 0 ) + +2376  +nd_q_n_fu +; + +2378  +nd_q_fu +; + +2380 if +sf +. +ack_locked + ) + +2381 + `ci_tif_uock +( +ni +); + +2384 +nd_q_fu +: + +2385 if + `ci_tif_may_pl +( +ni +&& + `ci_tif_ed_pl +(ni) && + +2386 + `si_ylock +( +ni +, & +sf +) ) { + +2387 + `ci_tif_pl +( +ni +); + +2388 if +ts +-> +s +. +tx_o + ) + +2389  +tx_o +; + +2390 +sf +. +ndq_ed + = + `ci_t_tx_nd_a +( +ni +, +ts +); + +2391 if +sf +. +ndq_ed + > 0 ) + +2392  +nd_q_n_fu +; + +2395 if +ags + & +MSG_DONTWAIT + ) { + +2396 if +j + == 0 ) + +2397 +msg +-> +rc + = - +EAGAIN +; + +2398 if +sf +. +ack_locked + ) + +2399 + `ci_tif_uock +( +ni +); + +2403 if +sf +. +t_nd_ + ) { + +2404  +rc +; + +2405 +rc + = + `ci_t_ndmsg_ +( +ni +, +ts +, +ags +, & +sf +); + +2406 if +rc + == 0 ) + +2407  +nd_q_n_fu +; + +2408 if +rc + == -1 ) { + +2409 if +sf +. +ack_locked + ) + +2410 + `ci_tif_uock +( +ni +); + +2411 if +j + == 0 ) + +2415 +msg +-> +rc + = - +sf +.rc; + +2420 if + `ci_t_ndmsg_block +( +ni +, +ts +, +ags +, & +sf +) == 0 ) + +2421  +nd_q_n_fu +; + +2423 if +sf +. +ack_locked + ) + +2424 + `ci_tif_uock +( +ni +); + +2425 if +j + == 0 ) + +2429 +msg +-> +rc + = - +sf +.rc; + +2434 +bad_bufr +: + +2435 if( + `CI_UNLIKELY + +ni +-> +ags + & +CI_NETIF_FLAG_MSG_WARM + )) { + +2436 ++ +ts +-> +s +. +tx_msg_wm_abt +; + +2437 if +sf +. +ack_locked + ) + +2438 + `ci_tif_uock +( +ni +); + +2439 +msg +-> +rc + = - +EINVAL +; + +2443 if +sf +. +fl_li + ) { + +2444 if + `si_ylock +( +ni +, & +sf +) ) { + +2445 if +ts +-> +s +. +tx_o + ) + +2446  +tx_o +; + +2447 +ts +-> +nd_ + + + `ci_t_ndmsg_queue +( +ni +,s, + +2448 +sf +. +fl_li +, + +2449 +sf +. +fl_li_bys +, + +2450 & +ts +-> +nd +); + +2451 +sf +. +fl_li + = 0; + +2454 if +ts +-> +s +. +tx_o + ) + +2455  +tx_o +; + +2457 + `ci_t_tx_equeue +( +ni +, +ts +, +sf +. +fl_li +); + +2458 +sf +. +fl_li + = 0; + +2459 + `ci_as_equ +( +sf +. +ack_locked +, 0); + +2460 if + `ci_tif_lock__der_wk +( +ni +, & +ts +-> +s +. +b +) ) { + +2461 +sf +. +ack_locked + = 1; + +2462 if +ts +-> +s +. +tx_o + ) + +2463  +tx_o +; + +2464 + `ci_t_ndmsg_queue_equeue +( +ni +, +ts +); + +2466 if( + `CI_LIKELY +! + `ci__queue_is_emy +(& +ts +-> +nd +) )) + +2467 + `ci_t_tx_adv +( +ts +, +ni +); + +2471 if +j + == 0 ) + +2472 +msg +-> +rc + = - +EINVAL +; + +2473 if +sf +. +ack_locked + ) + +2474 + `ci_tif_uock +( +ni +); + +2477 +tx_o +: + +2481 + `ci_t_ndmsg__fl_li +( +ni +, +ts +, +ags +, & +sf +); + +2482 + `ci_t_tx__equeue +( +ni +, +ts +, +sf +. +ack_locked +); + +2483 +msg +-> +rc + = - +ts +-> +s +. +tx_o +; + +2484 if +sf +. +ack_locked + ) + +2485 + `ci_tif_uock +( +ni +); + +2487 + } +} + +2490  + $ci_t_ds_g_p +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +2492  +i +; + +2494 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +2496 + `ci_ur_ve +( +ni +, & +ts +-> +s +. +pkt +, &ts->s. + +); + +2497 if +ts +-> +s +. +pkt +. +us + = +rc_sucss + ) + +2499 if +ts +-> +s +. +pkt +. +us + ! +rc_nomac + ) + +2500  + +; + +2502 if! + `ci__queue_is_emy +(& +ts +-> +s +) ) + +2503 + `ci_t_s_e +( +ts +, +ni +, + `PKT_CHK +i,s-> +s +. +hd +)); + +2505 +ci__pkt_fmt +* +pkt + = + `ci_tif_pkt_loc +( +ni +); + +2506 if +pkt + = +NULL + ) + +2507  + +; + +2509 + `ci_t_nd_ack +( +ni +, +ts +, +pkt +, 0); + +2513  +i + = 0; i < 1000; i++ ) { + +2514 + `ci_ur_ve +( +ni +, & +ts +-> +s +. +pkt +, &ts->s. + +); + +2515 if +ts +-> +s +. +pkt +. +us + = +rc_sucss + ) + +2517 if +ts +-> +s +. +pkt +. +us + ! +rc_nomac + ) + +2518  + +; + +2519 + `up +(1); + +2522 + +: + +2524 + `ci__che_vide +(& +ts +-> +s +. +pkt +); + +2526 + } +} + +2528  + #MAX_HEADERS_LEN + \ + +2529 +ETH_HLEN + + +ETH_VLAN_HLEN + + ( +ci_4_hdr +) + \ + +2530 0x* ( +ci_ut32 +) + + ) + +2532 +ld_deged_nd_rc + + +2533 + $ci_t_ds_fl_hds +( +ci_tif +* +ni +, +ci_t_e +* +ts +,  +ags +, + +2534 * +hds +, * +hds_n_out +, + +2535 * +_t_hdr_n_out +, + +2536 * +t_q_offt_out +, * +_n_offt_out +) + +2538  +hds_n +; + +2539  +h_hd_n +; + +2540 +ci_t_hdr +* +t +; + +2541 +ci_4_hdr +* + +; + +2545 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +2548 if! + `ci__che_is_vid +( + `CICP_HANDLE +( +ni +), & +ts +-> +s +. +pkt +) && + +2549 (~ +ags + & +ONLOAD_DELEGATED_SEND_FLAG_IGNORE_ARP + ) && + +2550 ! + `ci_t_ds_g_p +( +ni +, +ts +) ) { + +2551  +ONLOAD_DELEGATED_SEND_RC_NOARP +; + +2555 +h_hd_n + = +ETH_HLEN + + +ETH_VLAN_HLEN + - +ts +-> +s +. +pkt +. +h_offt +; + +2556 +hds_n + = +h_hd_n + + +ts +-> +outgog_hdrs_n +; + +2557 + `ci_as_ +( +hds_n +, +MAX_HEADERS_LEN +); + +2559 if* +hds_n_out + < +hds_n + ) { + +2560 * +hds_n_out + = +hds_n +; + +2561  +ONLOAD_DELEGATED_SEND_RC_SMALL_HEADER +; + +2563 * +hds_n_out + = +hds_n +; + +2566 + `memy +( +hds +, + `ci__che_h_hdr +(& +ts +-> +s +. +pkt +), +hds_n +); + +2568 + + = (*)(( +ci_u_t +) +hds + + +h_hd_n +); + +2569 +t + = (*)(( +ci_u_t +) +hds + + +h_hd_n + + ( +ci_4_hdr +)); + +2573 +t +-> +t_q_be32 + = + `CI_BSWAP_BE32 +( + `t_d_nxt +( +ts +)); + +2574 +t +-> +t_ags + = +CI_TCP_FLAG_ACK +; + +2575 +t +-> +t_ack_be32 + = + `CI_BSWAP_BE32 +( + `t_rcv_nxt +( +ts +)); + +2576 + `ci_t_lc_rcv_wnd +( +ts +, "ds_fill_headers"); + +2577 +t +-> +t_wdow_be16 + = + `TS_TCP +( +ts +)->tcp_window_be16; + +2578 if +ts +-> +tags + & +CI_TCPT_FLAG_TSO + ) { + +2579 +ci_ut8 +* +t + = + `CI_TCP_HDR_OPTS +( +t +); + +2580 + `ci_t_tx_t_tso +(& +t +, + `ci_t_time_now +( +ni +), +ts +-> +te +); + +2582 + +-> +_t_n_be16 + = + +2583 + `CI_BSWAP_BE16 +( +ts +-> +outgog_hdrs_n + +s-> +eff_mss +); + +2584 + `ci_as_equ +( + `CI_TCP_HDR_LEN +( +t +), + +2585 +ts +-> +outgog_hdrs_n + - ( +ci_t_hdr +)); + +2586 + `ci_as_equ +( + +-> +_check_be16 +, 0); + +2587 + `ci_as_equ +( + +-> +_id_be16 +, 0); + +2588 + `ci_as_equ +( +t +-> +t_check_be16 +, 0); + +2589 + `ci_as_equ +( +t +-> +t_urg_r_be16 +, 0); + +2592 * +_t_hdr_n_out + = +ts +-> +outgog_hdrs_n +; + +2593 * +t_q_offt_out + = +h_hd_n + + ( +ci_4_hdr +) + + +2594 + `CI_MEMBER_OFFSET +( +ci_t_hdr +, +t_q_be32 +); + +2595 * +_n_offt_out + = +h_hd_n + + + +2596 + `CI_MEMBER_OFFSET +( +ci_4_hdr +, +_t_n_be16 +); + +2598  +ONLOAD_DELEGATED_SEND_RC_OK +; + +2599 + } +} + +2602 + $ci_t_ds_de +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +2603 cڡ +ci_iovec + * +iov +,  +iovn +,  +ags +) + +2605  +ady_acked +, +i +; + +2606 +ci_iovec_r + +piov +; + +2607  +t_nd_fo + +sf +; + +2608  +ϡ_eded + + `CI_DEBUG +(= 0x7fffffff); + +2609  +g + = 0; + +2610  +iov_offt + = 0; + +2612 +sf +. +tٮ_un + = 0; + +2613 +sf +. +tٮ_ + = 0; + +2614 +sf +. +ack_locked + = 0; + +2615 +sf +. +rc + = 0; + +2616 +sf +. +pf +. +loc_pkt + = +NULL +; + +2617 +sf +. +timeout + = 0; + +2618 +sf +. +t_nd_ + = + +2619 + `oo_r_thad_g +()-> +e + & (1 << +ONLOAD_SPIN_TCP_SEND +); + +2620 +sf +. +fl_li + = 0; + +2622  +i + = 0; i < +iovn +; ++i ) + +2623 +sf +. +tٮ_un + + + `CI_IOVEC_LEN +(& +iov +[ +i +]); + +2627 if +sf +. +tٮ_un + > +ts +-> +d_deged + ) + +2628 + `RET_WITH_ERRNO +( +EMSGSIZE +); + +2630 +y_aga +: + +2632 if! + `si_ylock +( +ni +, & +sf +) ) { + +2633 + `ci_tif_lock +( +ni +); + +2634 +sf +. +ack_locked + = 1; + +2637 +ady_acked + = + `SEQ_SUB +( +ts +-> +d_u +,s-> +d_nxt +); + +2643 if +ady_acked + < 0 ) + +2644 +ady_acked + = 0; + +2645 if +ady_acked + > 0 ) { + +2646 +ady_acked + = + `CI_MIN +̗dy_acked, +sf +. +tٮ_un +); + +2648 +ts +-> +d_deged + - +ady_acked +; + +2649 +ts +-> +d_nxt + + +ady_acked +; + +2650 +sf +. +tٮ_un + - +ady_acked +; + +2651 +sf +. +tٮ_ + + +ady_acked +; + +2652 + `t_q_nxt +( +ts ++ +ady_acked +; + +2658 + `ci_as_ +( +iov_offt +, + `CI_IOVEC_LEN +( +iov +)); + +2661  +iov_offt + + +ady_acked + > + `CI_IOVEC_LEN +( +iov +) ) { + +2662 +ady_acked + -( + `CI_IOVEC_LEN +( +iov +- +iov_offt +); + +2663 +iov +++; + +2664 +iovn +--; + +2665 +iov_offt + = 0; + +2668 if +sf +. +tٮ_un + == 0) + +2669  +out +; + +2672 +sf +. +ndq_ed + = + `ci_t_tx_nd_a +( +ni +, +ts +); + +2680 + `ci_iovec_r__nz +(& +piov +, +iov +, +iovn +); + +2681 + `ci_iovec_r_adv +(& +piov +, +ady_acked + + +iov_offt +); + +2682 + `ci_as +(! + `ci_iovec_r_is_emy_ݔ +(& +piov +)); + +2684 if +sf +. +ndq_ed + <0 )  +nd_q_fu +; + +2693 + `ci_as_ +( +g +, +ϡ_eded +); + +2694 +ϡ_eded + = + `ci_t_nd_loc_pkts +( +ni +, +ts +, & +sf +, +g +); + +2696 if +sf +. +n_eded + > 0 ) + +2697  +no_pkt_buf +; + +2706 + `ci_as_equ +( +sf +. +n_fd +, 0); + +2712 + `ci_t_nd_fl_pkts +( +ni +, +ts +, & +sf +, & +piov +, +ϡ_eded +); + +2715 + `ci_as_equ +( +sf +. +n_fd +, +ϡ_eded +); + +2716 +g + = 0; + +2718 if +ts +-> +s +. +tx_o + ) { + +2719 + `ci_as +(! ( +ags + & +ONLOAD_MSG_WARM +)); + +2720 + `ci_t_ndmsg_hd_tx_o +( +ni +, +ts +, +ags +, & +sf +); + +2721 if +sf +. +t_o + ) + `CI_SET_ERROR +(sf. +rc +, sinf.rc); + +2722  +sf +. +rc +; + +2725 + `ci_t_ndmsg_queue +( +ni +, +ts +, +sf +. +fl_li +, sf. +fl_li_bys +, + +2726 & +ts +-> +s +); + +2727 +sf +. +tٮ_ + +sf. +fl_li_bys +; + +2728 +sf +. +tٮ_un + -sf. +fl_li_bys +; + +2729 +ts +-> +d_nxt + + +sf +. +fl_li_bys +; + +2730 +ts +-> +d_deged + - +sf +. +fl_li_bys +; + +2731 if +sf +. +tٮ_un + == 0 ) + +2732  +out +; + +2735 +iov_offt + + +ady_acked + + +sf +. +fl_li_bys +; + +2736  +iov_offt + > + `CI_IOVEC_LEN +( +iov +) ) { + +2737 +iov_offt + - + `CI_IOVEC_LEN +( +iov +); + +2738 +iov +++; + +2739 +iovn +--; + +2743 if + `ci_tif_may_pl +( +ni +&& + `ci_tif_ed_pl +(ni) ) + +2744 + `ci_tif_pl +( +ni +); + +2747 +sf +. +fl_li + = 0; + +2748 +sf +. +n_fd + = 0; + +2750 if +ts +-> +s +. +tx_o + ) { + +2751 + `ci_t_ndmsg_hd_tx_o +( +ni +, +ts +, +ags +, & +sf +); + +2752 if +sf +. +t_o + ) + `CI_SET_ERROR +(sf. +rc +, sinf.rc); + +2753  +sf +. +rc +; + +2756 +sf +. +ndq_ed + -sf. +n_fd +; + +2757 if +sf +. +ndq_ed + <= 0 ) { + +2760 +sf +. +ndq_ed + = + `ci_t_tx_nd_a +( +ni +, +ts +); + +2761 if +sf +. +ndq_ed + <0 )  +nd_q_fu +; + +2766 +out +: + +2767 + `ci_as +( +sf +. +ack_locked +); + +2772 if +sf +. +tٮ_ + > +ady_acked + && ! + `ci__queue_is_emy +(& +ts +-> +s +)) + +2773 + `ci_t_o_check_d_t +( +ni +, +ts +); + +2778 if +g + > 0 ) + +2779 + `ci_t_ndmsg__unud_pkts +( +ni +, & +sf +); + +2781 + `ci_tif_uock +( +ni +); + +2783  +sf +. +tٮ_ +; + +2785 +nd_q_fu +: + +2786 + `ci_as_equ +( +sf +. +fl_li +, +NULL +); + +2788 if + `ci_tif_may_pl +( +ni +&& + `ci_tif_ed_pl +(ni) && + +2789 + `si_ylock +( +ni +, & +sf +) ) { + +2790 + `ci_tif_pl +( +ni +); + +2791 if +ts +-> +s +. +tx_o + ) { + +2792 + `ci_t_ndmsg_hd_tx_o +( +ni +, +ts +, +ags +, & +sf +); + +2793 if +sf +. +t_o + ) + `CI_SET_ERROR +(sf. +rc +, sinf.rc); + +2794  +sf +. +rc +; + +2796 +sf +. +ndq_ed + = + `ci_t_tx_nd_a +( +ni +, +ts +); + +2797 if +sf +. +ndq_ed + > 0 )  +y_aga +; + +2802 + `ci_as +( + `OO_PP_NOT_NULL +( +ts +-> +s +. +num +)); + +2805 if +ags + & +MSG_DONTWAIT + ) { + +2806 +sf +. +rc + = - +EAGAIN +; + +2807 + `ci_t_ndmsg_hd___rc +( +ni +, +ts +, +ags +, & +sf +); + +2808 if +sf +. +t_o + ) + `CI_SET_ERROR +(sf. +rc +, sinf.rc); + +2809  +sf +. +rc +; + +2812 if +sf +. +t_nd_ + ) { + +2813  +rc +; + +2814 +rc + = + `ci_t_ndmsg_ +( +ni +, +ts +, +ags +, & +sf +); + +2815 if +rc + == 0 ) + +2816  +y_aga +; + +2817 if +rc + == -1 ) { + +2818 if +sf +. +t_o + ) + `CI_SET_ERROR +(sf. +rc +, sinf.rc); + +2819  +sf +. +rc +; + +2821 +sf +. +t_nd_ + = 0; + +2824 if + `ci_t_ndmsg_block +( +ni +, +ts +, +ags +, & +sf +) == 0 ) + +2825  +y_aga +; + +2827 if +sf +. +t_o + ) + `CI_SET_ERROR +(sf. +rc +, sinf.rc); + +2828  +sf +. +rc +; + +2831 +no_pkt_buf +: + +2833  +rc +; + +2834 +rc + = + `ci_t_ndmsg_no_pkt_buf +( +ni +, +ts +, +ags +, & +sf +); + +2835 if +rc + == 0 ) { + +2836 +g + = +ϡ_eded + - +sf +. +n_eded +; + +2837  +y_aga +; + +2844 + `ci_as +( +rc + == -1); + +2845 if +sf +. +t_o + ) + `CI_SET_ERROR +(sf. +rc +, sinf.rc); + +2846  +sf +. +rc +; + +2850 + } +} + + @tcp_sleep.c + +13  + ~"_.h +" + +16 #i +defed +( +__unix__ +&& !defed( +__KERNEL__ +) + +17  + ~ + +18  + #HANDLE_SIGNALS + 1 + + ) + +20  + #HANDLE_SIGNALS + 0 + + ) + +30 #ide +__KERNEL__ + + +32  + $ci_sock_p +( +ci_tif +* +ni +, +cp_waab +* +w +, +ci_bs + +why +, + +33  +lock_ags +, +ci_ut64 + +p_q +, + +34 +ci_ut32 + * +timeout_ms_p +) + +36 #i +HANDLE_SIGNALS + + +37 +cp_sigl_fo +* +si +; + +39 +oo_t_sock_p_t + + +; + +40  +rc +; + +42 + `LOG_TV +( + `ci_log +("%d:%d SLEEP why=%s%ags=%s%s%s%p_q=%" +CI_PRIu64 +, + +43 + `NI_ID +( +ni +), + `W_FMT +( +w +), + +44 ( +why + & +CI_SB_FLAG_WAKE_RX +) ? "R":"", + +45 ( +why + & +CI_SB_FLAG_WAKE_TX +) ? "T":"", + +46 ( +lock_ags + & +CI_SLEEP_NETIF_LOCKED +) ? "NetifLocked":"", + +47 ( +lock_ags + & +CI_SLEEP_SOCK_LOCKED +) ? "SockLocked":"", + +48 ( +lock_ags + & +CI_SLEEP_NETIF_RQ +) ? "NetifRq":"", + +49 ( +lock_ags + & +CI_SLEEP_SOCK_RQ +) ? "SockRq":"", + +50 +p_q +)); + +52 + `ci_as +( +why +); + +53 + `ci_as +(!( +why + &~ ( +CI_SB_FLAG_WAKE_RX +| +CI_SB_FLAG_WAKE_TX +))); + +54 + `ci_as +(!( +lock_ags + & +CI_SLEEP_NETIF_LOCKED +|| + `ci_tif_is_locked +( +ni +)); + +55 + `ci_as +(!( +lock_ags + & +CI_SLEEP_SOCK_LOCKED +|| + `ci_sock_is_locked +( +ni +, +w +)); + +57 + +. +sock_id + = + `W_SP +( +w +); + +58 + +. +why + = why; + +59 + +. +p_q + = sleep_seq; + +60 + +. +lock_ags + =ock_flags; + +61 if +timeout_ms_p + = +NULL + ) + +62 + +. +timeout_ms + = 0; + +64 + +. +timeout_ms + = * +timeout_ms_p +; + +65 #i +HANDLE_SIGNALS + + +66 +si + = + `cp_sigl_g_ecific_ed +(); + +67 + `CI_USER_PTR_SET +( + +. +sig_e +, +si +); + +68 + `ci_as +( +si +-> +side_lib + != 0); + +69 +aga +: + +73 +rc + = + `oo_sour_ +( + `ci_tif_g_driv_hd +( +ni +), +OO_IOC_TCP_SOCK_SLEEP +, + +74 & + +); + +75 #i +HANDLE_SIGNALS + + +76 + `ci_as +( +si +-> +side_lib + == 0); + +77 if( + `CI_UNLIKELY + +rc + =- +EBUSY + )) { + +78 if +si +-> +aags + & +OO_SIGNAL_FLAG_HAVE_PENDING + ) + +79 + `cp_sigl_run_ndg +( +si +); + +80 + `ci_as +(~ +si +-> +aags + & +OO_SIGNAL_FLAG_HAVE_PENDING + ); + +81 + +. +lock_ags + &~( +CI_SLEEP_NETIF_LOCKED + | +CI_SLEEP_SOCK_LOCKED +); + +82  +aga +; + +84 +si +-> +side_lib + = 1; + +86 if +timeout_ms_p + ! +NULL + ) + +87 * +timeout_ms_p + = + +. +timeout_ms +; + +89 + `LOG_TV +( + `ci_log +("%d:%d AWAKE why=%s%p=%" +CI_PRIu64 +",%"CI_PRIu64"c=%d", + +90 + `NI_ID +( +ni +), + `W_FMT +( +w +), + +91 ( +why + & +CI_SB_FLAG_WAKE_RX +) ? "R":"", + +92 ( +why + & +CI_SB_FLAG_WAKE_TX +? "T":"", +p_q +, + +93 +w +-> +p_q +. +l +, +rc +)); + +95  +rc +; + +96 + } +} + +101  + $ci_sock_p +( +ci_tif +* +ni +, +cp_waab +* +w +, +ci_bs + +why +, + +102  +lock_ags +, +ci_ut64 + +p_q +, + +103 +ci_ut32 + * +timeout_ms_p +) + +105 +oo_t_sock_p_t + + +; + +106  +rc +; + +108 + `LOG_TV +( + `ci_log +("%d:%d SLEEP why=%s%ags=%s%s%s%p_q=%" +CI_PRIu64 +, + +109 + `NI_ID +( +ni +), + `W_FMT +( +w +), + +110 ( +why + & +CI_SB_FLAG_WAKE_RX +) ? "R":"", + +111 ( +why + & +CI_SB_FLAG_WAKE_TX +) ? "T":"", + +112 ( +lock_ags + & +CI_SLEEP_NETIF_LOCKED +) ? "NetifLocked":"", + +113 ( +lock_ags + & +CI_SLEEP_SOCK_LOCKED +) ? "SockLocked":"", + +114 ( +lock_ags + & +CI_SLEEP_NETIF_RQ +) ? "NetifRq":"", + +115 ( +lock_ags + & +CI_SLEEP_SOCK_RQ +) ? "SockRq":"", + +116 +p_q +)); + +118 + `ci_as +( +why +); + +119 + `ci_as +(!( +why + &~ ( +CI_SB_FLAG_WAKE_RX +| +CI_SB_FLAG_WAKE_TX +))); + +120 + `ci_as +(!( +lock_ags + & +CI_SLEEP_NETIF_LOCKED +|| + `ci_tif_is_locked +( +ni +)); + +121 + `ci_as +(!( +lock_ags + & +CI_SLEEP_SOCK_LOCKED +|| + `ci_sock_is_locked +( +ni +, +w +)); + +123 + +. +sock_id + = + `W_SP +( +w +); + +124 + +. +why + = why; + +125 + +. +p_q + = sleep_seq; + +126 + +. +lock_ags + =ock_flags; + +127 if +timeout_ms_p + = +NULL + ) + +128 + +. +timeout_ms + = 0; + +130 + +. +timeout_ms + = * +timeout_ms_p +; + +131 #ifde +__unix__ + + +132 + `CI_USER_PTR_SET +( + +. +sig_e +, +NULL +); + +135 +rc + = + `eb_t_hr_sock_p +( + `tif2t_hr_sour +( +ni +), & + + + +136 + `CI_BLOCKING_CTX_ARG +( + `ci_blockg_x_g_eded +())); + +137 + `ci_as +(( + +. +lock_ags + & ( +CI_SLEEP_NETIF_LOCKED + | + +138 +CI_SLEEP_SOCK_LOCKED +)) == 0); + +139 if +timeout_ms_p + ! +NULL + ) + +140 * +timeout_ms_p + = + +. +timeout_ms +; + +142 + `LOG_TV +( + `ci_log +("%d:%d AWAKE why=%s%p=%" +CI_PRIu64 +",%"CI_PRIu64"c=%d", + +143 + `NI_ID +( +ni +), + `W_FMT +( +w +), + +144 ( +why + & +CI_SB_FLAG_WAKE_RX +) ? "R":"", + +145 ( +why + & +CI_SB_FLAG_WAKE_TX +? "T":"", +p_q +, + +146 +w +-> +p_q +. +l +, +rc +)); + +148  +rc +; + +149 + } +} + +160 #ifde +__KERNEL__ + + +162  + $ci_sock_lock_block +( +ci_tif +* +ni +, +cp_waab +* +w +) + +164 #ifde +_WIN32 + + +166 + `ci_lo_u +(); + +169  + `eb_t_hr_sock_lock_ow +( + `tif2t_hr_sour +( +ni +), + +170 + `W_SP +( +w +) + +171 + `CI_BLOCKING_CTX_ARG +( + `ci_blockg_x_g_eded +())); + +173 + } +} + +177  + $ci_sock_lock_block +( +ci_tif +* +ni +, +cp_waab +* +w +) + +179 +oo_ + +w_ + = + `W_SP +( +w +); + +180  + `oo_sour_ +( + `ci_tif_g_driv_hd +( +ni +), +OO_IOC_TCP_SOCK_LOCK +, + +181 & +w_ +); + +182 + } +} + +187  + $ci_sock_lock_ow +( +ci_tif +* +ni +, +cp_waab +* +w +) + +189 #ide +__KERNEL__ + + +190 +ci_ut64 + +t_c +, +now_c +; + +192  +d +, +w +; + +193  +rc +; + +195 if + `ci_sock_ylock +( +ni +, +w +) ) + +198 #ide +__KERNEL__ + + +202 if + `oo_r_thad_g +()-> +e + & (1 << +ONLOAD_SPIN_SOCK_LOCK +) ) { + +203 + `CITP_STATS_NETIF +(++ +ni +-> +e +-> +s +. +sock_lock_buzz +); + +204 + `ci_c64 +(& +now_c +); + +205 +t_c + = +now_c +; + +206  +now_c + - +t_c + < +ni +-> +e +-> +buzz_cyes + ) { + +207 + `ci_c64 +(& +now_c +); + +208 if + `ci_sock_ylock +( +ni +, +w +) ) + +210 + `ci_lo_u +(); + +216 if( +rc + = + `ci_sock_lock_block +( +ni +, +w +)) < 0 ) { + +217 #ide +__KERNEL__ + + +218 if +rc + =- +EINTR + ) + +223 + `LOG_E +( + `ci_log +("%s: ERROR:c=%d", +__FUNCTION__ +, +rc +)); + +224 + `CI_TEST +(0); + +227 + `LOG_E +( + `ci_log +("%s: ERROR:c=%d", +__FUNCTION__ +, +rc +)); + +228  +rc +; + +231 +aga +: + +235 +d + = +w +-> +lock +. +wl_v +; + +236 if! ( +d + & +OO_WAITABLE_LK_LOCKED +) ) { + +237 +w + = +d + | +OO_WAITABLE_LK_LOCKED +; + +238 if + `ci_s32u_suced +(& +w +-> +lock +. +wl_v +, +d +, +w +) ) + +241  +aga +; + +244 + } +} + +247  + $ci_sock_uock_ow +( +ci_tif +* +ni +, +cp_waab +* +w +) + +249  +l +; + +251 + `ci_as +( + `ci_sock_is_locked +( +ni +, +w +)); + +253 +aga +: + +254 +l + = +w +-> +lock +. +wl_v +; + +255 if! ( +l + & +OO_WAITABLE_LK_NEED_WAKE +) ) { + +256 if( + `CI_LIKELY + + `ci_s32u_suced +(& +w +-> +lock +. +wl_v +, +l +, + +257 ( +l + & ~ +OO_WAITABLE_LK_LOCKED +)) )) + +259  +aga +; + +262 #ifde +__KERNEL__ + + +263 + `eb_t_hr_sock_uock_ow +( + `tif2t_hr_sour +( +ni +), + `W_SP +( +w +)); + +266 +oo_ + +w_ + = + `W_SP +( +w +); + +267 + `CI_DEBUG_TRY +( + `oo_sour_ +( + `ci_tif_g_driv_hd +( +ni +), + +268 +OO_IOC_TCP_SOCK_UNLOCK +, & +w_ +)); + +271 + } +} + +280 #ide +__KERNEL__ + + +282  + $ci_tif_pkt_wa_ +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +, + +283 * +lock_ags +, * +de +) + +285 +ci_ut64 + +t_c +, +now_c +; + +286  +rc + = 1; + +288 + `ci_c64 +(& +t_c +); + +289 +now_c + = +t_c +; + +290 +ni +-> +e +-> +is_r + = 1; + +291 + `CITP_STATS_NETIF +(++ +ni +-> +e +-> +s +. +pkt_wa_ +); + +294 if + `ci_tif_may_pl +( +ni +&& + `ci_tif_ed_pl_ng +i, +now_c +) && + +295 ((* +lock_ags + & +CI_SLEEP_NETIF_LOCKED +|| + `ci_tif_ylock +( +ni +)) ) { + +296 * +lock_ags + | +CI_SLEEP_NETIF_LOCKED +; + +297 + `ci_tif_pl +( +ni +); + +299 if + `ci_tif_pkt_tx_n_loc_now +( +ni +) ) { + +300 +rc + = 0; + +301 * +de + = 1; + +302 if* +lock_ags + & +CI_SLEEP_NETIF_RQ + ) { + +303 if! (* +lock_ags + & +CI_SLEEP_NETIF_LOCKED +) ) + +304 +rc + = + `ci_tif_lock +( +ni +); + +306 if* +lock_ags + & +CI_SLEEP_NETIF_LOCKED + ) + +307 + `ci_tif_uock +( +ni +); + +310 if* +lock_ags + & +CI_SLEEP_NETIF_LOCKED + ) { + +311 + `ci_tif_uock +( +ni +); + +312 * +lock_ags + &=~ +CI_SLEEP_NETIF_LOCKED +; + +314 + `ci_c64 +(& +now_c +); + +315 + `ci_lo_u +(); + +318 #i +CI_CFG_SPIN_STATS + + +319 +ni +-> +e +-> +s +. +_pkt_wa +++; + +321 }  +now_c + - +t_c + < +s +-> +b +. +_cyes + ); + +323 +ni +-> +e +-> +is_r + = 0; + +324  +rc +; + +325 + } +} + +330  + $ci_tif_pkt_wa +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +,  +lock_ags +) + +332  +rc +; + +334 + `ci_as +(!( +lock_ags + & +CI_SLEEP_NETIF_LOCKED +|| + `ci_tif_is_locked +( +ni +)); + +336 #ide +__KERNEL__ + + +337 if + `oo_r_thad_g +()-> +e + & (1 << +ONLOAD_SPIN_PKT_WAIT +) && + +338 +s + ! +NULL +) { + +339  +de + = 0; + +340 +rc + = + `ci_tif_pkt_wa_ +( +ni +, +s +, & +lock_ags +, & +de +); + +341 if +de + ) + +342  +rc +; + +346 if + `ci_tif_may_pl +( +ni +&& + `ci_tif_has_evt +(ni) ) + +347 if( +lock_ags + & +CI_SLEEP_NETIF_LOCKED +|| + `ci_tif_ylock +( +ni +) ) { + +348 +lock_ags + | +CI_SLEEP_NETIF_LOCKED +; + +349 + `ci_tif_pl +( +ni +); + +350 if + `ci_tif_pkt_tx_n_loc_now +( +ni +) ) { + +351 if! ( +lock_ags + & +CI_SLEEP_NETIF_RQ +) ) + +352 + `ci_tif_uock +( +ni +); + +361 if +lock_ags + & +CI_SLEEP_NETIF_LOCKED + ) { + +362 + `ci_tif_uock +( +ni +); + +363 +lock_ags + &~ +CI_SLEEP_NETIF_LOCKED +; + +365 #ifde +__KERNEL__ + + +366 +rc + = + `eb_t_hr_pkt_wa +( + `tif2t_hr_sour +( +ni +), + +367 & +lock_ags + + +368 + `CI_BLOCKING_CTX_ARG +( + `ci_blockg_x_g_eded +())); + +370 +rc + = + `oo_sour_ +( + `ci_tif_g_driv_hd +( +ni +), +OO_IOC_TCP_PKT_WAIT +, + +371 & +lock_ags +); + +374 if +rc + =- +EINTR + ) + +382 if +rc + < 0 || ! ( +lock_ags + & +CI_SLEEP_NETIF_RQ +) ) + +383  +rc +; + +385 +rc + = + `ci_tif_lock +( +ni +); + +386 if +rc + < 0 ) c; + +387 +lock_ags + | +CI_SLEEP_NETIF_LOCKED +; + +389  ! + `ci_tif_pkt_tx_n_loc_now +( +ni +) ); + +392 + } +} + + @tcp_sockopts.c + +14  + ~"_.h +" + +15  + ~ + +16  + ~ + +18 #i! +defed +( +__KERNEL__ +) + +19  + ~ + +21  + #LPF + "TCP SOCKOPTS " + + ) + +23 #ifde +__lux__ + + +25 cڡ  + gsock_cge_lux_m +[] = { + +26 +CI_TCPF_CA_On +, + +27 +CI_TCPF_CA_Loss +, + +28 +CI_TCPF_CA_Recovy +, + +29 +CI_TCPF_CA_Loss +, + +30 +CI_TCPF_CA_Recovy + | +CI_TCPF_CA_Loss + + +35 + $ci_t_fo_g +( +ci_tif +* +tif +, +ci_sock_cmn +* +s +,  +ci_t_fo +* +ufo +, + +36 +sockn_t +* +ݎ +) + +38 +ci_time_t + +now + = + `ci__time_now +( +tif +); + +39  +ci_t_fo + +fo +; + +41 + `memt +(& +fo +, 0, (info)); + +43 +fo +. +ti_e + = +ci_sock_es_lux_m +[ + `CI_TCP_STATE_NUM +( +s +-> +b +. +e +)]; + +46 +fo +. +ti_o + = + +47 + `ci__time_ticks2ms +( +tif +,if-> +e +-> +cf +. +tcڡ_dack +) * 1000; + +48 +fo +. +ti_rcv_mss + = +CI_CFG_TCP_DEFAULT_MSS +; + +57 if +s +-> +b +. +e + ! +CI_TCP_LISTEN + ) { + +58 +ci_t_e +* +ts + = + `SOCK_TO_TCP +( +s +); + +60 +fo +. +ti_pmtu + = +ts +-> +pmtus +. +pmtu +; + +61 +fo +. +ti__e + = +sock_cge_lux_m +[ +ts +-> +cge +]; + +62 +fo +. +ti_sms + = +ts +-> +sms +; + +63 +fo +. +ti_obes + = +ts +-> +ka_obes +; + +66 if +ts +-> +tags + & +CI_TCPT_FLAG_TSO + ) + +67 +fo +. +ti_tis + | +CI_TCPI_OPT_TIMESTAMPS +; + +68 if +ts +-> +tags + & +CI_TCPT_FLAG_ECN + ) + +69 +fo +. +ti_tis + | +CI_TCPI_OPT_ECN +; + +70 if +ts +-> +tags + & +CI_TCPT_FLAG_SACK + ) + +71 +fo +. +ti_tis + | +CI_TCPI_OPT_SACK +; + +73 if +ts +-> +tags + & +CI_TCPT_FLAG_WSCL + ) { + +74 +fo +. +ti_tis + | +CI_TCPI_OPT_WSCALE +; + +75 +fo +. +ti_d_ws + = +ts +-> +d_ws +; + +76 +fo +. +ti_rcv_ws + = +ts +-> +rcv_ws +; + +79 +fo +. +ti_o + = + `ci__time_ticks2ms +( +tif +, +ts +-> +o +) * 1000; + +80 +fo +. +ti_d_mss + = +ts +-> +eff_mss +; + +81 +fo +. +ti_ucked + = +ts +-> +acks_ndg + & +CI_TCP_ACKS_PENDING_MASK +; + +82 #i +CI_CFG_TCP_SOCK_STATS + + +83 +fo +. +ti_s + = +ts +-> +s_cumutive +. +cou +. +tx_s_pkt +; + +85 #i +CI_CFG_CONGESTION_WINDOW_VALIDATION + + +86 +fo +. +ti_ϡ_da_ + = + `ci__time_ticks2ms +( +tif +, + +87 +now + - +ts +-> +t_ϡ_ +); + +89 +fo +. +ti_ϡ_da_ + = 0; + +91 +fo +. +ti_ϡ_da_cv + = + `ci__time_ticks2ms +( +tif +, + +92 +now + - +ts +-> +taws +); + +94 +fo +. +ti_t + = + `ci__time_ticks2ms +( +tif +, +ts +-> + +) * 1000 / 8; + +95 +fo +. +ti_tv + = + `ci__time_ticks2ms +( +tif +, +ts +-> +sv +) * 1000 / 4; + +96 +fo +. +ti_rcv_shsh + = +ts +-> +shsh +; + +97 if + `t_eff_mss +( +ts +) != 0 ) { + +98 +fo +. +ti_d_shsh + = +ts +-> +shsh + / + `t_eff_mss +(ts); + +99 +fo +. +ti_d_cwnd + = +ts +-> +cwnd + / + `t_eff_mss +(ts); + +102 +fo +. +ti_d_shsh + = 0; + +103 +fo +. +ti_d_cwnd + = 0; + +105 +fo +. +ti_advmss + = +ts +-> +amss +; + +107 i + `NI_OPTS +( +tif +). +t_rcvbuf_mode + == 1 ) { + +108 +fo +. +ti_rcv_t + = info. +ti_t +; + +109 +fo +. +ti_rcv_a + = +ts +-> +rcvbuf_drs +. +bys +; + +112 +fo +. +ti_rcv_t + = 0; + +113 +fo +. +ti_rcv_a + = + `t_rcv_wnd_right_edge_ +( +ts +-s-> +rcv_added +; + +115 +fo +. +ti_tٮ_s + = +ts +-> +s +. +tٮ_s +; + +123 if* +ݎ + > ( +fo +) ) + +124 * +ݎ + = ( +fo +); + +125 + `memy +( +ufo +, & +fo +, * +ݎ +); + +128 + } +} + +133  + $ci_g_s_t +( +ci_tif +* +tif +, +ci_sock_cmn +* +s +,  +݊ame +, * +tv +, + +134 +sockn_t + * +ݎ + ) + +136 #i + `defed +( +__lux__ +) || \ + +137 + `defed +( +__sun__ +&& defed( +TCP_KEEPALIVE_THRESHOLD +) || \ + +138 + `defed +( +__sun__ +&& defed( +TCP_KEEPALIVE_ABORT_THRESHOLD +) + +139 +ci_t_sock_cmn + * +c + = &( + `SOCK_TO_WAITABLE_OBJ +( +s +)-> +t +.c); + +141  +u + = 0; + +143  +݊ame +){ + +144  +TCP_NODELAY +: + +146 +u + = (( +s +-> +s_aags + & +CI_SOCK_AFLAG_NODELAY +) != 0); + +147  +u_out +; + +148 #ifde +__unix__ + + +149  +TCP_MAXSEG +: + +151 i(( +s +-> +b +. +e + & +CI_TCP_STATE_TCP_CONN +)) { + +152 +u + = + `t_eff_mss +( + `SOCK_TO_TCP +( +s +)); + +154 +u + = 536; + +156  +u_out +; + +157 #ifde +TCP_CORK + + +158  +TCP_CORK +: + +161 +u + = (( +s +-> +s_aags + & +CI_SOCK_AFLAG_CORK +) != 0); + +162  +u_out +; + +165 #i + `defed +( +__sun__ +) + +166 #ifde +TCP_KEEPALIVE_THRESHOLD + + +167  +TCP_KEEPALIVE_THRESHOLD +: + +169 +u + = ( +c +-> +t_ka_time__cs + * 1000; + +171  +u_out +; + +174 #ifde +TCP_KEEPALIVE_ABORT_THRESHOLD + + +175  +TCP_KEEPALIVE_ABORT_THRESHOLD +: + +177 +u + = +c +-> +ka_obe_th + * +CI_TCP_TCONST_RTO_INITIAL +; + +179  +u_out +; + +183 #ifde +__lux__ + + +184  +TCP_KEEPIDLE +: + +187 +u + = ( +c +-> +t_ka_time__cs +; + +189  +u_out +; + +190  +TCP_KEEPINTVL +: + +193 +u + = ( +c +-> +t_ka_tvl__cs +; + +195  +u_out +; + +196  +TCP_KEEPCNT +: + +199 +u + = +c +-> +ka_obe_th +; + +201  +u_out +; + +202  +TCP_INFO +: + +203 #ide +__KERNEL__ + + +205  + `ci_t_fo_g +( +tif +, +s +, ( +ci_t_fo +* +tv +, +ݎ +); + +210 + `ci_as +(0); + +212  +TCP_DEFER_ACCEPT +: + +214 +u + = 0; + +215 if +c +-> +t_der_ac + ! +OO_TCP_DEFER_ACCEPT_OFF + ) { + +216 +u + = + `ci__time_ticks2ms +( +tif +, + `NI_CONF +ґif). +tcڡ_o_l +); + +217 +u + = ((u + 500/ 1000* ( (1 << +c +-> +t_der_ac +) - 1); + +219  +u_out +; + +221  +TCP_QUICKACK +: + +223 +u + = 0; + +224 if +s +-> +b +. +e + & +CI_TCP_STATE_TCP_CONN + ) { + +225 +ci_t_e +* +ts + = + `SOCK_TO_TCP +( +s +); + +226 +u + = + `ci_t_is__硡t +( +ts +); + +228  +u_out +; + +233 #ide +__KERNEL__ + + +234 + `LOG_TC + + `log +( +LPF + "getsockopt: unimplemented or bad option: %i", + +235 +݊ame +)); + +236 + `RET_WITH_ERRNO +( +ENOPROTOOPT +); + +241 + `ci_as +(0); + +247 +u_out +: + +248  + `ci_gsockt_f +( +tv +, +ݎ +, +IPPROTO_TCP +, & +u +, (u)); + +249 + } +} + +252 #i! +defed +( +__KERNEL__ +) + +253  + $ci_t_gsockt +( +cp_sock +* + +, +ci_fd_t + +fd +,  +v +, + +254  +݊ame +, * +tv +, +sockn_t + * +ݎ + ) + +256 +ci_sock_cmn +* +s + = + +->s; + +257 +ci_tif +* +tif + = + +->netif; + +270 if( +v + = +SOL_SOCKET +) { + +271 #i + `defed +( +__sun__ +) + +272 if + `CI_UNLIKELY +(*( +sockn_t + *) +ݎ + == 0) ) + +273 + `RET_WITH_ERRNO +( +EINVAL +); + +276 if +݊ame + = +SO_SNDBUF + && + +277 + `NI_OPTS +( +tif +). +t_dbuf_mode + == 2 && + +278 +s +-> +b +. +e + & +CI_TCP_STATE_TCP_CONN + ) { + +280 +ci_t_e +* +ts + = + `SOCK_TO_TCP +( +s +); + +281 + `ci_t_t_dbuf_om_dbuf_pkts +( +tif +, +ts +); + +285  + `ci_g_s_sock +( +tif +, +s +, +݊ame +, +tv +, +ݎ +); + +288 i( +v + = +IPPROTO_IP +) { + +290  + `ci_g_s_ +( +tif +, +s +, +fd +, +݊ame +, +tv +, +ݎ +); + +292 #i +CI_CFG_FAKE_IPV6 + + +294 i( +v + = +IPPROTO_IPV6 + && +s +-> +doma + = +AF_INET6 +) { + +296  + `ci_g_s_6 +( +s +, +fd +, +݊ame +, +tv +, +ݎ +); + +300 i( +v + = +IPPROTO_TCP +) { + +302  + `ci_g_s_t +( +tif +, +s +, +݊ame +, +tv +, +ݎ +); + +305 + `SOCKOPT_RET_INVALID_LEVEL +( +s +); + +307 + } +} + +309  + $ci_t_tsockt_lk +( +cp_sock +* + +, +ci_fd_t + +fd +,  +v +, + +310  +݊ame +, cڡ * +tv +, + +311 +sockn_t + +ݎ + ) + +313 +ci_sock_cmn +* +s + = + +->s; + +314 #i + `defed +( +__lux__ +) || \ + +315 + `defed +( +__sun__ +&& defed( +TCP_KEEPALIVE_THRESHOLD +) || \ + +316 + `defed +( +__sun__ +&& defed( +TCP_KEEPALIVE_ABORT_THRESHOLD +) + +317 +ci_t_sock_cmn +* +c + = &( + `SOCK_TO_WAITABLE_OBJ +( +s +)-> +t +.c); + +319 +ci_tif +* +tif + = + +->netif; + +320  +zov + = 0; + +321  +rc +; + +328 i( +ݎ + == 0) { + +332 +tv + = & +zov +; + +333 +ݎ + = ( +zov +); + +339 if( +v + = +SOL_SOCKET +) { + +340  +݊ame +) { + +341  +SO_KEEPALIVE +: + +344 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +345  +_v +; + +347 if*(* +tv + ) { + +348  +ev_ags + = +s +-> +s_ags +; + +349 +s +-> +s_ags + | +CI_SOCK_FLAG_KALIVE +; + +352 if +s +-> +b +. +e + ! +CI_TCP_CLOSED + && s->b.! +CI_TCP_LISTEN + && + +353 !( +ev_ags + & +CI_SOCK_FLAG_KALIVE +) ) { + +354 +ci_t_e +* +ts + = + `SOCK_TO_TCP +( +s +); + +355 + `LOG_TV +( + `log +("%s: " +NSS_FMT +"un KEEPALIVEimer from setsockopt()", + +356 +__FUNCTION__ +, + `NSS_PRI_ARGS +( +tif +, +s +))); + +357 + `ci_as +( +ts +-> +ka_obes + == 0); + +358 + `ci_t_kive_t +( +tif +, +ts +, + `ci_t_kive_id_g +(ts)); + +362 +s +-> +s_ags + &=~ +CI_SOCK_FLAG_KALIVE +; + +363 if +s +-> +b +. +e + ! +CI_TCP_LISTEN + ) { + +364 +ci_t_e +* +ts + = + `SOCK_TO_TCP +( +s +); + +365 + `ci_t_kive_check_d_r +( +tif +, +ts +); + +366 +ts +-> +ka_obes + = 0; + +374  + `ci_t_s_sock +( +tif +, +s +, +݊ame +, +tv +, +ݎ +); + +378 if +v + = +IPPROTO_IP + ) { + +380  + `ci_t_s_ +( +tif +, +s +, +݊ame +, +tv +, +ݎ +); + +382 if +v + = +IPPROTO_TCP + ) { + +383  +݊ame +) { + +384 #ifde +__unix__ + + +385 #ifde +TCP_CORK + + +386  +TCP_CORK +: + +387 if*(* +tv + ) { + +388 + `ci_b_t +(& +s +-> +s_aags +, +CI_SOCK_AFLAG_CORK_BIT +); + +390 + `ci_b_r +(& +s +-> +s_aags +, +CI_SOCK_AFLAG_CORK_BIT +); + +400 if +s +-> +b +. +e + ! +CI_TCP_LISTEN + ) { + +401 +ci_t_e +* +ts + = + `SOCK_TO_TCP +( +s +); + +402 if +ts +-> +nd +. +num + == 1 ) { + +403 + `TX_PKT_TCP +( + `PKT_CHK +( +tif +, +ts +-> +nd +. +hd +))-> +t_ags + |= + +404 +CI_TCP_FLAG_PSH +; + +405 + `ci_t_tx_adv +( +ts +, +tif +); + +412  +TCP_NODELAY +: + +413 if + `NI_OPTS +( +tif +). +t_f_noday + ) + +415 if*(* +tv + ) { + +416 + `ci_b_t +(& +s +-> +s_aags +, +CI_SOCK_AFLAG_NODELAY_BIT +); + +418 if +s +-> +b +. +e + ! +CI_TCP_LISTEN + ) { + +419 +ci_t_e +* +ts + = + `SOCK_TO_TCP +( +s +); + +420 +ci_ut32 + +ck +; + +422 if +ts +-> +nd +. +num + == 1 ) { + +426 if( +ck + = ( +s +-> +s_aags + & +CI_SOCK_AFLAG_CORK +)) ) + +427 + `ci_b_r +(& +s +-> +s_aags +, +CI_SOCK_AFLAG_CORK_BIT +); + +429 if + `ci__queue_n_emy +(& +ts +-> +nd +) ) + +430 + `ci_t_tx_adv +( +ts +, +tif +); + +432 i +ck + ) + +433 + `ci_b_t +(& +s +-> +s_aags +, +CI_SOCK_AFLAG_CORK_BIT +); + +438 + `ci_b_r +(& +s +-> +s_aags +, +CI_SOCK_AFLAG_NODELAY_BIT +); + +441 #i + `defed +( +__sun__ +) + +442 #ifde +TCP_KEEPALIVE_THRESHOLD + + +443  +TCP_KEEPALIVE_THRESHOLD +: + +444 +c +-> +t_ka_time + = + `ci__time_ms2ticks_ow +( +tif +, *(*) +tv +); + +445 +c +-> +t_ka_time__cs + = *(*) +tv + / 1000; + +449 #ifde +TCP_KEEPALIVE_ABORT_THRESHOLD + + +450  +TCP_KEEPALIVE_ABORT_THRESHOLD +: + +452 +c +-> +ka_obe_th + = *(*) +tv + / +CI_TCP_TCONST_RTO_INITIAL +; + +457 #ifde +__lux__ + + +458  +TCP_MAXSEG +: + +460 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +461  +_v +; + +462 if(*(*) +tv + < 8) || + +463 (*(*) +tv + > +CI_CFG_TCP_MAX_WINDOW +)) { + +464 +rc + = - +EINVAL +; + +465  +_v +; + +467 +c +-> +ur_mss + = ( +ci_ut16 +*(* +tv +; + +470  +TCP_KEEPIDLE +: + +472 +c +-> +t_ka_time + = + `ci__time_ms2ticks_ow +( +tif +, *(*) +tv +*1000); + +473 +c +-> +t_ka_time__cs + = *(*) +tv +; + +476  +TCP_KEEPINTVL +: + +478 +c +-> +t_ka_tvl + = + `ci__time_ms2ticks_ow +( +tif +, *(*) +tv +*1000); + +479 +c +-> +t_ka_tvl__cs + = *(*) +tv +; + +482  +TCP_KEEPCNT +: + +484 +c +-> +ka_obe_th + = *(*) +tv +; + +486  +TCP_DEFER_ACCEPT +: + +487 if*(* +tv + > 0 ) { + +489  +timeo + = + `CI_MIN +(*(* +tv +, 100000) * 1000; + +490 +timeo + = + `ci__time_ms2ticks_ow +( +tif +,imeo); + +491 +timeo + = + `CI_MIN +imeo, + `NI_CONF +( +tif +). +tcڡ_o_max +); + +492 +c +-> +t_der_ac + = 1; + +493  +timeo + > (( + `NI_CONF +( +tif +). +tcڡ_o_l + * + +494 ((1 << +c +-> +t_der_ac +) - 1)) && + +495 +c +-> +t_der_ac + < +CI_CFG_TCP_SYNACK_RETRANS_MAX + ) + +496 ++ +c +-> +t_der_ac +; + +499 +c +-> +t_der_ac + = +OO_TCP_DEFER_ACCEPT_OFF +; + +501  +TCP_QUICKACK +: + +503 if +s +-> +b +. +e + & +CI_TCP_STATE_TCP_CONN + ) { + +504 +ci_t_e +* +ts + = + `SOCK_TO_TCP +( +s +); + +505 if*(* +tv + != 0 ) { + +506 + `CITP_TCP_FASTSTART +( +ts +-> +硡t_acks + = + +507 + `NI_OPTS +( +tif +). +t_硡t_id +); + +508 if +ts +-> +acks_ndg + ) { + +509 +ci__pkt_fmt +* +pkt + = + `ci_tif_pkt_loc +( +tif +); + +510 if + `CI_LIKELY +( +pkt + ! +NULL +) ) + +511 + `ci_t_nd_ack +( +tif +, +ts +, +pkt +, +CI_FALSE +); + +515 +ts +-> +tags + | +CI_TCPT_FLAG_NO_QUICKACK +; + +516 + `CITP_TCP_FASTSTART +( +ts +-> +硡t_acks + = 0); + +523 + `LOG_TC +( + `log +("%s: " +NSS_FMT +" option %i unimplemented (ENOPROTOOPT)", + +524 +__FUNCTION__ +, + `NSS_PRI_ARGS +( +tif +, +s +), +݊ame +)); + +525 + `RET_WITH_ERRNO +( +ENOPROTOOPT +); + +529 + `LOG_U +( + `log +( +FNS_FMT + "unknownevel=%d optname=%dccepted by O/S", + +530 + `FNS_PRI_ARGS +( +tif +, +s +), +v +, +݊ame +)); + +535 +_v +: + +536 + `LOG_TC +( + `log +("%s: " +NSS_FMT +" option %i badaram (EINVAL or EFAULT)", + +537 +__FUNCTION__ +, + `NSS_PRI_ARGS +( +tif +, +s +), +݊ame +)); + +538 + `RET_WITH_ERRNO +(- +rc +); + +539 + } +} + +551  + $ci_t_tsockt +( +cp_sock +* + +, +ci_fd_t + +fd +,  +v +, + +552  +݊ame +, cڡ * +tv +, + +553 +sockn_t + +ݎ + ) + +555 +ci_sock_cmn +* +s + = + +->s; + +556 +ci_tif +* +ni + = + +-> +tif +; + +557  +rc + = 0; + +559 + `ci_tif_lock_cou +( +ni +, +tsockt_ni_lock_cڋnds +); + +569 if! ( +s +-> +b +. +e + & +CI_TCP_STATE_SYNCHRONISED +) ) { + +570 +ci_fd_t + +os_sock + = +CI_FD_BAD +; + +571 if +s +-> +b +. +sb_aags + & +CI_SB_AFLAG_OS_BACKED + ) + +572 +os_sock + = + `ci_g_os_sock_fd +( +fd +); + +573 if + `CI_IS_VALID_SOCKET +( +os_sock +) ) { + +574 +rc + = + `ci_sys_tsockt +( +os_sock +, +v +, +݊ame +, +tv +, +ݎ +); + +575 + `ci_l_os_sock_fd +( +os_sock +); + +576 if +rc + != 0 && + +577 ! + `ci_tsockt_os__igne +( +ni +, +s +, +o +, +v +, +݊ame +, + +578 +tv +, +ݎ +) ) { + +579  +uock_out +; + +581 +rc + = 0; + +585 if +v + = +SOL_SOCKET + ) { + +586 +rc + = + `ci_t_s_sock_nock +( +ni +, +s +, +݊ame +, +tv +, +ݎ +); + +587 if +rc + <0 )  +uock_out +; + +589 if +v + = +IPPROTO_IPV6 + ) { + +590 #ifde +IPV6_V6ONLY + + +591 if +݊ame + = +IPV6_V6ONLY + && *(* +tv + ) + +592 +rc + = +CI_SOCKET_HANDOVER +; + +596  +uock_out +; + +599 +rc + = + `ci_t_tsockt_lk +( + +, +fd +, +v +, +݊ame +, +tv +, +ݎ +); + +601 +uock_out +: + +602 + `ci_tif_uock +( +ni +); + +603  +rc +; + +604 + } +} + + @tcp_stats.c + +13  + ~"_.h +" + +16 #i +CI_CFG_TCP_SOCK_STATS + + +25 +ci_le +  + +26 + $ci_t_s_hd_tim +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +27 +ci_time_t + +timeout +) + +29 +ci__tim +* + +; + +30 + `ci_as + +ni + && +ts + ); + +31 + + = & +ts +-> +s_tid +; + +33 + `LOG_STATS + + `ci_log +"%s%p, %p, %d)", +__FUNCTION__ +, +ni +, +ts +, () +timeout +)); + +34 if + `ci__tim_ndg +( +ni +, + + ) ) { + +35 if +timeout + == 0 ) + +36 + `ci__tim_r +( +ni +, + + ); + +38 + `ci__tim_modify +( +ni +, + +, + `ci_t_time_now +i)+ +timeout +); + +40 if +timeout + != 0 ) + +41 + `ci__tim_t +( +ni +, + +, + `ci_t_time_now +i)+ +timeout +); + +43 + } +} + +46 +ci_le +  + +47 + $ci_t_s__da + +ci__sock_s +* +t_s +) + +49  +r +; + +50 +CI_IP_STATS_TYPE +* +de +; + +52 + `ci_as + +t_s + ); + +53 + `memt +& +t_s +-> +cou +, 0, + +54 ( +t_s +-> +cou +)); + +56 + `memt +& +t_s +-> +au +, 0, + +57 ( +t_s +-> +au +)); + +59 +de + = ( +CI_IP_STATS_TYPE +*)& +t_s +-> +m +; + +60  +r + =0; c < +CI_IP_SOCK_STATS_MIN_LEN +; ctr++ ) + +61 +de +[ +r +] = +CI_IP_STATS_MAX_VAL +; + +63 +de + = ( +CI_IP_STATS_TYPE +*)& +t_s +-> +max +; + +64  +r + =0; c < +CI_IP_SOCK_STATS_MAX_LEN +; ctr++ ) + +65 +de +[ +r +] = +CI_IP_STATS_MIN_VAL +; + +66 + } +} + +71 + $ci_t_s_ +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +73  +v +; + +75 + `ci_as + +ni + && +ts + ); + +76 + `LOG_STATS + + `ci_log +("%s(%p, %p)", +__FUNCTION__ +, +ni +, +ts + )); + +78 +ts +-> +s_fmt + = +CI_IP_STATS_OUTPUT_DEFAULT +; + +79 +v + = +CI_TCONST_STATS +; + +81 + `NI_CONF +( +ni +). +tcڡ_s + = +v + ? + `ci_t_time_ms2ticks +(ni, val) : 0; + +83 + `LOG_STATS + + `ci_log +("Statistics: %uicks, %dmS, (format:%s)", + +84 + `NI_CONF +( +ni +). +tcڡ_s +, +v +, + +85 +ts +-> +s_fmt + ? "Text" : "XML" )); + +86 + `ci_t_s__da +& +ts +-> +s_sh + ); + +87 + `ci_t_s__da +& +ts +-> +s_cumutive + ); + +90 if +v + ) + +91 + `ci_t_s_ai + +ni +, +ts +, +CI_IP_STATS_START +, + +92 +CI_IP_STATS_OUTPUT_DEFAULT +, +NULL +, NULL ); + +93 + } +} + +98 + $ci_t_s_upde + +ci_t_e +* +ts + ) + +100  +r +; + +101 +CI_IP_STATS_TYPE +* +c +; + +102 +CI_IP_STATS_TYPE +* +de +; + +104 +ts +-> +s_cumutive +. +now + =s-> +s_sh +.now; + +106 +c + = ( +CI_IP_STATS_TYPE +*)& +ts +-> +s_sh +. +cou +; + +107 +de + = ( +CI_IP_STATS_TYPE +*)& +ts +-> +s_cumutive +. +cou +; + +108  +r + =0; c < +CI_IP_SOCK_STATS_COUNT_LEN +; ctr++ ) + +109 +de +[ +r +] + +c +[ctr]; + +111 +c + = ( +CI_IP_STATS_TYPE +*)& +ts +-> +s_sh +. +au +; + +112 +de + = ( +CI_IP_STATS_TYPE +*)& +ts +-> +s_cumutive +. +au +; + +113  +r + =0; c < +CI_IP_SOCK_STATS_ACTUAL_LEN +; ctr++ ) { + +114 +de +[ +r +] = +c +[ctr]; + +117 +c + = ( +CI_IP_STATS_TYPE +*)& +ts +-> +s_sh +. +m +; + +118 +de + = ( +CI_IP_STATS_TYPE +*)& +ts +-> +s_cumutive +. +m +; + +119  +r + =0; c < +CI_IP_SOCK_STATS_MIN_LEN +; ctr++ ) { + +120 if +de +[ +r +] > +c +[ctr] ) + +121 +de +[ +r +] = +c +[ctr]; + +124 +c + = ( +CI_IP_STATS_TYPE +*)& +ts +-> +s_sh +. +max +; + +125 +de + = ( +CI_IP_STATS_TYPE +*)& +ts +-> +s_cumutive +. +max +; + +126  +r + =0; c < +CI_IP_SOCK_STATS_MAX_LEN +; ctr++ ) { + +127 if +de +[ +r +] < +c +[ctr] ) + +128 +de +[ +r +] = +c +[ctr]; + +131 + `ci_t_s__da +& +ts +-> +s_sh + ); + +132 + } +} + +134  + #__SS +( +s +(s)-> +s_sh + + + ) + +135  + #__CU +( +s +(s)-> +s_cumutive + + + ) + +137  + #__TEXT_TCP_COUNT_FMT + "%u/%u" + + ) + +138  + #__TEXT_TCP_COUNT +( +s +, +Fld +) \ + +139 ( +s +)-> +s_sh +. +cou +. +Fld +, (s)-> +s_cumutive +.cou. + ) +Fld + +141  + #__TEXT_TCP_MINMAX_FMT + " Mn:%u/%u Mx:%u/%u" + + ) + +142  + #__TEXT_TCP_MINMAX +( +s +, +Fld +) \ + +143 + `__SS +( +s +). +m +. +Fld + = +CI_IP_STATS_MAX_VAL + ? 0 : __SS(s).min.Fld, \ + +144 + `__CU +( +s +). +m +. +Fld + = +CI_IP_STATS_MAX_VAL + ? 0 : __CU(s).min.Fld, \ + +145 ( +s +)-> +s_sh +. +max +. +Fld +, \ + +146 ( +s +)-> +s_cumutive +. +max +. +Fld + + + ) + +148  + #__TEXT_TCP_CUR_MINMAX_FMT + "%u Mn:%u/%u Mx:%u/%u" + + ) + +149  + #__TEXT_TCP_CUR_MINMAX +( +s +, +Fld +(s)-> +s_sh +. +au +.Fld, \ + +150 + `__SS +( +s +). +m +. +Fld + = +CI_IP_STATS_MAX_VAL + ? 0 : __SS(s).min.Fld, \ + +151 + `__CU +( +s +). +m +. +Fld + = +CI_IP_STATS_MAX_VAL + ? 0 : __CU(s).min.Fld, \ + +152 ( +s +)-> +s_sh +. +max +. +Fld +, \ + +153 ( +s +)-> +s_cumutive +. +max +. +Fld + + + ) + +155 #i +CI_CFG_SEND_STATS_TO_LOG + + +156  + #__TEXT_TCP_LOG + +log + + + ) + +158  + #__TEXT_TCP_LOG +( +fmt +, +gs +...) \ + +159 i( +n + < +cou +) { \ + +160 +n + + + `tf +( +buf + +, +cou + -, +fmt + "\n", +gs +); \ + +161 } + + ) + +164  + #__TEXT_TCP_COUNT_LOG +( +me +, +group +, +fld +) \ + +165 + `__TEXT_TCP_LOG +( +__TEXT_NETIF_COUNT_FMT +, \ + +166 ( +me +), + `__TEXT_NETIF_COUNT +( +tif +, +group +, +fld +)); \ + +167 } + + ) + +172 + $ci_t_s_pt_xt +( +ci_t_e +* +ts +, * +buf +,  +cou +) + +174 #i +CI_CFG_SEND_STATS_TO_LOG +==0 + +175  +n + = 0; + +177 i( +cou + <= 0) + +182 + `__TEXT_TCP_LOG +"STATS f %d (%sPtime: %u/%u (%umS", + `S_SP +( +ts +), + +183 +ts +-> +udpags + & +CI_UDPF_IN_USE + ? "UD" : "TC", + +184 +ts +-> +s_sh +. +now +,s-> +s_cumutive +.now, + +185 +ts +-> +s_sh +. +now + -s-> +s_cumutive +.now); + +188 + `__TEXT_TCP_LOG +"Tx: by:" +__TEXT_TCP_COUNT_FMT + "kt:" __TEXT_TCP_COUNT_FMT, + +189 + `__TEXT_TCP_COUNT +( +ts +, +tx_by +), __TEXT_TCP_COUNTs, +tx_pkt +)); + +191 + `__TEXT_TCP_LOG +" slow:" +__TEXT_TCP_COUNT_FMT + " ReTx:" + +192 +__TEXT_TCP_COUNT_FMT +, + +193 + `__TEXT_TCP_COUNT +( +ts +, +tx_owth +), + +194 + `__TEXT_TCP_COUNT +( +ts +, +tx_s_pkt +)); + +196 + `__TEXT_TCP_LOG +" s˕:" +__TEXT_TCP_COUNT_FMT + "ime:" + +197 +__TEXT_TCP_MINMAX_FMT +, + +198 + `__TEXT_TCP_COUNT +( +ts +, +tx_p +), + +199 + `__TEXT_TCP_MINMAX +( +ts +, +tx_ime +) ); + +201 + `__TEXT_TCP_LOG +" W:" +__TEXT_TCP_CUR_MINMAX_FMT +, + +202 + `__TEXT_TCP_CUR_MINMAX +( +ts +, +tx_w +)); + +204 + `__TEXT_TCP_LOG +" WSCL:" +__TEXT_TCP_CUR_MINMAX_FMT +, + +205 + `__TEXT_TCP_CUR_MINMAX +( +ts +, +tx_ws +)); + +207 + `__TEXT_TCP_LOG +"Rx: by:" +__TEXT_TCP_COUNT_FMT + "kt:" + +208 +__TEXT_TCP_COUNT_FMT + " slow:" __TEXT_TCP_COUNT_FMT, + +209 + `__TEXT_TCP_COUNT +( +ts +, +rx_by +), __TEXT_TCP_COUNTs, +rx_pkt +), + +210 + `__TEXT_TCP_COUNT +( +ts +, +rx_owth +)); + +212 + `__TEXT_TCP_LOG +" SeqEr:" +__TEXT_TCP_COUNT_FMT + " AckEr:" + +213 +__TEXT_TCP_COUNT_FMT + " PawsEr:" __TEXT_TCP_COUNT_FMT, + +214 + `__TEXT_TCP_COUNT +( +ts +, +rx_qr +), __TEXT_TCP_COUNTs, +rx_ackr +), + +215 + `__TEXT_TCP_COUNT +( +ts +, +rx_w +)); + +217 + `__TEXT_TCP_LOG +" DupAk:" +__TEXT_TCP_COUNT_FMT + " daFRec:" + +218 +__TEXT_TCP_COUNT_FMT + " daCongFRec:" __TEXT_TCP_COUNT_FMT, + +219 + `__TEXT_TCP_COUNT +( +ts +, +rx_duck +), + +220 + `__TEXT_TCP_COUNT +( +ts +, +rx_duck_ec +), + +221 + `__TEXT_TCP_COUNT +( +ts +, +rx_duck_cgec +)); + +223 + `__TEXT_TCP_LOG +" Zw:" +__TEXT_TCP_COUNT_FMT +" Ooo:" __TEXT_TCP_COUNT_FMT, + +224 + `__TEXT_TCP_COUNT +( +ts +, +rx_zw +), __TEXT_TCP_COUNTs, +rx_ooo +)); + +226 + `__TEXT_TCP_LOG +" BadSyn:" +__TEXT_TCP_COUNT_FMT + " bsSeq:" __TEXT_TCP_COUNT_FMT, + +227 + `__TEXT_TCP_COUNT +( +ts +, +rx_badsyn +), + +228 + `__TEXT_TCP_COUNT +( +ts +, +rx_badsynq +)); + +230 + `__TEXT_TCP_LOG +" SynDup:" +__TEXT_TCP_COUNT_FMT + " SynNonAk:" + +231 +__TEXT_TCP_COUNT_FMT + " SynBadAk:" __TEXT_TCP_COUNT_FMT, + +232 + `__TEXT_TCP_COUNT +( +ts +, +rx_syndup +), + +233 + `__TEXT_TCP_COUNT +( +ts +, +rx_syack +), + +234 + `__TEXT_TCP_COUNT +( +ts +, +rx_synbadack +)); + +236 + `__TEXT_TCP_LOG +" wa:" +__TEXT_TCP_COUNT_FMT +, + +237 + `__TEXT_TCP_COUNT +( +ts +, +rx_wa +)); + +239 + `__TEXT_TCP_LOG +" s˕:" +__TEXT_TCP_COUNT_FMT + + +240 "ime:" +__TEXT_TCP_MINMAX_FMT +, + +241 + `__TEXT_TCP_COUNT +( +ts +, +rx_p +), + +242 + `__TEXT_TCP_MINMAX +( +ts +, +rx_ime +) ); + +244 + `__TEXT_TCP_LOG +" W:" +__TEXT_TCP_CUR_MINMAX_FMT +, + +245 + `__TEXT_TCP_CUR_MINMAX +( +ts +, +rx_w +)); + +247 + `__TEXT_TCP_LOG +" WSCL:" +__TEXT_TCP_CUR_MINMAX_FMT +, + +248 + `__TEXT_TCP_CUR_MINMAX +( +ts +, +rx_ws +)); + +250 + `__TEXT_TCP_LOG +" RTT:" +__TEXT_TCP_CUR_MINMAX_FMT +, + +251 + `__TEXT_TCP_CUR_MINMAX +( +ts +, +t +)); + +253 + `__TEXT_TCP_LOG +" SRTT:" +__TEXT_TCP_CUR_MINMAX_FMT +, + +254 + `__TEXT_TCP_CUR_MINMAX +( +ts +, + +)); + +256 + `__TEXT_TCP_LOG +" RTO:" +__TEXT_TCP_CUR_MINMAX_FMT +, + +257 + `__TEXT_TCP_CUR_MINMAX +( +ts +, +o +)); + +259 + `__TEXT_TCP_LOG +" RTTO:" +__TEXT_TCP_COUNT_FMT +, + +260 + `__TEXT_TCP_COUNT +( +ts +, +to +)); + +262 + `__TEXT_TCP_LOG +" Cg:" +__TEXT_TCP_COUNT_FMT +, + +263 + `__TEXT_TCP_COUNT +( +ts +, +cg +)); + +265 #i +CI_CFG_SEND_STATS_TO_LOG +==0 + +266 i( +n + = +cou +) + +267 +n +--; + +269 +buf +[ +n +++] = '\0'; + +271  +n +; + +275 + } +} + +277  + #__XML_TCP_DATASTART_FMT + \ + +282 " %u\n" + + ) + +284  + #__XML_TCP_DATASTART +( +ST +) \ + +285 + `S_SP +( +ST +), \ + +286 ( +ST +)-> +udpags + & +CI_UDPF_IN_USE + ? 1 : 0, \ + +287 ( +ST +)-> +s_sh +. +now +,(ST)-> +s_cumutive +. + ) +now + +289  + #__XML_TCP_DATAEND_FMT + "\n" + + ) + +291  + #__XML_TCP_COUNT_FMT + \ + +295 " \n" + + ) + +296  + #__XML_TCP_COUNT +( +NM +, +ST +, +FLD +) \ + +297 ( +NM +), ( +ST +)-> +s_sh +. +cou +. +FLD +, (ST)-> +s_cumutive +.cou. + ) +FLD + +300  + #__XML_TCP_RANGE_FMT + \ + +304 " \n" + + ) + +306  + #__XML_TCP_RANGE +( +NM +, +ST +, +FLD +) (NM), \ + +307 ( +ST +)-> +s_sh +. +au +. +FLD +, (ST)->s_sh. +m +.FLD, \ + +308 ( +ST +)-> +s_sh +. +max +. +FLD +, \ + +309 ( +ST +)-> +s_cumutive +. +au +. +FLD +, (ST)->s_cumutive. +m +.FLD, \ + +310 ( +ST +)-> +s_cumutive +. +max +. +FLD + + + ) + +312 #i +CI_CFG_SEND_STATS_TO_LOG + + +313  + #__XML_TCP_LOG + +ci_log + + + ) + +315  + #__XML_TCP_LOG +( +x +...) \ + +316 i( +n + < +cou +) { \ + +317 +n + + + `tf +( +buf + +, +cou + -, +x +); \ + +318 } + + ) + +321  + #__XML_TCP_COUNT_LOG +( +me +, +ts +, +fld +) \ + +322 + `__XML_TCP_LOG + +__XML_TCP_COUNT_FMT +, \ + +323 + `__XML_TCP_COUNT +( +me +, +ts +, +fld +)) + + ) + +325  + #__XML_TCP_RANGE_LOG +( +me +, +ts +, +fld +) \ + +326 + `__XML_TCP_LOG + +__XML_TCP_RANGE_FMT +, \ + +327 + `__XML_TCP_RANGE +( +me +, +ts +, +fld +)) + + ) + +331 + $ci_t_s_pt_xml + +ci_t_e +* +ts +, * +buf +,  +cou + ) + +333  +n + = 0; + +335 #i +CI_CFG_SEND_STATS_TO_LOG +==0 + +336 i( +cou + <= 0) + +341 + `__XML_TCP_LOG + +__XML_TCP_DATASTART_FMT +, + `__XML_TCP_DATASTART +( +ts +)); + +344 + `__XML_TCP_COUNT_LOG +("Round-imeout", +ts +, +to +); + +345 + `__XML_TCP_COUNT_LOG +("Cgei", +ts +, +cg +); + +346 + `__XML_TCP_COUNT_LOG +("Rx bys", +ts +, +rx_by +); + +347 + `__XML_TCP_COUNT_LOG +("Rxacks", +ts +, +rx_pkt +); + +348 + `__XML_TCP_COUNT_LOG +("Rx slowh", +ts +, +rx_owth +); + +349 + `__XML_TCP_COUNT_LOG +("Rx sequo.", +ts +, +rx_qr +); + +350 + `__XML_TCP_COUNT_LOG +("Rxck", +ts +, +rx_ackr +); + +351 + `__XML_TCP_COUNT_LOG +("Rx PAWS", +ts +, +rx_w +); + +352 + `__XML_TCP_COUNT_LOG +("Rx dup.ck", +ts +, +rx_duck +); + +353 + `__XML_TCP_COUNT_LOG +("Rx dup.ck, fax", +ts +, +rx_duck_ec + ); + +354 + `__XML_TCP_COUNT_LOG +("Rx dup.ck, cge, fax", +ts +, +rx_duck_cgec + ); + +355 + `__XML_TCP_COUNT_LOG +("Rx zwdow", +ts +, +rx_zw +); + +356 + `__XML_TCP_COUNT_LOG +("Rx ouod", +ts +, +rx_ooo +); + +357 + `__XML_TCP_COUNT_LOG +("Rx bad syn", +ts +, +rx_badsyn +); + +358 + `__XML_TCP_COUNT_LOG +("Rx bad syq.", +ts +, +rx_badsynq +); + +359 + `__XML_TCP_COUNT_LOG +("Rx dup. syn", +ts +, +rx_syndup +); + +360 + `__XML_TCP_COUNT_LOG +("Rx sybadck", +ts +, +rx_synbadack +); + +361 + `__XML_TCP_COUNT_LOG +("Rx syn-ack", +ts +, +rx_syack +); + +362 + `__XML_TCP_COUNT_LOG +("Rx s˕s", +ts +, +rx_p +); + +364 + `__XML_TCP_COUNT_LOG +("Tx bys", +ts +, +tx_by +); + +365 + `__XML_TCP_COUNT_LOG +("Txacks", +ts +, +tx_pkt +); + +366 + `__XML_TCP_COUNT_LOG +("Tx slowh", +ts +, +tx_owth +); + +367 + `__XML_TCP_COUNT_LOG +("Txnsm", +ts +, +tx_s_pkt +); + +368 + `__XML_TCP_COUNT_LOG +("Tx s˕s", +ts +, +tx_p +); + +369 + `__XML_TCP_COUNT_LOG +("Tx stuck", +ts +, +tx_uck +); + +371 + `__XML_TCP_RANGE_LOG +("Rx wdow", +ts +, +rx_w +); + +372 + `__XML_TCP_RANGE_LOG +("Rx wdow s", +ts +, +rx_ws +); + +373 + `__XML_TCP_RANGE_LOG +("Tx wdow", +ts +, +tx_w +); + +374 + `__XML_TCP_RANGE_LOG +("Tx wdow s", +ts +, +tx_ws +); + +376 + `__XML_TCP_RANGE_LOG +("Roundrime", +ts +, +t +); + +377 + `__XML_TCP_RANGE_LOG +("Smohedoundrime", +ts +, + +); + +378 + `__XML_TCP_RANGE_LOG +("Roundrimeout", +ts +, +o +); + +379 + `__XML_TCP_RANGE_LOG +("Tx bufr", +ts +, +tx_buf +); + +380 + `__XML_TCP_RANGE_LOG +("Tx s˕ime", +ts +, +tx_ime +); + +381 + `__XML_TCP_RANGE_LOG +("Rx s˕ime", +ts +, +rx_ime +); + +383 + `__XML_TCP_LOG + +__XML_TCP_DATAEND_FMT + ); + +385 i( +n + = +cou +) + +386 +n +--; + +388 +buf +[ +n +++] = '\0'; + +390  +n +; + +391 + } +} + +395 + $ci_t_s_pt + +ci_tif +* +ni +, +ci_t_e +* +ts +,  +ty +, * +buf +,  +cou + ) + +397  +rc + = 0; + +399 + `ci_as + +ni + && +ts + ); + +401  +ty + ) { + +402  +CI_IP_STATS_OUTPUT_NONE +: + +403 #i +CI_CFG_SEND_STATS_TO_LOG + + +404 +rc + = + `ci_t_s_pt_xt +( +ts +, +NULL +, 0 ); + +406 +rc + = 0; + +410  +CI_IP_STATS_OUTPUT_TEXT +: + +411 +rc + = + `ci_t_s_pt_xt +( +ts +, +buf +, +cou + ); + +414  +CI_IP_STATS_OUTPUT_XML +: + +415 +rc + = + `ci_t_s_pt_xml +( +ts +, +buf +, +cou + ); + +419 +rc + = -1; + +423  +rc +; + +424 + } +} + +438  + $ci_t_s_ai +( +__NI_STRUCT__ + * +ni +, + +439 +__STATE_STRUCT__ + * +ts +, + +440 +ci__s_ai_ty + +ai +, + +441 +ci__s_ouut_fmt + +fmt +, + +442 * +da +, + +443 +sockn_t + * +size +) + +445 +ci_time_t + + +; + +447 + `ci_as +( +ni +); + +448 + `ci_as + + `IPTIMER_STATE +( +ni +) ); + +449 + `ci_as +( +ts +); + +451 + `LOG_STATS + + `ci_log +"%s%p, %p, %d, %d, %)", +__FUNCTION__ +, +ni +, +ts +, + +452 +ai +, +fmt +, +da +)); + +455 + `ci__time_g +( + `IPTIMER_STATE +( +ni +), & + +); + +458 #ide +__KERNEL__ + + +459 +ts +-> +s_sh +. +now + = + `ci__time_ticks2ms +( +ni +, + +); + +462  +ai +) { + +463  +CI_IP_STATS_START +: + +464 + `ci_t_s__da +& +ts +-> +s_sh +); + +465 + `ci_t_s__da +& +ts +-> +s_cumutive +); + +467 + + = + `NI_CONF +( +ni +). +tcڡ_s +; + +468 + `ci_t_s_hd_tim +( +ni +, +ts +, + + ); + +471  +CI_IP_STATS_GET +: + +472 i(( +da + ! +NULL +&& ( +size + !NULL&& (*siz>2 * ( +ci__s +))){ + +474 +ci__sock_s +* +ii + = (ci__sock_s*) +da +; + +475 + `memy +& +ii +[0], & +ts +-> +s_sh +, (*ii) ); + +476 + `memy +& +ii +[1], & +ts +-> +s_cumutive +, (*ii)); + +477 * +size + = 2 * ( +ci__sock_s +); + +481  +CI_IP_STATS_REPORT +: + +482 #i +CI_CFG_SEND_STATS_TO_LOG + + +483 + `ci_t_s_pt +( +ni +, +ts +,i-> +e +-> +s_fmt +, +NULL +, 0); + +485 i(( +da + ! +NULL +&& ( +size + != NULL)) + +487 * +size + = + `ci_t_s_pt +( +ni +, +ts +,i-> +e +-> +s_fmt +, +da +, *size); + +492  +CI_IP_STATS_END +: + +493  +CI_IP_STATS_FLUSH +: + +494 + `ci_t_s_upde + +ts + ); + +497 + + = +ai + ! +CI_IP_STATS_END + ? + `NI_CONF +( +ni +). +tcڡ_s + : 0; + +498 + `ci_t_s_hd_tim +( +ni +, +ts +, + + ); + +504 + } +} + + @tcp_syncookie.c + +2  + ~ + +4  + gsyncook_mss +[8] = + +20  + sshash + { + +21 +ci_ut64 + + mv0 +, + mv1 +, + mv2 +, + mv3 +; + +23  + mbuf +[8]; + +24 * + mp +; + +25 +ci_ut64 + + mc +; + +28  + #SIP_ROTL +( +x +, +b +( +ci_ut64 +)(((x<< (b)| ( (x>> (64 - (b)))) + + ) + +31 + $s_round +( +shash +* +h +,  +rounds +) + +33  +i +; + +35  +i + = 0; i < +rounds +; i++ ) { + +36 +h +-> +v0 + +h-> +v1 +; + +37 +h +-> +v1 + = + `SIP_ROTL +(h->v1, 13); + +38 +h +-> +v1 + ^h-> +v0 +; + +39 +h +-> +v0 + = + `SIP_ROTL +(h->v0, 32); + +41 +h +-> +v2 + +h-> +v3 +; + +42 +h +-> +v3 + = + `SIP_ROTL +(h->v3, 16); + +43 +h +-> +v3 + ^h-> +v2 +; + +45 +h +-> +v0 + +h-> +v3 +; + +46 +h +-> +v3 + = + `SIP_ROTL +(h->v3, 21); + +47 +h +-> +v3 + ^h-> +v0 +; + +49 +h +-> +v2 + +h-> +v1 +; + +50 +h +-> +v1 + = + `SIP_ROTL +(h->v1, 17); + +51 +h +-> +v1 + ^h-> +v2 +; + +52 +h +-> +v2 + = + `SIP_ROTL +(h->v2, 32); + +54 + } +} + +56  +ci_ut64 + + +57 + $s_hash +( +ci_ut64 +* +key +, cڡ * +da +,  +n +) + +59  +shash + +h +; + +60 cڡ * +p + = +da +, * + + = + +n +; + +61 +ci_ut64 + +m +; + +62  + +; + +63 +ci_ut64 + +b +; + +66 + `memt +(& +h +, 0, (h)); + +67 +h +. +v0 + = 0x736f6d6570736575ULL ^ +key +[0]; + +68 +h +. +v1 + = 0x646f72616e646f6dULL ^ +key +[1]; + +69 +h +. +v2 + = 0x6c7967656e657261ULL ^ +key +[0]; + +70 +h +. +v3 + = 0x7465646279746573ULL ^ +key +[1]; + +71 +h +. +p + = h. +buf +; + +75  +p + < + + && +h +.- h. +buf + < (h.buf) ) + +76 * +h +. +p +++ = *p++; + +78 if +h +. +p + - h. +buf + < (h.buf) ) + +81 +m + = (( +ci_ut64 +) +h +. +buf +[0] << 0) | ((ci_uint64)h.buf[1] << 8) | + +82 (( +ci_ut64 +) +h +. +buf +[2] << 16) | ((ci_uint64)h.buf[3] << 24) | + +83 (( +ci_ut64 +) +h +. +buf +[2] << 32) | ((ci_uint64)h.buf[3] << 40) | + +84 (( +ci_ut64 +) +h +. +buf +[2] << 48) | ((ci_uint64)h.buf[3] << 56); + +85 +h +. +v3 + ^ +m +; + +86 + `s_round +(& +h +, 2); + +87 +h +. +v0 + ^ +m +; + +89 +h +. +p + = h. +buf +; + +90 +h +. +c + += 8; + +91 }  + + - +p + > 0 ); + +94 + + = +h +. +p + - h. +buf +; + +95 +b + = ( +h +. +c + + + +) << 56; + +97  + +) { + +98 7: +b + |( +ut64_t +) +h +. +buf +[6] << 48; + +99 6: +b + |( +ut64_t +) +h +. +buf +[5] << 40; + +100 5: +b + |( +ut64_t +) +h +. +buf +[4] << 32; + +101 4: +b + |( +ut64_t +) +h +. +buf +[3] << 24; + +102 3: +b + |( +ut64_t +) +h +. +buf +[2] << 16; + +103 2: +b + |( +ut64_t +) +h +. +buf +[1] << 8; + +104 1: +b + |( +ut64_t +) +h +. +buf +[0] << 0; + +108 +h +. +v3 + ^ +b +; + +109 + `s_round +(& +h +, 2); + +110 +h +. +v0 + ^ +b +; + +111 +h +. +v2 + ^= 0xff; + +112 + `s_round +(& +h +, 4); + +114  +h +. +v0 + ^ h. +v1 + ^ h. +v2 + ^ h. +v3 +; + +115 + } +} + +117  +ci_ut32 + + +118 + $ci_t_syncook_hash +( +ci_tif +* +tif +, +ci_t_sock_li +* +s +, + +119 +ci_t_e_syecv +* +t +,  +t +,  +m +) + +121 +ci_ut8 + +hash_da +[13]; + +123 +hash_da +[0] = + `t_t_be16 +( +s +) & 0xff; + +124 +hash_da +[1] = + `t_t_be16 +( +s +) >> 8; + +125 +hash_da +[2] = +t +-> +r_pt + & 0xff; + +126 +hash_da +[3] = +t +-> +r_pt + >> 8; + +127 +hash_da +[4] = +t +-> +l_addr + & 0xff; + +128 +hash_da +[5] = ( +t +-> +l_addr + & 0xff00) >> 8; + +129 +hash_da +[6] = ( +t +-> +l_addr + & 0xff0000) >> 16; + +130 +hash_da +[7] = ( +t +-> +l_addr + & 0xff000000) >> 24; + +131 +hash_da +[8] = +t +-> +r_addr + & 0xff; + +132 +hash_da +[9] = ( +t +-> +r_addr + & 0xff00) >> 8; + +133 +hash_da +[10] = ( +t +-> +r_addr + & 0xff0000) >> 16; + +134 +hash_da +[11] = ( +t +-> +r_addr + & 0xff000000) >> 24; + +135 +hash_da +[12] = +t + << 3 | +m +; + +137 + `ci_as_equ +(( +tif +-> +e +-> +hash_ +), + +138 2 * ( +ci_ut64 +)); + +139  ( +ci_ut32 +) + `s_hash +((*) +tif +-> +e +-> +hash_ +, + +140 +hash_da +, (hash_data)); + +141 + } +} + +147  +ci_t16 + + $ci_t_syncook_g_t +( +ci_tif +* +tif +) + +150  ( + `ci__time_now +( +tif +) >> + +151 ( + `IPTIMER_STATE +( +tif +)-> +ci__time_c2us + + 23 + +152 - + `IPTIMER_STATE +( +tif +)-> +ci__time_c2tick +) + +154 + } +} + +157 + $ci_t_syncook_syn +( +ci_tif +* +tif +, +ci_t_sock_li +* +s +, + +158 +ci_t_e_syecv +* +t +) + +160  +t +, +m +; + +162 +t + = + `ci_t_syncook_g_t +( +tif +); + +164 if +t +-> +tts +. +smss + > +tif +-> +e +-> +max_mss + ) + +165 +m + = 7; + +167  +m + = 6; m > 0; m-- ) + +168 if +t +-> +tts +. +smss + > +syncook_mss +[ +m +] ) + +173 +t +-> +d_i + = ( +t + << 3| +m + | + +174 ( + `ci_t_syncook_hash +( +tif +, +s +, +t +, +t +, +m +) << 8); + +177 if +t +-> +tts +. +ags + & + `NI_OPTS +( +tif +). +syn_ts + & +CI_TCPT_FLAG_TSO + ) { + +178 +t +-> +tts +. +ags + | +CI_TCPT_FLAG_SYNCOOKIE +; + +179 +t +-> +time + &= ~0x1ff; + +180 if +t +-> +tts +. +ags + & + `NI_OPTS +( +tif +). +syn_ts + & +CI_TCPT_FLAG_WSCL + ) { + +181 +t +-> +time + |t-> +rcv_ws +; + +182 +t +-> +time + |t-> +tts +. +ws_sh + << 4; + +184 if +t +-> +tts +. +ags + & + `NI_OPTS +( +tif +). +syn_ts + & +CI_TCPT_FLAG_SACK + ) + +185 +t +-> +time + |= 1 << 8; + +186 +t +-> +tts +. +ags + &~ +CI_TCPT_FLAG_ECN +; + +188 if +t +-> +time + > + `ci_t_time_now +( +tif +) ) { + +189 +t +-> +time + -= 1 << 9; + +193 +t +-> +tts +. +ags + = +CI_TCPT_FLAG_SYNCOOKIE +; + +195 + `CITP_STATS_TCP_LISTEN +(++ +s +-> +s +. +n_syncook_syn +); + +196 + } +} + +199 + $ci_t_syncook_ack +( +ci_tif +* +tif +, +ci_t_sock_li +* +s +, + +200 +ci_t_rx_pkt +* +rxp +, + +201 +ci_t_e_syecv +** +t_p +) + +203  +t +, +m +, +t_now +; + +204 +ci_t_e_syecv +* +t +; + +205 +ci_ut32 + +i + = +rxp +-> +ack + - 1; + +207 + `CITP_STATS_TCP_LISTEN +(++ +s +-> +s +. +n_syncook_ack_cv +); + +208 * +t_p + = +NULL +; + +210 +t_now + = + `ci_t_syncook_g_t +( +tif +); + +212 +m + = +i + & 7; + +213 +t + = ( +i + >> 3) & 0x1f; + +215 if +t + ! +t_now + && != ((t_now - 1) & 0x1f) ) { + +216 + `CITP_STATS_TCP_LISTEN +(++ +s +-> +s +. +n_syncook_ack_ts_j +); + +220 +t + = + `ci_loc +(( +ci_t_e_syecv +)); + +221 if +t + = +NULL + ) + +223 + `memt +( +t +, 0, ( +ci_t_e_syecv +)); + +224 +t +-> +tts +. +ags + = +CI_TCPT_FLAG_SYNCOOKIE +; + +226 +t +-> +r_pt + = +rxp +-> +t +-> +t_sour_be16 +; + +227 +t +-> +l_addr + = + `oo__hdr +( +rxp +-> +pkt +)-> +_daddr_be32 +; + +228 +t +-> +r_addr + = + `oo__hdr +( +rxp +-> +pkt +)-> +_ddr_be32 +; + +229 +t +-> +tts +. +smss + = +syncook_mss +[ +m +]; + +230 +t +-> +d_i + = +i +; + +231 +t +-> +rcv_nxt + = +rxp +-> +q +; + +233 if( +i + >> 8) != + +234 ( + `ci_t_syncook_hash +( +tif +, +s +, +t +, +t +, +m +) & 0xffffff) ) { + +235 + `CITP_STATS_TCP_LISTEN +(++ +s +-> +s +. +n_syncook_ack_hash_j +); + +236 + `ci_ +( +t +); + +240 +t +-> +lol_ + = +OO_SP_NULL +; + +242 * +t_p + = +t +; + +244 if +rxp +-> +ags + & +CI_TCPT_FLAG_TSO + ) { + +245 +t +-> +time + = ( +rxp +-> +timeamp_echo + & ~0x1ff); + +246 if +rxp +-> +timeamp_echo + & 0xff ) { + +247 +t +-> +tts +. +ags + | +CI_TCPT_FLAG_WSCL +; + +248 +t +-> +rcv_ws + = +rxp +-> +timeamp_echo + & 0xf; + +249 +t +-> +tts +. +ws_sh + = ( +rxp +-> +timeamp_echo + >> 4) & 0xf; + +251 if +rxp +-> +timeamp_echo + & 0x100 ) + +252 +t +-> +tts +. +ags + | +CI_TCPT_FLAG_SACK +; + +255 + `CITP_STATS_TCP_LISTEN +(++ +s +-> +s +. +n_syncook_ack_sw +); + +256 + } +} + + @tcp_synrecv.c + +14  + ~"_.h +" + +15  + ~"t_rx.h +" + +18 #unde +LOG_TV + + +19  + #LOG_TV +( +x + + ) +x + +22  + #LPF + "TCP SYNRECV " + + ) + +24  + #TSR_FMT + "r:%xext:%x hash:%x:%r:%s:%d" + + ) + +25  + #TSR_ARGS +( +t +) \ + +26 + `ci_t_syecv2p +( +ni +, +t +),-> +buck_lk +,-> +hash +, \ + +27 + `_addr_r +( +t +-> +l_addr +), \ + +28 + `_addr_r +( +t +-> +r_addr +), + `CI_BSWAP_BE16 +Ѥ-> +r_pt +) + + ) + +30 #ifde +__KERNEL__ + + +37  + #CI_LISTENQ_BUCKET_LIST_LIMIT +( +ni + + `NI_OPTS +i). +t_backlog_max + + + ) + +47  + #CI_LISTENQ_BUCKET_MAX_DEPTH +( +ni +) \ + +48 (( + `ci_log2_ +( + `NI_OPTS +( +ni +). +t_backlog_max +- 1/ 4) + + ) + +50 +ci_le +  + $ci_t_liq_hash2idx +( +ci_ut32 + +hash +,  +v +) + +52  ( +hash + >> ( +CI_TCP_LISTEN_BUCKET_S + * +v +)) & + +53 ((1 << +CI_TCP_LISTEN_BUCKET_S +) - 1); + +54 + } +} + +58 + $ci_t_liq_buck_dr +( +ci_tif +* +ni +, +ci_t_li_buck +* +buck +) + +60 +ci_ni_aux_mem +* +aux +; + +61  +idx +; + +62 +oo_p + +t_p +; + +63 +ci_t_e_syecv +* +t +; + +64  +t + = 0; + +66  +idx + = 0; idx < +CI_TCP_LISTEN_BUCKET_SIZE +; idx++ ) { + +67 if + `OO_P_IS_NULL +( +buck +->buck[ +idx +]) ) + +69 +aux + = + `ci_ni_aux_p2aux +( +ni +, +buck +->buck[ +idx +]); + +70 if +aux +-> +ty + = +CI_TCP_AUX_TYPE_BUCKET + ) + +71 +t + + + `ci_t_liq_buck_dr +( +ni +, & +aux +-> +u +. +buck +); + +73 +t_p + = +buck +->buck[ +idx +]; + +75 +t + = & + `ci_ni_aux_p2aux +( +ni +, +t_p +)-> +u +. +syecv +; + +76 +t_p + = +t +-> +buck_lk +; + +77 if + `OO_SP_IS_NULL +( +t +-> +lol_ +) ) + +78 + `ci_ni_di_move +( +ni +, + `ci_t_syecv2lk +( +t +)); + +81 + `ci_t_syecv_ +( +ni +, +t +); + +82 +t +++; + +83 }  + `OO_P_NOT_NULL +( +t_p +) ); + +86 + `ci_ni_aux_ +( +ni +, + `CI_CONTAINER +( +ci_ni_aux_mem +, +u +. +buck +, bucket)); + +88  +t +; + +89 + } +} + +93 + $ci_t_liq_buck_ +( +ci_tif +* +ni +, +ci_t_sock_li +* +s +, + +94 +ci_t_li_buck +* +buck +, + +95 +ci_t_e_syecv +* +t +,  +v +) + +97 +ci_ni_aux_mem +* +aux +; + +98  +idx + = + `ci_t_liq_hash2idx +( +t +-> +hash +, +v +); + +99 +oo_p + +t_p + = + `ci_t_syecv2p +( +ni +, +t +); + +100 #ifde +__KERNEL__ + + +101  +i + = 0; + +104 + `LOG_TV +( + `ci_log +("%s([%d]ev=%d " +TSR_FMT +")", +__func__ +, + +105 + `NI_ID +( +ni +), +v +, + `TSR_ARGS +( +t +))); + +107 if + `OO_P_IS_NULL +( +buck +->buck[ +idx +]) ) { + +108 +buck +->buck[ +idx +] = +t_p +; + +112 +v +++; + +113 +aux + = + `ci_ni_aux_p2aux +( +ni +, +buck +->buck[ +idx +]); + +114 if +aux +-> +ty + = +CI_TCP_AUX_TYPE_BUCKET + ) { + +115 + `ci_t_liq_buck_ +( +ni +, +s +, & +aux +-> +u +. +buck +, +t +, +v +); + +122 +t +-> +buck_lk + = +buck +->buck[ +idx +]; + +123 +buck +->buck[ +idx +] = +t_p +; + +125 if +v + > + `CI_LISTENQ_BUCKET_MAX_DEPTH +( +ni +) ) + +128 +buck +->buck[ +idx +] = + `ci_ni_aux_loc_buck +( +ni +); + +129 if + `OO_P_IS_NULL +( +buck +->buck[ +idx +]) ) + +131 +buck + = + `ci_ni_aux_p2buck +( +ni +, buck->buck[ +idx +]); + +132 +s +-> +n_bucks +++; + +134  + `OO_P_NOT_NULL +( +t_p +) ) { + +135 +t + = & + `ci_ni_aux_p2aux +( +ni +, +t_p +)-> +u +. +syecv +; + +136 #ifde +__KERNEL__ + + +137 if +i +++ > + `CI_LISTENQ_BUCKET_LIST_LIMIT +( +ni +) ) { + +138 + `ci_t_liq_buck_ +( +ni +, +s +, +buck +, +t +, +v +); + +139 + `ci_tif_r_deed +( +ni +, +CI_NETIF_ERROR_SYNRECV_TABLE +, + +140 +__FUNCTION__ +); + +144 +t_p + = +t +-> +buck_lk +; + +145 +t +-> +buck_lk + = +OO_P_NULL +; + +146 + `ci_t_liq_buck_ +( +ni +, +s +, +buck +, +t +, +v +); + +148 + } +} + +152 + $ci_t_liq_buck_move +( +ci_tif +* +ni +, +ci_t_sock_li +* +s +, + +153 +ci_t_li_buck +* +buck +, + +154 +ci_t_e_syecv +* +t +,  +v +) + +156 +ci_ni_aux_mem +* +aux +; + +157  +idx + = + `ci_t_liq_hash2idx +( +t +-> +hash +, +v +); + +158 +oo_p + +t_p + = + `ci_t_syecv2p +( +ni +, +t +); + +163  +emy + = 0; + +164 #ifde +__KERNEL__ + + +165  +i + = 0; + +167 if +v + > + `CI_LISTENQ_BUCKET_MAX_DEPTH +( +ni +) ) { + +168 + `ci_tif_r_deed +( +ni +, +CI_NETIF_ERROR_SYNRECV_TABLE +, +__FUNCTION__ +); + +173 + `LOG_TV +( + `ci_log +("%s([%d]ev=%d " +TSR_FMT +")", +__func__ +, + +174 + `NI_ID +( +ni +), +v +, + `TSR_ARGS +( +t +))); + +175 + `ci_as + + `OO_P_NOT_NULL +( +buck +->buck[ +idx +]) ); + +176 #ifde +__KERNEL__ + + +177 if + `OO_P_IS_NULL +( +buck +->buck[ +idx +]) ) { + +178 + `ci_tif_r_deed +( +ni +, +CI_NETIF_ERROR_SYNRECV_TABLE +, + +179 +__FUNCTION__ +); + +184 +v +++; + +185 +aux + = + `ci_ni_aux_p2aux +( +ni +, +buck +->buck[ +idx +]); + +186 if +aux +-> +ty + = +CI_TCP_AUX_TYPE_BUCKET + ) { + +187 +emy + = + `ci_t_liq_buck_move +( +ni +, +s +, & +aux +-> +u +. +buck +, +t +, +v +); + +188 if +emy + ) { + +189 +buck +->buck[ +idx +] = +OO_P_NULL +; + +190 + `ci_ni_aux_ +( +ni +, +aux +); + +191 +s +-> +n_bucks +--; + +195 if +buck +->buck[ +idx +] = +t_p + ) { + +196 +buck +->buck[ +idx +] = +t +-> +buck_lk +; + +197 +emy + = + `OO_P_IS_NULL +( +buck +->buck[ +idx +]); + +200 +ci_t_e_syecv +* +ev + = & +aux +-> +u +. +syecv +; + +201  +ev +-> +buck_lk + ! +t_p + ) { + +202 +aux + = + `ci_ni_aux_p2aux +( +ni +, +ev +-> +buck_lk +); + +203 +ev + = & +aux +-> +u +. +syecv +; + +204 #ifde +__KERNEL__ + + +205 if +i +++ > + `CI_LISTENQ_BUCKET_LIST_LIMIT +( +ni +) ) { + +206 + `ci_tif_r_deed +( +ni +, +CI_NETIF_ERROR_SYNRECV_TABLE +, + +207 +__FUNCTION__ +); + +212 +ev +-> +buck_lk + = +t +->bucket_link; + +216 if +emy + ) { + +217  +i +; + +218  +i + = 0; i < +CI_TCP_LISTEN_BUCKET_SIZE +; i++ ) + +219 if + `OO_P_NOT_NULL +( +buck +->buck[ +i +]) ) + +224 + } +} + +226  +ci_t_e_syecv +* + +227 + $ci_t_liq_buck_lookup +( +ci_tif +* +ni +, +ci_t_li_buck +* +buck +, + +228 +ci_t_rx_pkt +* +rxp +, + +229  +v +) + +231 +ci_ni_aux_mem +* +aux +; + +232  +idx + = + `ci_t_liq_hash2idx +( +rxp +-> +hash +, +v +); + +233 +ci_t_e_syecv +* +t +; + +234  +ddr +, +daddr +, +t +; + +235 #ifde +__KERNEL__ + + +236  +i + = 0; + +238 if +v + > + `CI_LISTENQ_BUCKET_MAX_DEPTH +( +ni +) ) { + +239 + `ci_tif_r_deed +( +ni +, +CI_NETIF_ERROR_SYNRECV_TABLE +, + +240 +__FUNCTION__ +); + +245 + `LOG_TV +( + `ci_log +("%s([%d]ev=%d hash:%x:%r:%s:%d)", +__func__ +, + +246 + `NI_ID +( +ni +), +v +, +rxp +-> +hash +, + +247 + `_addr_r +( + `oo__hdr +( +rxp +-> +pkt +)-> +_daddr_be32 +), + +248 + `_addr_r +( + `oo__hdr +( +rxp +-> +pkt +)-> +_ddr_be32 +), + +249 + `CI_BSWAP_BE16 +( +rxp +-> +t +-> +t_sour_be16 +))); + +250 if + `OO_P_IS_NULL +( +buck +->buck[ +idx +]) ) + +251  +NULL +; + +253 +v +++; + +254 +aux + = + `ci_ni_aux_p2aux +( +ni +, +buck +->buck[ +idx +]); + +255 if +aux +-> +ty + = +CI_TCP_AUX_TYPE_BUCKET + ) + +256  + `ci_t_liq_buck_lookup +( +ni +, & +aux +-> +u +. +buck +, +rxp +, +v +); + +258 +ddr + = + `oo__hdr +( +rxp +-> +pkt +)-> +_ddr_be32 +; + +259 +daddr + = + `oo__hdr +( +rxp +-> +pkt +)-> +_daddr_be32 +; + +260 +t + = +rxp +-> +t +-> +t_sour_be16 +; + +262 +t + = & +aux +-> +u +. +syecv +; + +264 if! (( +ddr + - +t +-> +r_addr +| ( +daddr + --> +l_addr +) | + +265 ( +t + - +t +-> +r_pt +)) ) + +266  +t +; + +267 if + `OO_P_IS_NULL +( +t +-> +buck_lk +) ) + +268  +NULL +; + +269 +aux + = + `ci_ni_aux_p2aux +( +ni +, +t +-> +buck_lk +); + +270 +t + = & +aux +-> +u +. +syecv +; + +271 #ifde +__KERNEL__ + + +272 if +i +++ > + `CI_LISTENQ_BUCKET_LIST_LIMIT +( +ni +) ) { + +273 + `ci_tif_r_deed +( +ni +, +CI_NETIF_ERROR_SYNRECV_TABLE +, + +274 +__FUNCTION__ +); + +275  +NULL +; + +281  +NULL +; + +282 + } +} + +285 + $ci_t_li_tim_t +( +ci_tif +* +ni +, +ci_t_sock_li +* +s +, + +286 +ci_time_t + +timeout +) + +288  +i +; + +290 if! + `ci__tim_ndg +( +ni +, & +s +-> +liq_tid +) ) { + +291 + `ci__tim_t +( +ni +, & +s +-> +liq_tid +, +timeout +); + +295  +i + = 0; i < +CI_CFG_TCP_SYNACK_RETRANS_MAX +; i++ ) { + +296 +ci_t_e_syecv +* +t + = + +297 + `ci_t_lk2syecv +( + `ci_ni_di_t +( +ni +, & +s +-> +liq +[ +i +])); + +298 if + `TIME_LT +( +t +-> +timeout +,imeout) ) + +301 + `ci__tim_modify +( +ni +, & +s +-> +liq_tid +, +timeout +); + +302 + } +} + +305  + $ci_t_liq_dr_l +( +ci_tif +* +ni +, +ci_t_sock_li +* +s +) + +308 + `ci_t_liq_buck_dr +( +ni +, + +309 + `ci_ni_aux_p2buck +( +ni +, +s +-> +buck +)); + +310 + } +} + +312  + $ci_t_liq_ +( +ci_tif +* +ni +, +ci_t_sock_li +* +s +, + +313 +ci_t_e_syecv +* +t +) + +315  +is_f +; + +317 +s +-> +n_liq +++; + +319 + `ci_t_liq_buck_ +( +ni +, +s +, + +320 + `ci_ni_aux_p2buck +( +ni +, +s +-> +buck +), + +321 +t +, 0); + +323 if + `OO_SP_NOT_NULL +( +t +-> +lol_ +) ) + +326 +is_f + = + `ci_ni_di_is_emy +( +ni +, & +s +-> +liq +[0]); + +327 + `ci_ni_di_push_ +( +ni +, & +s +-> +liq +[0], + `ci_t_syecv2lk +( +t +)); + +328 +t +-> +s + = 0; + +329 +t +-> +timeout + = + `ci_t_time_now +( +ni ++ + `NI_CONF +i). +tcڡ_o_l +; + +331 ++ +s +-> +n_liq_w +; + +332 if +is_f + ) + +333 + `ci_t_li_tim_t +( +ni +, +s +, +t +-> +timeout +); + +334 + } +} + +337  + $ci_t_liq_move +( +ci_tif +* +ni +, +ci_t_sock_li +* +s +, + +338 +ci_t_e_syecv +* +t +) + +340 + `ci_as +( +ni +); + +341 + `ci_as +( +t +); + +342 + `ci_as +( +s +); + +344 + `ci_t_liq_buck_move +( +ni +, +s +, + +345 + `ci_ni_aux_p2buck +( +ni +, +s +-> +buck +), + +346 +t +, 0); + +347 if + `OO_SP_IS_NULL +( +t +-> +lol_ +) ) { + +348 + `ci_ni_di_move +( +ni +, + `ci_t_syecv2lk +( +t +)); + +350 if( +t +-> +s + & +CI_FLAG_TSR_RETRIES_MASK +) == 0 ) + +351 -- +s +-> +n_liq_w +; + +355 if-- +s +-> +n_liq + == 0 && + +356 (~ +s +-> +s +. +s_ags + & +CI_SOCK_FLAG_BOUND_ALIEN +) ) + +357 + `ci__tim_r +( +ni +, & +s +-> +liq_tid +); + +358 + } +} + +360  + $ci_t_liq_dr +( +ci_tif +* +ni +, +ci_t_sock_li +* +s +, + +361 +ci_t_e_syecv +* +t +) + +365 if +t +-> +s + & +CI_FLAG_TSR_RETRIES_ACKED + ) { + +366 +ci__pkt_fmt +* +pkt + = + `ci_tif_pkt_loc +( +ni +); + +367 if +pkt + ! +NULL + ) + +368 + `ci_t_syecv_nd +( +ni +, +s +, +t +, +pkt +, + +369 +CI_TCP_FLAG_RST + | +CI_TCP_FLAG_ACK +, +NULL +); + +371 + `ci_t_liq_move +( +ni +, +s +, +t +); + +372 + } +} + +378 +ci_t_e_syecv +* + +379 + $ci_t_liq_lookup +( +ci_tif +* +tif +, +ci_t_sock_li +* +s +, + +380 +ci_t_rx_pkt +* +rxp +) + +382 +ci_t_e_syecv +* +t +; + +384 +t + = + `ci_t_liq_buck_lookup +( + +385 +tif +, + `ci_ni_aux_p2buck +ґif, +s +-> +buck +), + +386 +rxp +, 0); + +387 if +t + = +NULL + ) { + +388 + `LOG_TV +( + `log +( +LPF + "no match for %s:%d->%s:%d", + +389 + `_addr_r +( + `oo__hdr +( +rxp +-> +pkt +)-> +_ddr_be32 +), + +390 ( + `CI_BSWAP_BE16 +( +rxp +-> +t +-> +t_sour_be16 +), + +391 + `_addr_r +( + `oo__hdr +( +rxp +-> +pkt +)-> +_daddr_be32 +), + +392 ( + `CI_BSWAP_BE16 +( +rxp +-> +t +-> +t_de_be16 +))); + +395  +t +; + +396 + } +} + +399  + $ci_t_liq_dr_de +( +ci_tif +* +ni +, +ci_t_sock_li +* +s +) + +401 +ci_t_e_syecv +* +t +; + +402  +i +; + +404  +i + = +CI_CFG_TCP_SYNACK_RETRANS_MAX +; i >= 0; --i ) { + +405 if + `ci_ni_di_n_emy +( +ni +, & +s +-> +liq +[ +i +]) ) + +408 + `ci_as +( + `ci_ni_di_n_emy +( +ni +, & +s +-> +liq +[ +i +])); + +409 +t + = + `ci_t_lk2syecv +( + `ci_ni_di_hd +( +ni +, & +s +-> +liq +[ +i +])); + +410 + `ci_t_liq_dr +( +ni +, +s +, +t +); + +411 + `ci_t_syecv_ +( +ni +, +t +); + +412 + `CITP_STATS_NETIF +(++ +ni +-> +e +-> +s +. +syecv_purge +); + +413 + } +} + +416 +ci_le + +ci_t_e +* + +417 + $g_ts_om_che +( +ci_tif + * +tif +, + +418 +ci_t_e_syecv +* +t +, + +419 +ci_t_sock_li +* +s +) + +421 +ci_t_e + * +ts + = +NULL +; + +422 #i +CI_CFG_FD_CACHING + + +423 if + `ci_ni_di_n_emy +( +tif +, & +s +-> +che +. +che +) ) { + +425 +ci_ni_di_lk + * +lk + = + `ci_ni_di_p +( +tif +, & +s +-> +che +. +che +); + +426 +ts + = + `CI_CONTAINER + ( +ci_t_e +, +che_lk +, +lk +); + +427 + `ci_as + ( +ts +); + +428 + `ci_ni_di_lf_lk +( +tif +, & +ts +-> +che_lk +); + +430 + `LOG_EP +( + `ci_log +("Taking cached fd %d off cachedist, (ontocceptq)", + +431 +ts +-> +ched__fd +)); + +433 if + `t_ddr_be32 +( +ts += +t +-> +l_addr + ) { + +434 + `ci_t_e_ +( +tif +, +ts +, 1); + +436 + `ci_as +(!( +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_ORPHAN +)); + +437 + `ci_as +( + `ci_t_is_ched +( +ts +)); + +439 + `CITP_STATS_NETIF +(++ +tif +-> +e +-> +s +. +sockche_h +); + +440 + `CITP_STATS_TCP_LISTEN +(++ +s +-> +s +. +n_sockche_h +); + +449 + `LOG_EP +( + `ci_log +("changed interface of cached EP,e-queueing")); + +450 + `ci_ni_di_push_ +( +tif +, & +s +-> +che +. +che +, & +ts +-> +che_lk +); + +451 +ts + = +NULL +; + +452 + `CITP_STATS_NETIF +(++ +tif +-> +e +-> +s +. +sockche_miss_tmismch +); + +456  +ts +; + +457 + } +} + +467  + $ci_t_h_tis +( +ci_tif +* +ni +, +ci_sock_cmn +* +s +, + +468 +ci_t_sock_cmn +* +c +, + +469 +ci_t_e +* +ts +, cڡ * +xt +) + +471 + `ci_as +( +ni +); + +472 + `ci_as +( +s +); + +473 + `ci_as +( +c +); + +474 + `ci_as +( +ts +); + +476 +ts +-> +s +. +so + = s->so; + +477 +ts +-> +s +. + +. +so_bdtodevi + = s->cp.so_bindtodevice; + +478 +ts +-> +s +. + +. +_l + = s->cp.ip_ttl; + +479 +ts +-> +s +. +rx_bd2dev_ifdex + = s->rx_bind2dev_ifindex; + +480 +ts +-> +s +. +rx_bd2dev_ba_ifdex + = s->rx_bind2dev_base_ifindex; + +481 +ts +-> +s +. +rx_bd2dev_vn + = s->rx_bind2dev_vlan; + +482 + `ci_t_t_dbuf +( +ni +, +ts +); + +483 + `ci_t_t_rcvbuf +( +ni +, +ts +); + +488  +hed_sags + = +CI_SOCK_AFLAG_TCP_INHERITED +; + +489  +hed_sbags + = 0; + +491 if + `NI_OPTS +( +ni +). +ac_h_nblock + ) + +492 +hed_sbags + | +CI_SB_AFLAG_O_NONBLOCK + | +CI_SB_AFLAG_O_NDELAY +; + +494 + `ci_as +(( +ts +-> +s +. +s_aags + & +hed_sags +) == 0); + +495 + `ci_omic32_ +(& +ts +-> +s +. +s_aags +, s->s_aag& +hed_sags +); + +497 if + `NI_OPTS +( +ni +). +t_f_noday + == 1 ) + +498 + `ci_b_t +(& +ts +-> +s +. +s_aags +, +CI_SOCK_AFLAG_NODELAY_BIT +); + +499 if + `NI_OPTS +( +ni +). +t_f_noday + == 2 ) + +500 + `ci_b_r +(& +ts +-> +s +. +s_aags +, +CI_SOCK_AFLAG_NODELAY_BIT +); + +502 + `ci_as +(( +ts +-> +s +. +b +. +sb_aags + & +hed_sbags +) == 0); + +503 + `ci_omic32_ +(& +ts +-> +s +. +b +. +sb_aags +, s->b.sb_aag& +hed_sbags +); + +505 + `ci_as_equ +(( +ts +-> +s +. +s_ags + & +CI_SOCK_FLAG_TCP_INHERITED +), + +506 +CI_SOCK_FLAG_PMTU_DO +); + +507 +ts +-> +s +. +s_ags + &~ +CI_SOCK_FLAG_PMTU_DO +; + +508 +ts +-> +s +. +s_ags + |s->s_ag& +CI_SOCK_FLAG_TCP_INHERITED +; + +514 +ts +-> +c +. +t_ka_time + = c->t_ka_time; + +515 +ts +-> +c +. +t_ka_time__cs + = c->t_ka_time_in_secs; + +516 #ide +__sun__ + + +517 +ts +-> +c +. +t_ka_tvl + = c->t_ka_intvl; + +518 +ts +-> +c +. +t_ka_tvl__cs + = c->t_ka_intvl_in_secs; + +520 +ts +-> +c +. +ka_obe_th + = c->ka_probe_th; + +521 + `ci__hdr__fixed +(& +ts +-> +s +. +pkt +. + +, +IPPROTO_TCP +, + +522 +s +-> +pkt +. + +. +_l +, + +523 +s +-> +pkt +. + +. +_tos +); + +524 +ts +-> +s +. +cmsg_ags + = s->cmsg_flags; + +525 +ts +-> +s +. +timeampg_ags + = s->timestamping_flags; + +528 + `ci_t__rcv_wnd +( +ts +, +xt +); + +529 + } +} + +535  + $ci_t_h_ac_tis +( +ci_tif +* +ni +, + +536 +ci_t_sock_li +* +s +, + +537 +ci_t_e +* +ts +, cڡ * +xt +) + +539 + `ci_t_h_tis +( +ni +, & +s +-> +s +, &s-> +c +, +ts +, +xt +); + +540 + } +} + +543 +ci_le +  + $ci_t_t_addr__ome +( +ci_tif +* +tif +, +ci_t_e +* +ts +, + +544 +ci_t_e_syecv +* +t +, + +545 +ci_t_sock_li +* +s +) + +548 +ts +-> +s +. +pkt +. + +. +_ddr_be32 + = +t +-> +l_addr +; + +549 + `TS_TCP +( +ts +)-> +t_sour_be16 + = + `sock_t_be16 +(& +s +-> +s +); + +550 +ts +-> +s +. + +. +_ddr_be32 + = +t +-> +l_addr +; + +551 +ts +-> +s +. + +. +t_be16 + = + `sock_t_be16 +(& +s +->s); + +552 + `ci_t_t_ +( +ts +, +t +-> +r_addr +,-> +r_pt +); + +555 if + `OO_SP_NOT_NULL +( +t +-> +lol_ +) ) { + +556 +ci_t_e + * + + = + `ID_TO_TCP +( +tif +, +t +-> +lol_ +); + +557 +ts +-> +lol_ + = +t +->local_peer; + +558 + +-> +lol_ + = + `S_SP +( +ts +); + +560 + } +} + +572  + $ci_t_liq_y_ome +( +ci_tif +* +tif +, +ci_t_sock_li +* +s +, + +573 +ci_t_e_syecv +* +t +, + +574 +ci__ched_hdrs +* +che +, + +575 +ci_t_e +** +ts_out +) + +577  +rc + = 0; + +579 + `ci_as +( +tif +); + +580 + `ci_as +( +s +); + +581 + `ci_as +( +s +-> +s +. +b +. +e + = +CI_TCP_LISTEN +); + +582 + `ci_as +( +t +); + +584 if( + `ci_t_acq_n +( +s + +acq_max + ) { + +585 +ci_t_e +* +ts +; + +590 +ts + = + `g_ts_om_che + ( +tif +, +t +, +s +); + +591 if! +ts + ) { + +593 +ts + = + `ci_t_g_e_buf +( +tif +); + +594 #i +CI_CFG_FD_CACHING + + +595 if +ts + = +NULL + ) { + +597 +ts + = + `g_ts_om_che +( +tif +, +t +, +s +); + +598 i( +ts + = +NULL + ) { + +600 +ts + = + `ci_t_g_e_buf +( +tif +); + +603 + `CITP_STATS_NETIF +(++ +tif +-> +e +-> +s +. +sockche_h_ +); + +607 if +ts + = +NULL + ) { + +608 + `LOG_TV +( + `ci_log +("%s: [%d] out of socket buffers", + +609 +__FUNCTION__ +, + `NI_ID +( +tif +))); + +610 + `CITP_STATS_TCP_LISTEN +(++ +s +-> +s +. +n_acq_no_sock +); + +611 + `CI_SET_SO_ERROR +(& +s +-> +s +, +ENOMEM +); + +612 + `cp_waab_wake +( +tif +, & +s +-> +s +. +b +, +CI_SB_FLAG_WAKE_RX +); + +613  - +ENOMEM +; + +617 + `ci_as +( + `ci_t_is_ched +( +ts +) || + +618 ( +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_ORPHAN +)); + +621 #ifde +ONLOAD_OFE + + +622 +ts +-> +s +. +o_code_t + = +s +-> +o_ome +; + +625 if! + `ci_t_is_ched +( +ts +) ) { + +627 + `ci_t_t_addr__ome +( +tif +, +ts +, +t +, +s +); + +632 +rc + = + `ci_t__t_frs +( +tif +, + `S_SP +( +ts +),s-> +s +. + +. +so_bdtodevi +, + +633 + `S_SP +( +s +)); + +634 if +rc + < 0 ) { + +635 + `LOG_U +( + `ci_log +("%s: Ubˁأfr%d", +__FUNCTION__ +, +rc +)); + +637 + `ci_t_e_ +( +tif +, +ts +); + +638  +rc +; + +641 #i +CI_CFG_FD_CACHING + + +648 +rc + = + `ci_tif_fr_ +( +tif +, + `S_SP +( +ts +), +t +-> +l_addr +, + +649 + `sock_t_be16 +(& +s +-> +s +), +t +-> +r_addr +, + +650 +t +-> +r_pt +, + `t_oc +( +ts +)); + +652 i( +rc + < 0) { + +654 + `LOG_EP +( + `ci_log +("Unableo create s/w filter!")); + +655 + `ci_ni_di_push +( +tif +, & +s +-> +che +. +che +, & +ts +-> +che_lk +); + +656  +rc +; + +664 + `ci_t_t_addr__ome +( +tif +, +ts +, +t +, +s +); + +666 + `LOG_EP +( + `ci_log +("Cached fd %d from cachedced", +ts +-> +ched__fd +)); + +667 + `ci_ni_di_push +( +tif +, & +s +-> +che_ced +, & +ts +-> +che_lk +); + +671 + `ci_as +( + `IS_VALID_SOCK_P +( +tif +, + `S_SP +( +ts +))); + +672 + `ci_as +( +ts +-> +s +. +b +. +e + = +CI_TCP_CLOSED +); + +673 +ts +-> +s +. +doma + = +s +->s.domain; + +675 + `ci__che_upde_om +( +tif +, & +ts +-> +s +. +pkt +, +che +); + +676 + `ci_pmtu_e_ +( +tif +, & +ts +-> +s +, &ts-> +pmtus +, + +677 +CI_IP_TIMER_PMTU_DISCOVER +); + +678 + `ci_pmtu_t +( +tif +, & +ts +-> +pmtus +, + +679 + `CI_MIN +( +ts +-> +s +. +pkt +. +mtu +, + +680 +t +-> +tts +. +smss + + ( +ci_t_hdr +) + +681 + ( +ci_4_hdr +))); + +684 + `ci_as_equiv +( +ts +-> +s +. +pkt +. +us + = +rc_loou +, + +685 + `OO_SP_NOT_NULL +( +t +-> +lol_ +)); + +686 if +ts +-> +s +. +pkt +. +us + = +rc_loou + ) + +687 +ts +-> +s +. +pkt +. +ags + | +CI_IP_CACHE_IS_LOCALROUTE +; + +689 +ts +-> +amss + = +t +->amss; + +692 +ts +-> +tags + = 0; + +693 +ts +-> +tags + | +t +-> +tts +. +ags +; + +694 +ts +-> +tags + | +CI_TCPT_FLAG_PASSIVE_OPENED +; + +695 if + `NI_OPTS +( +tif +). +t_li_s_back + ) + +696 +ts +-> +s +. + +. +so_bdtodevi + = +che +-> +ifdex +; + +697 +ts +-> +outgog_hdrs_n + = ( +ci_4_hdr ++ ( +ci_t_hdr +); + +698 if +ts +-> +tags + & +CI_TCPT_FLAG_WSCL + ) { + +699 +ts +-> +d_ws + = +t +-> +tts +. +ws_sh +; + +700 +ts +-> +rcv_ws + = +t +->rcv_wscl; + +702 +ts +-> +d_ws + =s-> +rcv_ws + = 0u; + +704 + `CI_IP_SOCK_STATS_VAL_TXWSCL + +ts +,s-> +d_ws +); + +705 + `CI_IP_SOCK_STATS_VAL_RXWSCL + +ts +,s-> +rcv_ws +); + +708 + `t_d_u +( +ts + + `t_d_nxt +s + `t_q_nxt +s + `t_d_up +(ts) = + +709 +t +-> +d_i + + 1; + +710 + `ci_t_t_d_max +( +ts +, +t +-> +rcv_nxt +, + `t_d_u +(ts), 0); + +711 + `ci_t_rx_t_i +( +ts +, +t +-> +rcv_nxt +); + +712 + `t_rcv_up +( +ts + + `SEQ_SUB +( + `t_rcv_nxt +(ts), 1); + +714 if +ts +-> +tags + & +CI_TCPT_FLAG_TSO + ) { + +715 +ts +-> +comg_t_hdr_n + += 12; + +716 +ts +-> +outgog_hdrs_n + += 12; + +717 +ts +-> +taws + = + `ci_t_time_now +( +tif +); + +718 +ts +-> +te + = +t +-> +tr +; + +719 +ts +-> +taack + = +t +-> +rcv_nxt +; + +723 + `ci_t_r_t_timg +( +ts +); + +724 +ts +-> +timed_ts + = +t +-> +time +; + +729 + `ci_t_t_hdr_n +( +ts +, (ts-> +outgog_hdrs_n + - ( +ci_4_hdr +))); + +731 +ts +-> +smss + = +t +-> +tts +.smss; + +732 +ts +-> +c +. +ur_mss + = +s +->c.user_mss; + +733 i( +ts +-> +c +. +ur_mss + &&s->c.ur_ms +smss +) + +734 +ts +-> +smss + =s-> +c +. +ur_mss +; + +735 #i +CI_CFG_LIMIT_SMSS + + +736 +ts +-> +smss + = + `ci_t_lim_mss +s->smss, +tif +, +__FUNCTION__ +); + +738 + `ci_as +( +ts +-> +smss +>0); + +739 + `ci_t_t_eff_mss +( +tif +, +ts +); + +740 + `ci_t_t_lcwnd +( +tif +, +ts +); + +748 #ide +_WIN32 + + +749 + `ci_t_h_ac_tis +( +tif +, +s +, +ts +, "SYN RECV (LISTENQ PROMOTE)"); + +751 +ts +-> +s +. +s_ags + |( +s +->s.s_ag& +CI_SOCK_FLAG_SET_RCVBUF +); + +752 +ts +-> +s +. +so +. +rcvbuf + = +s +->s.so.rcvbuf; + +753 + `ci_t__rcv_wnd +( +ts +, "SYN RECV (LISTENQ PROMOTE)"); + +757 + `ci_t_t_eablished_e +( +tif +, +ts +); + +758 + `CITP_STATS_NETIF +(++ +tif +-> +e +-> +s +. +syecv2eablished +); + +760 + `ci_as +( +ts +-> +ka_obes + == 0); + +761 + `ci_t_kive_t +( +tif +, +ts +, + `ci_t_kive_id_g +(ts)); + +762 + `ci_t_t_ags +( +ts +, +CI_TCP_FLAG_ACK +); + +766 if +t +-> +tts +. +ags + & +CI_TCPT_FLAG_SYNCOOKIE + ) + +767 + `ci_ +( +t +); + +769 + `ci_t_liq_move +( +tif +, +s +, +t +); + +770 + `ci_t_syecv_ +( +tif +, +t +); + +773 + `ci_b_t +(& +ts +-> +s +. +b +. +sb_aags +, +CI_SB_AFLAG_TCP_IN_ACCEPTQ_BIT +); + +774 + `ci_t_acq_put +( +tif +, +s +, & +ts +-> +s +. +b +); + +776 + `LOG_TC +( + `log +( +LNT_FMT + "news=%d SYN-RECV->ESTABLISHED flags=0x%x", + +777 + `LNT_PRI_ARGS +( +tif +, +s +), + `S_FMT +( +ts +),s-> +tags +); + +778 + `log +( +LNTS_FMT + +RCV_WND_FMT + " snd=%08x-%08x-%08xnq=%08x", + +779 + `LNTS_PRI_ARGS +( +tif +, +ts +), + `RCV_WND_ARGS +(ts), + +780 + `t_d_u +( +ts +), + +781 + `t_d_nxt +( +ts +),s-> +d_max +, + `t_q_nxt +(ts))); + +783 + `cp_waab_wake +( +tif +, & +s +-> +s +. +b +, +CI_SB_FLAG_WAKE_RX +); + +784 * +ts_out + = +ts +; + +787 + `CI_TCP_EXT_STATS_INC_LISTEN_OVERFLOWS + +tif + ); + +788 + `LOG_U +( + `log +( +LPF + +LNT_FMT +"ccept queue is full (n=%d max=%d)", + +789 + `LNT_PRI_ARGS +( +tif +, +s +), + `ci_t_acq_n +ls),ls-> +acq_max +)); + +790 + `CITP_STATS_TCP_LISTEN +(++ +s +-> +s +. +n_acq_ovow +); + +792  - +ENOSPC +; + +793 + } +} + + @tcp_timer.c + +14  + ~"_.h +" + +15  + ~"t_rx.h +" + +17  + #LPF + "TCP TIMER " + + ) + +20 #ide +__KERNEL__ + + +21 #ide +NDEBUG + + +22  + $ci_t_tim_dump_cڡs +( +ci_tif +* +tif +) + +24 + `log +( +LPF + "time constants forhis CPU\n" + +30 + `NI_CONF +( +tif +). +tcڡ_o_l +, + `NI_OPTS +ґif). +o_l +, + +31 + `NI_CONF +( +tif +). +tcڡ_o_m +, + `NI_OPTS +ґif). +o_m +, + +32 + `NI_CONF +( +tif +). +tcڡ_o_max +, + `NI_OPTS +ґif). +o_max +, + +33 + `NI_CONF +( +tif +). +tcڡ_dack +, +CI_TCP_TCONST_DELACK +, + +34 + `NI_CONF +( +tif +). +tcڡ_id +, +CI_TCP_TCONST_IDLE +); + +35 + `log +(" keepalive_time: %uticks (%ums)\n" + +39 + `NI_CONF +( +tif +). +tcڡ_klive_time +, + `NI_OPTS +ґif). +klive_time +, + +40 + `NI_CONF +( +tif +). +tcڡ_klive_tvl +, + `NI_OPTS +ґif). +klive_tvl +, + +41 + `NI_OPTS +( +tif +). +klive_obes +, + +42 + `NI_CONF +( +tif +). +tcڡ_zw_max +, +CI_TCP_TCONST_ZWIN_MAX +); + +43 + `log +("aws_idle: %uticks (%ums)", + +44 + `NI_CONF +( +tif +). +tcڡ_ws_id +, +CI_TCP_TCONST_PAWS_IDLE +); + +45 + `log +(" PMTU slow discover: %uticks (%ums)\n" + +48 + `NI_CONF +( +tif +). +tcڡ_pmtu_discov_ow +, +CI_PMTU_TCONST_DISCOVER_SLOW +, + +49 + `NI_CONF +( +tif +). +tcڡ_pmtu_discov_ +, +CI_PMTU_TCONST_DISCOVER_FAST +, + +50 + `NI_CONF +( +tif +). +tcڡ_pmtu_discov_cov +, + +51 +CI_PMTU_TCONST_DISCOVER_RECOVER +); + +52 + `log +(" Intrumentation: %uticks (%ums)", + +53 + `NI_CONF +( +tif +). +tcڡ_s +, +CI_TCONST_STATS +); + +54 + } +} + +65  + $ci_t_tim_ +( +ci_tif +* +tif +) + +67 + `NI_CONF +( +tif +). +tcڡ_o_l + = + +68 + `ci_t_time_ms2ticks +( +tif +, + `NI_OPTS +ґif). +o_l +); + +73 + `NI_CONF +( +tif +). +tcڡ_o_m + = + +74 + `ci_t_time_ms2ticks +( +tif +, + `NI_OPTS +ґif). +o_m +) + 1; + +75 + `NI_CONF +( +tif +). +tcڡ_o_max + = + +76 + `ci_t_time_ms2ticks +( +tif +, + `NI_OPTS +ґif). +o_max +); + +78 + `NI_CONF +( +tif +). +tcڡ_dack + = + +79 + `ci_t_time_ms2ticks +( +tif +, +CI_TCP_TCONST_DELACK +); + +81 + `NI_CONF +( +tif +). +tcڡ_id + = + +82 + `ci_t_time_ms2ticks +( +tif +, +CI_TCP_TCONST_IDLE +); + +84 + `NI_CONF +( +tif +). +tcڡ_klive_time + = + +85 + `ci_t_time_ms2ticks +( +tif +, + `NI_OPTS +ґif). +klive_time +); + +86 + `NI_CONF +( +tif +). +tcڡ_klive_tvl + = + +87 + `ci_t_time_ms2ticks +( +tif +, + `NI_OPTS +ґif). +klive_tvl +); + +89 + `NI_CONF +( +tif +). +tcڡ_zw_max + = + +90 + `ci_t_time_ms2ticks +( +tif +, +CI_TCP_TCONST_ZWIN_MAX +); + +92 + `NI_CONF +( +tif +). +tcڡ_ws_id + = + +93 + `ci_t_time_ms2ticks +( +tif +, +CI_TCP_TCONST_PAWS_IDLE +); + +95 + `NI_CONF +( +tif +). +tcڡ_2m_time + = + +96 + `ci_t_time_ms2ticks +( +tif +, 2* + `NI_OPTS +ґif). +m_cds +*1000); + +97 + `NI_CONF +( +tif +). +tcڡ_f_timeout + = + +98 + `ci_t_time_ms2ticks +( +tif +, + `NI_OPTS +ґif). +f_timeout +*1000); + +101 + `NI_CONF +( +tif +). +tcڡ_pmtu_discov_ow + = + +102 + `ci_t_time_ms2ticks +( +tif +, +CI_PMTU_TCONST_DISCOVER_SLOW +); + +104 + `NI_CONF +( +tif +). +tcڡ_pmtu_discov_ + = + +105 + `ci_t_time_ms2ticks +( +tif +, +CI_PMTU_TCONST_DISCOVER_FAST +); + +107 + `NI_CONF +( +tif +). +tcڡ_pmtu_discov_cov + = + +108 + `ci_t_time_ms2ticks +( +tif +, +CI_PMTU_TCONST_DISCOVER_RECOVER +); + +110 + `NI_CONF +( +tif +). +tcڡ_s + = + +111 + `ci_t_time_ms2ticks +( +tif +, +CI_TCONST_STATS +); + +113 #ide +__KERNEL__ + + +114 + `LOG_S +( + `ci_t_tim_dump_cڡs +( +tif +)); + +116 + } +} + +120  + $ci_t_timeout_li +( +ci_tif +* +tif +, +ci_t_sock_li +* +s +) + +122 +ci_ni_di_lk +* +l +; + +123  +max_s +, +s +, +syecv_timeout + = 0; + +124  +out_of_cks + = 0; + +125 +ci_time_t + +xt_timeout + = + `ci_t_time_now +( +tif +); + +127 + `ci_as +( +tif +); + +128 + `ci_as +( +s +); + +129 + `ci_as +( +s +-> +s +. +b +. +e + = +CI_TCP_LISTEN +); + +131 + `ci_as +( +s +-> +n_liq + > 0); + +133 if +s +-> +c +. +t_der_ac + ! +OO_TCP_DEFER_ACCEPT_OFF + ) + +134 +max_s + = +s +-> +c +. +t_der_ac +; + +136 +max_s + = + `NI_OPTS +( +tif +). +sm_thshd_syck +; + +141  +s + = 0;r< +max_s +; ++retries ) { + +142 +ci_ni_di_t +* +li + = & +s +-> +liq +[ +s +]; + +143 +ci_ni_di_lk +* +ϡ_l + = +NULL +; + +145  +l + = + `ci_ni_di_t +( +tif +, +li +); + +146 +l + ! + `ci_ni_di_d +( +tif +, +li +); + +147 + `ci_ni_di_ +( +tif +, +l +) ) { + +148 +ci_t_e_syecv +* +t + = + `ci_t_lk2syecv +( +l +); + +150 + `ci_as + + `OO_SP_IS_NULL +( +t +-> +lol_ +) ); + +153 if + `TIME_GT +( +t +-> +timeout +, + `ci_t_time_now +( +tif +)) ) { + +154 if +xt_timeout + = + `ci_t_time_now +( +tif +) || + +155 + `TIME_LT +( +t +-> +timeout +, +xt_timeout +) ) + +156 +xt_timeout + = +t +-> +timeout +; + +160 + `ci_as_equ +( +t +-> +s + & +CI_FLAG_TSR_RETRIES_MASK +,etries); + +161 +ϡ_l + = +l +; + +169 if +s +-> +c +. +t_der_ac + ! +OO_TCP_DEFER_ACCEPT_OFF + && + +170 ( +t +-> +s + & +CI_FLAG_TSR_RETRIES_MASK += +max_s + - 1 ) + +171 +t +-> +s + &~ +CI_FLAG_TSR_RETRIES_ACKED +; + +172 if(~ +t +-> +s + & +CI_FLAG_TSR_RETRIES_ACKED +) || + +173 +s +-> +c +. +t_der_ac + = +OO_TCP_DEFER_ACCEPT_OFF + ) { + +174  +rc + = 0; + +175 +ci__pkt_fmt +* +pkt + = + `ci_tif_pkt_loc +( +tif +); + +177 if +pkt + = +NULL + ) + +178  +out_of_ck +; + +179 +rc + = + `ci_t_syecv_nd +( +tif +, +s +, +t +, +pkt +, + +180 +CI_TCP_FLAG_SYN + | +CI_TCP_FLAG_ACK +, +NULL +); + +181 if +rc + == 0 ) { + +182 + `CITP_STATS_NETIF +(++ +tif +-> +e +-> +s +. +syecv_sms +); + +183 + `LOG_TC +( + `log +( +LPF + "SYNRECVetransmited %d SYNACK%s\n" + +185 +t +-> +s + & +CI_FLAG_TSR_RETRIES_MASK +, + +186 ( +t +-> +s + & +CI_FLAG_TSR_RETRIES_ACKED +) ? + +188 +t +-> +timeout +)); + +191 + `LOG_U +( + `ci_log +("%s:ػtuouxi" +CI_IP_PRINTF_FORMAT +, + +192 +__FUNCTION__ +, + `CI_IP_PRINTF_ARGS +(& +t +-> +r_addr +))); + +196 if +s + == 0 ) + +197 -- +s +-> +n_liq_w +; + +198 +t +-> +s +++; + +199 + `ci_as_equ +( +t +-> +s + & +CI_FLAG_TSR_RETRIES_MASK +,etries + 1); + +201 +t +-> +timeout + = + `NI_CONF +( +tif +). +tcڡ_o_l + << ( +s + + 1); + +202 +t +-> +timeout + = + `CI_MIN +Ѥ->timeout, + `NI_CONF +( +tif +). +tcڡ_o_max +); + +203 +t +-> +timeout + + + `ci_t_time_now +( +tif +); + +208 if +ϡ_l + ! +NULL + ) { + +209 +ci_ni_di_t +* +xt_li + = & +s +-> +liq +[ +s + + 1]; + +210 +ci_ni_di_lk +* +t_l + = + `ci_ni_di_t +( +tif +, +li +); + +211 +ci_ni_di_lk +* +lk_to_l + = + `ci_ni_di_t_ϡ +( +tif +, +xt_li +); + +212 +ci_ni_di_lk +* +uƚk_om_l + = + +213 ( +ci_ni_di_lk +* + `CI_NETIF_PTR +( +tif +, +ϡ_l +-> +xt +); + +216 +li +-> +l +. +xt + = + `ci_ni_di_lk_addr +( +tif +, +uƚk_om_l +); + +217 +uƚk_om_l +-> +ev + = + `ci_ni_di_lk_addr +( +tif +, & +li +-> +l +); + +221 +t_l +-> +ev + = + `ci_ni_di_lk_addr +( +tif +, +lk_to_l +); + +222 +lk_to_l +-> +xt + = + `ci_ni_di_lk_addr +( +tif +, +t_l +); + +223 +ϡ_l +-> +xt + = + `ci_ni_di_lk_addr +( +tif +, & +xt_li +-> +l +); + +224 +xt_li +-> +l +. +ev + = + `ci_ni_di_lk_addr +( +tif +, +ϡ_l +); + +231  +s + = +max_s +; + +232 +s + < +CI_CFG_TCP_SYNACK_RETRANS_MAX +; + +233 ++ +s + ) { + +234 +l + = + `ci_ni_di_t +( +tif +, & +s +-> +liq +[ +s +]); + +235  +l + ! + `ci_ni_di_d +( +tif +, & +s +-> +liq +[ +s +]) ) { + +236 +ci_t_e_syecv +* +t + = + `ci_t_lk2syecv +( +l +); + +239 + `ci_ni_di_ +( +tif +, +l +); + +241 + `ci_as + + `OO_SP_IS_NULL +( +t +-> +lol_ +) ); + +244 if + `TIME_GT +( +t +-> +timeout +, + `ci_t_time_now +( +tif +)) ) { + +245 if +xt_timeout + = + `ci_t_time_now +( +tif +) || + +246 + `TIME_LT +( +t +-> +timeout +, +xt_timeout +) ) + +247 +xt_timeout + = +t +-> +timeout +; + +251 + `ci_as_equ +( +t +-> +s + & +CI_FLAG_TSR_RETRIES_MASK +,etries); + +253 + `ci_t_liq_dr +( +tif +, +s +, +t +); + +254 + `ci_t_syecv_ +( +tif +, +t +); + +255 + `CITP_STATS_NETIF +(++ +tif +-> +e +-> +s +. +syecv_timeouts +); + +257 + `LOG_TC +( + `log +( +LPF + "SYNRECVetries %dxceeded %d," + +259 +t +-> +s + & +CI_FLAG_TSR_RETRIES_MASK +, + +260 + `NI_OPTS +( +tif +). +sm_thshd_syck +)); + +262 ++ +syecv_timeout +; + +266 +out +: + +267 if +syecv_timeout + ) + +268 + `NI_LOG +( +tif +, +CONN_DROP +, "%s: [%d] %d hf-ݒimeouts\n", +__func__ +, + +269 + `NI_ID +( +tif +), +syecv_timeout +); + +272 if +xt_timeout + ! + `ci_t_time_now +( +tif +) ) { + +276 + `ci__tim_t +( +tif +, & +s +-> +liq_tid +, + +277 +out_of_cks + ? + +278 + `ci_t_time_now +( +tif ++ 1 : +xt_timeout +); + +282 +out_of_ck +: + +283 + `LOG_TV +( + `ci_log +( +LNT_FMT +"SYNRECV[retries=%d]o buffers,ote-sending synacks " + +285 + `LNT_PRI_ARGS +( +tif +, +s +), +s +, + +286 +s +-> +n_liq + -ls-> +n_liq_w +)); + +287 + `CITP_STATS_NETIF_INC +( +tif +, +t_li_syck_s_no_bufr +); + +288 +out_of_cks + = 1; + +289  +out +; + +290 + } +} + +294  + $ci_t_timeout_kive +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +296 +ci_time_t + +t_ϡ_cv + = + +297 + `CI_MAX +( +ts +-> +t_ϡ_cv_yld +,s-> +t_ϡ_cv_ack +); + +299 + `ci_as +( +tif +); + +300 + `ci_as +( +ts +); + +301 + `ci_as +( +ts +-> +s +. +b +. +e + ! +CI_TCP_CLOSED +); + +304 i( +ts +-> +ka_obes + == 0 && + +305 + `ci_t_time_now +( +tif +- +t_ϡ_cv + < + `ci_t_kive_id_g +( +ts +)) { + +312 + `ci_t_kive_t +( +tif +, +ts +, + +313 + `ci_t_kive_id_g +( +ts +) - + +314 ( + `ci_t_time_now +( +tif +- +t_ϡ_cv +)); + +318 i( +ts +-> +ka_obes + != 0 && + +319 + `ci_t_time_now +( +tif +- +t_ϡ_cv + < + +320 + `ci_t_kive_tvl_g +( +tif +, +ts +)) { + +321 + `ci_t_kive_t +( +tif +, +ts +, + +322 + `ci_t_kive_tvl_g +( +tif +, +ts +) - + +323 ( + `ci_t_time_now +( +tif +- +t_ϡ_cv +)); + +327 + `ci_as +( + `ci__queue_is_emy +(& +ts +-> +s +)); + +330 if + `OO_SP_NOT_NULL +( +ts +-> +lol_ +) ) { + +331 +cp_waab +* + + = + `ID_TO_WAITABLE +( +tif +, +ts +-> +lol_ +); + +332 if~ + +-> +e + & +CI_TCP_STATE_TCP_CONN + ) + +333 + `ci_t_dr +( +tif +, +ts +, +ETIMEDOUT +); + +337 + `LOG_TL +( + `log +( +LPF + "%d KALIVE: 0x%xto:%u\n", + +338 + `S_FMT +( +ts +), + `ci_t_time_now +( +tif +),s-> +o +)); + +339 i( +ts +-> +ka_obes + > + `ci_t_kive_obes_g +(ts) ) + +340 + `CI_TCP_EXT_STATS_INC_TCP_ABORT_ON_TIMEOUT + +tif + ); + +341 if +ts +-> +ka_obes + > + `ci_t_kive_obes_g +(ts) ) { + +342 + `LOG_U +( + `log +( +LPF + "%d KALIVE: (should drop) ka_probes=%u ka_probe_th=%u", + +343 + `S_FMT +( +ts +),s-> +ka_obes +, + `ci_t_kive_obes_g +(ts))); + +345 + `ci_t_nd_r +( +tif +, +ts +); + +346 + `ci_t_dr +( +tif +, +ts +, +ETIMEDOUT +); + +350 + `ci_t_nd_zw_obe +( +tif +, +ts +); + +352 ++ +ts +-> +ka_obes +; + +353 + `ci_t_kive_t +( +tif +, +ts +, + `ci_t_kive_tvl_g +(netif,s)); + +354 + } +} + +358  + $ci_t_timeout_zw +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +360 + `ci_as +( +tif +); + +361 + `ci_as +( +ts +); + +362 + `ci_as +( +ts +-> +s +. +b +. +e + ! +CI_TCP_CLOSED +); + +372 if + `t_d_wnd +( +ts +> + `t_eff_mss +(ts) || + +373 ! ( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_TXQ_ACTIVE +) || + +374 + `ci__queue_n_emy +(& +ts +-> +s +) ) { + +375 +ts +-> +zw_obes + = 0; + +376 +ts +-> +zw_acks + = 0; + +379 if + `ci_t_ndq_is_emy +( +ts +) ) { + +383 + `ci_t_zw_t +( +tif +, +ts +); + +387 + `LOG_TT +( + `log +( +LNTS_FMT + "ZWIN:ow=0x%xto=%u snd_wnd=%drobes=%d,%d", + +388 + `LNTS_PRI_ARGS +( +tif +, +ts +), + `ci_t_time_now +ґif),s-> +o +, + +389 + `t_d_wnd +( +ts +),s-> +zw_obes +,s-> +zw_acks +)); + +391 if + `CI_UNLIKELY +( + `t_d_wnd +( +ts +) > 0) ) { + +392 +ci__pkt_fmt +* +f_pkt + = + `PKT_CHK +( +tif +, +ts +-> +nd +. +hd +); + +403 if + `CI_UNLIKELY +( + `t_d_wnd +( +ts ++ ((1 < +d_ws +) - 1) >= + +404 + `PKT_TCP_TX_SEQ_SPACE +( +f_pkt +)) ) { + +410 if + `SEQ_GT +( +f_pkt +-> +pf +. +t_tx +. +d_q +, +ts +-> +d_max +) ) + +411 +ts +-> +d_max + +(1 < +d_ws +) - 1; + +412 + `ci_t_tx_adv +( +ts +, +tif +); + +415 if +ts +-> +zw_obes + =0 &&s-> +zw_acks + > 2 ) { + +418 + `ci_t_t_d_max +( +ts +, + `t_rcv_nxt +s- 1,s-> +d_max +, + +419 + `t_eff_mss +( +ts +- + `t_d_wnd +(ts)); + +420 + `ci_as_equ +( + `t_d_wnd +( +ts +), + `t_eff_mss +(ts)); + +421 + `ci_t_tx_adv +( +ts +, +tif +); + +422 +ts +-> +zw_acks + = 0; + +427 + `ci_t_nd_zw_obe +( +tif +, +ts +); + +430 + `ci_t_nd_zw_obe +( +tif +, +ts +); + +431 + `ci_t_zw_t +( +tif +, +ts +); + +432 +ts +-> +zw_obes +++; + +433 + } +} + +437  + $ci_t_timeout_dack +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +439 +ci__pkt_fmt +* +pkt +; + +441 + `ci_as +( +tif +); + +442 + `ci_as +( +ts +); + +443 + `ci_as +( +ts +-> +s +. +b +. +e + ! +CI_TCP_CLOSED +); + +444 + `ci_as +(( +ts +-> +acks_ndg + & +CI_TCP_ACKS_PENDING_MASK +) > 0); + +446 + `LOG_TV +( + `log +( +LNT_FMT + "DELACKow=0x%xcks_ndg=%x", + `LNT_PRI_ARGS +( +tif +, +ts +), + +447 + `ci_t_time_now +( +tif +), +ts +-> +acks_ndg +)); + +449 +pkt + = + `ci_tif_pkt_loc +( +tif +); + +450 if +pkt + ) { + +451 + `CI_TCP_EXT_STATS_INC_DELAYED_ACK + +tif + ); + +452 + `CITP_STATS_NETIF_INC +( +tif +, +acks_ +); + +453 + `ci_t_nd_ack +( +tif +, +ts +, +pkt +, +CI_FALSE +); + +456 + `LOG_TR +( + `log +( +LNT_FMT + "DELACKow=%xcks_pending=%x NO BUFS (willetry)", + +457 + `LNT_PRI_ARGS +( +tif +, +ts +), + +458 + `ci_t_time_now +( +tif +), +ts +-> +acks_ndg +)); + +459 + `ci__tim_t +( +tif +, & +ts +-> +dack_tid +, + +460 + `ci_t_time_now +( +tif ++ + `NI_CONF +ґif). +tcڡ_dack +); + +462 + } +} + +465  + $ci_t_dr_due_to_o +( +ci_tif + * +ni +, +ci_t_e + * +ts +, + +466  +max_s +) + +468 + `LOG_U +( + `log +( +LNTS_FMT + " (%s) state=%u so_error=%detransmits=%u max=%u", + +469 + `LNTS_PRI_ARGS +( +ni +, +ts +), +__FUNCTION__ +, + +470 +ts +-> +s +. +b +. +e +,s->s. +so_r +,s-> +sms +, +max_s +)); + +472 +ts +-> +sms + = 0; + +473 + `ci_t_dr +( +ni +, +ts +, +ETIMEDOUT +); + +475 + } +} + +478  + $ci_t_timeout_ck +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +484 if +ts +-> +nd +. +num + == 1 ) { + +485 + `TX_PKT_TCP +( + `PKT_CHK +( +tif +, +ts +-> +nd +. +hd +))-> +t_ags + | +CI_TCP_FLAG_PSH +; + +486 + `ci_t_tx_adv +( +ts +, +tif +); + +489 + } +} + +492  + $ci_t_timeout_o +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +494 +ci__pkt_queue +* +q + = & +ts +-> +s +; + +495  +max_s +; + +497 + `ci_as +( +tif +); + +498 + `ci_as +( +ts +); + +499 + `ci_as +( +ts +-> +s +. +b +. +e + ! +CI_TCP_CLOSED +); + +502 + `ci_as +(! + `ci__queue_is_emy +( +q +)); + +504 + `LOG_TL +( +ci__pkt_fmt +* +pkt + = + `PKT +( +tif +, +q +-> +hd +); + +505 + `log +( +LNTS_FMT + "RTOow=%x srtt=%uttvar=%uto=%uetransmits=%d", + +506 + `LNTS_PRI_ARGS +( +tif +, +ts +), + `ci_t_time_now +(netif), + +507 + `t_ +( +ts +), + `t_tv +s),s-> +o +,s-> +sms +); + +508 + `log +(" " +TCP_SND_FMT +, + `TCP_SND_PRI_ARG +( +ts +)); + +509 + `log +(" " +TCP_CONG_FMT +, + `TCP_CONG_PRI_ARG +( +ts +)); + +510 + `log +(" head=%08x-%08xsval=%xkt_flag=%u", + +511 +pkt +-> +pf +. +t_tx +. +t_q +,kt->pf.t_tx. +d_q +, + +512 ( +ts +-> +tags +& +CI_TCPT_FLAG_TSO +? + `PKT_TCP_TSO_TSVAL +( +pkt +):0x0, + +513 +pkt +-> +ags +)); + +514 + `CI_IP_SOCK_STATS_INC_RTTO + +ts + ); + +516 #i +CI_CFG_BURST_CONTROL + + +520 +ts +-> +bur_wdow + = 0; + +523 #i +CI_CFG_TAIL_DROP_PROBE + + +526 if( + `NI_OPTS +( +tif +). +_dr_obe + && + +527 +ts +-> +dr_e + ! +CI_TCP_TAIL_DROP_ACTIVE +){ + +528 +ts +-> +dr_e + = +CI_TCP_TAIL_DROP_ACTIVE +; + +532 if +ts +-> +s +. +b +. +e + = +CI_TCP_SYN_SENT + ) { + +533 +max_s + = + `NI_OPTS +( +tif +). +sm_thshd_syn +; + +535 if +ts +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_ORPHAN + ) { + +536 +max_s + = + `NI_OPTS +( +tif +). +sm_thshd_ph +; + +537 + `CITP_STATS_NETIF +(++ +tif +-> +e +-> +s +. +t_os +); + +540 +max_s + = + `NI_OPTS +( +tif +). +sm_thshd +; + +541 + `CITP_STATS_NETIF +(++ +tif +-> +e +-> +s +. +t_os +); + +544 if +ts +-> +sms + > +max_s + || + `NI_OPTS +( +tif +). +r_dayed_cn + ) { + +545 +ts +-> +s +. +so_r + = +ETIMEDOUT +; + +546 + `ci_t_dr_due_to_o +( +tif +, +ts +, +max_s +); + +550 if +ts +-> +s +. +b +. +e + = +CI_TCP_SYN_SENT + &&s->s. +so_r + != 0 && + +551 +ts +-> +sms + > 0 ) + +553 + `ci_t_dr_due_to_o +( +tif +, +ts +, +max_s +); + +557 if +ts +-> +cge + = +CI_TCP_CONG_RTO + ){ + +566 +ts +-> +shsh + = + `t_eff_mss +(ts) << 1u; + +572 if +ts +-> +cge + = +CI_TCP_CONG_FAST_RECOV + && + +573 !( +ts +-> +tags + & +CI_TCPT_FLAG_SACK +) ) { + +574  +x + = +ts +-> +shsh + >> 1u; + +575  +y + = + `t_eff_mss +( +ts +) << 1u; + +576 +ts +-> +shsh + = + `CI_MAX +( +x +, +y +); + +579 +ts +-> +shsh + = + `ci_t_losswnd +(ts); + +581 +ts +-> +cge + = +CI_TCP_CONG_RTO +; + +582 +ts +-> +cwnd_exa + = 0; + +583 ++ +ts +-> +s +. +os +; + +586 +ts +-> +cgcov + = + `t_d_nxt +(ts); + +589 +ts +-> +cwnd + = + `CI_MAX +( + `t_eff_mss +s), + `NI_OPTS +( +tif +). +loss_m_cwnd +); + +590 +ts +-> +bys_acked + = 0; + +593 +ts +-> +o + <<= 1u; + +594 +ts +-> +o + = + `CI_MIN +s->o, + `NI_CONF +( +tif +). +tcڡ_o_max +); + +595 + `ci_t_o_t +( +tif +, +ts +); + +601 + `ci_t_r_cks +( +tif +, +ts +); + +603 if + `ci_t_ight +( +ts +< ( + `t_eff_mss +s>> 1*s-> +s +. +num + ) + +607 + `ci_t_s_cs_block +( +tif +, +ts +, + `PKT_CHK +ґif, +q +-> +hd +)); + +612 ++ +ts +-> +sms +; + +613 + `ci_t_s_cov +( +tif +, +ts +, 0); + +614 + } +} + +617 #i +CI_CFG_TAIL_DROP_PROBE + + +619  + $ci_t_timeout_dr +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +621 +ci__pkt_queue + * +q + = & +ts +-> +s +; + +622 +ci__pkt_fmt + * +q_ +; + +623  +q__q +; + +625 + `ci_as +( + `NI_OPTS +( +tif +). +_dr_obe +); + +628 if( +ts +-> +dr_e + = +CI_TCP_TAIL_DROP_PRIMED + + +629 && +q +-> +num + > 1){ + +631 +q_ + = + `PKT_CHK +( +tif +, +ts +-> +s +. + +); + +632 +q__q + = + `CI_BSWAP_BE32 +( + `TX_PKT_TCP +( +q_ +)-> +t_q_be32 +); + +634 i( + `SEQ_LE +( +q__q +, +ts +-> +dr_mk +)){ + +635 if( + `ci_t_nd_dr_obe +( +tif +, +ts +)){ + +636 + `LOG_TV +( + `log +("Sendingail droprobe, mark %08x, una %08x seq %08x-%08x", + +637 +ts +-> +dr_mk +, + `t_d_u +s), +q__q +, + +638 +q_ +-> +pf +. +t_tx +. +d_q +)); + +640 +ts +-> +dr_e + = +CI_TCP_TAIL_DROP_PROBED +; + +644 + `ci_t_dr_check_d_t +( +tif +, +ts +); + +651 +ts +-> +dr_e + = +CI_TCP_TAIL_DROP_ACTIVE +; + +652 + } +} + + @tcp_tx.c + +14  + ~"_.h +" + +15  + ~ + +16  + ~"_tx.h +" + +17  + ~ + +18 #i +defed +( +__ci_driv__ +&& defed( +__lux__ +) + +19  + ~ + +21  + ~"t_tx.h +" + +24  + #LPF + "TCP TX " + + ) + +27 +ci_le +  + $ci__t_li_to_dmaq +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +28 +oo_pkt_p + +hd_id +, + +29 +ci__pkt_fmt +* +_pkt +) + +31 +ci__pkt_fmt +* +pkt +; + +32 +oo_pktq +* +dmaq +; + +33 +oo_pkt_p + + +; + +34 +ef_vi +* +vi +; + +35  +n +; + +36 #i +CI_CFG_USE_PIO + + +37  +rc +; + +38 +ci_ut8 + +d +; + +39 +ci_t32 + +offt +; + +40 +ci_pio_buddy_lot +* +buddy +; + +43 + + = +hd_id +; + +44 +n + = 0; + +46 +pkt + = + `PKT_CHK +( +ni +, + +); + +47 + + = +pkt +-> +xt +; + +48 if( +ts +-> +s +. +timeampg_ags + & +ONLOAD_SOF_TIMESTAMPING_TX_HARDWARE +) && + +49 + `CI_TCP_PAYLEN +( + `oo_tx__hdr +( +pkt +), + `TX_PKT_TCP +(pkt)) != 0 ) + +50 +pkt +-> +ags + | +CI_PKT_FLAG_TX_TIMESTAMPED +; + +51 + `ci__t_mac_d_pt +( +ni +, & +ts +-> +s +. +pkt +,kt); + +52 + `ci_tif_pkt_hd +( +ni +, +pkt +); + +53 + `__ci_tif_dmaq___pkt +( +ni +, +pkt +); + +54 +pkt +-> +tif +. +tx +. +dmaq_xt + =kt-> +xt +; + +55 ++ +n +; + +56 }  +pkt + ! +_pkt + ); + +58 + `ci_tif_dmaq_d_vi_f_pkt +( +ni +, +_pkt +, & +dmaq +, & +vi +); + +60 #i +CI_CFG_USE_PIO + + +64 +d + = + `ci_log2_ge +( +_pkt +-> +y_n +, +CI_CFG_MIN_PIO_BLOCK_ORDER +); + +65 +buddy + = & +ni +-> +e +-> +nic +[ +_pkt +-> +tf_i +]. +pio_buddy +; + +66 if +n + =1 && + `oo_pktq_is_emy +( +dmaq +) && + +67 ( +ni +-> +e +-> +nic +[ +_pkt +-> +tf_i +]. +oo_vi_ags + & +OO_VI_FLAGS_PIO_EN +) ) { + +68 if +_pkt +-> +y_n + < + `NI_OPTS +( +ni +). +pio_thsh + ) { + +69 if( +offt + = + `ci_pio_buddy_loc +( +ni +, +buddy +, +d +)) >= 0 ) { + +70 if( + `CI_UNLIKELY + +ni +-> +ags + & +CI_NETIF_FLAG_MSG_WARM + )) { + +71 + `__ci_tif_dmaq___pkt_wm_undo +( +ni +, +_pkt +); + +72 + `ci_pio_buddy_ +( +ni +, &ni-> +e +-> +nic +[ +_pkt +-> +tf_i +]. +pio_buddy +, + +73 +offt +, +d +); + +76 +rc + = + `ef_vi_sm_cy_pio +( +vi +, +offt +, + `PKT_START +( +_pkt +), + +77 +_pkt +-> +buf_n +, + `OO_PKT_ID +( +pkt +)); + +78 if +rc + == 0 ) { + +79 + `CITP_STATS_NETIF_INC +( +ni +, +pio_pkts +); + +80 + `ci_as +( +_pkt +-> +pio_addr + == -1); + +81 +_pkt +-> +pio_addr + = +offt +; + +82 +_pkt +-> +pio_d + = +d +; + +86 + `CITP_STATS_NETIF_INC +( +ni +, +no_pio_r +); + +87 + `ci_pio_buddy_ +( +ni +, +buddy +, +offt +, +d +); + +92 + `CI_DEBUG +( + `CITP_STATS_NETIF_INC +( +ni +, +no_pio_busy +)); + +96 + `CI_DEBUG +( + `CITP_STATS_NETIF_INC +( +ni +, +no_pio_too_lg +)); + +101 if( + `CI_LIKELY +! ( +ni +-> +ags + & +CI_NETIF_FLAG_MSG_WARM +) )) { + +102 + `__oo_pktq_put_li +( +ni +, +dmaq +, +hd_id +, +_pkt +, +n +, +tif +. +tx +. +dmaq_xt +); + +103 + `ci_tif_dmaq_shove2 +( +ni +, +_pkt +-> +tf_i +); + +106 + `__ci_tif_dmaq___pkt_wm_undo +( +ni +, +_pkt +); + +108 + } +} + +111 #i +CI_CFG_PORT_STRIPING + + +112  + $ci__t_li_to_dmaq_rg +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +113 +oo_pkt_p + +hd_id +, + +114 +ci__pkt_fmt +* +_pkt +) + +116  +shove_tf_i +[2] = {-1, -1}; + +117 +ci__pkt_fmt +* +pkt +; + +118 +ci__pkt_fmt +* +xt_pkt +; + +119 +oo_pktq +* +dmaq +; + +120 +oo_pkt_p + + +; + +121 +ef_vi +* +vi +; + +122  +n +; + +124 + + = +hd_id +; + +125 +n + = 0; + +127 +pkt + = + `PKT_CHK +( +ni +, + +); + +128 if +ts +-> +s +. +timeampg_ags + & +ONLOAD_SOF_TIMESTAMPING_TX_HARDWARE + && + +129 + `CI_TCP_PAYLEN +( + `oo_tx__hdr +( +pkt +), + `TX_PKT_TCP +(pkt)) != 0 ) + +130 +pkt +-> +ags + | +CI_PKT_FLAG_TX_TIMESTAMPED +; + +131 + `ci__t_mac_d_pt +( +ni +, & +ts +-> +s +. +pkt +,kt); + +132 + + = +pkt +-> +xt +; + +133 + `ci_tif_pkt_hd +( +ni +, +pkt +); + +134 + `__ci_tif_dmaq___pkt +( +ni +, +pkt +); + +135 +pkt +-> +tif +. +tx +. +dmaq_xt + =kt-> +xt +; + +136 ++ +n +; + +138 if +pkt + = +_pkt + ) { + +140 + `ci_tif_dmaq_d_vi_f_pkt +( +ni +, +_pkt +, & +dmaq +, & +vi +); + +141 + `__oo_pktq_put_li +( +ni +, +dmaq +, +hd_id +, +_pkt +, +n +, +tif +. +tx +. +dmaq_xt +); + +144 + `ci_as +(( +shove_tf_i +[ +pkt +-> +tif +. +tx +. +tf_sw +] == -1) || + +145 ( +shove_tf_i +[ +pkt +-> +tif +. +tx +. +tf_sw +] =pkt-> +tf_i +)); + +146 +shove_tf_i +[ +pkt +-> +tif +. +tx +. +tf_sw +] =kt-> +tf_i +; + +151 +xt_pkt + = + `PKT_CHK +( +ni +, + +); + +152 if +pkt +-> +tif +. +tx +. +tf_sw + ! +xt_pkt +->netif.tx.intf_swap ) { + +154 + `ci_tif_dmaq_d_vi_f_pkt +( +ni +, +pkt +, & +dmaq +, & +vi +); + +155 + `__oo_pktq_put_li +( +ni +, +dmaq +, +hd_id +, +pkt +, +n +, +tif +. +tx +. +dmaq_xt +); + +158 + `ci_as +(( +shove_tf_i +[ +pkt +-> +tif +. +tx +. +tf_sw +] == -1) || + +159 ( +shove_tf_i +[ +pkt +-> +tif +. +tx +. +tf_sw +] =pkt-> +tf_i +)); + +160 +shove_tf_i +[ +pkt +-> +tif +. +tx +. +tf_sw +] =kt-> +tf_i +; + +163 +hd_id + = + +; + +164 +n + = 0; + +169 if +shove_tf_i +[0] != -1 ) + +170 + `ci_tif_dmaq_shove2 +( +ni +, +shove_tf_i +[0]); + +171 if +shove_tf_i +[1] != -1 ) + +172 + `ci_tif_dmaq_shove2 +( +ni +, +shove_tf_i +[1]); + +173 + } +} + +176  + $ci__nd_t_li_loback +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +177 +oo_pkt_p + +hd_id +, + +178 +ci__pkt_fmt +* +_pkt +) + +180 +ci__pkt_fmt +* +pkt +; + +181 +oo_pkt_p + + +; + +183 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +184 + `ci_as +( +ts +-> +s +. +pkt +. +ags + & +CI_IP_CACHE_IS_LOCALROUTE +); + +186 + + = +hd_id +; + +188 +pkt + = + `PKT_CHK +( +ni +, + +); + +189 + + = +pkt +-> +xt +; + +190 +pkt +-> +pf +. +t_tx +. +lo +. +tx_sock + = + `S_SP +( +ts +); + +191 +pkt +-> +pf +. +t_tx +. +lo +. +rx_sock + = +ts +-> +lol_ +; + +192 if + `CI_UNLIKELY +( + `OO_SP_IS_NULL +( +pkt +-> +pf +. +t_tx +. +lo +. +rx_sock +)) ) { + +193 + `ci_tif_pkt_a +( +ni +, +pkt +); + +196 +pkt +-> +xt + = +ni +-> +e +-> +lopkts +; + +197 +ni +-> +e +-> +lopkts + = + `OO_PKT_ID +( +pkt +); + +198 +ni +-> +e +-> +n_lopkts +++; + +199 + `LOG_NT +( + `ci_log +( +NS_FMT + "loback TXk%d%d", + `NS_PRI_ARGS +( +ni +, & +ts +-> +s +), + +200 + `OO_PKT_FMT +( +pkt +), + `OO_SP_FMT +kt-> +pf +. +t_tx +. +lo +. +rx_sock +))); + +201 }  +pkt + ! +_pkt + ); + +204 if + `CI_UNLIKELY +( + `OO_SP_IS_NULL +( +pkt +-> +pf +. +t_tx +. +lo +. +rx_sock +)) ) { + +205 + `ci_t_dr +( +ni +, +ts +, +ECONNRESET +); + +210 if + `SEQ_LE +( +ts +-> +ack_igg +,s-> +rcv_dived +) ) + +211 + `ci_t_nd_ack_loback +( +ni +, +ts +, +CI_FALSE +); + +212 if! +ni +-> +e +-> +_pl + ) + +213 + `ci_tif_pl +( +ni +); + +215 + } +} + +217  + $ci__nd_t_li +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +218 +oo_pkt_p + +hd_id +, +ci__pkt_fmt +* +_pkt +) + +220 +ci__pkt_fmt +* +pkt +; + +222 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +223 + `ci_as +(~ +ts +-> +s +. +pkt +. +ags + & +CI_IP_CACHE_IS_LOCALROUTE +); + +225 if( + `CI_LIKELY + + `ci__che_is_vid +( + `CICP_HANDLE +( +ni +), & +ts +-> +s +. +pkt +) )) { + +226 + +: + +227 #i +CI_CFG_PORT_STRIPING + + +228 if +ts +-> +tags + & +CI_TCPT_FLAG_STRIPE + ) { + +229 + `ci_as +(! ( +ni +-> +ags + & +CI_NETIF_FLAG_MSG_WARM +)); + +230 + `ci__t_li_to_dmaq_rg +( +ni +, +ts +, +hd_id +, +_pkt +); + +234 + `ci__t_li_to_dmaq +( +ni +, +ts +, +hd_id +, +_pkt +); + +237 if( + `CI_UNLIKELY + +ni +-> +ags + & +CI_NETIF_FLAG_MSG_WARM + )) { + +238 + `ci_ur_ve +( +ni +, & +ts +-> +s +. +pkt +, &ts->s. + +); + +242 +pkt + = + `PKT_CHK +( +ni +, +hd_id +); + +243 +hd_id + = +pkt +-> +xt +; + +245 if( +ts +-> +s +. +timeampg_ags + & +ONLOAD_SOF_TIMESTAMPING_TX_HARDWARE +) && + +246 + `CI_TCP_PAYLEN +( + `oo_tx__hdr +( +pkt +), + `TX_PKT_TCP +(pkt)) != 0 ) + +247 +pkt +-> +ags + | +CI_PKT_FLAG_TX_TIMESTAMPED +; + +249 + `ci__nd_t_ow +( +ni +, +ts +, +pkt +); + +250 if +pkt + = +_pkt + ) + +252 if + `ci__che_is_vid +( + `CICP_HANDLE +( +ni +), & +ts +-> +s +. +pkt +) ) + +253  + +; + +256 + } +} + +261  + $ci_t__rcv_wnd +( +ci_t_e +* +ts +, cڡ * +Δ +) + +263 + `t_rcv_wnd_right_edge_ +( +ts + + `t_rcv_nxt +s+s-> +rcv_wdow_max +; + +264 + `ci_t_lc_rcv_wnd +( +ts +, +Δ +); + +265 + } +} + +271 +ci_le +  + $ci_t_tx_t_mss +( +ci_ut8 +** +t +, +ci_ut16 + +amss +) + +273 *(* +t + +CI_TCP_OPT_MSS +; + +274 *(* +t ++1) = 0x4; + +275 *( +ci_ut16 +*)(* +t ++2 + `CI_BSWAP_BE16 +( +amss +); + +276 * +t + += 4; + +278 + } +} + +283 +ci_le +  + $ci_t_tx_t_ws +( +ci_ut8 +** +t +, ci_ut8 +ws +) + +285 *(* +t + +CI_TCP_OPT_WINSCALE +; + +286 *(* +t ++1) = 0x3; + +287 *(* +t ++2 +ws +; + +288 *(* +t ++3 +CI_TCP_OPT_NOP +; + +289 * +t + += 4; + +291 + } +} + +296 +ci_le +  + $ci_t_tx_t_ck_rm +( +ci_ut8 +** +t +) + +298 (* +t +)[0] = +CI_TCP_OPT_SACK_PERM +; + +299 (* +t +)[1] = 0x2; + +300 * +t + += 2; + +302 + } +} + +308  + $ci_t_tx_t_ck +( +ci_ut8 +** +t +,  +ud_ngth +, + +309 +ci_tif +* +tif +, +ci_t_e +* +ts +) + +311 +ci__pkt_queue +* +rob + = & +ts +->rob; + +312 +ci__pkt_fmt +* +pkt +; + +313  +i +, +j + = 0; + +314 +oo_pkt_p + +ud +[ +CI_TCP_SACK_MAX_BLOCKS +]; + +315 +oo_pkt_p + +cid +; + +316 +ci_ut32 + * +ck_blocks +; + +317  +block + = 0; + +318 +ci_ut32 + +t_be32 +, +d_be32 +; + +320 + `ci_as +( +ts +-> +tags + & +CI_TCPT_FLAG_SACK +); + +323 if( + `OO_PP_EQ +( +ts +-> +dck_block +, +OO_PP_INVALID +) && + +324 + `ci__queue_is_emy +( +rob +)) || + +325 +ud_ngth + + 5 + 8 > +CI_TCP_MAX_OPTS_LEN + ){ + +327 +ts +-> +dck_block + = +OO_PP_INVALID +; + +330 *(* +t + + 1*(*t +CI_TCP_OPT_NOP +; + +331 *(* +t + + 2 +CI_TCP_OPT_SACK +; + +332 *(* +t + + 3) = 0x2; + +333 +ck_blocks + = ( +ci_ut32 + *)(* +t + + 4); + +335  + #ADD_SACK_BLOCK +( +id +, +t_u +, +logmesge +) \ + +337 +ck_blocks +[2 * +block +] = +t_be32 +; \ + +338 +ck_blocks +[2 * +block + + 1] = +d_be32 +; \ + +339 +block +++; \ + +340 if +t_u + ) \ + +341 +ud +[ +j +++] = +id +; \ + +342 + `LOG_TL +( + `log +( +LNT_FMT + +logmesge + " %x - %x", + `LNT_PRI_ARGS +( +tif +, +ts +), \ + +343 + `CI_BSWAP_BE32 +( +t_be32 +), CI_BSWAP_BE32( +d_be32 +))); \ + +344 } 0) + + ) + +346 if + `NI_OPTS +( +tif +). +u_dck + && + +347 ! + `OO_PP_EQ +( +ts +-> +dck_block +, +OO_PP_INVALID +) ) { + +348 +t_be32 + = + `CI_BSWAP_BE32 +( +ts +-> +dck_t +); + +349 +d_be32 + = + `CI_BSWAP_BE32 +( +ts +-> +dck_d +); + +350 + `ADD_SACK_BLOCK +( +OO_PP_INVALID +, 0, "DSACKing"); + +351 if! + `OO_PP_EQ +( +ts +-> +dck_block +, +OO_PP_NULL +) && + +352 +ud_ngth + + 4 + 8 * 2 < +CI_TCP_MAX_OPTS_LEN +) { + +353 +pkt + = + `PKT_CHK +( +tif +, +ts +-> +dck_block +); + +354 +t_be32 + = + `PKT_TCP_HDR +( +pkt +)-> +t_q_be32 +; + +355 +d_be32 + = + `CI_BSWAP_BE32 +( + `PKT_TCP_RX_ROB +( +pkt +)-> +d_block_q +); + +356 + `ADD_SACK_BLOCK +( +ts +-> +dck_block +, 1, "DSACK companion SACKing"); + +358 +ts +-> +dck_block + = +OO_PP_INVALID +; + +363  +i + = 0; i < +CI_TCP_SACK_MAX_BLOCKS + && + +364 +ud_ngth + + 4 + 8 * ( +block + + 1< +CI_TCP_MAX_OPTS_LEN +; + +365 +i +++ ) { + +366 if + `OO_PP_NOT_NULL +( +ts +-> +ϡ_ck +[ +i +]) ) { + +367 +pkt + = + `PKT_CHK +( +tif +, +ts +-> +ϡ_ck +[ +i +]); + +368 if +j + > 0 && + `OO_PP_EQ +( + `OO_PKT_P +( +pkt +), +ud +[0]) ) + +370 +t_be32 + = + `PKT_TCP_HDR +( +pkt +)-> +t_q_be32 +; + +371 +d_be32 + = + `CI_BSWAP_BE32 +( + `PKT_TCP_RX_ROB +( +pkt +)-> +d_block_q +); + +372 + `ADD_SACK_BLOCK +( +ts +-> +ϡ_ck +[ +i +], 1, "SACKing (last_sack)"); + +380 +cid + = +rob +-> +hd +; + +381  + `OO_PP_NOT_NULL +( +cid +) && + +382 +ud_ngth + + 4 + 8 * ( +block + + 1< +CI_TCP_MAX_OPTS_LEN + ) { + +383 +pkt + = + `PKT_CHK +( +tif +, +cid +); + +384  +i + = 0; i < +j +; i++ ) { + +385 if + `OO_PP_EQ +( +cid +, +ud +[ +i +]) ) + +386  +xt_block +; + +388 +t_be32 + = + `PKT_TCP_HDR +( +pkt +)-> +t_q_be32 +; + +389 +d_be32 + = + `CI_BSWAP_BE32 +( + `PKT_TCP_RX_ROB +( +pkt +)-> +d_block_q +); + +390 + `ADD_SACK_BLOCK +( +cid +, 1, "SACKing (ROB)"); + +391 +xt_block +: + +392 +cid + = + `PKT_TCP_RX_ROB +( +pkt +)-> +xt_block +; + +395 +ts +-> +ϡ_ck +[0] = +OO_PP_NULL +; + +396  +i + = 0; i < +j +; i++ ) + +397 +ts +-> +ϡ_ck +[ +i + + 1] = +ud +[i]; + +398  ; +i + < +CI_TCP_SACK_MAX_BLOCKS +; i++ ) + +399 +ts +-> +ϡ_ck +[ +i + + 1] = +OO_PP_NULL +; + +400 *(* +t + + 32 + 8 * +block +; + +401 * +t + +4 + 8 * +block +; + +402 + `LOG_TV +( + `log +( +LNT_FMT + "SACKg %d blocks", + `LNT_PRI_ARGS +( +tif +, +ts +), +block +)); + +403  4 + 8 * +block +; + +404 #unde +ADD_SACK_BLOCK + + +405 + } +} + +413 +ci_le +  + +414 + $ci_t_tx_t_urg_r +( +ci_t_e +* +ts +, +ci_tif +* +tif +, +ci_t_hdr +* +t +) + +417 if( + `CI_LIKELY + + `SEQ_GE +( + `t_d_nxt +( +ts ++s-> +d_deged +, + `t_d_up +(ts)) )) { + +418 + `t_d_up +( +ts + + `t_d_u +(ts); + +421 +t +-> +t_ags + | +CI_TCP_FLAG_URG +; + +422 +t +-> +t_urg_r_be16 + = + `t_d_urg_off +( +ts +,- + `NI_OPTS +( +tif +). +urg_rfc +; + +423 +t +-> +t_urg_r_be16 + = + `CI_BSWAP_BE16 +(tcp->tcp_urg_ptr_be16); + +424 + `LOG_URG +( + `ci_log +("%s: snd_nxt=%u, snd_up=%u, urg_off=%u flags=%X", + +425 +__FUNCTION__ +, + `t_d_nxt +( +ts +), + `t_d_up +(ts), + +426 + `CI_BSWAP_BE16 +( +t +-> +t_urg_r_be16 +),-> +t_ags +)); + +428 + } +} + +432 +ci_le +  + $ci_t_tx_cwv_id +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +434 #i +CI_CFG_CONGESTION_WINDOW_VALIDATION + + +435  +w +, +i +; + +439 +i + = + `ci_t_time_now +( +tif +- +ts +-> +t_ϡ_ +; + +440 if +i + > +ts +-> +o + ) { + +443 +w + = (3* +ts +-> +cwnd +)>>2u; + +444 +ts +-> +shsh + = + `CI_MAX +s->shsh, +w +); + +448 +ts +-> +cwnd + = + `CI_MIN +s->cwnd, + `t_d_wnd +(ts)); + +451 +ts +-> +cwnd + =s->cwnd >> 1u; + +452 +i + - +ts +-> +o +; + +453 }  +i + > +ts +-> +o + ); + +454 #i +CI_CFG_CONGESTION_WINDOW_VALIDATION_DELACK_SCALING + + +456 +ts +-> +cwnd + = + `CI_MAX +s->cwnd,s-> +smss + * 2); + +459 +ts +-> +cwnd + = + `CI_MAX +s->cwnd,s-> +smss +); + +462 +ts +-> +t_ϡ_fu + = + `ci_t_time_now +( +tif +); + +464 +ts +-> +cwnd_ud + = 0; + +465 + `ci_as +( +ts +-> +cwnd + > + `t_eff_mss +(ts)); + +468 + } +} + +470 +ci_le +  + $ci_t_tx_cwv_p_lmtd +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +472 #i +CI_CFG_CONGESTION_WINDOW_VALIDATION + + +473  +w +; + +477 if + `ci_t_ight +( +ts ++s-> +smss + > + `CI_MIN +s-> +cwnd +, + `t_d_wnd +(ts)) ) { + +481 +ts +-> +t_ϡ_fu + = + `ci_t_time_now +( +tif +); + +483 if + `ci_t_ndq_is_emy +( +ts +) ) { + +487 +ts +-> +cwnd_ud + = + `CI_MAX +s->cwnd_ud, + `ci_t_ight +(ts)); + +490 if + `ci_t_time_now +( +tif +- +ts +-> +t_ϡ_fu + >s-> +o + ) { + +492 +w + = (3* +ts +-> +cwnd +) >> 2u; + +493 +ts +-> +shsh + = + `CI_MAX +s->shsh, +w +); + +498 +w + = + `CI_MIN +( +ts +-> +cwnd +, + `t_d_wnd +(ts)); + +500 +ts +-> +cwnd + = + `CI_MAX +s-> +smss +, ( +w ++ts-> +cwnd_ud +) >> 1u); + +501 + `ci_as +( +ts +-> +cwnd + > + `t_eff_mss +(ts)); + +503 +ts +-> +t_ϡ_fu + = + `ci_t_time_now +( +tif +); + +505 +ts +-> +cwnd_ud + = 0; + +509 + } +} + +512  + $ci_t_tx_t_q_d +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +513 +ci__pkt_queue +* +q +) + +515 +ci__pkt_fmt +* +pkt +; + +516 +oo_pkt_p + +id +; + +517 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +523  +id + = +q +-> +hd +; + `OO_PP_NOT_NULL +(id); id = +pkt +-> +xt + ) { + +524 +pkt + = + `PKT_CHK +( +ni +, +id +); + +525 + `ci_t_tx_pkt_t_d +( +ts +, +pkt +); + +527 + } +} + +530  + $ci_t_tx_chge_mss +( +ci_tif +* +ni +, +ci_t_e +* +ts +) + +532  +ev_eff_mss + = + `t_eff_mss +( +ts +); + +533 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +535 + `ci_t_t_eff_mss +( +ni +, +ts +); + +537 + `LOG_TL +( + `ci_log +( +LNTS_FMT + "%s: befe=%d=%d", + `LNTS_PRI_ARGS +( +ni +, +ts +), + +538 +__FUNCTION__ +, +ev_eff_mss +, + `t_eff_mss +( +ts +))); + +540 + `ci_t_tx_t_q_d +( +ni +, +ts +, &ts-> +nd +); + +541 + `ci_t_tx_t_q_d +( +ni +, +ts +, &ts-> +s +); + +543 if + `t_eff_mss +( +ts +< ( +ev_eff_mss + && + +544 ! + `ci__queue_is_emy +(& +ts +-> +s +) ) { + +547 +ts +-> +cge + = +CI_TCP_CONG_RTO_RECOV +; + +548 +ts +-> +cwnd_exa + = 0; + +549 + `ci_t_r_cks +( +ni +, +ts +); + +550 +ts +-> +cgcov + = + `t_d_nxt +(ts); + +551 + `ci_t_o_t +( +ni +, +ts +); + +552 + `ci_t_s_cov +( +ni +, +ts +, 0); + +554 + } +} + +557  + $ci_t_tx__syn_tis +( +ci_tif +* +ni +, +ci_ut16 + +amss +, + +558  +tags +,  +rcv_ws +, + +559 +ci_ut8 +** +t +) + +561  +ݎ + = 0; + +564 +ݎ + + + `ci_t_tx_t_mss +( +t +, +amss +); + +567 if +tags + & +CI_TCPT_FLAG_WSCL + ) + +568 +ݎ + + + `ci_t_tx_t_ws +( +t +, ( +ci_ut8 +) +rcv_ws +); + +571 if +tags + & +CI_TCPT_FLAG_SACK + ) + +572 +ݎ + + + `ci_t_tx_t_ck_rm +( +t +); + +574 #i +CI_CFG_PORT_STRIPING + + +575 if +tags + & +CI_TCPT_FLAG_STRIPE + ) { + +576 (* +t +)[0] = ( +ci_ut8 + + `NI_OPTS +( +ni +). +re_t_t +; + +577 (* +t +)[1] = 2; + +578 * +t + += 2; + +579 +ݎ + += 2; + +584  +ݎ + & 3 ) { + +585 *(* +t +)++ = +CI_TCP_OPT_END +; + +586 ++ +ݎ +; + +589  +ݎ +; + +590 + } +} + +597  + $ci_t_queue_no_da +( +ci_t_e +* +ts +, +ci_tif +* +tif +, + +598 +ci__pkt_fmt +* +pkt +) + +600 +ci_t_hdr +* +thdr +; + +601  +ݎ + = + `t_outgog_ts_n +( +ts +); + +603 + `ci_as +( +ts +); + +604 + `ci_as +( +tif +); + +605 + `ASSERT_VALID_PKT_ID +( +tif +, + `OO_PKT_P +( +pkt +)); + +607 + `ci_as +( +pkt +-> +fcou + == 1 ); + +608 + `ci_as +( + `TS_TCP +( +ts +)-> +t_ags + & ( +CI_TCP_FLAG_SYN +| +CI_TCP_FLAG_FIN +)); + +610 + `oo_tx_pkt_yout_ +( +pkt +); + +611 + `ci_pkt__om_che +( +pkt +, & +ts +-> +s +.pkt); + +614 +thdr + = + `PKT_TCP_HDR +( +pkt +); + +615 if + `TS_TCP +( +ts +)-> +t_ags + & +CI_TCP_FLAG_SYN + ) { + +616 +ci_ut8 +* +t + = + `CI_TCP_HDR_OPTS +( +thdr +); + +617 +t + + +ݎ +; + +618 +ݎ + + + `ci_t_tx__syn_tis +( +tif +, +ts +-> +amss +, + +619 +ts +-> +tags +,s-> +rcv_ws +, & +t +); + +623 + `ci_t_t_t_timg +( +tif +, +ts +, + `t_q_nxt +(ts)); + +626 + `CI_TCP_HDR_SET_LEN +( +thdr +, (*thdr+ +ݎ +); + +628 +pkt +-> +buf_n + =kt-> +y_n + = + +629 + `oo_h_hdr_size +( +pkt ++ ( +ci_4_hdr ++ ( +ci_t_hdr ++ +ݎ +; + +630 + `oo_offbuf_ +(& +pkt +-> +buf +, + `PKT_START +kt+kt-> +buf_n +, 0); + +631 +pkt +-> +ags + & +CI_PKT_FLAG_NONB_POOL +; + +632 + `ASSERT_VALID_PKT +( +tif +, +pkt +); + +634 +pkt +-> +pf +. +t_tx +. +t_q + = + `t_q_nxt +( +ts +); + +635 + `t_q_nxt +( +ts +) += 1; + +636 +pkt +-> +pf +. +t_tx +. +d_q + = + `t_q_nxt +( +ts +); + +637 +pkt +-> +pf +. +t_tx +. +block_d + = +OO_PP_NULL +; + +639 + `ci__queue_queue +( +tif +, & +ts +-> +nd +, +pkt +); + +640 ++ +ts +-> +nd_ +; + +642 + `LOG_TC +( + `log +( +LNTS_FMT + "queu[" +CI_TCP_FLAGS_FMT +"] seq=%x", + +643 + `LNTS_PRI_ARGS +( +tif +, +ts +), + +644 + `CI_TCP_HDR_FLAGS_PRI_ARG +( + `TX_PKT_TCP +( +pkt +)), + `t_q_nxt +( +ts +) - 1)); + +646 + `ci_t_tx_adv +( +ts +, +tif +); + +647 + } +} + +650  + $ci_t_nd_sim_syck +( +ci_tif +* +tif +, +ci_t_e + * +ts +) + +652 +ci__pkt_fmt +* +pkt +; + +653 +ci_t_hdr +* +t +; + +654  +ݎ + = 0; + +655 +ci_ut8 +* +t +; + +657 + `ci_as +( +tif +); + +658 + `ci_as +( +ts +); + +661 + `ci_as +(! + `ci__queue_is_emy +(& +ts +-> +s +)); + +662 + `ci_as +( + `ci__queue_is_vid +( +tif +, & +ts +-> +s +)); + +664 +pkt + = + `PKT_CHK +( +tif +, +ts +-> +s +. +hd +); + +665 +t + = + `TX_PKT_TCP +( +pkt +); + +668 + `ci_as +( +t +-> +t_ags + & +CI_TCP_FLAG_SYN +); + +674 if +pkt +-> +ags + & +CI_PKT_FLAG_TX_PENDING + ) { + +675 + `LOG_U +( + `ci_log +( +LNT_FMT + + +677 + `LNT_PRI_ARGS +( +tif +, +ts +), + `S_FMT +s), +pkt +-> +pf +. +t_tx +. +t_q +, + +678 +pkt +-> +pf +. +t_tx +. +d_q +)); + +683 +t + = + `CI_TCP_HDR_OPTS +( +t +); + +684 if +ts +-> +tags + & +CI_TCPT_FLAG_TSO + ) + +685 +ݎ + + + `ci_t_tx_t_tso +(& +t +, + `ci_t_time_now +( +tif +), 0); + +687 +ݎ + + + `ci_t_tx__syn_tis +( +tif +, +ts +-> +amss +, + +688 +ts +-> +tags +,s-> +rcv_ws +, & +t +); + +690 + `CI_TCP_HDR_SET_LEN +( +t +, (*t+ +ݎ +); + +691 +t +-> +t_ags + | +CI_TCP_FLAG_ACK +; + +693 + `oo_offbuf_ +(& +pkt +-> +buf +, + +694 ( +ut8_t +* + `oo_tx__da +( +pkt ++ ( +ci_t_hdr ++ +ݎ +, + +697 + `LOG_TC +( + `log +( +LNTS_FMT + "simuɪeouSYN-ACK [" +CI_TCP_FLAGS_FMT +"]", + +698 + `LNTS_PRI_ARGS +( +tif +, +ts +), + +699 + `CI_TCP_HDR_FLAGS_PRI_ARG +( + `TX_PKT_TCP +( +pkt +)))); + +702 +pkt +-> +buf_n + =kt-> +y_n + = + +703 ( +ci_t32 +)( + `oo_offbuf_r +(& +pkt +-> +buf +- + `PKT_START +(pkt)); + +706 + `ci_t_s_e +( +ts +, +tif +, +pkt +); + +708 + } +} + +718  + $ci_t_syecv_nd +( +ci_tif +* +tif +, +ci_t_sock_li +* +s +, + +719 +ci_t_e_syecv +* +t +, + +720 +ci__pkt_fmt +* +pkt +, +ci_ut8 + +t_ags +, + +721 +ci__ched_hdrs +* +che +) + +723 +ci__ched_hdrs + +che_age +; + +724 +ci_t_hdr +* +thdr +; + +725 +ci_4_hdr +* +hdr +; + +726 +ci_ut8 +* +t +; + +727 +ci_ut32 + +q +; + +728  +rc +, +ݎ +; + +730 + `ci_as +( +tif +); + +731 + `ci_as +( +s +); + +733 + `ci_as +( +s +-> +s +. +b +. +e + = +CI_TCP_LISTEN + ||ls->s.b.= +CI_TCP_CLOSED +); + +734 + `ci_as +( +t +); + +735 if +che + ! +NULL + ) { + +736 + `ci_as +( +che +-> +us + = +rc_sucss + || + +737 +che +-> +us + = +rc_nomac + || + +738 ( +che +-> +us + = +rc_loou + && + +739 ( +che +-> +ags + & +CI_IP_CACHE_IS_LOCALROUTE +))); + +740 + `ci_as_equ +( +che +-> + +. +_daddr_be32 +, +t +-> +r_addr +); + +741 + `ci_as_equ +( +che +-> +_ddr_be32 +, +t +-> +l_addr +); + +742 + `ci_as_equ +( +che +-> +dpt_be16 +, +t +-> +r_pt +); + +745 + `LOG_TC +( + `log +( +LNT_FMT + "SYNRECV [" +CI_TCP_FLAGS_FMT +"] isn=%08x " + +746 "rcv=%08x-%08x", + `LNT_PRI_ARGS +( +tif +, +s +), + +747 + `CI_TCP_FLAGS_PRI_ARG +( +t_ags +), + +748 +t +-> +d_i +,-> +rcv_nxt +, + +749 +t +-> +rcv_nxt + + + +750 + `ci_t_rcvbuf2wdow +( +s +-> +s +. +so +. +rcvbuf +, +t +-> +amss +, + +751 +t +-> +rcv_ws +))); + +753 + `ci_as +( +pkt +); + +756 + `oo_tx_pkt_yout_ +( +pkt +); + +757 + `oo_tx_h_ty_t +( +pkt +, +CI_ETHERTYPE_IP +); + +758 +hdr + = + `oo_tx__hdr +( +pkt +); + +759 + `ci__hdr__fixed +( +hdr +, +IPPROTO_TCP +, +CI_IP_DFLT_TTL +, +CI_IP_DFLT_TOS +); + +760 +hdr +-> +_ddr_be32 + = +t +-> +l_addr +; + +761 +hdr +-> +_daddr_be32 + = +t +-> +r_addr +; + +766 +q + = ( +t_ags + & +CI_TCP_FLAG_SYN +? +t +-> +d_i + :sr->snd_isn + 1; + +768 +thdr + = + `PKT_TCP_HDR +( +pkt +); + +769 +thdr +-> +t_urg_r_be16 + = 0; + +770 +thdr +-> +t_sour_be16 + = + `sock_t_be16 +(& +s +-> +s +); + +771 +thdr +-> +t_de_be16 + = +t +-> +r_pt +; + +772 +thdr +-> +t_q_be32 + = + `CI_BSWAP_BE32 +( +q +); + +773 +thdr +-> +t_ack_be32 + = + `CI_BSWAP_BE32 +( +t +-> +rcv_nxt +); + +774 +thdr +-> +t_ags + =cp_flags; + +777 +t + = + `CI_TCP_HDR_OPTS +( +thdr +); + +778 +ݎ + = 0; + +781 if +t +-> +tts +. +ags + & +CI_TCPT_FLAG_TSO + ) { + +782  +now +; + +783 if +t +-> +tts +. +ags + & +CI_TCPT_FLAG_SYNCOOKIE + ) + +784 +now + = +t +-> +time +; + +786 +now + = + `ci_t_time_now +( +tif +); + +787 +ݎ + + + `ci_t_tx_t_tso +(& +t +, +now +, +t +-> +tr +); + +790 if +che + = +NULL + ) { + +791 +che + = & +che_age +; + +792 + `ci__nd_pkt_lookup +( +tif +, & +s +-> +s +. + +, +pkt +, +che +); + +793 if( +t +-> +s + & +CI_FLAG_TSR_RETRIES_MASK +) > 0 ) + +794 + `ci__che_mac_upde +( +tif +, +che +, 0); + +797 if( +t_ags + & +CI_TCP_FLAG_SYN +) && + +798 ( +che +-> +us + = +rc_sucss + || + +799 +che +-> +us + = +rc_nomac + || + +800 + `OO_SP_NOT_NULL +( +t +-> +lol_ +)) ) { + +801 +t +-> +amss + = +che +-> +mtu + - ( +ci_t_hdr +- ( +ci_4_hdr +); + +802 #i +CI_CFG_LIMIT_AMSS + + +803 +t +-> +amss + = + `ci_t_lim_mss +Ѥ->amss, +tif +, +__FUNCTION__ +); + +805 +ݎ + + + `ci_t_tx__syn_tis +( +tif +, +t +-> +amss +, + +806 +t +-> +tts +. +ags +, + +807 +t +-> +rcv_ws +, & +t +); + +813 +thdr +-> +t_wdow_be16 + = + `ci_t_rcvbuf2wdow +( +s +-> +s +. +so +. +rcvbuf +, + +814 +t +-> +amss +,-> +rcv_ws +); + +815 +thdr +-> +t_wdow_be16 + = + `CI_BSWAP_BE16 +(thdr->tcp_window_be16); + +817 +hdr +-> +_check_be16 + = 0; + +818 +hdr +-> +_id_be16 + = 0; + +819 + `ci_t__hdr_ +( +hdr +, ( +ci_4_hdr ++ ( +ci_t_hdr ++ +ݎ +); + +820 + `CI_TCP_HDR_SET_LEN +( +thdr +, (*thdr+ +ݎ +); + +822 +pkt +-> +buf_n + =kt-> +y_n + = + +823 + `oo_h_hdr_size +( +pkt ++ ( +ci_4_hdr ++ ( +ci_t_hdr ++ +ݎ +; + +825 if + `OO_SP_NOT_NULL +( +t +-> +lol_ +) ) { + +826 + `ci__lol_nd +( +tif +, +pkt +, + `S_SP +( +s +), +t +-> +lol_ +); + +827 +rc + = 0; + +830 +rc + = + `ci__nd_pkt_nd +( +tif +, +pkt +, +che +); + +831 + `ci_tif_pkt_a +( +tif +, +pkt +); + +833 if( + `CI_UNLIKELY + +rc + != 0 )) + +834 + `CITP_STATS_NETIF +(++ +tif +-> +e +-> +s +. +syecv_nd_s +); + +836 + `CI_TCP_STATS_INC_OUT_SEGS +( +tif +); + +837  +rc +; + +838 + } +} + +843  + $ci_t_s_e +( +ci_t_e +* +ts +, +ci_tif +* +tif +, +ci__pkt_fmt +* +pkt +) + +845 +ci_t_hdr +* +t +; + +846 +ci_4_hdr +* +hdr +; + +847 + `ci_as +( +ts +); + +848 + `ci_as +( +tif +); + +851 if +pkt +-> +ags + & +CI_PKT_FLAG_TX_PENDING + )  1; + +859 if + `NI_OPTS +( +tif +). +r_dayed_cn + && + +860 +ts +-> +cge + = +CI_TCP_CONG_FAST_RECOV + ) + +863 + `CITP_STATS_NETIF_INC +( +tif +, +sms +); + +864 ++ +ts +-> +s +. +tٮ_s +; + +866 +hdr + = + `oo_tx__hdr +( +pkt +); + +867 +t + = + `TX_PKT_TCP +( +pkt +); + +872 + `ci_as +( + `SEQ_LT +( +pkt +-> +pf +. +t_tx +. +t_q +, + `t_d_nxt +( +ts +)) && + +873 + `SEQ_LE +( +pkt +-> +pf +. +t_tx +. +d_q +, + `t_d_nxt +( +ts +))); + +875 #ide +NDEBUG + + +879 i(!( +t +-> +t_ags + & ( +CI_TCP_FLAG_SYN +| +CI_TCP_FLAG_FIN +))) + +880 + `ci_as_equ +( + `TX_PKT_LEN +( +pkt +- + `oo_h_hdr_size +(pkt) - + +881 ( +ci_4_hdr +- ( +ci_t_hdr +) - + +882 + `CI_TCP_HDR_OPT_LEN +( +t +), + +883 + `SEQ_SUB +( +pkt +-> +pf +. +t_tx +. +d_q +,kt->pf.t_tx. +t_q +)); + +887 + `ci_t_tx_fish +( +tif +, +ts +, +pkt +); + +890 + `ci_t_tx_t_urg_r +( +ts +, +tif +, +t +); + +893 + `ci_t_lc_rcv_wnd +( +ts +, "retrans_one"); + +896 +t +-> +t_ack_be32 + = + `CI_BSWAP_BE32 +( + `t_rcv_nxt +( +ts +)); + +897 +t +-> +t_wdow_be16 + = + `TS_TCP +( +ts +)->tcp_window_be16; + +899 + `ci_t__hdr_ +( +hdr +, + `TX_PKT_LEN +( +pkt +- + `oo_h_hdr_size +(pkt)); + +901 + `LOG_TL +( + `log +( +LNT_FMT + "RETRANSMIT id=%d [" +CI_TCP_FLAGS_FMT +"] s=%08x-%08x " + +902 "yn=%d", + `LNT_PRI_ARGS +( +tif +, +ts +), + `OO_PKT_FMT +( +pkt +), + +903 + `CI_TCP_HDR_FLAGS_PRI_ARG +( +t +), +pkt +-> +pf +. +t_tx +. +t_q +, + +904 +pkt +-> +pf +. +t_tx +. +d_q +, + +905 + `CI_BSWAP_BE16 +( +hdr +-> +_t_n_be16 +) - + +906 ( + `CI_IP4_IHL +( +hdr ++ + `CI_TCP_HDR_LEN +( +t +))); + +907 + `log +( +LNT_FMT +" " +TCP_RCV_FMT +, + +908 + `LNT_PRI_ARGS +( +tif +, +ts +), + `TCP_RCV_PRI_ARG +(ts)); + +909 + `log +( +LNT_FMT +" " +TCP_SND_FMT +, + +910 + `LNT_PRI_ARGS +( +tif +, +ts +), + `TCP_SND_PRI_ARG +(ts))); + +912 #i +CI_CFG_CONGESTION_WINDOW_VALIDATION + + +913 +ts +-> +t_ϡ_ + = + `ci_t_time_now +( +tif +); + +916 if( +pkt +-> +ags + & ( +CI_PKT_FLAG_RTQ_RETRANS + | +CI_PKT_FLAG_TX_TIMESTAMPED +)) == + +917 +CI_PKT_FLAG_TX_TIMESTAMPED + ) + +918 +pkt +-> +pf +. +t_tx +. +f_tx_hw_amp + =kt-> +tx_hw_amp +; + +919 + `ci_t_tx_maybe_do_rg +( +pkt +, +ts +); + +920 + `__ci__nd_t +( +tif +, +pkt +, +ts +); + +921 + `CI_TCP_STATS_INC_OUT_SEGS +( +tif +); + +924 + `CI_TCP_STATS_INC_RETRAN_SEGS + +tif + ); + +925 + `CI_IP_SOCK_STATS_ADD_TXBYTE +( +ts +, + `TX_PKT_LEN +( +pkt +)); + +926 + `CI_IP_SOCK_STATS_INC_RETX + +ts + ); + +928 if( + `CI_UNLIKELY + +ts +-> +s +. +b +. +e + = +CI_TCP_CLOSED + )) + +932 + `ci_as + + `ci__tim_ndg +( +tif +, & +ts +-> +o_tid +) ); + +935 + } +} + +952  + $ci_t_s +( +ci_tif +* +ni +, +ci_t_e +* +ts +,  +q_lim +, + +953  +befe_cked_ly +, * +q_ud +) + +955 +ci__pkt_fmt +* +pkt +; + +956  +_t_of_block + = 0; + +957  +q + = 0; + +960 + `ci_as +( + `OO_PP_NOT_NULL +( +ts +-> +s_r +)); + +962 * +q_ud + = 0; + +963 +pkt + = + `PKT_CHK +( +ni +, +ts +-> +s_r +); + +964 + `LOG_TV +( + `log +( +LPF + "q: %d -> %d ->...-> %d, %dacks", + `OO_PKT_FMT +( +pkt +), + +965 + `OO_PKT_FMT +( +pkt +), + `OO_PP_FMT +( +ts +-> +s +. + +),s->s. +num +)); + +969 if +pkt +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED + ) { + +970 +pkt + = + `PKT_CHK +( +ni +,kt-> +pf +. +t_tx +. +block_d +); + +971 +ts +-> +s_r + = +pkt +-> +xt +; + +972 if + `OO_PP_IS_NULL +( +ts +-> +s_r +) ) ; + +973 +pkt + = + `PKT_CHK +( +ni +, +ts +-> +s_r +); + +974 +ts +-> +s_q + = +pkt +-> +pf +. +t_tx +. +t_q +; + +975 +_t_of_block + = 1; + +976 + `ci_as +(~ +pkt +-> +ags + & +CI_PKT_FLAG_RTQ_SACKED +); + +979 if +_t_of_block + ) + `ci_t_s_cs_block +( +ni +, +ts +, +pkt +); + +981 if + `PKT_TCP_TX_SEQ_SPACE +( +pkt +> + `t_eff_mss +( +ts +) ) { + +985 + `ci_t_r_cks +( +ni +, +ts +); + +986 if + `ci_t_tx_l +( +ni +, +ts +, &ts-> +s +, +pkt +, + `t_eff_mss +(ts), 0) < 0 ) + +991 +q + = + `SEQ_SUB +( +pkt +-> +pf +. +t_tx +. +d_q +,kt->pf.t_tx. +t_q +); + +996 if +befe_cked_ly + && + `OO_PP_IS_NULL +( +pkt +-> +pf +. +t_tx +. +block_d +) ) + +1000 if + `SEQ_LE +( +ts +-> +cgcov +, +pkt +-> +pf +. +t_tx +. +t_q +) )  1; + +1002 #i +CI_CFG_BURST_CONTROL + + +1003 if( +ts +-> +bur_wdow + && + `ci_t_bur_exhaued +( +ni +,s)){ + +1004 + `LOG_TV +( + `log +( +LNT_FMT + "tximited by burstvoidance", + +1005 + `LNT_PRI_ARGS +( +ni +, +ts +))); + +1011 if +q + > +q_lim + )  0; + +1013 if + `ci_t_s_e +( +ts +, +ni +, +pkt +) ) { + +1020 if + `ci__che_is_vid +( + `CICP_HANDLE +( +ni +), & +ts +-> +s +. +pkt +) ) + +1021 + `ci__che_mac_upde +( +ni +, & +ts +-> +s +. +pkt +, 0); + +1023 +pkt +-> +ags + | +CI_PKT_FLAG_RTQ_RETRANS +; + +1024 * +q_ud + + +q +; + +1025 +q_lim + - +q +; + +1026 +ts +-> +s_q + = +pkt +-> +pf +. +t_tx +. +d_q +; + +1027 +ts +-> +s_r + = +pkt +-> +xt +; + +1028 if + `OO_PP_IS_NULL +( +ts +-> +s_r +) ) ; + +1029 +pkt + = + `PKT_CHK +( +ni +, +ts +-> +s_r +); + +1030 +ts +-> +s_q + = +pkt +-> +pf +. +t_tx +. +t_q +; + +1034 + } +} + +1037  + $ci_t_s_cov +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +1038  +f_s_f +) + +1040 +ci__pkt_queue +* +q + = & +ts +-> +s +; + +1041  +befe_cked_ly + = 0; + +1042  +cwnd_ava +, +rc +, +q_ud +; + +1043  +s_da +; + +1044  +ck +; + +1047 + `ci_as +(( +ts +-> +cge + = +CI_TCP_CONG_RTO +) || + +1048 ( +ts +-> +cge + = +CI_TCP_CONG_RTO_RECOV +) || + +1049 ( +ts +-> +cge + = +CI_TCP_CONG_FAST_RECOV + && + +1050 ( +ts +-> +tags + & +CI_TCPT_FLAG_SACK +))); + +1051 + `ci_as +( + `SEQ_LE +( +ts +-> +cgcov +, + `t_d_nxt +(ts))); + +1053 if + `SEQ_LE +( +ts +-> +cgcov +, + `t_d_u +(ts)) ) { + +1054 + `ci_t_coved +( +ni +, +ts +); + +1058 + `ci_as +( + `SEQ_LT +( +ts +-> +s_q +,s-> +cgcov +)); + +1061 if + `SEQ_LT +( +ts +-> +s_q +, + `t_d_u +(ts)) ) { + +1062 +ts +-> +s_r + = +q +-> +hd +; + +1063 +ts +-> +s_q + = + `t_d_u +(ts); + +1069 + `ci_t_g_ck +( +ni +, +ts +, & +ck +, & +s_da +); + +1071 if +ts +-> +cge + = +CI_TCP_CONG_FAST_RECOV + ) { + +1072 +ts +-> +cwnd_exa + = + `SEQ_SUB +( +ck +, + `t_d_u +s)- +s_da +; + +1073 +ts +-> +cwnd_exa + = + `CI_MAX +(ts->cwnd_extra, 0); + +1074 +cwnd_ava + = +ts +-> +cwnd + +s-> +cwnd_exa + - + `ci_t_ight +(ts); + +1075 +befe_cked_ly + = 1; + +1076 if +f_s_f + ) { + +1081 +ci__pkt_fmt +* +pkt + = + `PKT_CHK +( +ni +, +ts +-> +s_r +); + +1082  +n + = + `SEQ_SUB +( +pkt +-> +pf +. +t_tx +. +d_q +,kt->pf.t_tx. +t_q +); + +1083 +cwnd_ava + = + `CI_MAX +(cwnd_ava, +n +); + +1085 #i +CI_CFG_BURST_CONTROL + + +1087 #i +CI_CFG_CONG_AVOID_NOTIFIED + + +1088 +ts +-> +cge + ! +CI_TCP_CONG_OPEN + && + +1090 (! +ts +-> +bur_wdow +&& + `NI_OPTS +( +ni +). +bur_cڌ_lim +) + +1091 +ts +-> +bur_wdow + = + `ci_t_ight +(ts) + + +1092 ( + `NI_OPTS +( +ni +). +bur_cڌ_lim + * + +1093 + `t_eff_mss +( +ts +)-s-> +cwnd_exa +; + +1102 + `ci_as +( +ts +-> +cwnd_exa + == 0); + +1103 +cwnd_ava + = +ts +-> +cwnd + - + `ci_t_ight +(ts); + +1104 +cwnd_ava + + + `SEQ_SUB +( +ts +-> +cgcov +,s-> +s_q +); + +1105 +cwnd_ava + + + `SEQ_SUB +( +ck +, + `t_d_u +( +ts +)); + +1107 +cwnd_ava + = + `CI_MAX +(cwnd_avail, 0); + +1109 + `LOG_TL +( + `log +("%s: %s %s una=%08x cwnd=%05d cwnd_avail=%05d inf=%05d=%05d " + +1110 "b=%05d c=%d", +__FUNCTION__ +, + +1111 +ts +-> +cwnd + +shsh + ? "SS":"CA", + `cge_r +(ts), + +1112 + `t_d_u +( +ts +),s-> +cwnd +, +cwnd_ava +, + `ci_t_ight +(ts), + +1113 + `SEQ_SUB +( +ts +-> +s_q +, + `t_d_u +(ts)), + +1114 + `SEQ_SUB +( +ts +-> +cgcov +,s-> +s_q +), + +1115 + `SEQ_SUB +( + `t_d_nxt +( +ts +),s-> +cgcov +))); + +1117 +rc + = + `ci_t_s +( +ni +, +ts +, +cwnd_ava +, +befe_cked_ly +, & +q_ud +); + +1119 if +ts +-> +cge + = +CI_TCP_CONG_FAST_RECOV + ) { + +1120 + `ci_as +( +q_ud + < +cwnd_ava +); + +1121 +s_da + + +q_ud +; + +1122 +ts +-> +cwnd_exa + = + `SEQ_SUB +( +ck +, + `t_d_u +s)- +s_da +; + +1123 +ts +-> +cwnd_exa + = + `CI_MAX +(ts->cwnd_extra, 0); + +1126 + `ci_as +( + `SEQ_LT +( + `t_d_u +( +ts +),s-> +cgcov +)); + +1128 if +rc + ) +ts +-> +cge + = +CI_TCP_CONG_COOLING +; + +1129 + } +} + +1134  + ~"ci//.h +" + +1135  + $ci_t_tx_adv +( +ci_t_e +* +ts +, +ci_tif +* +ni +) + +1137 +ci__pkt_queue +* +ndq + = & +ts +-> +nd +; + +1138 +ci__pkt_fmt + * +pkt +, * +ϡ_pkt + = 0; + +1139 +ci_t_hdr +* +t +; + +1140 +ci_4_hdr +* + +; + +1141  +cwnd_right_edge +; + +1142  +yn +, +_num + = 0; + +1143 +oo_pkt_p + +id +; + +1145 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +1146 + `ci_as +( + `ci__queue_n_emy +( +ndq +)); + +1147 + `ci_as +( + `OO_PP_NOT_NULL +( +ndq +-> +hd +)); + +1149 + `LOG_TV +( + `ci_log +("%s: " +NTS_FMT + "ndq.num=%d inight=%d", +__FUNCTION__ +, + +1150 + `NTS_PRI_ARGS +( +ni +, +ts +), +ndq +-> +num +, + `ci_t_ight +(ts))); + +1152 if + `CI_UNLIKELY +( +ts +-> +tags + & +CI_TCPT_FLAG_NO_TX_ADVANCE +) ) + +1155 + `ci_t_tx_cwv_id +( +ni +, +ts +); + +1157 #i +CI_CFG_BURST_CONTROL + + +1158 #i +CI_CFG_CONG_AVOID_NOTIFIED + + +1159 if +ts +-> +cge + ! +CI_TCP_CONG_OPEN + && + +1160 (! +ts +-> +bur_wdow +&& + `NI_OPTS +( +ni +). +bur_cڌ_lim + ) + +1162 if(! +ts +-> +bur_wdow +&& + `NI_OPTS +( +ni +). +bur_cڌ_lim + ) + +1164 +ts +-> +bur_wdow + = + `ci_t_ight +(ts) + + +1165 + `NI_OPTS +( +ni +). +bur_cڌ_lim + * + `t_eff_mss +( +ts +); + +1168 if + `OO_SP_NOT_NULL +( +ts +-> +lol_ +) ) + +1169 +cwnd_right_edge + = +ts +-> +d_max +; + +1171 +cwnd_right_edge + = +ts +-> +d_nxt + +s-> +cwnd + +s-> +cwnd_exa + + +1172 - + `ci_t_ight +( +ts +); + +1174 +id + = +ndq +-> +hd +; + +1176 +pkt + = + `PKT_CHK +( +ni +, +id +); + +1177 + + = + `oo_tx__hdr +( +pkt +); + +1180 + `ci_as +( + `SEQ_EQ +( +pkt +-> +pf +. +t_tx +. +t_q +, + `t_d_nxt +( +ts +))); + +1182 +t + = + `TX_PKT_TCP +( +pkt +); + +1183 +yn + = + `PKT_TCP_TX_SEQ_SPACE +( +pkt +); + +1184 if( + `CI_UNLIKELY + +yn + > + `t_eff_mss +( +ts +) )) { + +1185 + `ci_as +(! ( +ni +-> +ags + & +CI_NETIF_FLAG_MSG_WARM +)); + +1186 + `ci_t_tx_l +( +ni +, +ts +, +ndq +, +pkt +, + `t_eff_mss +(ts), 1); + +1191 +yn + = + `PKT_TCP_TX_SEQ_SPACE +( +pkt +); + +1195 if! ( +t +-> +t_ags + & ( +CI_TCP_FLAG_SYN +| +CI_TCP_FLAG_FIN +)) ) { + +1196 + `ci_as_equ +( + `TX_PKT_LEN +( +pkt +- + `oo_h_hdr_size +(pkt) + +1197 - ( +ci_4_hdr +) + +1198 - ( +ci_t_hdr +- + `CI_TCP_HDR_OPT_LEN +( +t +), + +1199 +yn +); + +1200 + `ci_as_ge +( + `CI_TCP_HDR_OPT_LEN +( +t +), + `t_outgog_ts_n +( +ts +)); + +1203 if + `SEQ_GT +( +pkt +-> +pf +. +t_tx +. +d_q +, +ts +-> +d_max +) ) { + +1204 ++ +ts +-> +s +. +tx__rwnd +; + +1207 if + `SEQ_GT +( +pkt +-> +pf +. +t_tx +. +d_q +, +cwnd_right_edge +) ) { + +1208 ++ +ts +-> +s +. +tx__cwnd +; + +1211 #i +CI_CFG_BURST_CONTROL + + +1212 if( + `CI_UNLIKELY + +ts +-> +bur_wdow + && + `ci_t_ight +(ts) > + +1213 +ts +-> +bur_wdow + )) { + +1214 ++ +ts +-> +s +. +tx__bur +; + +1225 if( +pkt +-> +ags + & +CI_PKT_FLAG_TX_MORE +&& + `OO_PP_IS_NULL +kt-> +xt +) && + +1226 +ts +-> +s +. +tx_o + == 0 && + +1227 ( + `PKT_TCP_TX_SEQ_SPACE +( +pkt +< + `t_eff_mss +( +ts +)) && + +1228 ( +pkt +-> +n_bufrs + < +CI_IP_PKT_SEGMENTS_MAX +)) { + +1230 + `ci_as +(! ( +ni +-> +ags + & +CI_NETIF_FLAG_MSG_WARM +)); + +1240 if! + `ci_t_ight +( +ts +) ) { + +1241 + `ci_as +( + `ci__queue_is_emy +(& +ts +-> +s +)); + +1242 + `ci_as +(!( +ts +-> +s +. +b +. +e + & +CI_TCP_STATE_NO_TIMERS +)); + +1248 if + `ci__tim_ndg +( +ni +, & +ts +-> +ck_tid +) ) + +1249 + `ci__tim_modify +( +ni +, & +ts +-> +ck_tid +, + `ci_t_time_now +(ni) + + +1250 ( + `NI_CONF +( +ni +). +tcڡ_dack + << 1)); + +1252 + `ci__tim_t +( +ni +, & +ts +-> +ck_tid +, + `ci_t_time_now +(ni) + + +1253 ( + `NI_CONF +( +ni +). +tcڡ_dack + << 1)); + +1257 +pkt +-> +ags + &~ +CI_PKT_FLAG_TX_MORE +; + +1258 ++ +ts +-> +s +. +tx__me +; + +1262 #i +CI_CFG_CONG_AVOID_NOTIFIED + + +1264 if + `ef_vi_sm_fl_v +(& +ni +-> + +> + `NI_OPTS +i). +cg_nify_thsh + + +1265 && +ts +-> +cge + = +CI_TCP_CONG_OPEN + ) { + +1266 +ts +-> +cge + = +CI_TCP_CONG_NOTIFIED +; + +1267 +ts +-> +cgcov + = + `t_d_nxt +(ts); + +1274 + `ci_t_lc_rcv_wnd +( +ts +, "tx_advance"); + +1277 + `ci_t_tx_fish +( +ni +, +ts +, +pkt +); + +1280 + `ci_t__hdr_ +( + +, + `TX_PKT_LEN +( +pkt +- + `oo_h_hdr_size +(pkt)); + +1283 + `ci_t_tx_t_urg_r +( +ts +, +ni +, +t +); + +1286 +t +-> +t_ack_be32 + = + `CI_BSWAP_BE32 +( + `t_rcv_nxt +( +ts +)); + +1287 +t +-> +t_wdow_be16 + = + `TS_TCP +( +ts +)->tcp_window_be16; + +1288 + `ci_t_tx_maybe_do_rg +( +pkt +, +ts +); + +1290 + `LOG_TT +( + `log +( +LNTS_FMT + +RCV_WND_FMT + " snd=%08x-%08x-%08xnq=%08x", + +1291 + `LNTS_PRI_ARGS +( +ni +, +ts +), + `RCV_WND_ARGS +(ts), + +1292 + `t_d_u +( +ts +), + `t_d_nxt +s),s-> +d_max +, + `t_q_nxt +(ts)); + +1293 + `log +( +LNT_FMT + "[" +CI_TCP_FLAGS_FMT +"] id=%d s=%08x-%08x=%08x w=%u " + +1294 "yn=%d", + `LNT_PRI_ARGS +( +ni +, +ts +), + +1295 + `CI_TCP_HDR_FLAGS_PRI_ARG +( +t +), + +1296 + `OO_PKT_FMT +( +pkt +), ( + `CI_BSWAP_BE32 +( +t +-> +t_q_be32 +), + +1297 +pkt +-> +pf +. +t_tx +. +d_q +, + +1298 ( + `CI_BSWAP_BE32 +( +t +-> +t_ack_be32 +), + +1299 ( + `CI_BSWAP_BE16 +( +t +-> +t_wdow_be16 +), + +1300 + `CI_BSWAP_BE16 +( + +-> +_t_n_be16 +) - + +1301 ( + `CI_IP4_IHL +( + ++ + `CI_TCP_HDR_LEN +( +t +)))); + +1303 + `t_d_nxt +( +ts + +pkt +-> +pf +. +t_tx +. +d_q +; + +1304 +_num +++; + +1305 + `CI_TCP_STATS_INC_OUT_SEGS +( +ni +); + +1306 +ϡ_pkt + = +pkt +; + +1309 + `ci_as +! ( +pkt +-> +ags + & +CI_PKT_FLAG_TX_PENDING +)); + +1310 + `ci_as_equ +( +pkt +-> +ags + & ~ +CI_PKT_FLAG_TX_MASK_ALLOWED +, 0); + +1312 + `CI_IP_SOCK_STATS_ADD_TXBYTE +( +ts +, + `TX_PKT_LEN +( +pkt +)); + +1314 if + `OO_PP_IS_NULL +( +pkt +-> +xt +) ) { + +1315 ++ +ts +-> +s +. +tx__p +; + +1318 +id + = +pkt +-> +xt +; + +1321 if +ni +-> +ags + & +CI_NETIF_FLAG_MSG_WARM + ) + +1322 + `ci_as +( +_num + == 1); + +1324 if +_num + != 0 ) { + +1325 + `LOG_TT +( + `log +( +LNT_FMT + "%dackets sent inx_advance: from %do %d", + +1326 + `LNT_PRI_ARGS +( +ni +, +ts +), +_num +, + `OO_PP_FMT +( +ndq +-> +hd +), + +1327 + `OO_PKT_FMT +( +ϡ_pkt +))); + +1329 if +ts +-> +s +. +pkt +. +ags + & +CI_IP_CACHE_IS_LOCALROUTE + ) { + +1330 +oo_pkt_p + +hd + = +ndq +->head; + +1331 + `ci_as +(! ( +ni +-> +ags + & +CI_NETIF_FLAG_MSG_WARM + )); + +1334 +ndq +-> +hd + = +ϡ_pkt +-> +xt +; + +1335 +ndq +-> +num + - +_num +; + +1336 +ts +-> +nd_out + + +_num +; + +1337 + `ci_as_equiv +( + `ci__queue_n_emy +( +ndq +), + +1338 + `OO_PP_NOT_NULL +( +ndq +-> +hd +)); + +1341 i + `ci_t_tx_advti_a +( +ni +, +ts +) ) + +1342 + `ci_t_wake_possibly_n__pl +( +ni +, +ts +, +CI_SB_FLAG_WAKE_TX +); + +1344 if +ts +-> +tags + & +CI_TCPT_FLAG_LOOP_DEFERRED + ) { + +1345 +ci__pkt_fmt + * +pkt + = + `PKT_CHK +( +ni +, +hd +); + +1346 +hd + = +pkt +-> +xt +; + +1347 + `ci__lol_nd +( +ni +, +pkt +, + `S_SP +( +ts +),s-> +lol_ +); + +1351 + `ci_tif_pl +( +ni +); + +1352 +ts +-> +tags + &~ +CI_TCPT_FLAG_LOOP_DEFERRED +; + +1354 if + `OO_PP_NOT_NULL +( +hd +) ) + +1355 + `ci__nd_t_li_loback +( +ni +, +ts +, +hd +, +ϡ_pkt +); + +1358 + `ci__nd_t_li_loback +( +ni +, +ts +, +hd +, +ϡ_pkt +); + +1362 + `ci__nd_t_li +( +ni +, +ts +, +ndq +-> +hd +, +ϡ_pkt +); + +1363 if( + `CI_UNLIKELY + +ni +-> +ags + & +CI_NETIF_FLAG_MSG_WARM + )) + +1372 if( + `CI_UNLIKELY + +ts +-> +s +. +b +. +e + = +CI_TCP_CLOSED + )) { + +1375 + `ci_as_equ +( +_num +, 1); + +1378 + `ci__queue_move +( +ni +, +ndq +, & +ts +-> +s +, +ϡ_pkt +, +_num +); + +1379 +ts +-> +nd_out + + +_num +; + +1382 if + `NI_OPTS +( +ni +). +t_dbuf_mode + == 0 && + +1383 + `ci_t_tx_advti_a +( +ni +, +ts +) ) + +1384 + `ci_t_wake_possibly_n__pl +( +ni +, +ts +, +CI_SB_FLAG_WAKE_TX +); + +1386 #i +CI_CFG_CONGESTION_WINDOW_VALIDATION + + +1387 +ts +-> +t_ϡ_ + = + `ci_t_time_now +( +ni +); + +1390 + `ci_t_kive_check_d_r +( +ni +, +ts +); + +1391 + `ci_t_o_check_d_t +( +ni +, +ts +); + +1392 + `ci_t_dack_r +( +ni +, +ts +); + +1393 +ts +-> +acks_ndg + = 0; + +1395 #i +CI_CFG_TAIL_DROP_PROBE + + +1396 if( + `NI_OPTS +( +ni +). +_dr_obe + && + +1397 +ts +-> +dr_e + = +CI_TCP_TAIL_DROP_PRIMED +){ + +1399 +ts +-> +dr_e + = +CI_TCP_TAIL_DROP_ACTIVE +; + +1400 + `ci_t_dr_r +( +ni +, +ts +); + +1404 if( +ts +-> +dr_e + = +CI_TCP_TAIL_DROP_ACTIVE + + +1405 && +ts +-> +s +. +num + > 1){ + +1407 +ts +-> +dr_mk + = + `CI_BSWAP_BE32 +( + `TX_PKT_TCP +( +ϡ_pkt +)-> +t_q_be32 +); + +1408 +ts +-> +dr_e + = +CI_TCP_TAIL_DROP_PRIMED +; + +1409 + `ci_t_dr_check_d_t +( +ni +, +ts +); + +1415 + `ci_t_tx_cwv_p_lmtd +( +ni +, +ts +); + +1416 + } +} + +1421  + $ci_t_nd_r +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +1423 +ci__pkt_fmt +* +pkt +; + +1424 +ci_t_hdr +* +t +; + +1426 +pkt + = + `ci_tif_pkt_loc +( +tif +); + +1427 if + `CI_UNLIKELY +(! +pkt +) ) { + +1428 + `CI_TCP_EXT_STATS_INC_TCP_ABORT_FAILED + +tif + ); + +1429 + `LOG_U +( + `log +( +LNTS_FMT + "%s: out ofkt buffers, RSTot sent", + +1430 + `LNTS_PRI_ARGS +( +tif +, +ts +), +__FUNCTION__ +)); + +1434 + `oo_tx_pkt_yout_ +( +pkt +); + +1435 + `ci_pkt__om_che +( +pkt +, & +ts +-> +s +.pkt); + +1436 + `ci_t__hdr_ +( + `oo_tx__hdr +( +pkt +), ( +ci_4_hdr +)+( +ci_t_hdr +)); + +1438 +t + = + `TX_PKT_TCP +( +pkt +); + +1439 +t +-> +t_urg_r_be16 + = 0; + +1440 +t +-> +t_ags + = +CI_TCP_FLAG_RST + | +CI_TCP_FLAG_ACK +; + +1441 +t +-> +t_q_be32 + = + `CI_BSWAP_BE32 +( + `t_d_nxt +( +ts ++s-> +d_deged +); + +1442 +t +-> +t_ack_be32 + = + `CI_BSWAP_BE32 +( + `t_rcv_nxt +( +ts +)); + +1443 +t +-> +t_wdow_be16 + = 0; + +1444 + `CI_TCP_HDR_SET_LEN +( +t +, ( +ci_t_hdr +)); + +1446 + `LOG_TV +( + `log +( +LNT_FMT + "RST %s:%u->%s:%u s=%08x=%08x", + +1447 + `LNT_PRI_ARGS +( +tif +, +ts +), + +1448 + `_addr_r +( + `oo_tx__hdr +( +pkt +)-> +_ddr_be32 +), + +1449 ( + `CI_BSWAP_BE16 +( +t +-> +t_sour_be16 +), + +1450 + `_addr_r +( + `oo_tx__hdr +( +pkt +)-> +_daddr_be32 +), + +1451 ( + `CI_BSWAP_BE16 +( +t +-> +t_de_be16 +), + +1452 ( + `CI_BSWAP_BE32 +( +t +-> +t_q_be32 +), + +1453 ( + `CI_BSWAP_BE32 +( +t +-> +t_ack_be32 +))); + +1455 +pkt +-> +buf_n + =kt-> +y_n + = + +1456 + `oo_h_hdr_size +( +pkt ++ ( +ci_4_hdr ++ ( +ci_t_hdr +); + +1457 + `ci__nd_t +( +tif +, +pkt +, +ts +); + +1458 + `CI_TCP_STATS_INC_OUT_SEGS +( +tif +); + +1459 + `CI_IP_SOCK_STATS_ADD_TXBYTE +( +ts +, +pkt +-> +buf_n +); + +1460 + `ci_tif_pkt_a +( +tif +, +pkt +); + +1462 + `CI_TCP_STATS_INC_OUT_RSTS + +tif + ); + +1463 + } +} + +1465 #ifde +__KERNEL__ + + +1466  + $ci_t_t_urued +( +ci_tif + * +tif +, +ci_t_e + * +ts +) + +1468 +ci_4_hdr + * + +; + +1469 +ci_t_hdr + * +t +; + +1470  +rc +, +_n +; + +1474 if + `OO_SP_NOT_NULL +( +ts +-> +lol_ +) ) + +1477 + + = + `ci_loc +(( +ci_t_hdr ++ ( +ci_4_hdr +)); + +1478 if! + + ) + +1479  - +ENOMEM +; + +1482 if +ts +-> +outgog_hdrs_n + < ( +ci_t_hdr ++ ( +ci_4_hdr +) || + +1483 +ts +-> +s +. +pkt +. + +. +_ihl_vsi + != + +1484 + `CI_IP4_IHL_VERSION +( +ci_4_hdr +) ) || + +1485 +ts +-> +s +. +pkt +. + +. +_oc + ! +IPPROTO_TCP + || + +1486 +ts +-> +s +. +pkt +. + +. +_ag_off_be16 + ! +CI_IP4_FRAG_DONT + ) + +1487  - +EFAULT +; + +1489 + `memy +( + +, & +ts +-> +s +. +pkt +., ( +ci_4_hdr +)); + +1490 +_n + = ( +ci_4_hdr ++ ( +ci_t_hdr +); + +1491 + +-> +_t_n_be16 + = + `CI_BSWAP_BE16 +( +_n +); + +1492 + `ci_as_equ +( + +-> +_check_be16 +, 0); + +1493 + `ci_as_equ +( + +-> +_id_be16 +, 0); + +1495 +t + = ( +ci_t_hdr + *)( + + + 1); + +1496 +t +-> +t_urg_r_be16 + = 0; + +1497 +t +-> +t_ags + = +CI_TCP_FLAG_RST +; + +1498 +t +-> +t_q_be32 + = + `CI_BSWAP_BE32 +( + `t_d_nxt +( +ts +)); + +1499 +t +-> +t_ack_be32 + = + `CI_BSWAP_BE32 +( + `t_rcv_nxt +( +ts +)); + +1500 +t +-> +t_sour_be16 + = + `t_t_be16 +( +ts +); + +1501 +t +-> +t_de_be16 + = + `t_t_be16 +( +ts +); + +1502 +t +-> +t_wdow_be16 + = 0; + +1503 + `CI_TCP_HDR_SET_LEN +( +t +, ( +ci_t_hdr +)); + +1504 +t +-> +t_check_be16 + = 0; + +1506 + `LOG_E +( + `ci_log +( +NT_FMT + +CI_IP_PRINTF_FORMAT +":%d->"CI_IP_PRINTF_FORMAT":%d RESET", + +1507 + `NT_PRI_ARGS +( +tif +, +ts +), + +1508 + `CI_IP_PRINTF_ARGS +(& + +-> +_ddr_be32 +), + +1509 + `CI_BSWAP_BE16 +( +t +-> +t_sour_be16 +), + +1510 + `CI_IP_PRINTF_ARGS +(& + +-> +_daddr_be32 +), + +1511 + `CI_BSWAP_BE16 +( +t +-> +t_de_be16 +))); + +1512 +rc + = + `ci_w__nd +( + +, +_n +, +ts +-> +s +. + +. +so_bdtodevi +); + +1513 + `ci_ +( + +); + +1514  +rc +; + +1515 + } +} + +1518  + $ci_t_y_wh_r +( +ci_tif +* +tif +, +ci_t_rx_pkt +* +rxp +) + +1526 +ci__pkt_fmt +* +pkt + = +rxp +->pkt; + +1527 +ci_t_hdr + + +; + +1528 +ci_ut32 + +_dq +; + +1529 +ci_4_hdr + +r +; + +1530 +ci_t_hdr +* +t +; + +1531 +ci_4_hdr +* + +; + +1533 + `ci_as +( +tif +); + +1534 + `ASSERT_VALID_PKT +( +tif +, +pkt +); + +1538 + + = * +rxp +-> +t +; + +1539 +r + = * + `oo__hdr +( +pkt +); + +1540 +_dq + = +pkt +-> +pf +. +t_rx +. +d_q +; + +1542 if( +pkt + = + `ci_tif_pkt_rx_to_tx +( +tif +,kt)= +NULL + ) + +1548 + `oo_tx_pkt_yout_ +( +pkt +); + +1549 + `oo_tx_h_ty_t +( +pkt +, +CI_ETHERTYPE_IP +); + +1550 + + = + `oo_tx__hdr +( +pkt +); + +1551 + `ci__hdr__fixed +( + +, +IPPROTO_TCP +, +CI_IP_DFLT_TTL +, +CI_IP_DFLT_TOS +); + +1552 + +-> +_daddr_be32 + = +r +. +_ddr_be32 +; + +1553 + +-> +_ddr_be32 + = +r +. +_daddr_be32 +; + +1555 +t + = ( +ci_t_hdr +*( + + + 1); + +1556 +t +-> +t_urg_r_be16 + = 0; + +1557 +t +-> +t_sour_be16 + = + +. +t_de_be16 +; + +1558 +t +-> +t_de_be16 + = + +. +t_sour_be16 +; + +1563 if( + +. +t_ags + & +CI_TCP_FLAG_ACK +) ) { + +1564 +t +-> +t_q_be32 + = + +. +t_ack_be32 +; + +1565 +t +-> +t_ags + = +CI_TCP_FLAG_RST +; + +1566 +t +-> +t_ack_be32 + = 0; + +1568 +t +-> +t_q_be32 + = 0; + +1569 +t +-> +t_ags + = +CI_TCP_FLAG_RST + | +CI_TCP_FLAG_ACK +; + +1570 +t +-> +t_ack_be32 + = + `CI_BSWAP_BE32 +( +_dq +); + +1572 + `CI_TCP_HDR_SET_LEN +( +t +, (*tcp)); + +1573 +t +-> +t_wdow_be16 + = 0; + +1574 + +-> +_check_be16 + = 0; + +1575 + +-> +_id_be16 + = 0; + +1576 +t +-> +t_check_be16 + = 0; + +1577 + `ci_t__hdr_ +( + +, ( +ci_4_hdr ++ ( +ci_t_hdr +)); + +1579 + `LOG_TR +( + `log +( +LN_FMT + "RSTACK %s:%u->%s:%u s=%08x=%08x", + +1580 + `LN_PRI_ARGS +( +tif +), + `_addr_r +( + +-> +_ddr_be32 +), + +1581 ( + `CI_BSWAP_BE16 +( +t +-> +t_sour_be16 +), + +1582 + `_addr_r +( + +-> +_daddr_be32 +), + +1583 ( + `CI_BSWAP_BE16 +( +t +-> +t_de_be16 +), + +1584 ( + `CI_BSWAP_BE32 +( +t +-> +t_q_be32 +), + +1585 ( + `CI_BSWAP_BE32 +( +t +-> +t_ack_be32 +))); + +1587 +pkt +-> +buf_n + =kt-> +y_n + = + +1588 + `oo_h_hdr_size +( +pkt ++ ( +ci_4_hdr ++ ( +ci_t_hdr +); + +1589 if +pkt +-> +tf_i + = +OO_INTF_I_LOOPBACK + ) { + +1590 + `ci_tif_pkt_hd +( +tif +, +pkt +); + +1591 + `ci__lol_nd +( +tif +, +pkt +,kt-> +pf +. +t_tx +. +lo +. +rx_sock +, + +1592 +pkt +-> +pf +. +t_tx +. +lo +. +tx_sock +); + +1596 + `ci__nd_pkt +( +tif +, +NULL +, +pkt +); + +1598 + `CI_TCP_STATS_INC_OUT_SEGS +( +tif +); + +1599 + `ci_tif_pkt_a +( +tif +, +pkt +); + +1600 + `CI_TCP_STATS_INC_OUT_RSTS + +tif + ); + +1601 + } +} + +1604  + $ci_t_nd_zw_obe +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +1610 +ci__pkt_fmt +* +pkt +; + +1611 +ci_t_hdr +* +t +; + +1612 +ci_ut8 +* +t +; + +1613  +ݎ + = 0; + +1615 + `ci_as +( +tif +); + +1616 + `ci_as +( + `ci__queue_is_emy +(& +ts +-> +s +)); + +1617 + `ci_as +( + `OO_SP_IS_NULL +( +ts +-> +lol_ +)); + +1619 +pkt + = + `ci_tif_pkt_loc +( +tif +); + +1620 if! +pkt + ) { + +1621 + `LOG_U +( + `log +( +LNTS_FMT + "out ofkt buffers,ot sending zwinrobe", + +1622 + `LNTS_PRI_ARGS +( +tif +, +ts +))); + +1626 + `oo_tx_pkt_yout_ +( +pkt +); + +1627 + `ci_pkt__om_che +( +pkt +, & +ts +-> +s +.pkt); + +1628 +t + = + `TX_PKT_TCP +( +pkt +); + +1629 +t + = + `CI_TCP_HDR_OPTS +( +t +); + +1632 + `ci_t_du_硡t +( +ts +, + `SEQ_SUB +( + `t_rcv_nxt +s),s-> +taack +)); + +1635 +ts +-> +taack + = + `t_rcv_nxt +(ts); + +1636 if +ts +-> +tags + & +CI_TCPT_FLAG_TSO + ) { + +1637 +ݎ + + + `ci_t_tx_t_tso +(& +t +, + `ci_t_time_now +( +tif +), +ts +-> +te +); + +1639 if +ts +-> +tags + & +CI_TCPT_FLAG_SACK + ) + +1640 +ݎ + + + `ci_t_tx_t_ck +(& +t +, on, +tif +, +ts +); + +1642 +t +-> +t_ags + = +CI_TCP_FLAG_ACK +; + +1644 + `CI_TCP_HDR_SET_LEN +( +t +, ( +ci_t_hdr ++ +ݎ +); + +1647 +t +-> +t_q_be32 + = + `CI_BSWAP_BE32 +( + `t_d_u +( +ts +)-1); + +1648 + `ci_t__hdr_ +( + `oo_tx__hdr +( +pkt +), + +1649 ( +ci_4_hdr ++ ( +ci_t_hdr ++ +ݎ +); + +1650 +pkt +-> +buf_n + =kt-> +y_n + = + +1651 + `oo_h_hdr_size +( +pkt ++ ( +ci_4_hdr ++ ( +ci_t_hdr ++ +ݎ +; + +1654 + `ci_t_lc_rcv_wnd +( +ts +, "zwin_probe"); + +1656 + `ci_t_tx_t_urg_r +( +ts +, +tif +, +t +); + +1657 +t +-> +t_ack_be32 + = + `CI_BSWAP_BE32 +( + `t_rcv_nxt +( +ts +)); + +1658 +t +-> +t_wdow_be16 + = + `TS_TCP +( +ts +)->tcp_window_be16; + +1660 + `LOG_TT +( + `log +( +LNT_FMT + "ZWIN id=%i s=%08x=%08x w=%u", + +1661 + `LNT_PRI_ARGS +( +tif +, +ts +), + `OO_PKT_FMT +( +pkt +), + +1662 ( + `CI_BSWAP_BE32 +( +t +-> +t_q_be32 +), + +1663 ( + `CI_BSWAP_BE32 +( +t +-> +t_ack_be32 +), + +1664 ( + `CI_BSWAP_BE16 +( +t +-> +t_wdow_be16 +))); + +1666 + `ci__nd_t +( +tif +, +pkt +, +ts +); + +1668 + `CI_IP_SOCK_STATS_ADD_TXBYTE +( +ts +, +pkt +-> +buf_n +); + +1670 + `ci_tif_pkt_a +( +tif +, +pkt +); + +1671 + } +} + +1674  + $ci_t_nd_ack_loback +( +ci_tif +* +tif +, +ci_t_e +* +ts +, + +1675  +sock_locked +) + +1677 +ci_t_e +* + +; + +1678 +cp_waab +* +w_ +; + +1680 + `ci_as + + `OO_SP_NOT_NULL +( +ts +-> +lol_ +) ); + +1681 +w_ + = + `ID_TO_WAITABLE +( +tif +, +ts +-> +lol_ +); + +1683 +ts +-> +acks_ndg + = 0; + +1688 if~ +w_ +-> +e + & +CI_TCP_STATE_TCP_CONN + ) + +1690 + + = ( +ci_t_e + *) +w_ +; + +1691 if + +-> +lol_ + ! + `S_SP +( +ts +) ) + +1696 if +tif +-> +e +-> +_pl + ) + +1697 + `ci_tif_put__po_pl +( +tif +, & + +-> +s +. +b +); + +1700 +ts +-> +acks_ndg + = 0; + +1701 + `ci_t_lc_rcv_wnd +( +ts +, "send_ack"); + +1702 + `ci_as +(! + `ci__tim_ndg +( +tif +, & +ts +-> +dack_tid +)); + +1704 + +-> +d_u + = + `t_rcv_nxt +( +ts +); + +1705 + +-> +d_max + = + `t_rcv_wnd_right_edge_ +( +ts +); + +1709 if + `ci__queue_n_emy +(& + +-> +nd +) ) + +1710 + `ci_t_tx_adv +( + +, +tif +); + +1711 }  +ts +-> +acks_ndg + != 0 ); + +1713 + `ci_as_equ +( +ts +-> +acks_ndg +, 0); + +1715 + `LOG_TC +( + `log +( +LPF + "loback ACK %d: %d->%d", + `NI_ID +( +tif +), + +1716 + `S_FMT +( +ts +), S_FMT( + +)); + +1717 + `log +( +LNTS_FMT + +RCV_WND_FMT + " snd=%08x-%08x-%08xnq=%08x", + +1718 + `LNTS_PRI_ARGS +( +tif +, +ts +), + `RCV_WND_ARGS +(ts), + +1719 + `t_d_u +( +ts +), + +1720 + `t_d_nxt +( +ts +),s-> +d_max +, + `t_q_nxt +(ts)); + +1721 + `log +( +LNTS_FMT + +RCV_WND_FMT + " snd=%08x-%08x-%08xnq=%08x", + +1722 + `LNTS_PRI_ARGS +( +tif +, + +), + `RCV_WND_ARGS +(peer), + +1723 + `t_d_u +( + +), + +1724 + `t_d_nxt +( + +),r-> +d_max +, + `t_q_nxt +(peer))); + +1725 + } +} + +1728  + $ci_t_nd_ack +( +ci_tif +* +tif +, +ci_t_e +* +ts +, +ci__pkt_fmt +* +pkt +, + +1729  +sock_locked +) + +1731 +ci_t_hdr +* +t +; + +1732 +ci_ut8 +* +t +; + +1733  +ݎ + = 0; + +1735 + `CITP_STATS_NETIF_INC +( +tif +, +acks_ +); + +1738 if + `OO_SP_NOT_NULL +( +ts +-> +lol_ +) ) { + +1739 + `ci_tif_pkt_a +( +tif +, +pkt +); + +1740 + `ci_t_nd_ack_loback +( +tif +, +ts +, +sock_locked +); + +1746 if + `ci_t_rcvbuf_abud +( +tif +, +ts +) ) + +1747 + `ci_t_rcvbuf_ubu +( +tif +, +ts +, +sock_locked +); + +1749 +ts +-> +acks_ndg + = 0; + +1750 + `ci_t_dack_r +( +tif +, +ts +); + +1751 + `ci_t_lc_rcv_wnd +( +ts +, "send_ack"); + +1753 + `ci_as +( +tif +); + +1754 + `ASSERT_VALID_PKT +( +tif +, +pkt +); + +1755 + `ci_as +( +pkt +-> +fcou + == 1); + +1756 + `ci_as +! ( +pkt +-> +ags + & +CI_PKT_FLAG_TX_PENDING +)); + +1758 + `oo_tx_pkt_yout_ +( +pkt +); + +1759 + `ci_pkt__om_che +( +pkt +, & +ts +-> +s +.pkt); + +1760 + `ci_as_equ +( +ts +-> +s +. +pkt +. + +. +_check_be16 +, 0); + +1761 + `ci_as_equ +( + `oo_tx__hdr +( +pkt +)-> +_check_be16 +, 0); + +1762 +t + = + `TX_PKT_TCP +( +pkt +); + +1763 + `ci_as_equ +( +t +-> +t_check_be16 +, 0); + +1764 +t + = + `CI_TCP_HDR_OPTS +( +t +); + +1770 +t +-> +t_q_be32 + = + `CI_BSWAP_BE32 +( + `t_d_nxt +( +ts ++s-> +d_deged +); + +1773 + `ci_t_du_硡t +( +ts +, + `SEQ_SUB +( + `t_rcv_nxt +s),s-> +taack +)); + +1776 +ts +-> +taack + = + `t_rcv_nxt +(ts); + +1777 if +ts +-> +tags + & +CI_TCPT_FLAG_TSO + ) { + +1778 +ݎ + + + `ci_t_tx_t_tso +(& +t +, + `ci_t_time_now +( +tif +), +ts +-> +te +); + +1780 if +ts +-> +tags + & +CI_TCPT_FLAG_SACK + ) { + +1781 +ݎ + + + `ci_t_tx_t_ck +(& +t +, on, +tif +, +ts +); + +1784 +t +-> +t_ags + = +CI_TCP_FLAG_ACK +; + +1786 + `CI_TCP_HDR_SET_LEN +( +t +, ( +ci_t_hdr ++ +ݎ +); + +1788 + `ci_t_tx_t_urg_r +( +ts +, +tif +, +t +); + +1791 + `ci_t__hdr_ +( + `oo_tx__hdr +( +pkt +), + +1792 ( +ci_4_hdr ++ ( +ci_t_hdr ++ +ݎ +); + +1793 +t +-> +t_ack_be32 + = + `CI_BSWAP_BE32 +( + `t_rcv_nxt +( +ts +)); + +1794 +t +-> +t_wdow_be16 + = + `TS_TCP +( +ts +)->tcp_window_be16; + +1796 + `LOG_TT +( + `log +( +LNT_FMT + "ACK id=%i s=%08x=%08x w(unscaled)=%u w_cur=%u", + +1797 + `LNT_PRI_ARGS +( +tif +, +ts +), + `OO_PKT_FMT +( +pkt +), + +1798 ( + `CI_BSWAP_BE32 +( +t +-> +t_q_be32 +), + +1799 ( + `CI_BSWAP_BE32 +( +t +-> +t_ack_be32 +), + +1800 ( + `CI_BSWAP_BE16 +( +t +-> +t_wdow_be16 +), + +1801 + `t_rcv_wnd_cut +( +ts +))); + +1803 +pkt +-> +buf_n + =kt-> +y_n + = + +1804 + `oo_h_hdr_size +( +pkt ++ ( +ci_4_hdr ++ ( +ci_t_hdr ++ +ݎ +; + +1806 + `ci_t_tx_maybe_do_rg +( +pkt +, +ts +); + +1807 + `__ci__nd_t +( +tif +, +pkt +, +ts +); + +1808 + `CI_TCP_STATS_INC_OUT_SEGS +( +tif +); + +1809 + `CI_IP_SOCK_STATS_ADD_TXBYTE +( +ts +, +pkt +-> +buf_n +); + +1810 + `ci_tif_pkt_a +( +tif +, +pkt +); + +1811 + } +} + +1813 #i +CI_CFG_TAIL_DROP_PROBE + + +1814  + $ci_t_nd_dr_obe +( +ci_tif + * +tif +, +ci_t_e + * +ts +) + +1816 +ci__pkt_fmt + * +pkt +; + +1817 +ci__pkt_queue + * +q + = & +ts +-> +s +; + +1819 + `ci_as +( + `ci__queue_n_emy +( +q +)); + +1820 + `ci_as +( + `NI_OPTS +( +tif +). +_dr_obe +); + +1823 +pkt + = + `PKT_CHK +( +tif +, +q +-> + +); + +1824 if! ( +pkt +-> +ags + & +CI_PKT_FLAG_TX_PENDING +) ) { + +1825 + `ci_t_s_e +( +ts +, +tif +, +pkt +); + +1833 + } +} + +1840  + $ci__hdr__fixed +( +ci_4_hdr +* + +,  +oc +, + +1841  +l +,  +tos +) + +1843 + `ci_as +( +l +); + +1845 + +-> +_ihl_vsi + = + `CI_IP4_IHL_VERSION +((*ip)); + +1846 + +-> +_tos + = ( +ci_ut8 +) +tos +; + +1847 + +-> +_ag_off_be16 + = +CI_IP4_FRAG_DONT +; + +1848 + +-> +_l + = ( +ci_ut8 +) +l +; + +1849 + +-> +_oc + = ( +ci_ut8 +) +oc +; + +1850 + } +} + + @tcp_tx.h + +1 #ide +__TCP_TX_H__ + + +2  + #__TCP_TX_H__ + + + ) + +8 +ci_le +  + $ci_t_tx_t_tso +( +ci_ut8 +** +t +, + +9 +ci_ut32 + +tsv +, ci_ut32 +t +) + +11 *( +ci_ut32 +*)(* +t + +CI_TCP_TSO_WORD +; + +12 *( +ci_ut32 +*)(* +t + + 4 + `CI_BSWAP_BE32 +( +tsv +); + +13 *( +ci_ut32 +*)(* +t + + 8 + `CI_BSWAP_BE32 +( +t +); + +14 * +t + += 12; + +16 + } +} + +26 +ci_le +  + $ci_t_tx_fish +( +ci_tif +* +tif +, +ci_t_e +* +ts +, + +27 +ci__pkt_fmt +* +pkt +) + +29 +ci_t_hdr +* +t + = + `TX_PKT_TCP +( +pkt +); + +30 +ci_ut8 +* +t + = + `CI_TCP_HDR_OPTS +( +t +); + +31  +q + = +pkt +-> +pf +. +t_tx +. +t_q +; + +34 + `ci_t_du_硡t +( +ts +, + `SEQ_SUB +( + `t_rcv_nxt +s),ts-> +taack +)); + +37 +ts +-> +taack + = + `t_rcv_nxt +(ts); + +38 if +ts +-> +tags + & +CI_TCPT_FLAG_TSO + ) { + +39  +now + = + `ci_t_time_now +( +tif +); + +40 + `ci_t_tx_t_tso +(& +t +, +now +, +ts +-> +te +); + +43 if + `CI_LIKELY +(( +ts +-> +cge + = +CI_TCP_CONG_OPEN +) | + +44 ( +ts +-> +cge + = +CI_TCP_CONG_NOTIFIED +)) ) { + +47 if! + `SEQ_LE +( + `t_d_u +( +ts +),s-> +timed_q +) ) { + +48 + `ci_t_t_t_timg +( +tif +, +ts +, +q +); + +54 if + `SEQ_LE +( +ts +-> +cgcov +, +q +) && + +55 ! + `SEQ_LE +( + `t_d_u +( +ts +),s-> +timed_q +) ) { + +57 + `ci_t_t_t_timg +( +tif +, +ts +, +q +); + +62 +t +-> +t_q_be32 + = + `CI_BSWAP_BE32 +( +q +); + +63 + } +} + +66 +ci_le +  + $ci_t__hdr_ +( +ci_4_hdr +* + +,  +n +) + +68 + `ci_as_equ +( + `CI_IP4_IHL +( + +), ( +ci_4_hdr +)); + +69 + +-> +_t_n_be16 + = + `CI_BSWAP_BE16 +(( +ci_ut16 + +n +); + +70 + `ci_as_equ +( + +-> +_check_be16 +, 0); + +71 + `ci_as_equ +( + +-> +_id_be16 +, 0); + +72 + } +} + +75 +ci_le +  + $__ci_t_lc_rcv_wnd +( +ci_t_e +* +ts +) + +79  +w_wdow +; + +80  +w_rhs +; + +81 +ci_ut16 + +tmp +; + +83 +w_wdow + = + `CI_MIN +( +ts +-> +rcv_wdow_max +, + +84 +ts +-> +s +. +so +. +rcvbuf + - + +85 + `SEQ_SUB +( + `t_rcv_nxt +( +ts +),s-> +rcv_dived +)); + +86 +w_rhs + = + `t_rcv_nxt +( +ts ++ +w_wdow +; + +94 if + `CI_LIKELY + + `SEQ_GE +( +w_rhs +, +ts +-> +rcv_wnd_right_edge_ + +s-> +amss +) ) + +95 || + `t_rcv_u +( +ts +) == 0 ) { + +97 +ts +-> +rcv_wnd_advtid + = +w_wdow +; + +98 + `t_rcv_wnd_right_edge_ +( +ts + +w_rhs +; + +105 +w_wdow + = +ts +-> +rcv_wnd_right_edge_ + - + `t_rcv_nxt +(ts); + +106 +ts +-> +rcv_wnd_advtid + = + `CI_MIN +( +w_wdow +, + +107 +CI_CFG_TCP_MAX_WINDOW + << +ts +-> +rcv_ws +); + +110 +tmp + = +ts +-> +rcv_wnd_advtid + >>s-> +rcv_ws +; + +111 + `TS_TCP +( +ts +)-> +t_wdow_be16 + = + `CI_BSWAP_BE16 +( +tmp +); + +112 + `CI_IP_SOCK_STATS_VAL_RXWIN +( +ts +,s-> +rcv_wnd_advtid +); + +113 + } +} + +116  + #ci_t_lc_rcv_wnd +( +ts +, +Δ + + `__ci_t_lc_rcv_wnd +s) + + ) + +119 +ci_le +  + $ci_t_tx_maybe_do_rg +( +ci__pkt_fmt +* +pkt +, + +120 +ci_t_e +* +ts +) { + +121 #i +CI_CFG_PORT_STRIPING + + +122 if +ts +-> +tags + & +CI_TCPT_FLAG_STRIPE + ) + +123 +pkt +-> +tif +. +tx +. +tf_sw + = + `ci_ts_pt_sw +kt-> +pf +. +t_tx +. +t_q +, +ts +); + +125 + } +} + + @tcp_tx_reformat.c + +14  + ~"_.h +" + +15  + ~ + +16  + ~"iovec_r.h +" + +17  + ~"tif_tx.h +" + +19  + #LPF + "TCP TX RFMT " + + ) + +35  + $ci_t_tx_mge_gmt +( +ci_tif +* +ni +, +ci__pkt_fmt +* +de_pkt +, + +36 +ci__pkt_fmt +* +c_pkt +, +ef_iovec +* +c_g +, + +37  +do_cy +) + +39  +n +; + +40 * +c +, * +de +; + +41  +c_off + = ()( +c_g +-> +iov_ba + - ( +c_pkt +-> +dma_addr +[c_pkt-> +tf_i +] + + +42 +c_pkt +-> +pkt_t_off +)); + +47 + `ci_as_gt +( + `oo_offbuf_ +(& +de_pkt +-> +buf +), 0); + +48 + `ci_as_gt +( +c_g +-> +iov_n +, 0); + +49 + `ci_as_equ +( +c_pkt +-> +n_bufrs +, 1); + +50 + `ci_as_equ +( +de_pkt +-> +n_bufrs +, 1); + +51 + `ci_as_gt +( +c_off +, 0); + +52 + `ci_as_ +(( +c_off +, +CI_CFG_PKT_BUF_SIZE +); + +54 +c + = + `PKT_START +( +c_pkt ++ +c_off +; + +55 +de + = + `oo_offbuf_r +(& +de_pkt +-> +buf +); + +57 +n + = + `oo_offbuf_ +(& +de_pkt +-> +buf +); + +58 +n + = + `CI_MIN +((, +c_g +-> +iov_n +); + +60 if +do_cy + ) { + +61 if +de_pkt + = +c_pkt + ) { + +63 + `memmove +( +de +, +c +, +n +); + +66 + `memy +( +de +, +c +, +n +); + +69 +de_pkt +-> +buf_n + + +n +; + +70 +de_pkt +-> +y_n + + +n +; + +71 + `oo_offbuf_adv +(& +de_pkt +-> +buf +, +n +); + +72 +de_pkt +-> +pf +. +t_tx +. +d_q + + +n +; + +73 +c_g +-> +iov_ba + + +n +; + +74 +c_g +-> +iov_n + - +n +; + +76  +n +; + +77 + } +} + +80  +ci__pkt_fmt +* + $ci_t_tx_lo_pkt +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +81 +ci__pkt_queue +* +qu +, +ci__pkt_fmt +* +pkt +, + +82  +hd +,  +d_n +,  +w_yn +) + +84 +ci__pkt_fmt +* +xt +; + +86 +xt + = + `ci_tif_pkt_tx_t_loc +( +ni +, +ts +); + +87 if! +xt + )  +NULL +; + +88 + `oo_tx_pkt_yout_ +( +xt +); + +89 + `ci_pkt__om_che_n +( +xt +, & +ts +-> +s +. +pkt +, +hd +); + +94 + `oo_offbuf_ +(& +xt +-> +buf +, ( +ut8_t +* + `oo_tx_h_da +ext+ +hd +, + +95 +d_n +); + +98 +xt +-> +buf_n + =ext-> +y_n + = +hd + + + `oo_h_hdr_size +(next); + +99 + `ci_as_equ +( +xt +-> +n_bufrs +, 1); + +101 +pkt +-> +pf +. +t_tx +. +d_q + =kt->pf.t_tx. +t_q + + +w_yn +; + +102 +xt +-> +pf +. +t_tx +. +t_q + = +pkt +->pf.t_tx. +d_q +; + +103 +xt +-> +pf +. +t_tx +. +d_q + =ext->pf.t_tx. +t_q +; + +104 +xt +-> +pf +. +t_tx +. +block_d + = +OO_PP_NULL +; + +112 +xt +-> +ags + = +pkt +->flags; + +114  +xt +; + +115 + } +} + +119  + $ci_t_tx_add_to_queue +( +ci__pkt_queue +* +qu +, +ci__pkt_fmt +* +pkt +, + +120 +ci__pkt_fmt +* +xt +) { + +122 +xt +->x +pkt +->next; + +123 +pkt +-> +xt + = + `OO_PKT_P +(next); + +124 ++ +qu +-> +num +; + +125 if + `OO_PP_IS_NULL +( +xt +->next) ) { + +126 + `ci_as +( + `OO_PP_EQ +( +qu +-> + +, + `OO_PKT_P +( +pkt +))); + +127 +qu +-> + + = + `OO_PKT_P +( +xt +); + +129 + } +} + +144  + $ci_t_tx_l +( +ci_tif +* +ni +, +ci_t_e +* +ts +, +ci__pkt_queue +* +qu +, + +145 +ci__pkt_fmt +* +pkt +,  +w_yn +, + +146 +ci_boޗn_t + +is_ndq +) + +148  +d_n + = + `PKT_TCP_TX_SEQ_SPACE +( +pkt +) + +149 - (( + `TX_PKT_TCP +( +pkt +)-> +t_ags + & +CI_TCP_FLAG_FIN +>> +CI_TCP_FLAG_FIN_BIT +); + +150  +n +, +d_ϡ_g_size +; + +151  +hd + = +ts +-> +outgog_hdrs_n +; + +152 +ci__pkt_fmt + * +xt +; + +153 +ef_iovec_r + +gs +; + +154 +ef_iovec + +iov +[ +CI_IP_PKT_SEGMENTS_MAX +]; + +156 + `ci_as_ +(() +w_yn +, + `t_eff_mss +( +ts +)); + +157 + `ci_as_ +( +w_yn +, +d_n +); + +159 if +pkt +-> +ags + & +CI_PKT_FLAG_TX_PENDING + )  -1; + +161 +xt + = + `ci_t_tx_lo_pkt +( +ni +, +ts +, +qu +, +pkt +, +hd +, +d_n +, +w_yn +); + +162 if +xt + = +NULL + )  -1; + +164 +n + = +w_yn + + +hd + + + `oo_h_hdr_size +( +pkt +); + +166 + `ci_as_ge +( +pkt +-> +buf_n +, +n +); + +167 + `ci_as_equ +( +pkt +-> +n_bufrs +, 1); + +168 +pkt +-> +tf_i + = 0; + +169 + `ci_tif_pkt_to_iovec +( +ni +, +pkt +, +iov +, (iov) / (iov[0])); + +170 + `ef_iovec_r__nz +(& +gs +, +iov +, +pkt +-> +n_bufrs +); + +171 + `ef_iovec_r_adv +(& +gs +, +n +); + +172 +d_ϡ_g_size + = +pkt +-> +buf_n +; + +173 +pkt +-> +buf_n + = +n +; + +174 +pkt +-> +y_n + -( +d_ϡ_g_size + - +n +); + +176  ! + `ef_iovec_r_is_emy_ݔ +(& +gs +) ) { + +177 #ide +NDEBUG + + +178  +moved + = + `ci_t_tx_mge_gmt +( +ni +, +xt +, +pkt +, & +gs +. +io +, 1); + +179 + `ci_as_qu +( +moved +, 0); + +181 + `ci_t_tx_mge_gmt +( +ni +, +xt +, +pkt +, & +gs +. +io +, 1); + +186 + `ci_as_equ +( +pkt +-> +n_bufrs +, 1); + +189 + `ci_t_tx_pkt_t_d +( +ts +, +xt +); + +191 +pkt +-> +buf +. +off + = + +192 ( +ci_ut32 +)((* + `oo_tx_h_da +( +pkt ++ +ts +-> +outgog_hdrs_n + + +193 + +w_yn + - (*& +pkt +-> +buf +); + +195 + `ci_t_tx_add_to_queue +( +qu +, +pkt +, +xt +); + +196 if +is_ndq + ) + +197 ++ +ts +-> +nd_ +; + +200 if + `TX_PKT_TCP +( +pkt +)-> +t_ags + & +CI_TCP_FLAG_FIN + ) { + +201 + `TX_PKT_TCP +( +pkt +)-> +t_ags + &=~ +CI_TCP_FLAG_FIN +; + +202 + `TX_PKT_TCP +( +xt +)-> +t_ags + | +CI_TCP_FLAG_FIN +; + +203 +xt +-> +pf +. +t_tx +. +d_q +++; + +206 + `ASSERT_VALID_PKT +( +ni +, +pkt +); + +207 + `CITP_DETAILED_CHECKS +( + `ci_t_tx_pkt_as_vid +( +ni +, +ts +, +pkt +, + +208 +__FILE__ +, +__LINE__ +)); + +209 + `ASSERT_VALID_PKT +( +ni +, +xt +); + +210 + `CITP_DETAILED_CHECKS +( + `ci_t_tx_pkt_as_vid +( +ni +, +ts +, +xt +, + +211 +__FILE__ +, +__LINE__ +)); + +214 + } +} + +220  + $ci_t_tx_chomp +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +221 +ci__pkt_fmt +* +pkt +,  +bys +) + +223 +ef_iovec + +e_gmt +; + +224 +ef_iovec_r + +gs +; + +225  +n +; + +227 + `ci_as_gt +( +bys +, 0); + +228 + `ci_as_equ +( +pkt +-> +n_bufrs +, 1); + +229 + `ci_as_equ +( + `TX_PKT_TCP +( +pkt +)-> +t_ags + & ( +CI_TCP_FLAG_SYN + | + +230 +CI_TCP_FLAG_FIN +), 0); + +232 +pkt +-> +tf_i + = 0; + +233 + `ci_tif_pkt_to_iovec +( +ni +, +pkt +, & +e_gmt +, 1); + +234 + `ef_iovec_r__nz +(& +gs +, & +e_gmt +, +pkt +-> +n_bufrs +); + +235 + `ef_iovec_r_adv +(& +gs +, +ts +-> +outgog_hdrs_n ++ + `oo_h_hdr_size +( +pkt +)); + +239 +n + = + `CI_MIN +( +gs +. +io +. +iov_n +, ( +bys +); + +240 + `ef_iovec_r_adv +(& +gs +, +n +); + +241 +bys + - +n +; + +242 + `ci_as_gt +( +gs +. +io +. +iov_n +, 0); + +243 }  +bys + ); + +245 +pkt +-> +buf_n + =kt-> +y_n + = + +246 +ts +-> +outgog_hdrs_n + + + `oo_h_hdr_size +( +pkt +); + +247 +pkt +-> +pf +. +t_tx +. +d_q + =kt->pf.t_tx. +t_q +; + +252 + `oo_offbuf_2 +(& +pkt +-> +buf +, + `PKT_START +kt+kt-> +buf_n +, + +253 (* +pkt + + +CI_CFG_PKT_BUF_SIZE +); + +256  ! + `ef_iovec_r_is_emy_ݔ +(& +gs +) ) + +257 + `ci_t_tx_mge_gmt +( +ni +, +pkt +,kt, & +gs +. +io +, 1); + +260 + `ci_t_tx_pkt_t_d +( +ts +, +pkt +); + +261 + `ASSERT_VALID_PKT +( +ni +, +pkt +); + +262 + `CITP_DETAILED_CHECKS +( + `ci_t_tx_pkt_as_vid +( +ni +, +ts +, +pkt +, + +263 +__FILE__ +, +__LINE__ +)); + +264 + } +} + +273  + $ci_t_tx_cs +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +274 +ci__pkt_queue +* +q +, +ci__pkt_fmt +* +pkt +, + +275 +ci_boޗn_t + +is_ndq +) + +277  +n +, +bys_moved +; + +278 +ef_iovec_r + +xt_iov +; + +279 +ci__pkt_fmt +* +xt +; + +280 +ef_iovec + +e_gmt +; + +283 + `ci_t_tx_pkt_t_d +( +ts +, +pkt +); + +286 if + `oo_offbuf_ +(& +pkt +-> +buf +) <= 0 ) + +289 +xt + = + `PKT_CHK +( +ni +, +pkt +->next); + +292 if( +pkt +-> +ags + | +xt +->ags& +CI_PKT_FLAG_TX_PENDING + ) + +296 if( + `TX_PKT_TCP +( +pkt +)-> +t_ags + | TX_PKT_TCP( +xt +)->tcp_flags) + +297 & ( +CI_TCP_FLAG_SYN + | +CI_TCP_FLAG_FIN +) ) + +302 + `ci_as_equ +( + `t_eff_mss +( +ts +- + `PKT_TCP_TX_SEQ_SPACE +( +pkt +), + +303 + `oo_offbuf_ +(& +pkt +-> +buf +)); + +305 + `ci_as_equ +( +pkt +-> +n_bufrs +, 1); + +306 +bys_moved + = 0; + +311 +xt +-> +tf_i + = 0; + +312 + `ci_tif_pkt_to_iovec +( +ni +, +xt +, & +e_gmt +, 1); + +313 + `ef_iovec_r__nz +(& +xt_iov +, & +e_gmt +, +pkt +-> +n_bufrs +); + +314 + `ef_iovec_r_adv +(& +xt_iov +, + +315 +ts +-> +outgog_hdrs_n + + + `oo_h_hdr_size +( +pkt +)); + +318 + `ci_as_gt +( + `oo_offbuf_ +(& +pkt +-> +buf +), 0); + +323 if + `ef_iovec_r_is_emy_ݔ +(& +xt_iov +) ) ; + +325 +n + = + `ci_t_tx_mge_gmt +( +ni +, +pkt +, +xt +, & +xt_iov +. +io +, 1); + +326 +bys_moved + + +n +; + +328 + `ci_as_ge +( + `oo_offbuf_ +(& +pkt +-> +buf +), 0); + +330 if +n + =0 || + `oo_offbuf_ +(& +pkt +-> +buf +) == 0 ) ; + +333 +xt +-> +pf +. +t_tx +. +t_q + + +bys_moved +; + +335 if + `SEQ_EQ +( +xt +-> +pf +. +t_tx +. +t_q +,ext->pf.t_tx. +d_q +) ) { + +337 + `TX_PKT_TCP +( +pkt +)-> +t_ags + |TX_PKT_TCP( +xt +)->tcp_flags; + +338 +pkt +-> +xt + =ext->next; + +339 if + `OO_PP_EQ +( +q +-> + +, + `OO_PKT_P +( +xt +)q-> = OO_PKT_P( +pkt +); + +340 + `ci_tif_pkt_a +( +ni +, +xt +); + +341 -- +q +-> +num +; + +345 if +is_ndq + ) + +346 ++ +ts +-> +nd_out +; + +348 if +bys_moved + ) { + +349 + `ci_t_tx_chomp +( +ni +, +ts +, +xt +, +bys_moved +); + +350 + `ASSERT_VALID_PKT +( +ni +, +xt +); + +351 + `CITP_DETAILED_CHECKS +( + `ci_t_tx_pkt_as_vid +( +ni +, +ts +, +xt +, + +352 +__FILE__ +, +__LINE__ +)); + +355 + `ASSERT_VALID_PKT +( +ni +, +pkt +); + +356 + `CITP_DETAILED_CHECKS +( + `ci_t_tx_pkt_as_vid +( +ni +, +ts +, +pkt +, + +357 +__FILE__ +, +__LINE__ +)); + +360 + } +} + +363  + $ci_t_tx__ti_a +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +364 +ci__pkt_fmt +* +pkt +,  +hd +, + +365  +exa_ts +) + +367 * +d_t +, * +d_d +, * +w_t +; + +368 +ef_iovec + +e_gmt +; + +369 +ef_iovec_r + +gs +; + +371 + `ci_as_gt +( +hd +, 0); + +372 + `ci_as_equ +( +pkt +-> +n_bufrs +, 1); + +374 + `LOG_U +( + `ci_log +( +LNT_FMT + + +376 + `LNT_PRI_ARGS +( +ni +, +ts +), + `OO_PKT_FMT +( +pkt +),kt-> +pf +. +t_tx +. +t_q +, + +377 +pkt +-> +pf +. +t_tx +. +d_q +, +exa_ts +)); + +395 +d_t + = + `PKT_START +( +pkt ++ +hd +; + +396 +d_d + = + `oo_offbuf_r +(& +pkt +-> +buf +); + +397 +w_t + = +d_t + + +exa_ts +; + +398 + `ci_as_equ +( + `oo_offbuf_r +(& +pkt +-> +buf +- + `PKT_START +kt), + `TX_PKT_LEN +(pkt)); + +400 + `memmove +( +w_t +, +d_t +, +d_d + - old_start); + +402 +pkt +-> +tf_i + = 0; + +403 + `ci_tif_pkt_to_iovec +( +ni +, +pkt +, & +e_gmt +, 1); + +404 + `ef_iovec_r__nz +(& +gs +, & +e_gmt +, +pkt +-> +n_bufrs +); + +407 + `ef_iovec_r_adv +(& +gs +, +hd +); + +410 +pkt +-> +buf_n + =kt-> +y_n + = +hd + + +exa_ts +; + +411 +pkt +-> +pf +. +t_tx +. +d_q + =kt->pf.t_tx. +t_q +; + +416 + `oo_offbuf_2 +(& +pkt +-> +buf +, + `PKT_START +kt+kt-> +buf_n +, + +417 (* +pkt + + +CI_CFG_PKT_BUF_SIZE +); + +420  ! + `ef_iovec_r_is_emy_ݔ +(& +gs +) ) + +421 + `ci_t_tx_mge_gmt +( +ni +, +pkt +,kt, & +gs +. +io +, 0); + +424 + `ci_t_tx_pkt_t_d +( +ts +, +pkt +); + +431 + `ASSERT_VALID_PKT +( +ni +, +pkt +); + +434 + } +} + +437  + $ci_t_s_cs_block +( +ci_tif +* +ni +, +ci_t_e +* +ts +, + +438 +ci__pkt_fmt +* +pkt +) + +444 +ci__pkt_queue +* +q + = & +ts +-> +s +; + +445 +ci__pkt_fmt +* +t +; + +446 +oo_pkt_p + +xt_id +; + +448 if + `OO_PP_EQ +( +pkt +-> +pf +. +t_tx +. +block_d +, + `OO_PKT_P +(pkt)) ) ; + +450 +t + = +pkt +; + +452  + `OO_PP_NOT_NULL +( +pkt +-> +xt +) && + +453 ! + `OO_PP_EQ +( +pkt +-> +pf +. +t_tx +. +block_d +, + `OO_PKT_P +(pkt)) ) { + +454 +xt_id + = +pkt +-> +xt +; + +456 if + `PKT_TCP_TX_SEQ_SPACE +( +pkt +< + `t_eff_mss +( +ts +) ) { + +457 if + `ci_t_tx_cs +( +ni +, +ts +, +q +, +pkt +, +CI_FALSE +) ) + +461 if! + `OO_PP_EQ +( +pkt +-> +xt +, +xt_id +) ) { + +462 if + `OO_PP_EQ +( +ts +-> +s_r +, +xt_id +) ) { + +469 +ts +-> +s_r + = + `OO_PKT_P +( +pkt +); + +470 +ts +-> +s_q + = +pkt +-> +pf +. +t_tx +. +t_q +; + +473 if + `OO_PP_EQ +( +pkt +-> +pf +. +t_tx +. +block_d +, +xt_id +) ) { + +476 +t +-> +pf +. +t_tx +. +block_d + = + `OO_PKT_P +( +pkt +); + +477 if +t + = +pkt + ) ; + +478 +t + = + `PKT_CHK +( +ni +, s-> +xt +); + +485 if + `OO_PP_EQ +( +pkt +-> +xt +, +xt_id +) ) + +486 +pkt + = + `PKT_CHK +( +ni +,kt-> +xt +); + +488 + } +} + +491  + $ci_t_fl_sml_wdow +( +ci_tif +* +tif +, +ci_t_e +* +ts +) + +493 +ci__pkt_fmt +* +pkt + = + `PKT_CHK +( +tif +, +ts +-> +nd +. +hd +); + +495 + `ASSERT_VALID_PKT +( +tif +, +pkt +); + +496 i( + `PKT_TCP_TX_SEQ_SPACE +( +pkt +> + `t_d_wnd +( +ts +) && + +497 ( + `ci_t_tx_l +( +tif +, +ts +, &ts-> +nd +, +pkt +, + `t_d_wnd +(ts), 1) != 0)) { + +498 + `LOG_U +( + `log +( +LNTS_FMT + "Failedo splitacket whenryingo fill " + +500 + `LNTS_PRI_ARGS +( +tif +, +ts +), + `t_d_wnd +(ts))); + +504 + `ci_t_tx_adv +( +ts +, +tif +); + +505 + } +} + + @udp.c + +14  + ~"_.h +" + +15  + ~"udp_.h +" + +16 #i +defed +( +_WIN32 +&& !defed( +__KERNEL__ +) + +17  + ~ + +21  + #LPF + "ci_udp_" + + ) + +22  + #LPFIN + "-> " +LPF + + + ) + +23  + #LPFOUT + "<- " +LPF + + + ) + +25  + #VERB +( +x +) + + ) + +31  + $ci_udp_hdrs_ +( +ci__ched_hdrs +* +che +) + +34 + `ci__hdr__fixed +(& +che +-> + +, +IPPROTO_UDP +, + +35 +CI_IP_DFLT_TTL +, +CI_IP_DFLT_TOS +); + +36 +che +-> + +. +_ddr_be32 + = 0; + +37 +che +-> + +. +_daddr_be32 + = 0; + +38 + } +} + +43  + $ci_udp_e_ +( +ci_tif +* +tif +, +ci_udp_e +* +us +) + +45 + `ci_sock_cmn_ +( +tif +, & +us +-> +s +, 1); + +49 if! + `NI_OPTS +( +tif +). +f_nd_mui + ) + +50 +us +-> +s +. + +. +sock__ags + | +OO_SCP_NO_MULTICAST +; + +53 + `CI_DEBUG +( + `memt +(& +us +-> +s + + 1, 0xf0, (*) (us + 1) - (*) (&us->s + 1))); + +57 #ifde +_WIN32 + + +58 + `ci__queue_ +(& +us +-> +async_tx_q +); + +61 + `ci_udp_cv_q_ +(& +us +-> +timeamp_q +); + +67 +us +-> +s +. +b +. +e + = +CI_TCP_STATE_UDP +; + +69 +us +-> +s +. +so +. +dbuf + = + `NI_OPTS +( +tif +). +udp_dbuf_def +; + +70 +us +-> +s +. +so +. +rcvbuf + = + `NI_OPTS +( +tif +). +udp_rcvbuf_def +; + +73 + `ci_udp_hdrs_ +(& +us +-> +s +. +pkt +); + +74 + `ci__che_ +(& +us +-> +hem_pkt +); + +75 + `ci_udp_hdrs_ +(& +us +-> +hem_pkt +); + +76 + `udp_t_be16 +( +us +) = 0; + +77 + `udp_t_be16 +( +us +) = 0; + +79 + `ci_udp_cv_q_ +(& +us +-> +cv_q +); + +80 +us +-> +zc_kl_dagm + = +OO_PP_NULL +; + +81 +us +-> +zc_kl_dagm_cou + = 0; + +82 +us +-> +tx_async_q + = +CI_ILL_END +; + +83 + `oo_omic_t +(& +us +-> +tx_async_q_v +, 0); + +84 +us +-> +tx_cou + = 0; + +85 +us +-> +udpags + = +CI_UDPF_MCAST_LOOP +; + +86 +us +-> +amp + = 0; + +87 + `memt +(& +us +-> +s +, 0, (us->stats)); + +88 + } +} + +91 +ci_udp_e +* + $ci_udp_g_e_buf +( +ci_tif +* +tif +) + +93 +cp_waab_obj +* +wo +; + +95 + `ci_as +( +tif +); + +97 +wo + = + `cp_waab_obj_loc +( +tif +); + +98 if +wo + ) { + +99 + `ci_udp_e_ +( +tif +, & +wo +-> +udp +); + +100  & +wo +-> +udp +; + +102  +NULL +; + +103 + } +} + +109 #ide +__KERNEL__ + + +110 #ide +__ci_driv__ + + +111 +ci_fd_t + + $ci_udp__ +( +cp_sock +* + +, +ci_tif +* +tif +,  +doma +,  +ty +) + +113 +ci_udp_e +* +us +; + +114 +ci_fd_t + +fd +; + +116 + `VERB + + `log +( +LPFIN + "ctor( )" ) ); + +118 + `ci_as +( + +); + +119 + `ci_as +( +tif +); + +121 + `ci_tif_lock +( +tif +); + +122 +us + = + `ci_udp_g_e_buf +( +tif +); + +123 i(! +us +) { + +124 + `ci_tif_uock +( +tif +); + +125 + `LOG_E +( + `ci_log +("%s: [%d] ouosock bufrs", +__FUNCTION__ +, + `NI_ID +( +tif +))); + +126  - +ENOMEM +; + +132 + `sock_oc +(& +us +-> +s + +IPPROTO_UDP +; + +135 +fd + = + `ci_t_hr_sock_ch +( + `ci_tif_g_driv_hd +( +tif +), + +136 + `SC_SP +(& +us +-> +s +), +doma +, +ty +); + +137 if +fd + < 0 ) { + +138 + `LOG_E +( + `ci_log +("%s: ci_tcp_helper_sock_attach(domain=%d,ype=%d) failed %d", + +139 +__FUNCTION__ +, +doma +, +ty +, +fd +)); + +140 + `ci_tif_uock +( +tif +); + +141  +fd +; + +144 + `ci_as +(~ +us +-> +s +. +b +. +sb_aags + & +CI_SB_AFLAG_ORPHAN +); + +146 +us +-> +s +. +rx_o + = 0; + +147 +us +-> +s +. +tx_o + = 0; + +148 +us +-> +s +. +so_r + = 0; + +150 + +-> +s + = & +us +->s; + +151 + +-> +tif + =etif; + +152 + `CHECK_UEP +( + +); + +153 + `ci_tif_uock +( +tif +); + +154  +fd +; + +155 + } +} + +159  + $ci_udp_t_ddr +( +cp_sock +* + +,  +ddr_be32 +,  +t_be16 +) + +161 +ci_udp_e +* +us + = + `SOCK_TO_UDP +( + +-> +s +); + +162 + `udp_ddr_be32 +( +us + +ddr_be32 +; + +163 + `udp_t_be16 +( +us +( +ci_ut16 + +t_be16 +; + +164 if + `CI_IP_IS_MULTICAST +( +ddr_be32 +) ) + +165 +us +-> +s +. + +. +_ddr_be32 + = 0; + +167 +us +-> +s +. + +. +_ddr_be32 + = +ddr_be32 +; + +168 +us +-> +s +. + +. +t_be16 + =port_be16; + +169 + } +} + +173 +ci_ut8 + + $ci_udp_g_tos + +ci_udp_e +* +us + ) + +175  + `UDP_IP_HDR +( +us +)-> +_tos +; + +176 + } +} + +179  + $ci_udp_t_tos + +ci_udp_e +* +us +, +ci_ut32 + +tos + ) + +181 + `ci__hdr__fixed +( + `UDP_IP_HDR +( +us +), +IPPROTO_UDP +, UDP_IP_HDR(us)-> +_l +, + +182 + `CI_MIN +( +tos +, +CI_IP_MAX_TOS +)); + +183 + } +} + +191 #ide +NDEBUG + + +193  + $ci_udp_e_as_vid +( +ci_tif +* +tif +, +ci_udp_e +* +us +, + +194 cڡ * +fe +,  +le +) + +196 + `ci_as +( +us +); + +198 + } +} + +201  + $ci_udp__as_vid +( +cp_sock +* + +, cڡ * +fe +,  +le +) + +203 +ci_tif +* +tif +; + +204 +ci_udp_e +* +us +; + +206 + `ci_as +( + +); + +207 +tif + = + +->netif; + +209 + `ci_tif_as_vid +( +tif +, +fe +, +le +); + +211 + `_ci_as_equ +( + +-> +s +-> +b +. +e +, +CI_TCP_STATE_UDP +, +fe +, +le +); + +212 +us + = + `SOCK_TO_UDP +( + +-> +s +); + +214 + `ci_udp_e_as_vid +( +tif +, +us +, +fe +, +le +); + +215 + } +} + +220 #unde +r + + +222 + $r + ( +ut64_t + +a +,  +b +) + +224 #i + `defed +( +__KERNEL__ +&& ( +CI_WORD_SIZE + == 4) + +226 () +a +; + +227 () +b +; + +230  (((( +b +? ( +ut64_t +( +a +) * 100 / (b) : 0)); + +232 + } +} + +234  + $ci_udp_cvq_dump +( +ci_tif +* +ni +, +ci_udp_cv_q +* +q +, + +235 cڡ * +pf1 +, cڡ * +pf2 +, + +236 +oo_dump_log__t + +logg +, * +log_g +) + +238 + `logg +( +log_g +, + +239 "%s%q_pkts=%dp=%d_pkts=%u", +pf1 +, +pf2 +, + +240 + `ci_udp_cv_q_pkts +( +q +), + `ci_udp_cv_q_ab +(q), + +241 +q +-> +pkts_added +); + +243 + } +} + +245  + $ci_udp_e_dump +( +ci_tif +* +ni +, +ci_udp_e +* +us +, cڡ * +pf +, + +246 +oo_dump_log__t + +logg +, * +log_g +) + +248 +ci_udp_sock_s + +uss + = +us +-> +s +; + +249  +rx_added + = +us +-> +cv_q +. +pkts_added +; + +250  +rx_os + = +uss +. +n_rx_os + + uss. +n_rx_os_ow +; + +251  +rx_tٮ + = +rx_added + + +uss +. +n_rx_mem_dr + + uss. +n_rx_ovow + + +rx_os +; + +252  +n_tx_ld + = +uss +. +n_tx_ld_uc + + uss. +n_tx_ld_c +; + +253  +tx_tٮ + = +n_tx_ld + + +uss +. +n_tx_os +; + +254 +ci__ched_hdrs +* +che +; + +256 ( +rx_tٮ +; + +257 ( +tx_tٮ +; + +259 if +us +-> +s +. +timeampg_ags + & +ONLOAD_SOF_TIMESTAMPING_TX_HARDWARE + ) + +260 + `ci_udp_cvq_dump +( +ni +, & +us +-> +timeamp_q +, +pf +, " TXimestamping queue:", + +261 +logg +, +log_g +); + +264 + `logg +( +log_g +, "% udpags: " +CI_UDP_STATE_FLAGS_FMT +, +pf +, + +265 + `CI_UDP_STATE_FLAGS_PRI_ARG +( +us +)); + +268 + `ci_udp_cvq_dump +( +ni +, & +us +-> +cv_q +, +pf +, "cv:", +logg +, +log_g +); + +269 + `logg +( +log_g +, + +271 "q_max_pkts=%u", +pf +, +uss +. +n_rx_ovow +, + +272 + `r +( +uss +. +n_rx_ovow +, +rx_tٮ +), + +273 +uss +. +n_rx_mem_dr +, uss. +n_rx_ga +, uss. +n_rx_pktfo +, + +274 +uss +. +max_cvq_pkts +); + +275 + `logg +( +log_g +, "%cv: os=%u(%u%%os_ow=%u os_r=%u", +pf +, + +276 +rx_os +, + `r +x_os, +rx_tٮ +), +uss +. +n_rx_os_ow +, uss. +n_rx_os_r +); + +279 + `logg +( +log_g +, "% snd: q=%u+%u ul=%u os=%u(%u%%)", +pf +, + +280 +us +-> +tx_cou +, + `oo_omic_ad +(&us-> +tx_async_q_v +), + +281 +n_tx_ld +, +uss +. +n_tx_os +, + `r +(uss.n_tx_os, +tx_tٮ +)); + +282 + `logg +( +log_g +, + +284 "der=%u(%u%%)", +pf +, + +285 +uss +. +n_tx_lock_ +, + `r +(uss.n_tx_lock_, +n_tx_ld +), + +286 +uss +. +n_tx_lock_pkt +, + `r +(uss.n_tx_lock_pkt, +n_tx_ld +), + +287 +uss +. +n_tx_lock_d +, + `r +(uss.n_tx_lock_d, +n_tx_ld +), + +288 +uss +. +n_tx_lock_pl +, + `r +(uss.n_tx_lock_pl, +n_tx_ld +), + +289 +uss +. +n_tx_lock_der +, + `r +(uss.n_tx_lock_der, +n_tx_ld +)); + +291 + `logg +( +log_g +, "% snd: MCAST if=%d src=" +OOF_IP4 +"=%d", +pf +, + +292 +us +-> +s +. + +. +_mui_if +, + +293 + `OOFA_IP4 +( +us +-> +s +. + +. +_mui_if_ddr_be32 +), + +294 ( +us +-> +s +. + +. +_m_l +); + +297 +che + = & +us +-> +hem_pkt +; + +298 + `logg +( +log_g +, + +300 "lookup=%u+%u(%u%%" +OOF_IPCACHE_STATE +, + +301 +pf +, +uss +. +n_tx_ld_uc +, + +302 +uss +. +n_tx__mch +, + `r +(uss.n_tx__mch, uss. +n_tx_ld_uc +), + +303 +uss +. +n_tx__uc_lookup +, uss. +n_tx__a_lookup +, + +304 + `r +( +uss +. +n_tx__uc_lookup + + uss. +n_tx__a_lookup +, + +305 +uss +. +n_tx_ld_uc +), + +306 + `OOFA_IPCACHE_STATE +( +ni +, +che +)); + +307 + `logg +( +log_g +, "% snd: TO " +OOF_IPCACHE_DETAIL +, +pf +, + +308 + `OOFA_IPCACHE_DETAIL +( +che +)); + +309 + `logg +( +log_g +, "% snd: TO " +OOF_IP4PORT +" => "OOF_IP4PORT, +pf +, + +310 + `OOFA_IP4PORT +( +che +-> +_ddr_be32 +, + `udp_t_be16 +( +us +)), + +311 + `OOFA_IP4PORT +( +che +-> + +. +_daddr_be32 +, ipche-> +dpt_be16 +)); + +314 +che + = & +us +-> +s +. +pkt +; + +315 + `logg +( +log_g +, "% snd: CON=%dookup=%d " +OOF_IPCACHE_STATE +, +pf +, + +316 +uss +. +n_tx_ld_c +, uss. +n_tx__c_lookup +, + +317 + `OOFA_IPCACHE_STATE +( +ni +, +che +)); + +318 + `logg +( +log_g +, "% snd: CON " +OOF_IPCACHE_DETAIL +, +pf +, + +319 + `OOFA_IPCACHE_DETAIL +( +che +)); + +321 + `logg +( +log_g +, "% snd:aga=%d sp=%d block=%d", +pf +, + +322 +uss +. +n_tx_ga +, uss. +n_tx_ +, uss. +n_tx_block +); + +323 + `logg +( +log_g +, "% snd:l_avoids_fu=%d fgmts=%d cfm=%d", +pf +, + +324 +uss +. +n_tx_pl_avoids_fu +, uss. +n_tx_agmts +, uss. +n_tx_msg_cfm +); + +325 + `logg +( +log_g +, + +326 "% snd: os_ow=%d os_ϋ=%d unc_ϋ=%domac=%u(%u%%)", +pf +, + +327 +uss +. +n_tx_os_ow +, uss. +n_tx_os_ϋ +, uss. +n_tx_unc_ϋ +, + +328 +uss +. +n_tx__no_mac +, + `r +(uss.n_tx__no_mac, +tx_tٮ +)); + +329 + } +} + + @udp_connect.c + +15  + ~"_.h +" + +16  + ~ + +18 #ifde +ONLOAD_OFE + + +19  + ~"o/ld.h +" + +22 #ide +__KERNEL__ + + +23  + ~ + +26  + #LPF + "ci_udp_" + + ) + +27  + #LPFIN + "-> " +LPF + + + ) + +28  + #LPFOUT + "<- " +LPF + + + ) + +30  + #INADDR_ANY_BE32 + ( + `CI_BSWAPC_BE32 +( +INADDR_ANY +)) + + ) + +32 #ide +__ci_driv__ + + +34 #ide +NDEBUG + + +35 * + $ci_udp_addr_r + +ci_udp_e +* +us + ) + +37  +buf +[128]; + +39 + `ci_as +( +us +); + +40 + `rtf + +buf +, "L[%s:%d] R[%s:%d]", + +41 + `_addr_r + + `udp_ddr_be32 +( +us +)), + +42 + `CI_BSWAP_BE16 +( + `udp_t_be16 +( +us +)), + +43 + `_addr_r + + `udp_ddr_be32 +( +us +)), + +44 + `CI_BSWAP_BE16 +( + `udp_t_be16 +( +us +)) ); + +45  +buf +; + +46 + } +} + +47  + #CI_UDP_EP_ADDR_STR +( + +) \ + +48 + `ci_udp_addr_r +(( + +)-> +e +) + + ) + +50  + #CI_UDPSTATE_SHOW +( +us +) \ + +51 + `LOG_UV +( + `log +( "%s: %d UDP %s Fl[%s]", \ + +52 +__FUNCTION__ +, + `S_FMT +( +us +), \ + +53 + `ci_udp_addr_r +(( +us +)), \ + +54 + `UDP_GET_FLAG +(( +us +), +CI_UDPF_FILTERED +) ? "Flt " : "" \ + +55 )) + + ) + +57  + #CI_UDPSTATE_SHOW_EP +( + +) \ + +58 + `CI_UDPSTATE_SHOW + + `SOCK_TO_UDP +(( + +)-> +s +) + + ) + +62  + #CI_UDPSTATE_SHOW +( +us +) + + ) + +63  + #CI_UDPSTATE_SHOW_EP +( + +) + + ) + +69  + $ci_udp_sys_gsockme + +ci_fd_t + +sock +, +cp_sock +* + + ) + +71 +sockn_t + +n +; + +72  +rc +; + +73  +ci_sockaddr_u + +_u +; + +75 + `ci_as +( + +); + +76 #i +CI_CFG_FAKE_IPV6 + + +77 + `ci_as +( + +-> +s +-> +doma + = +AF_INET + ||p->s->doma = +AF_INET6 +); + +79 + `ci_as +( + +-> +s +-> +doma + = +AF_INET +); + +82 +n + = ( +_u +); + +84 #ifde +_WIN32 + + +85 +rc + = + `ci_sys_gsockme + + +, & +_u +. + +, & +n + ); + +87 +rc + = + `ci_sys_gsockme + +sock +, & +_u +. + +, & +n + ); + +89 if +rc + ) + +90  +rc +; + +92 if +_u +. + +. +_my + ! + +-> +s +-> +doma + || +n + < ( +sockaddr_ +) + +93 #i +CI_CFG_FAKE_IPV6 + + +94 || ( + +-> +s +-> +doma + = +AF_INET6 + && +n + < ( +sockaddr_6 +) ) + +97 + `LOG_UV +( + `log +("%s: OS sock domain %d !=xpected domain %d or " + +99 +__FUNCTION__ +, +_u +. + +. +_my +, + +-> +s +-> +doma +, + +100 +n +, + +101 ()( + +-> +s +-> +doma + = +AF_INET + ? ( +sockaddr_ +) : + +102 ( +sockaddr_6 +)))); + +106 #i +CI_CFG_FAKE_IPV6 + + +107 if + +-> +s +-> +doma + = +AF_INET + ) { + +108 + `ci_udp_t_ddr + + +, + `ci_g_4_addr +( +_u +. + +. +_my +, &sa_u.sa), + +109 +_u +. +s +. +s_pt + ); + +112 + `ci_udp_t_ddr + + +, + `ci_g_4_addr +( +_u +. + +. +_my +, &sa_u.sa), + +113 +_u +. +s6 +. +s6_pt + ); + +116 + `ci_udp_t_ddr + + +, + `ci_g_4_addr +( +_u +. + +. +_my +, &sa_u.sa), + +117 +_u +. +s +. +s_pt + ); + +125  +nic +; + +126 if((( +sockaddr_ +*)& + +)-> +s_addr +. +s_addr + ! +INADDR_ANY +) && + +127 ! + `ci_iibl_is_eb_addr + + +-> +tif +, + +128 (( +sockaddr_ +*)& + +)-> +s_addr +. +s_addr +, + +129 & +nic +)) { + +130 + `ci_log +(" %s: srIP % %s:%d in o oours!", +__FUNCTION__ +, + +131 + `_addr_r +((( +sockaddr_ +*)& + +)-> +s_addr +. +s_addr + ), + +132 + `_addr_r +((( +sockaddr_ +*)& + +)-> +s_addr +. +s_addr + ), + +133 (( +sockaddr_ +*)& + +)-> +s_pt + ); + +134 + `ci_as +(0); + +139 + } +} + +142 +ci_le +  + $ci_udp_sys_disc + +ci_fd_t + +sock +, +cp_sock +* + + ) + +144  +sockaddr_ + +s +; + +146 #ifde +_WIN32 + + +147 +s +. +s_my + = +AF_INET +; + +148 +s +. +s_addr +. +s_addr + = +INADDR_ANY +; + +149 +s +. +s_pt + = 0; + +150  + `ci_sys_c + + +, ( +sockaddr +*)& +s +, (sin) ); + +152 +s +. +s_my + = +AF_UNSPEC +; + +153  + `ci_sys_c + +sock +, ( +sockaddr +*)& +s +, (sin) ); + +155 + } +} + +158  + $ci_udp_r_frs +( +cp_sock +* + +) + +160 +ci_udp_e +* +us + = + `SOCK_TO_UDP +( + +-> +s +); + +161 if + `UDP_GET_FLAG +( +us +, +CI_UDPF_FILTERED +) ) { + +162 + `ci_t__r_frs +( + +-> +tif +, + `S_SP +( +us +), 0); + +163 + `UDP_CLR_FLAG +( +us +, +CI_UDPF_FILTERED +); + +165 + } +} + +168  + $ci_udp_t_frs +( +cp_sock +* + +, +ci_udp_e +* +us +) + +170  +rc +; + +172 + `ci_as +( + +); + +173 + `ci_as +( +us +); + +175 if + `udp_t_be16 +( +us +) == 0 ) + +178 +rc + = + `ci_t__t_frs +( + +-> +tif +, + `S_SP +( +us +), us-> +s +. + +. +so_bdtodevi +, + +179 +OO_SP_NULL +); + +180 if +rc + =- +EFILTERSSOME + ) { + +181 if +CITP_OPTS +. +no_ + ) + +182 +rc + = 0; + +184 + `ci_t__r_frs +( + +-> +tif +, + `S_SP +( +us +), 0); + +185 +rc + = - +ENOBUFS +; + +188 if +rc + < 0 ) { + +189 + `LOG_UC +( + `log +( +FNS_FMT + "ci_tcp_ep_set_filters failed (%d)", + +190 + `FNS_PRI_ARGS +( + +-> +tif +,p-> +s +), - +rc +)); + +191 + `CI_SET_ERROR +( +rc +, -rc); + +192  +rc +; + +194 + `UDP_SET_FLAG +( +us +, +CI_UDPF_FILTERED +); + +196 + } +} + +203  + $ci_udp_should_hdov +( +cp_sock +* + +, cڡ  +sockaddr +* +addr +, + +204 +ci_ut16 + +t +) + +206 +ci_ut32 + +addr_be32 +; + +208 #i +CI_CFG_FAKE_IPV6 + + +209 if + +-> +s +-> +doma + = +AF_INET6 + && ! + `ci_t_v6_is_v4 +( +addr +) ) + +210  +hdov +; + +213 if( + `CI_BSWAP_BE16 +( +t +> + `NI_OPTS +( + +-> +tif +). +udp_pt_hdov_m + && + +214 + `CI_BSWAP_BE16 +( +t +< + `NI_OPTS +( + +-> +tif +). +udp_pt_hdov_max +) || + +215 ( + `CI_BSWAP_BE16 +( +t +> + `NI_OPTS +( + +-> +tif +). +udp_pt_hdov2_m + && + +216 + `CI_BSWAP_BE16 +( +t +< + `NI_OPTS +( + +-> +tif +). +udp_pt_hdov2_max +) || + +217 ( + `CI_BSWAP_BE16 +( +t +> + `NI_OPTS +( + +-> +tif +). +udp_pt_hdov3_m + && + +218 + `CI_BSWAP_BE16 +( +t +< + `NI_OPTS +( + +-> +tif +). +udp_pt_hdov3_max +) ) { + +219 + `LOG_UC +( + `log +( +FNS_FMT + "HANDOVER (%d <= %d <= %d)", + +220 + `FNS_PRI_ARGS +( + +-> +tif +,p-> +s +), + +221 + `NI_OPTS +( + +-> +tif +). +udp_pt_hdov_m +, + +222 + `CI_BSWAP_BE16 +( +t +), + +223 + `NI_OPTS +( + +-> +tif +). +udp_pt_hdov_max +)); + +224  +hdov +; + +227 +addr_be32 + = + `ci_g_4_addr +( + +-> +s +-> +doma +, +addr +); + +228 if +addr_be32 + ! + `CI_BSWAPC_BE32 +( +INADDR_ANY +) && + +229 ! + `ci_ur_addr_is_lol_eb +( + `CICP_HANDLE +( + +-> +tif +), & +addr_be32 +) && + +230 ! + `CI_IP_IS_MULTICAST +( +addr_be32 +) ) { + +235  +hdov +; + +239 +hdov +: + +241 + } +} + +247  + $ci_udp_bd_cude +( +cp_sock +* + +, cڡ  +sockaddr +* +addr +, + +248 +ci_ut16 + +t + ) + +250 +ci_udp_e +* +us +; + +251 +ci_ut32 + +addr_be32 +; + +252  +rc +; + +254 + `CHECK_UEP +( + +); + +255 + `ci_as +( +addr + ! +NULL +); + +257 if + `ci_udp_should_hdov +( + +, +addr +, +t +) ) + +258  +hdov +; + +260 +addr_be32 + = + `ci_g_4_addr +( + +-> +s +-> +doma +, +addr +); + +262 + `ci_udp_t_ddr +( + +, +addr_be32 +, +t +); + +263 +us + = + `SOCK_TO_UDP +( + +-> +s +); + +264 if +addr_be32 + != 0 ) + +265 +us +-> +s +. + +. +sock__ags + | +OO_SCP_LADDR_BOUND +; + +267 + `UDP_CLR_FLAG +( +us +, +CI_UDPF_EF_SEND +); + +269 #ifde +ONLOAD_OFE + + +270 if + +-> +tif +-> +o_chl + ! +NULL + ) + +271 +us +-> +s +. +o_code_t + = + `o_socktbl_fd +( + +272 + +-> +tif +-> +o +, +OFE_SOCKTYPE_UDP +, + +273 + `udp_ddr_be32 +( +us +), + `udp_ddr_be32 +(us), + +274 + `udp_t_be16 +( +us +), + `udp_t_be16 +(us)); + +276 +us +-> +s +. +o_code_t + = +OFE_ADDR_NULL +; + +282 +rc + = + `ci_udp_t_frs + + +, +us +); + +283 + `ci_as +! + `UDP_GET_FLAG +( +us +, +CI_UDPF_EF_BIND +) ); + +285 if + `udp_ddr_be32 +( +us +! +INADDR_ANY_BE32 + ) + +286 + `UDP_SET_FLAG +( +us +, +CI_UDPF_EF_BIND +); + +287 + `CI_UDPSTATE_SHOW_EP + + + ); + +288 if +rc + = +CI_SOCKET_ERROR + && +CITP_OPTS +. +no_ +) { + +289 + `CITP_STATS_NETIF +(++ + +-> +tif +-> +e +-> +s +. +udp_bd_no_fr +); + +290  +hdov +; + +292  +rc +; + +294 +hdov +: + +295 + `LOG_UV +( + `log +("%s: " +SK_FMT +" HANDOVER", +__FUNCTION__ +, + `SK_PRI_ARGS +( + +))); + +296  +CI_SOCKET_HANDOVER +; + +297 + } +} + +300  + $ci_udp_hd_f_upt +( +ci_fd_t + +fd +, +cp_sock +* + +, + +301 cڡ  +sockaddr +* + +, +sockn_t + +_n +) + +303  +rc +; + +305 if +CITP_OPTS +. +udp_upts + != 0 && + +306 (( +sockaddr_ +*) + +)-> +s_pt + != 0 ) { + +307  +ci_pt_li + * +f_upt +; + +308 + `CI_DLLIST_FOR_EACH2 +( +ci_pt_li +, +f_upt +, +lk +, + +309 ( +ci_di +*)( +ci_u_t +) +CITP_OPTS +. +udp_upts +) { + +310 if +f_upt +-> +pt + =(( +sockaddr_ +*) + +)-> +s_pt + ) { + +311  +e + = 1; + +312 +ci_fd_t + +os_sock + = + `ci_g_os_sock_fd +( +fd +); + +313 + `ci_as +( + `CI_IS_VALID_SOCKET +( +os_sock +)); + +314 +rc + = + `ci_sys_tsockt +( +os_sock +, +SOL_SOCKET +, +SO_REUSEPORT +, & +e +, + +315 ( +e +)); + +316 + `ci_l_os_sock_fd +( +os_sock +); + +318 if +rc + != 0 ) { + +319 + `log +("%s: failedo set SO_REUSEPORT on OS socket: " + +320 "rc=%dno=%d", +__func__ +, +rc +, +o +); + +322 + +-> +s +-> +s_ags + | +CI_SOCK_FLAG_REUSEPORT +; + +323 + `LOG_UC +( + `log +("%" +SF_FMT +",ppliedegacy SO_REUSEPORT flag forort %u", + +324 +__FUNCTION__ +, + `SF_PRI_ARGS +( + +, +fd +), +f_upt +-> +pt +)); + +328 + } +} + +333  + $ci_udp_upt_bd +( +cp_sock +* + +, +ci_fd_t + +fd +, + +334 cڡ  +sockaddr +* + +, +sockn_t + +_n +) + +336  +rc +; + +337 +ci_ut32 + +ddr_be32 + = + `ci_g_4_addr +( + +-> +s +-> +doma +, + +); + +338  +t_be16 + = (( +sockaddr_ +*) + +)-> +s_pt +; + +339 + `ci_as_qu +( + +-> +s +-> +s_ags + & +CI_SOCK_FLAG_REUSEPORT +, 0); + +346 if +t_be16 + == 0 ) { + +347 + `LOG_UC +( + `ci_log +("%s: Bindingoort 0 witheuseport setot supported", + +348 +__FUNCTION__ +)); + +349 + `RET_WITH_ERRNO +( +ENOSYS +); + +352 if( +rc + = + `ci_t__upt_bd +( +fd +, +CITP_OPTS +. +u_me +, + +353 +CITP_OPTS +. +u_size +, + +354 +CITP_OPTS +. +u_t_t +, +ddr_be32 +, + +355 +t_be16 +)) != 0 ) { + +356 +o + = - +rc +; + +359  +rc +; + +360 + } +} + +368  + $ci_udp_bd +( +cp_sock +* + +, +ci_fd_t + +fd +, cڡ  +sockaddr +* +addr +, + +369 +sockn_t + +add +) + +371  +rc +; + +372 +ci_ut16 + +lol_pt +; + +374 + `CHECK_UEP +( + +); + +375 + `LOG_UC +( + `log +("%s(" +SF_FMT +",dd=%d)", +__FUNCTION__ +, + +376 + `SF_PRI_ARGS +( + +, +fd +), +add +)); + +383 + `ci_udp_r_frs +( + +); + +385 +rc + = + `ci_t_hr_bd_os_sock +( +fd +, +addr +, +add +, & +lol_pt +); + +387 if +rc + = +CI_SOCKET_ERROR + ) + +388  +rc +; + +389  + `ci_udp_bd_cude +( + +, +addr +, +lol_pt + ); + +390 + } +} + +393  + $ci_udp_t_ddr +( +ci_udp_e +* +us +,  +ddr_be32 +, + +394  +t_be16 +) + +396 + `ci__che_vide +(& +us +-> +s +. +pkt +); + +397 + `udp_ddr_be32 +( +us + +ddr_be32 +; + +398 + `udp_t_be16 +( +us +( +ci_ut16 + +t_be16 +; + +399 +us +-> +s +. +pkt +. +dpt_be16 + = ( +ci_ut16 + +t_be16 +; + +400 + } +} + +403 #ide +_WIN32 + + +404  + #IS_DISCONNECTING +( +s +(s)-> +s_my + = +AF_UNSPEC + ) + + ) + +406  + #IS_DISCONNECTING +( +s +((s)-> +s_addr +. +s_addr + = +INADDR_ANY + && \ + +407 (( +s +)-> +s_my + = +AF_INET + || \ + +408 ( +s +)-> +s_my + = +AF_UNSPEC +)) + + ) + +413 + $ci_udp_disc +( +cp_sock +* + +, +ci_udp_e +* +us +, +ci_fd_t + +os_sock +) + +415  +rc +; + +417 if( +rc + = + `ci_udp_sys_gsockme +( +os_sock +, + +)) != 0 ) { + +418 + `LOG_E +( + `log +( +FNS_FMT + "ERROR: sys_getsockname failed (%d)", + +419 + `FNS_PRI_ARGS +( + +-> +tif +,p-> +s +), +o +)); + +420  +rc +; + +422 + `ci_udp_t_ddr +( +us +, 0, 0); + +428 + `ci_udp_r_frs +( + +); + +430 #ifde +ONLOAD_OFE + + +431 if + +-> +tif +-> +o_chl + ! +NULL + ) + +432 +us +-> +s +. +o_code_t + = + `o_socktbl_fd +( + +433 + +-> +tif +-> +o +, +OFE_SOCKTYPE_UDP +, + +434 + `udp_ddr_be32 +( +us +), + `udp_ddr_be32 +(us), + +435 + `udp_t_be16 +( +us +), + `udp_t_be16 +(us)); + +437 +us +-> +s +. +o_code_t + = +OFE_ADDR_NULL +; + +440 if( +rc + = + `ci_udp_t_frs +( + +, +us +)) != 0 ) + +442 + `LOG_U +( + `log +( +FNS_FMT + "ERROR: ci_udp_set_filters failed (%d)", + +443 + `FNS_PRI_ARGS +( + +-> +tif +,p-> +s +), +o +)); + +444 +us +-> +s +. + +. +sock__ags + &~ +OO_SCP_CONNECTED +; + +446 + } +} + +453  + $ci_udp_c_cude +( +cp_sock +* + +, +ci_fd_t + +fd +, + +454 cڡ  +sockaddr +* +rv_addr +, + +455 +sockn_t + +add +, +ci_fd_t + +os_sock +) + +457 cڡ  +sockaddr_ +* +rv_s + = (cڡ sockaddr_* +rv_addr +; + +458 +ci_ut32 + +d_be32 +; + +459 +ci_udp_e +* +us + = + `SOCK_TO_UDP +( + +-> +s +); + +460  +ldab +; + +461  +rc + = 0; + +463 + `CHECK_UEP +( + +); + +465 + `UDP_CLR_FLAG +( +us +, +CI_UDPF_EF_SEND +); + +466 +us +-> +s +. +rx_o + = 0; + +467 +us +-> +s +. +tx_o + = 0; + +469 if + `IS_DISCONNECTING +( +rv_s +) ) { + +470 +rc + = + `ci_udp_disc +( + +, +us +, +os_sock +); + +471  +out +; + +473 #i +CI_CFG_FAKE_IPV6 + + +474 if +us +-> +s +. +doma + = +PF_INET6 + && ! + `ci_t_v6_is_v4 +( +rv_addr +) ) { + +475 + `LOG_UC +( + `log +( +FNT_FMT + "HANDOVER IPv4", + `FNT_PRI_ARGS +( + +-> +tif +, +us +))); + +476  +hdov +; + +480 +d_be32 + = + `ci_g_4_addr +( +rv_s +-> +s_my +, +rv_addr +); + +481 if( +rc + = + `ci_udp_sys_gsockme +( +os_sock +, + +)) != 0 ) { + +482 + `LOG_E +( + `log +( +FNT_FMT + "ERROR: (%s:%d) sys_getsockname failed (%d)", + +483 + `FNT_PRI_ARGS +( + +-> +tif +, +us +), + `_addr_r +( +d_be32 +), + +484 + `CI_BSWAP_BE16 +( +rv_s +-> +s_pt +), +o +)); + +485  +out +; + +488 +us +-> +s +. + +. +sock__ags + | +OO_SCP_CONNECTED +; + +489 + `ci_udp_t_ddr +( +us +, +d_be32 +, +rv_s +-> +s_pt +); + +490 + `ci_ur_ve +( + +-> +tif +, & +us +-> +s +. +pkt +, &us->s. + +); + +492  +us +-> +s +. +pkt +. +us + ) { + +493  +rc_sucss +: + +494  +rc_nomac +: + +495 +ldab + = 1; + +498 +ldab + = 0; + +499 if + `NI_OPTS +( + +-> +tif +). +udp_c_hdov + ) { + +500 + `LOG_UC +( + `log +( +FNT_FMT + "HANDOVER %s:%d", + `FNT_PRI_ARGS +( + +-> +tif +, +us +), + +501 + `_addr_r +( +d_be32 +), + `CI_BSWAP_BE16 +( +rv_s +-> +s_pt +))); + +502  +hdov +; + +507 #ide +_WIN32 + + +508 if +d_be32 + = +INADDR_ANY_BE32 + || +rv_s +-> +s_pt + == 0 ) { + +509 + `LOG_UC +( + `log +( +FNT_FMT + "%s:%d -oute via OS socket", + +510 + `FNT_PRI_ARGS +( + +-> +tif +, +us +), + `_addr_r +( +d_be32 +), + +511 + `CI_BSWAP_BE16 +( +rv_s +-> +s_pt +))); + +512 + `ci_udp_r_frs +( + +); + +515 if + `CI_IP_IS_LOOPBACK +( +d_be32 +) ) { + +519 + `LOG_UC +( + `log +( +FNT_FMT + "HANDOVER %s:%d", + `FNT_PRI_ARGS +( + +-> +tif +, +us +), + +520 + `_addr_r +( +d_be32 +), + `CI_BSWAP_BE16 +( +rv_s +-> +s_pt +))); + +521  +hdov +; + +525 if +ldab + ) { + +526 #ifde +ONLOAD_OFE + + +527 if + +-> +tif +-> +o_chl + ! +NULL + ) + +528 +us +-> +s +. +o_code_t + = + `o_socktbl_fd +( + +529 + +-> +tif +-> +o +, +OFE_SOCKTYPE_UDP +, + +530 + `udp_ddr_be32 +( +us +), + `udp_ddr_be32 +(us), + +531 + `udp_t_be16 +( +us +), + `udp_t_be16 +(us)); + +533 +us +-> +s +. +o_code_t + = +OFE_ADDR_NULL +; + +536 if( +rc + = + `ci_udp_t_frs +( + +, +us +)) != 0 ) { + +545 + `LOG_U +( + `log +( +FNT_FMT + "ERROR: (%s:%d) ci_udp_set_filters failed (%d)", + +546 + `FNT_PRI_ARGS +( + +-> +tif +, +us +), + `_addr_r +( +d_be32 +), + +547 + `CI_BSWAP_BE16 +( +rv_s +-> +s_pt +), +rc +)); + +548 + `CITP_STATS_NETIF +(++ + +-> +tif +-> +e +-> +s +. +udp_c_no_fr +); + +549  +out +; + +553 + `ci_udp_r_frs +( + +); + +556 + `LOG_UC +( + `log +( +LPF + "c: " +SF_FMT +" %sCONNECTED L:%s:%u R:%s:%u (err:%d)", + +557 + `SF_PRI_ARGS +( + +, +fd +), + `udp_ddr_be32 +( +us +) ? "" : "DIS", + +558 + `_addr_r +( + `udp_ddr_be32 +( +us +)), + +559 ( + `CI_BSWAP_BE16 +( + `udp_t_be16 +( +us +)), + +560 + `_addr_r +( + `udp_ddr_be32 +( +us +)), + +561 ( + `CI_BSWAP_BE16 +( + `udp_t_be16 +( +us +)), +o +)); + +564 +out +: + +565 if +rc + < 0 && +CITP_OPTS +. +no_ + ) + +566  +hdov +; + +567  +rc +; + +569 +hdov +: + +570 + `ci_udp_r_frs +( + +); + +571  +CI_SOCKET_HANDOVER +; + +572 + } +} + +592  + $ci_udp_c +( +cp_sock +* + +, +ci_fd_t + +fd +, + +593 cڡ  +sockaddr +* +rv_addr +, +sockn_t + +add + ) + +595  +rc +; + +596 +ci_fd_t + +os_sock +; + +598 + `CHECK_UEP +( + +); + +599 + `LOG_UC +( + `log +("%s(" +SF_FMT +",dd=%d)", +__FUNCTION__ +, + +600 + `SF_PRI_ARGS +( + +, +fd +), +add +)); + +602 +os_sock + = + `ci_g_os_sock_fd +( +fd +); + +603 if! + `CI_IS_VALID_SOCKET + +os_sock + ) ) { + +604 + `LOG_U +( + `ci_log +("%s:backg sock", +__FUNCTION__ +)); + +618 #ide +_WIN32 + + +619 +rc + = + `ci_sys_c +( +os_sock +, +rv_addr +, +add +); + +621 +rc + = + `ci_sys_c +( + +, +rv_addr +, +add +); + +623 if +rc + != 0 ) { + +624 + `LOG_U +( + `log +("%s: sys_c faedno:%d", +__FUNCTION__ +, +o +)); + +625 + `ci_l_os_sock_fd +( +os_sock +); + +629 +rc + = + `ci_udp_c_cude + + +, +fd +, +rv_addr +, +add +, +os_sock +); + +630 + `ci_l_os_sock_fd +( +os_sock +); + +631  +rc +; + +632 + } +} + +635  + $__ci_udp_shutdown +( +ci_tif +* +tif +, +ci_udp_e +* +us +,  +how +) + +637 + `ci_as +( +tif +); + +638 + `ci_as +( +us +); + +640 #ide +_WIN32 + + +642 if + `udp_ddr_be32 +( +us +) == 0 ) + +643  - +ENOTCONN +; + +646  +how + ) { + +647  +SHUT_RD +: + +648 +us +-> +s +. +rx_o + | +CI_SHUT_RD +; + +650  +SHUT_WR +: + +651 +us +-> +s +. +rx_o + | +CI_SHUT_WR +; + +652 +us +-> +s +. +tx_o + = +EPIPE +; + +654  +SHUT_RDWR +: + +655 +us +-> +s +. +rx_o + |( +CI_SHUT_RD + | +CI_SHUT_WR +); + +656 +us +-> +s +. +tx_o + = +EPIPE +; + +657 + `ci_as +( + `UDP_IS_SHUT_RDWR +( +us +)); + +660 + `ci_ +(("'how'arameter of shutdown() must be verifiedarlier")); + +661  - +EINVAL +; + +665 + } +} + +670 #ide +__ci_driv__ + + +672  + $ci_udp_shutdown +( +cp_sock +* + +, +ci_fd_t + +fd +,  +how +) + +674 +ci_fd_t + +os_sock +; + +675  +rc +; + +677 + `CHECK_UEP +( + +); + +678 + `LOG_UV +( + `log +( +LPF + "shutdown(" +SF_FMT +", %d)", + `SF_PRI_ARGS +( + +, +fd +), +how +)); + +680 +os_sock + = + `ci_g_os_sock_fd +( +fd +); + +682 if + `CI_IS_VALID_SOCKET + +os_sock + ) ) { + +683 #ide +_WIN32 + + +684 +rc + = + `ci_sys_shutdown +( +os_sock +, +how +); + +686 +rc + = + `ci_sys_shutdown +( + +, +how +); + +688 + `ci_l_os_sock_fd + +os_sock + ); + +689 if +rc + < 0 ) + +690  +CI_SOCKET_ERROR +; + +693 +rc + = + `__ci_udp_shutdown +( + +-> +tif +, + `SOCK_TO_UDP +p-> +s +), +how +); + +695 if +rc + < 0 ) { + +696 + `CI_SET_ERROR +( +rc +, -rc); + +697  +rc +; + +700 + } +} + +704  + $ci_udp_gme +( +cp_sock +* + +,  +sockaddr +* +me +, +sockn_t +* +m +) + +706 +ci_udp_e +* +us +; + +708 + `CHECK_UEP +( + +); + +710 +us + = + `SOCK_TO_UDP +( + +-> +s +); + +717 if + `udp_ddr_be32 +( +us +) == 0 ) { + +718 + `RET_WITH_ERRNO +( +ENOTCONN +); + +719 } if +me + = +NULL + || +m + == NULL ) { + +720 + `RET_WITH_ERRNO +( +EFAULT +); + +721 #ifde +__sun__ + + +722 } if + `UDP_IS_SHUT_WR +( +us +|| + `UDP_IS_SHUT_RDWR +(us) ) { + +723 + `RET_WITH_ERRNO +( +EINVAL +); + +726 + `ci_addr_to_ur +( +me +, +m +, + +-> +s +-> +doma +, + +727 + `udp_t_be16 +( +us +), + `udp_ddr_be32 +(us)); + +730 + } +} + +735 #ifde +__ci_driv__ + + +737  + $ci_udp_l_fds_ge +( +ci_tif +* +tif +, +oo_ + +sock_id +,  +do_ +) + +745 +ci_udp_e +* +us + = + `SP_TO_UDP +( +tif +, +sock_id +); + +747 + `ci_as +( + `ci_tif_is_locked +( +tif +)); + +748 + `ci_as +( +us +-> +s +. +b +. +e + = +CI_TCP_STATE_UDP +); + +750 + `LOG_UC +( + `ci_log +("ci_udp_l_fds_ge: " +NTS_FMT +, + +751 + `NTS_PRI_ARGS +( +tif +, +us +))); + +753 if + `UDP_GET_FLAG +( +us +, +CI_UDPF_FILTERED +) ) { + +754 + `UDP_CLR_FLAG +( +us +, +CI_UDPF_FILTERED +); + +755 + `ci_t__r_frs +( +tif +, + `S_SP +( +us +), 0); + +757 + `ci_udp_cv_q_dr +( +tif +, & +us +-> +cv_q +); + +758 + `ci_ni_di_move +( +tif +, & +us +-> +s +. +_lk +); + +760 if + `OO_PP_NOT_NULL +( +us +-> +zc_kl_dagm +) ) { + +761 + `ci_tif_pkt_a_rx +( +tif +, + `PKT_CHK +ґif, +us +-> +zc_kl_dagm +)); + +762 +us +-> +zc_kl_dagm + = +OO_PP_NULL +; + +763 +us +-> +zc_kl_dagm_cou + = 0; + +769 if +do_ + ) { + +770 if +us +-> +tx_cou + == 0 ) + +771 + `ci_udp_e_ +( +tif +, +us +); + +773 + `CITP_STATS_NETIF_INC +( +tif +, +udp__wh_tx_aive +); + +775 + } +} + + @udp_internal.h + +12 #ide +__UDP_INTERNAL_H__ + + +13  + #__UDP_INTERNAL_H__ + + + ) + +16  + sci_udp_rx_div_e + { + +17 +ci_tif +* + mni +; + +18 +ci__pkt_fmt +* + mpkt +; + +19  + mdived +; + +20  + mqueued +; + +25 +ci_le +  + +26 + $ci_m_che_t_mac +( +ci_tif +* +ni +, +ci__ched_hdrs +* +che +, + +27  +daddr_be32 +) + +29 * +dho + = + `ci__che_h_dho +( +che +); + +30  +daddr + = + `CI_BSWAP_BE32 +(daddr); + +31 +dho +[0] = 1; + +32 +dho +[1] = 0; + +33 +dho +[2] = 0x5e; + +34 +dho +[3] = ( +daddr + >> 16) & 0x7f; + +35 +dho +[4] = ( +daddr + >> 8) & 0xff; + +36 +dho +[5] = +daddr + & 0xff; + +37 + `ci_mac_t_moly_vid +( + `CICP_USER_MIBS +( + `CICP_HANDLE +( +ni +)). +mac_ub +, + +38 & +che +-> +mac_gry +); + +39 + } +} + +42  + $ci_udp_rx_div +( +ci_sock_cmn +*, * +CI_HF +; + + @udp_ioctl.c + +14 #ifde +__lux__ + + +15  + ~ + +16  + ~ + +19  + ~"_.h +" + +20  + ~ + +21  + ~ + +24  + $ci_synchri_ock +( +ci_tif + * +ni +,  +oo_timesync +* +oo_ts_lol +) + +26 +ci_ut32 + +gc +; + +27  +oo_timesync + * +oo_ts + = +ni +-> +timesync +; + +32 if +oo_ts_lol +-> +gi_cou + ! +oo_ts +->generation_count ) { + +34 +gc + = +oo_ts +-> +gi_cou +; + +35 + `ci_rmb +(); + +36 +oo_ts_lol +-> +smohed_ticks + = +oo_ts +->smoothed_ticks; + +37 +oo_ts_lol +-> +smohed_ns + = +oo_ts +->smoothed_ns; + +38 +oo_ts_lol +-> +wl_ock +. +tv_c + = +oo_ts +->wall_clock.tv_sec; + +39 +oo_ts_lol +-> +wl_ock +. +tv_nc + = +oo_ts +->wall_clock.tv_nsec; + +40 +oo_ts_lol +-> +mo_ock +. +tv_c + = +oo_ts +->mono_clock.tv_sec; + +41 +oo_ts_lol +-> +mo_ock +. +tv_nc + = +oo_ts +->mono_clock.tv_nsec; + +42 +oo_ts_lol +-> +ock_made + = +oo_ts +->clock_made; + +43 + `ci_rmb +(); + +44 }  +gc + & 1 || g! +oo_ts +-> +gi_cou +); + +45 +oo_ts_lol +-> +gi_cou + = +gc +; + +47 + } +} + +50  + $ci_udp_compu_amp +( +ci_tif + * +ni +, +ci_ut64 + +amp +,  +timeec + * +ts +) + +52 +ci_ut64 + +d +, +d_c +, +d_nc +; + +53  +oo_timesync +* +oo_ts_lol +; + +54  +ns_ +; + +56 +oo_ts_lol + = &( + `__oo_r_thad_g +()-> +timesync +); + +57 + `ci_synchri_ock +( +ni +, +oo_ts_lol +); + +59 +ts +-> +tv_c + = +oo_ts_lol +-> +wl_ock +.tv_sec; + +60 +ts +-> +tv_nc + = +oo_ts_lol +-> +wl_ock +.tv_nsec; + +62 +ns_ + = () +oo_ts_lol +-> +smohed_ns + / + +63 () +oo_ts_lol +-> +smohed_ticks +; + +65 if +oo_ts_lol +-> +ock_made + > +amp + ) { + +70 +d + = ( +ci_ut64 +)(()( +oo_ts_lol +-> +ock_made + - +amp +* +ns_ +); + +71 +d_c + = +d + / 1000000000llu; + +72 +d_nc + = +d + % 1000000000llu; + +74 +ts +-> +tv_c + - +d_c +; + +75 if( +ts +-> +tv_nc + < +d_nc +){ + +76 -- +ts +-> +tv_c +; + +77 +ts +-> +tv_nc + += 1000000000; + +79 +ts +-> +tv_nc + - +d_nc +; + +86 +d + = ( +ci_ut64 +)(()( +amp + - +oo_ts_lol +-> +ock_made +* +ns_ +); + +87 +d_c + = +d + / 1000000000llu; + +88 +d_nc + = +d + % 1000000000llu; + +90 +ts +-> +tv_c + + +d_c +; + +91 +ts +-> +tv_nc + + +d_nc +; + +92 if( +ts +-> +tv_nc + > 1000000000){ + +93 ++ +ts +-> +tv_c +; + +94 +ts +-> +tv_nc + -= 1000000000; + +97 + } +} + +100  + $ci_udp_upde_amp_che +( +ci_tif + * +tif +, +ci_udp_e + * +us +, + +101 +ci_ut64 + * +amp +) + +103  +timeec + +ts +; + +105 + `ci_udp_compu_amp +( +tif +, * +amp +, & +ts +); + +113 * +amp + = 1; + +114 +us +-> +amp_che +. +tv_c + = +ts +.tv_sec; + +115 +us +-> +amp_che +. +tv_nc + = +ts +.tv_nsec; + +116 + } +} + +119  + $ci_udp_iol_siocgamp +( +ci_tif + * +tif +, +ci_udp_e + * +us +, + +120 * +g +,  +mios +) + +122 +ci_ut64 + +amp + = +us +->stamp; + +124 if +us +-> +s +. +cmsg_ags + & +CI_IP_CMSG_TIMESTAMP_ANY + ) + +125 +amp + = +us +-> +amp_e_ss +; + +127 if +amp + == 0 ) + +128  - +ENOENT +; + +129 if +g + = +NULL + ) + +130  - +EFAULT +; + +131 if +amp + != 1 ) { + +132 if +us +-> +s +. +cmsg_ags + & +CI_IP_CMSG_TIMESTAMP_ANY + ) + +133 + `ci_udp_upde_amp_che +( +tif +, +us +, &us-> +amp_e_ss +); + +135 + `ci_udp_upde_amp_che +( +tif +, +us +, &us-> +amp +); + +138 (( +timev +*) +g +)-> +tv_c + = +us +-> +amp_che +.tv_sec; + +139 if +mios + ) + +140 (( +timev +*) +g +)-> +tv_uc + = +us +-> +amp_che +. +tv_nc + / 1000; + +142 (( +timev +*) +g +)-> +tv_uc + = +us +-> +amp_che +. +tv_nc +; + +144 + } +} + +147  + $ci_udp_iol_ow +( +ci_tif +* +ni +, +ci_udp_e +* +us +, + +148 +ci_fd_t + +fd +,  +que +, * +g +) + +150  +os_rc +, +rc + = 0; + +155 if +que + ! +FIOASYNC + && + +156 ( +os_rc + = + `oo_os_sock_iol +( +ni +, +us +-> +s +. +b +. +bufid +, +que +, +g +, +NULL +)) < 0 ) + +157  +os_rc +; + +159  +que + ) { + +160  +FIONBIO +: + +164 + `CI_CMN_IOCTL_FIONBIO +(& +us +-> +s +, +g +); + +167  +FIOASYNC +: + +170 +rc + = + `ci_sys_iol +( +fd +, +que +, +g +); + +171 if +rc + < 0 ) { + +173 + `LOG_E +( + `ci_log +("%s: ERROR: FIOASYNC failed on fd=%dc=%drrno=%d", + +174 +__FUNCTION__ +, +fd +, +rc +, +o +)); + +175 +rc + = - +o +; + +179  +SIOCSPGRP +: + +184 +rc + = + `ci_sys_f +( +fd +, +F_SETOWN +, + `CI_IOCTL_GETARG +(, +g +)); + +185 if +rc + < 0 ) + +187 + `LOG_E +( + `ci_log +("%s: ERROR: fcntl(F_SETOWN) failed on fd=%dc=%drrno=%d", + +188 +__FUNCTION__ +, +fd +, +rc +, +o +)); + +189 +rc + = + `ci_cmn_iol +( +ni +, & +us +-> +s +, +que +, +g +, +os_rc +, 1); + +193 +rc + = + `ci_cmn_iol +( +ni +, & +us +-> +s +, +que +, +g +, +os_rc +, 1); + +196  +rc +; + +197 + } +} + +200  + $ci_udp_iol_locked +( +ci_tif +* +ni +, +ci_udp_e +* +us +, + +201 +ci_fd_t + +fd +,  +que +, * +g +) + +203  +rc +; + +205  +que + ) { + +206  +FIONREAD +: + +207 if! + `CI_IOCTL_ARG_OK +(, +g +) ) + +208  - +EFAULT +; + +209 +rc + = 1; + +210 if +rc + ) { + +218 +oo_pkt_p + +exa + = + `OO_ACCESS_ONCE +( +us +-> +cv_q +.extract); + +219 if + `OO_PP_NOT_NULL +( +exa +) ) { + +220 +ci__pkt_fmt +* +pkt + = + `PKT_CHK +( +ni +, +exa +); + +221 if( +pkt +-> +rx_ags + & +CI_PKT_RX_FLAG_RECV_Q_CONSUMED +) && + +222 + `OO_PP_NOT_NULL +( +pkt +-> +udp_rx_xt +) ) + +223 +pkt + = + `PKT_CHK +( +ni +,kt-> +udp_rx_xt +); + +224 if!( +pkt +-> +rx_ags + & +CI_PKT_RX_FLAG_RECV_Q_CONSUMED +) ) { + +225 *(* +g + = +pkt +-> +pf +. +udp +. +y_n +; + +233 if!( +us +-> +s +. +os_sock_us + & +OO_OS_STATUS_RX +) ) { + +234 *(*) +g + = 0; + +237  +sys_iol +; + +239  +TIOCOUTQ +: + +240 if! + `CI_IOCTL_ARG_OK +(, +g +) ) + +241  - +EFAULT +; + +243 *(*) +g + = +us +-> +tx_cou + + + `oo_omic_ad +(&us-> +tx_async_q_v +); + +246  +SIOCGSTAMP +: + +247 #i + `defed + +__lux__ +&& defed( +__KERNEL__ +) + +251 if! ( +us +-> +udpags + & +CI_UDPF_LAST_RECV_ON +) ) + +252  + `oo_os_sock_iol +( +ni +, +us +-> +s +. +b +. +bufid +, +que +, +g +, +NULL +); + +253  + `ci_udp_iol_siocgamp +( +ni +, +us +, +g +, 1); + +254  +SIOCGSTAMPNS +: + +255 if! ( +us +-> +udpags + & +CI_UDPF_LAST_RECV_ON +) ) + +256  + `oo_os_sock_iol +( +ni +, +us +-> +s +. +b +. +bufid +, +que +, +g +, +NULL +); + +257  + `ci_udp_iol_siocgamp +( +ni +, +us +, +g +, 0); + +260  + `ci_udp_iol_ow +( +ni +, +us +, +fd +, +que +, +g +); + +262 +sys_iol +: + +263  + `oo_os_sock_iol +( +ni +, +us +-> +s +. +b +. +bufid +, +que +, +g +, +NULL +); + +264 + } +} + +267  + $ci_udp_iol +( +cp_sock + * + +, +ci_fd_t + +fd +,  +que +, * +g +) + +269 +ci_tif +* +ni + = + +-> +tif +; + +270 +ci_udp_e +* +us + = + `SOCK_TO_UDP +( + +-> +s +); + +271  +rc +; + +273 + `ci_tif_lock +( +ni +); + +274 +rc + = + `ci_udp_iol_locked +( +ni +, +us +, +fd +, +que +, +g +); + +275 + `ci_tif_uock +( +ni +); + +276  +rc +; + +277 + } +} + + @udp_misc.c + +13  + ~"_.h +" + +14  + ~"udp_.h +" + +15  + ~ + +17  + #VERB +( +x +) + + ) + +20  + $ci_udp_e_ +( +ci_tif +* +ni +, +ci_udp_e +* +us +) + +22 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +23 + `ci_as +( +us +-> +s +. +b +. +e + = +CI_TCP_STATE_UDP +); + +24 + `ci_as +( + `ci_ni_di_is_lf_lked +( +ni +, & +us +-> +s +. +b +. +po_pl_lk +)); + +26 + `ci_udp_cv_q_dr +( +ni +, & +us +-> +timeamp_q +); + +28 + `cp_waab_obj_ +( +ni +, & +us +-> +s +. +b +); + +29 + } +} + +32  + $ci_udp_y_to__pkts +( +ci_tif +* +ni +, +ci_udp_e +* +us +,  +dei +) + +36 + } +} + +38  + $ci_udp_rfm_deed_sock_wk +( +ci_tif +* +ni +, +ci_udp_e +* +us +) + +40 + `ci_as +( +us +-> +s +. +b +. +e + = +CI_TCP_STATE_UDP +); + +42 + `ci_udp_ndmsg_nd_async_q +( +ni +, +us +); + +43 + } +} + + @udp_recv.c + +14  + #_GNU_SOURCE + + + ) + +16  + ~"_.h +" + +17  + ~ + +18 #i +defed +( +__unix__ +&& !defed( +__KERNEL__ +) + +19  + ~ + +22 #i! +defed +( +__KERNEL__ +) + +23  + ~ + +24  + ~ + +27  + #VERB +( +x +) + + ) + +29  + #LPF + "ci_udp_" + + ) + +30  + #LPFIN + +LPF + + + ) + +31  + #LPFOUT + +LPF + + + ) + +34  + #SLOWPATH_RET_IOVLEN_INITED + (1<<30) + + ) + +35  + #SLOWPATH_RET_ZERO + ( +SLOWPATH_RET_IOVLEN_INITED + + 1) + + ) + +54 #ifde +__sun__ + + +55  + #MSG_OOB_CHK + +MSG_OOB + + + ) + +57  + #MSG_OOB_CHK + 0 + + ) + +60 #ifde +MSG_ERRQUEUE + + +61  + #MSG_ERRQUEUE_CHK + +MSG_ERRQUEUE + + + ) + +63  + #MSG_ERRQUEUE_CHK + 0 + + ) + +66 #ifde +__lux__ + + +67 #ide +__KERNEL__ + + +68  + #HAVE_MSG_FLAGS + 1 + + ) + +70  + #HAVE_MSG_FLAGS + 0 + + ) + +72  + #LOCAL_MSG_TRUNC + +MSG_TRUNC + + + ) + +73 #i +defed +( +_WIN32 +) + +74  + #HAVE_MSG_FLAGS + 1 + + ) + +75  + #LOCAL_MSG_TRUNC + +MSG_PARTIAL + + + ) + +76 #i +defed +( +__sun__ +) + +77  + #HAVE_MSG_FLAGS + 0 + + ) + +79 #r +Hp +. + +83 +ci_udp_iomsg_gs + * + ma +; + +84 +ci_msghdr +* + mmsg +; + +85  + msock_locked +; + +86  + mags +; + +87 #i +HAVE_MSG_FLAGS + + +88  + mmsg_ags +; + +90 } + tci_udp_cv_fo +; + +93 +ci_le +  + $ci_udp_cvmsg_fl_msghdr +( +ci_tif +* +ni +, +ci_msghdr +* +msg +, + +94 cڡ +ci__pkt_fmt +* +pkt +, + +95 +ci_sock_cmn +* +s +) + +97 #ide +__KERNEL__ + + +98 cڡ +ci_udp_hdr +* +udp +; + +99 cڡ +ci_4_hdr +* + +; + +101 if +msg + ! +NULL + ) { + +102 if +msg +-> +msg_me + ! +NULL + ) { + +103 if +pkt +-> +ags + & +CI_PKT_FLAG_RX_INDIRECT + ) + +104 +pkt + = + `PKT_CHK_NNL +( +ni +,kt-> +ag_xt +); + +105 + + = + `oo__hdr_cڡ +( +pkt +); + +106 +udp + = (cڡ +ci_udp_hdr +*((* + + + + `CI_IP4_IHL +(ip)); + +107 + `ci_addr_to_ur +( + `CI_SA +( +msg +-> +msg_me +), &msg-> +msg_m +, + +108 +s +-> +doma +, +udp +-> +udp_sour_be16 +, + +-> +_ddr_be32 +); + +110 #ifde +__sun__ + + +112 +msg +-> +msg_m + = 0; + +116 + } +} + +119 +ci_le +  + $do_cy +(* +to +, cڡ * +om +,  +n_bys +) + +121 #ifde +__KERNEL__ + + +122  + `cy_to_ur +( +to +, +om +, +n_bys +) != 0; + +124 + `memy +( +to +, +om +, +n_bys +); + +127 + } +} + +130  + soo_cy_e + { + +131  + mpkt_ +; + +132  + mpkt_off +; + +133  + mbys_cݛd +; + +134  + mbys_to_cy +; + +135 cڡ * + mom +; + +136 cڡ +ci__pkt_fmt +* + mpkt +; + +139 +ci_le +  + +140 + $__oo_cy_ag_to_iovec_no_adv +( +ci_tif +* +ni +, + +141 +ci_iovec_r +* +piov +, + +142  +oo_cy_e + * +ocs +) + +144  +n +; + +146 +n + = + `CI_MIN +( +ocs +-> +pkt_ +, + `CI_IOVEC_LEN +(& +piov +-> +io +)); + +147 +n + = + `CI_MIN +, +ocs +-> +bys_to_cy +); + +148 if( + `CI_UNLIKELY + + `do_cy +( + `CI_IOVEC_BASE +(& +piov +-> +io +), + +149 +ocs +-> +om + + ocs-> +pkt_off +, +n +) != 0 )) + +150  - +EFAULT +; + +152 +ocs +-> +bys_cݛd + + +n +; + +153 +ocs +-> +pkt_off + + +n +; + +154 if +n + = +ocs +-> +bys_to_cy + ) + +157 +ocs +-> +bys_to_cy + - +n +; + +158 if +n + = +ocs +-> +pkt_ + ) { + +160 + `ci_as +( + `OO_PP_NOT_NULL +( +ocs +-> +pkt +-> +ag_xt +)); + +161 + `ci_iovec_r_adv +( +piov +, +n +); + +162 +ocs +-> +pkt + = + `PKT_CHK_NNL +( +ni +, ocs->pkt-> +ag_xt +); + +163 +ocs +-> +pkt_off + = 0; + +170 + `ci_as_equ +( +n +, + `CI_IOVEC_LEN +(& +piov +-> +io +)); + +171 if +piov +-> +iovn + == 0 ) + +173 +piov +-> +io + = *piov-> +iov +++; + +174 -- +piov +-> +iovn +; + +177 + } +} + +181 + $oo_cy_pkt_to_iovec_no_adv +( +ci_tif +* +ni +, cڡ +ci__pkt_fmt +* +pkt +, + +182 +ci_iovec_r +* +piov +,  +bys_to_cy +) + +191  +rc +; + +192  +oo_cy_e + +ocs +; + +193 +ocs +. +bys_cݛd + = 0; + +194 +ocs +. +bys_to_cy + = bytes_to_copy; + +195 +ocs +. +pkt_off + = 0; + +196 +ocs +. +pkt + =kt; + +199 +ocs +. +pkt_ + = + `oo_offbuf_ +(&(ocs. +pkt +-> +buf +)- ocs. +pkt_off +; + +200 +ocs +. +om + = + `oo_offbuf_r +(&(ocs. +pkt +-> +buf +)); + +201 +rc + = + `__oo_cy_ag_to_iovec_no_adv +( +ni +, +piov +, & +ocs +); + +202 if +rc + == 0 ) + +203  +ocs +. +bys_cݛd +; + +204 if +rc + == 1 ) + +206 if +rc + < 0 ) + +207  +rc +; + +209 + `ci_as +(0); + +211 + } +} + +214 #ide +__KERNEL__ + + +217 + $ci_udp_timeamp_q_pkt_to_iovec +( +ci_tif +* +ni +, cڡ +ci__pkt_fmt +* +pkt +, + +218 +ci_iovec_r +* +piov +) + +220  +rc +; + +221  +oo_cy_e + +ocs +; + +222 +ocs +. +bys_cݛd + = 0; + +223 +ocs +. +bys_to_cy + = + `CI_BSWAP_BE16 +( + `oo__hdr_cڡ +( +pkt +)-> +_t_n_be16 +) + + +224 + `oo_h_hdr_size +( +pkt +); + +225 +ocs +. +pkt_off + = 0; + +226 +ocs +. +pkt + =kt; + +231 +ocs +. +pkt_ + = ocs. +pkt +-> +buf_n + - ocs. +pkt_off +; + +232 +ocs +. +om + = (*) + `oo_h_hdr_cڡ +(ocs. +pkt +); + +233 +rc + = + `__oo_cy_ag_to_iovec_no_adv +( +ni +, +piov +, & +ocs +); + +234 if +rc + == 0 ) + +235  +ocs +. +bys_cݛd +; + +236 if +rc + == 1 ) + +238 if +rc + < 0 ) + +239  +rc +; + +241 + `ci_as +(0); + +243 + } +} + +247 #ide +__KERNEL__ + + +253  + #CI_UDP_ZC_IOVEC_MAX + 120 + + ) + +255  + $ci_udp_pkt_to_zc_msg +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +, + +256  +ld_zc_msg +* +zc_msg +) + +258  +i +, +bys_ + = +pkt +-> +pf +. +udp +. +y_n +; + +259 +ci__pkt_fmt +* +ag +; + +260 +ci__pkt_fmt +* +hd_ag +; + +262 +hd_ag + = +ag + = +pkt +; + +263 +i + = 0; + +264 + `ci_as_qu +( +zc_msg +-> +iov +, +NULL +); + +270 if + `oo_offbuf_ +(& +ag +-> +buf +=0 && + `OO_PP_NOT_NULL +(ag-> +ag_xt +) ) + +271 +ag + = + `PKT_CHK_NNL +( +ni +, fg-> +ag_xt +); + +274 +zc_msg +-> +iov +[ +i +]. +iov_n + = + `CI_MIN +( + `oo_offbuf_ +(& +ag +-> +buf +), + +275 +bys_ +); + +276 +zc_msg +-> +iov +[ +i +]. +iov_ba + = + `oo_offbuf_r +(& +ag +-> +buf +); + +277 +zc_msg +-> +iov +[ +i +]. +buf + = ( +ld_zc_hd +) +hd_ag +; + +278 +zc_msg +-> +iov +[ +i +]. +iov_ags + = 0; + +279 +bys_ + - +zc_msg +-> +iov +[ +i +]. +iov_n +; + +280 ++ +i +; + +281 if + `OO_PP_IS_NULL +( +ag +-> +ag_xt +) || + +282 ( +i + = +CI_UDP_ZC_IOVEC_MAX +) || + +283 ( +bys_ + == 0) ) + +285 +ag + = + `PKT_CHK_NNL +( +ni +, fg-> +ag_xt +); + +286 +hd_ag + = +ag +; + +288 +zc_msg +-> +msghdr +. +msg_iovn + = +i +; + +289 + } +} + +293  + $ci_udp_cvmsg_g +( +ci_udp_cv_fo +* +rf +, +ci_iovec_r +* +piov +) + +295 +ci_tif +* +ni + = +rf +-> +a +->ni; + +296 +ci_udp_e +* +us + = +rf +-> +a +->us; + +297 +ci_msghdr +* +msg + = +rf +->msg; + +298 +ci__pkt_fmt +* +pkt +; + +299  +rc +; + +303 if + `ci_udp_cv_q_is_emy +(& +us +-> +cv_q +) ) + +304  +cv_q_is_emy +; + +306 + `ci_rmb +(); + +308 +pkt + = + `ci_udp_cv_q_g +( +ni +, & +us +-> +cv_q +); + +310 #i + `defed +( +__lux__ +&& !defed( +__KERNEL__ +) + +311 if +msg + ! +NULL + && msg-> +msg_cڌn + != 0 ) { + +312 if + `CI_UNLIKELY +( +us +-> +s +. +cmsg_ags + != 0 ) ) + +313 + `ci__cmsg_cv +( +ni +, +us +, +pkt +, +msg +, 0, & +rf +-> +msg_ags +); + +315 +msg +-> +msg_cڌn + = 0; + +318 +us +-> +amp + = +pkt +-> +pf +. +udp +. +rx_amp +; + +320 +rc + = + `oo_cy_pkt_to_iovec_no_adv +( +ni +, +pkt +, +piov +,kt-> +pf +. +udp +. +y_n +); + +322 if( + `CI_LIKELY + +rc + >= 0 )) { + +323 #i +HAVE_MSG_FLAGS + + +324 if( + `CI_UNLIKELY + +rc + < +pkt +-> +pf +. +udp +. +y_n + && +msg + ! +NULL + )) + +325 +rf +-> +msg_ags + | +LOCAL_MSG_TRUNC +; + +327 + `ci_udp_cvmsg_fl_msghdr +( +ni +, +msg +, +pkt +, & +us +-> +s +); + +328 if! ( +rf +-> +ags + & +MSG_PEEK +) ) + +329 + `ci_udp_cv_q_div +( +ni +, & +us +-> +cv_q +, +pkt +); + +330 +us +-> +udpags + | +CI_UDPF_LAST_RECV_ON +; + +333  +rc +; + +335 +cv_q_is_emy +: + +336  - +EAGAIN +; + +337 + } +} + +340 #ide +__KERNEL__ + + +342  + $__ci_udp_cvmsg_y_os +( +ci_tif + * +ni +, +ci_udp_e + * +us +, + +343  +msghdr +* +msg +,  +ags +, * +c +) + +345  +rc +; + +347 +rc + = + `oo_os_sock_cvmsg +( +ni +, + `SC_SP +(& +us +-> +s +), +msg +, +ags + | +MSG_DONTWAIT +); + +349 if +rc + >= 0 ) { + +350 ++ +us +-> +s +. +n_rx_os +; + +351 +us +-> +udpags + &~ +CI_UDPF_LAST_RECV_ON +; + +352 if! ( +ags + & +MSG_PEEK +) ) + +353 +us +-> +udpags + &=~ +CI_UDPF_PEEK_FROM_OS +; + +355 +us +-> +udpags + | +CI_UDPF_PEEK_FROM_OS +; + +358 if +rc + =- +EAGAIN + ) + +360 + `ci_as +(- +rc + = +o +); + +361 +rc + = -1; + +362 ++ +us +-> +s +. +n_rx_os_r +; + +365 * +c + = +rc +; + +367 + } +} + +371  + $__ci_udp_cvmsg_y_os +( +ci_tif + * +ni +, +ci_udp_e + * +us +, + +372 +ci_msghdr +* +msg +,  +ags +, * +c +) + +374  +rc +, +tٮ_bys +, +i +; + +375  +sock + * +sock +; + +376 +oo_os_fe + +os_sock +; + +377  +msghdr + +kmsg +; + +379 +tٮ_bys + = 0; + +380  +i + = 0; i < +msg +-> +msg_iovn +; ++i ) + +381 +tٮ_bys + + +msg +-> +msg_iov +[ +i +]. +iov_n +; + +382 +rc + = - +EMSGSIZE +; + +383 if +tٮ_bys + < 0 ) + +384  - +EINVAL +; + +386 +rc + = + `oo_os_sock_g +( +ni +, + `S_ID +( +us +), & +os_sock +); + +387 if +rc + != 0 ) + +388  +rc +; + +389 + `ci_as +( + `S_ISSOCK +( +os_sock +-> +f_dy +-> +d_ode +-> +i_mode +)); + +390 +sock + = + `SOCKET_I +( +os_sock +-> +f_dy +-> +d_ode +); + +391 + `ci_as +( +sock +); + +393 + `oo_msg_iov_ +(& +kmsg +, +READ +, +msg +-> +msg_iov +, msg-> +msg_iovn +, +tٮ_bys +); + +397 +kmsg +. +msg_m + = 0; + +398 +kmsg +. +msg_me + = +NULL +; + +399 +kmsg +. +msg_cڌn + = 0; + +400 +rc + = + `sock_cvmsg +( +sock +, & +kmsg +, +ags + | +MSG_DONTWAIT +); + +402 + `oo_os_sock_us_b_r_hdd +(& +us +-> +s +, +os_sock +, +OO_OS_STATUS_RX +); + +403 + `oo_os_sock_put +( +os_sock +); + +405 if +rc + >= 0 ) { + +406 ++ +us +-> +s +. +n_rx_os +; + +409 if +rc + =- +EAGAIN + ) + +411 ++ +us +-> +s +. +n_rx_os_r +; + +414 if +rc + >= 0 ) { + +415 +us +-> +udpags + &~ +CI_UDPF_LAST_RECV_ON +; + +416 if! ( +ags + & +MSG_PEEK +) ) + +417 +us +-> +udpags + &=~ +CI_UDPF_PEEK_FROM_OS +; + +419 +us +-> +udpags + | +CI_UDPF_PEEK_FROM_OS +; + +421 * +c + = +rc +; + +423 + } +} + +427  + $ci_udp_cvmsg_y_os +( +ci_udp_cv_fo + * +rf +, * +c +) + +429 +ci_udp_e + * +us + = +rf +-> +a +->us; + +430  +rc +; + +432 if!( +us +-> +s +. +os_sock_us + & +OO_OS_STATUS_RX +) ) + +434 +rc + = + `__ci_udp_cvmsg_y_os +( +rf +-> +a +-> +ni +, +us +,f-> +msg +,f-> +ags +, +c +); + +435 #i +HAVE_MSG_FLAGS + + +439 if +rc + >= 0 ) + +440 +rf +-> +msg_ags + =f-> +msg +->msg_flags; + +442  +rc +; + +443 + } +} + +446  + $ci_udp_cvmsg_socklocked_owth +( +ci_udp_cv_fo +* +rf +, + +447 +ci_iovec_r + * +piov +) + +449  +rc + = 0; + +450 +ci_tif +* +ni + = +rf +-> +a +->ni; + +451 +ci_udp_e +* +us + = +rf +-> +a +->us; + +453 if( + `CI_UNLIKELY + +ni +-> +e +-> +rxq_low + )) + +454 + `ci_tif_rxq_low__cv +( +ni +, & +us +-> +s +, + +458 #ifde +__KERNEL__ + + +459 + `ci_as_equ +( +rf +-> +ags +, 0); + +462 #ide +__KERNEL__ + + +463 if +rf +-> +ags + & +MSG_ERRQUEUE_CHK + ) { + +464 if + `ci_udp_cv_q_n_emy +(& +us +-> +timeamp_q +) ) { + +465 +ci__pkt_fmt +* +pkt +; + +466  +timeec + +ts +[3]; + +467  +cmsg_e + cmsg_state; + +470  +oo_sock_exnded_r + + +; + +471  +sockaddr_ + +ofnd +; + +472 } +rhdr +; + +475 + `ci_rmb +(); + +477 +pkt + = + `ci_udp_cv_q_g +( +ni +, & +us +-> +timeamp_q +); + +479 +cmsg_e +. +msg + = +rf +->msg; + +480 +cmsg_e +. +cm + = +rf +-> +msg +-> +msg_cڌ +; + +481 +cmsg_e +. +cmsg_bys_ud + = 0; + +482 +cmsg_e +. +p_msg_ags + = & +rf +-> +msg_ags +; + +483 + `ci_iovec_r__nz +( +piov +, +rf +-> +msg +-> +msg_iov +,f->msg-> +msg_iovn +); + +484 + `memt +( +ts +, 0, (ts)); + +486 if +us +-> +s +. +timeampg_ags + & +ONLOAD_SOF_TIMESTAMPING_RAW_HARDWARE + ) { + +487 +ts +[2]. +tv_c + = +pkt +-> +tx_hw_amp +.tv_sec; + +488 +ts +[2]. +tv_nc + = +pkt +-> +tx_hw_amp +.tv_nsec; + +490 if( +us +-> +s +. +timeampg_ags + & +ONLOAD_SOF_TIMESTAMPING_SYS_HARDWARE +) && + +491 ( +pkt +-> +tx_hw_amp +. +tv_nc + & +CI_IP_PKT_HW_STAMP_FLAG_IN_SYNC +) ) { + +492 +ts +[1]. +tv_c + = +pkt +-> +tx_hw_amp +.tv_sec; + +493 +ts +[1]. +tv_nc + = +pkt +-> +tx_hw_amp +.tv_nsec; + +495 + `ci_put_cmsg +(& +cmsg_e +, +SOL_SOCKET +, +ONLOAD_SCM_TIMESTAMPING +, + +496 ( +ts +), &ts); + +497 if +us +-> +s +. +timeampg_ags + & +ONLOAD_SOF_TIMESTAMPING_OPT_TSONLY + ) + +498 +rc + = +SLOWPATH_RET_ZERO +; + +500 +rc + = + `ci_udp_timeamp_q_pkt_to_iovec +( +ni +, +pkt +, +piov +); + +502 + `memt +(& +rhdr +, 0, (errhdr)); + +503 +rhdr +. + +. +_o + = +ENOMSG +; + +504 +rhdr +. + +. +_ig + = +SO_EE_ORIGIN_TIMESTAMPING +; + +505 +rhdr +. + +. +_fo + = 0; + +506 +rhdr +. + +. +_da + = +pkt +-> +ts_key +; + +507 if +us +-> +s +. +timeampg_ags + & +ONLOAD_SOF_TIMESTAMPING_OPT_CMSG + ) { + +508 +rhdr +. +ofnd +. +s_my + = +AF_INET +; + +509 +rhdr +. +ofnd +. +s_addr +. +s_addr + = + `oo__hdr +( +pkt +)-> +_ddr_be32 +; + +512 + `ci_rmb +(); + +513 + `ci_udp_cv_q_div +( +ni +, & +us +-> +timeamp_q +, +pkt +); + +515 + `ci_put_cmsg +(& +cmsg_e +, +SOL_IP +, +IP_RECVERR +, ( +rhdr +), &errhdr); + +517 + `ci__cmsg_fish +(& +cmsg_e +); + +518 +rf +-> +msg_ags + | +MSG_ERRQUEUE_CHK +; + +519  +rc +; + +522 +rc + = + `oo_os_sock_cvmsg +( +ni +, + `SC_SP +(& +us +-> +s +), +rf +-> +msg +,f-> +ags +); + +523 if +rc + < 0 ) { + +524 + `ci_as +(- +rc + = +o +); + +528 +rf +-> +msg_ags + =f-> +msg +->msg_flags; + +529  +rc +; + +533 if( +rc + = + `ci_g_so_r +(& +us +-> +s +)) != 0 ) { + +534 + `CI_SET_ERROR +( +rc +,c); + +535  +rc +; + +537 if +rf +-> +msg +-> +msg_iovn + > 0 &&f->msg-> +msg_iov + = +NULL + ) { + +538 + `CI_SET_ERROR +( +rc +, +EFAULT +); + +539  +rc +; + +541 #i +MSG_OOB_CHK + + +542 if +rf +-> +ags + & +MSG_OOB_CHK + ) { + +543 + `CI_SET_ERROR +( +rc +, +EOPNOTSUPP +); + +544  +rc +; + +547 #i +CI_CFG_POSIX_RECV + + +548 if! + `udp_t_be16 +( +us +)) { + +549 + `LOG_UV +( + `log +("%s: -1 (ENOTCONN)", +__FUNCTION__ +)); + +550 + `CI_SET_ERROR +( +rc +, +ENOTCONN +); + +551  +rc +; + +554 if +rf +-> +msg +-> +msg_iovn + == 0 ) { + +558 + `CI_IOVEC_LEN +(& +piov +-> +io +piov-> +iovn + = 0; + +559  +SLOWPATH_RET_IOVLEN_INITED +; + +562 + } +} + +565  + scvmsg_e + { + +566 +ci_ut64 + + mt_c +; + +567 +ci_ut64 + + mschedu_c +; + +568 +ci_ut64 + + mmax_ +; + +569  + mdo_ +; + +570  + m_lim_by_so +; + +571 +ci_ut32 + + mtimeout +; + +572 #ide +__KERNEL__ + + +573 +cp_sigl_fo +* + msi +; + +579 + $ci_udp_cvmsg_block +( +ci_udp_iomsg_gs +* +a +, +ci_tif +* +ni +, +ci_udp_e +* +us +, + +580  +timeout +) + +582  +rc +; + +584 #ide +__KERNEL__ + + +586 +cp_sigl_fo +* +si +; + +587  +plfd + +pfd +; + +588 #i! +CI_CFG_CITP_INSIDE_LIB_IS_FLAG + + +589  +side_lib +; + +591 +pfd +. +fd + = +a +->fd; + +592 +pfd +. +evts + = +POLLIN +; + +594 if +timeout + == 0 ) + +595 +timeout + = -1; + +600 +si + = + `cp_sigl_g_ecific_ed +(); + +601 +ctue_to_block +: + +602 #i! +CI_CFG_CITP_INSIDE_LIB_IS_FLAG + + +603 +side_lib + = +si +->inside_lib; + +604 + `ci_as_gt +( +side_lib +, 0); + +606 +si +-> +side_lib + = 0; + +607 + `ci_comp_brr +(); + +608 if( + `CI_UNLIKELY + +si +-> +aags + & +OO_SIGNAL_FLAG_HAVE_PENDING + )) + +609 + `cp_sigl_run_ndg +( +si +); + +611 +rc + = + `ci_sys_pl +(& +pfd +, 1, +timeout +); + +613 #i +CI_CFG_CITP_INSIDE_LIB_IS_FLAG + + +614 +si +-> +side_lib + = 1; + +616 +si +-> +side_lib + = inside_lib; + +619 if +rc + > 0 ) + +621 if +rc + == 0 ) + +622 +rc + = - +EAGAIN +; + +623 if +o + = +EINTR + && ( +si +-> +aags + & +OO_SIGNAL_FLAG_NEED_RESTART +) && + +624 +timeout + == -1 ) { + +626  +ctue_to_block +; + +628 +rc + = - +o +; + +630  +rc +; + +633 #ifde +__unix__ + + +635  +mask +; + +636 +s64 + +t +; + +638 if +timeout + == 0 ) + +639 +t + = -1; + +641 +t + = + `mcs_to_jiffs +( +timeout +); + +643 +mask + = +POLLIN +; + +644 +rc + = + `eb_t_hr_pl_udp +( +a +-> +fp +, & +mask +, & +t +); + +645 if +rc + == 0 ) { + +646 if +mask + ) { + +650 +rc + = - +EAGAIN +; + +652 if +rc + =- +ERESTARTSYS + && +us +-> +s +. +so +. +rcvtimeo_mc + ) + +653 +rc + = - +EINTR +; + +656  +rc +; + +658 + } +} + +661 +ci_le +  + +662 + $ci_udp_cvmsg_socklocked_ +( +ci_udp_iomsg_gs +* +a +, + +663 +ci_tif +* +ni +, +ci_udp_e +* +us +, + +664  +cvmsg_e +* +_e +) + +666 +ci_ut64 + +now_c +; + +667  +tf_i +; + +669 + `ci_c64 +(& +now_c +); + +670 if +now_c + - +_e +-> +t_c + < sp_e-> +max_ + ) { + +671 #i +CI_CFG_SPIN_STATS + + +672 +ni +-> +e +-> +s +. +_udp_cv +++; + +674 if + `ci_tif_may_pl +( +ni +) ) { + +675 + `OO_STACK_FOR_EACH_INTF_I +( +ni +, +tf_i +) + +676 if + `ci_tif_tf_has_evt +( +ni +, +tf_i +&& + `ci_tif_ylock +(ni) ) { + +677 + `ci_tif_pl_tf_ +( +ni +, +tf_i +, +now_c +); + +678 + `ci_tif_uock +( +ni +); + +679 if + `ci_udp_cv_q_n_emy +(& +us +-> +cv_q +) ) + +682 if +ni +-> +e +-> +pl_wk_outdg + || + +683 + `ci_tif_ed_tim_ime +( +ni +, +now_c +) ) + +684 if + `ci_tif_ylock +( +ni +) ) { + +685 + `ci_tif_pl +( +ni +); + +686 + `ci_tif_uock +( +ni +); + +688 if! +ni +-> +e +-> +is_r + ) + +689 +ni +-> +e +-> +is_r + = 1; + +691  + `OO_SPINLOOP_PAUSE_CHECK_SIGNALS +( +ni +, +now_c +, + +692 & +_e +-> +schedu_c +, + +693 +us +-> +s +. +so +. +rcvtimeo_mc +, + +694 & +us +-> +s +. +b +, +_e +-> +si +); + +697 if +_e +-> +_lim_by_so + ) { + +698 ++ +us +-> +s +. +n_rx_ga +; + +699  - +EAGAIN +; + +702 if +_e +-> +timeout + ) { + +703 +ci_ut32 + +_ms + = + `NI_OPTS +( +ni +). +_uc + >> 10; + +704 if +_ms + < +_e +-> +timeout + ) + +705 +_e +-> +timeout + - +_ms +; + +707 ++ +us +-> +s +. +n_rx_ga +; + +708  - +EAGAIN +; + +711 +_e +-> +do_ + = 0; + +714 +ni +-> +e +-> +is_r + = 0; + +716 + } +} + +720 + $ci_udp_cvmsg_comm +( +ci_udp_cv_fo + * +rf +) + +722 +ci_tif +* +ni + = +rf +-> +a +->ni; + +723 +ci_udp_e +* +us + = +rf +-> +a +->us; + +724  +have_pd + = 0; + +725 +ci_iovec_r + +piov + = { +NULL +,0, {NULL, 0}}; + +726  +rc + = 0, +ow +; + +727  +cvmsg_e + +_e + = {0}; + +729 #ide +__KERNEL__ + + +730 +_e +. +do_ + = -1; + +731 +_e +. +si + = + `cp_sigl_g_ecific_ed +(); + +733 +_e +. +timeout + = +us +-> +s +. +so +. +rcvtimeo_mc +; + +736 if! +rf +-> +sock_locked + ) { + +737 +rc + = + `ci_sock_lock +( +ni +, & +us +-> +s +. +b +); + +738 if( + `CI_UNLIKELY + +rc + != 0 )) { + +739 + `CI_SET_ERROR +( +rc +, -rc); + +740  +rc +; + +742 +rf +-> +sock_locked + = 1; + +745 #i +HAVE_MSG_FLAGS + + +746 +rf +-> +msg_ags + = 0; + +749 +ow + = (( +rf +-> +ags + & ( +MSG_OOB_CHK + | +MSG_ERRQUEUE_CHK +)) | + +750 ( +rf +-> +msg +-> +msg_iovn + == 0 ) | + +751 ( +rf +-> +msg +-> +msg_iov + = +NULL + ) | + +752 ( +ni +-> +e +-> +rxq_low + ) | + +753 #i +CI_CFG_POSIX_RECV + + +754 ( + `udp_t_be16 +( +us +) == 0 ) | + +756 ( +us +-> +s +. +so_r + )); + +757 if +ow + ) + +758  +ow_th +; + +760 +back_to__th +: + +761 + `ci_iovec_r__nz +(& +piov +, +rf +-> +msg +-> +msg_iov +,f->msg-> +msg_iovn +); + +763 +piov_ed +: + +764 if( + `CI_UNLIKELY + +us +-> +udpags + & +CI_UDPF_PEEK_FROM_OS + )) + +765  +ek_om_os +; + +767 +check_ul_cv_q +: + +768 +rc + = + `ci_udp_cvmsg_g +( +rf +, & +piov +); + +769 if +rc + >= 0 ) + +770  +out +; + +774 if! +have_pd + ) { + +775 +have_pd + = 1; + +776 + `ci_c64 +(& +_e +. +t_c +); + +778 if + `ci_tif_may_pl +( +ni +) && + +779 + `ci_tif_ed_pl_ng +( +ni +, +_e +. +t_c +) && + +780 + `ci_tif_ylock +( +ni +) ) { + +781  +y_evs + = + `ci_tif_pl_n +( +ni +, + `NI_OPTS +i). +evs_r_pl +); + +782 if + `ci_udp_cv_q_is_emy +(& +us +-> +cv_q +&& +y_evs + ) + +783 + `ci_tif_pl +( +ni +); + +784 + `ci_tif_uock +( +ni +); + +785 if + `ci_udp_cv_q_n_emy +(& +us +-> +cv_q +) ) + +786  +check_ul_cv_q +; + +790 if( + `CI_UNLIKELY +( +rc + = + `UDP_RX_ERRNO +( +us +)) )) { + +791 + `CI_SET_ERROR +( +rc +,c); + +792 +us +-> +s +. +rx_o + = us->s.rx_errno & 0xf0000000; + +793  +out +; + +795 if( + `CI_UNLIKELY + +us +-> +s +. +so_r + )) { + +796  +rc1 + = + `ci_g_so_r +(& +us +-> +s +); + +797 if +rc1 + != 0 ) { + +798 + `CI_SET_ERROR +( +rc +, +rc1 +); + +799  +out +; + +804 if + `ci_udp_cvmsg_y_os +( +rf +, & +rc +) ) + +805  +out +; + +807 if(( +rf +-> +ags + | +us +-> +s +. +b +. +sb_aags +& +MSG_DONTWAIT +)) { + +809 + `CI_SET_ERROR +( +rc +, +EAGAIN +); + +810 ++ +us +-> +s +. +n_rx_ga +; + +811  +out +; + +813 i( + `UDP_IS_SHUT_RD +( +us +)) { + +815 +rc + = 0; + +816  +out +; + +821 #ide +__KERNEL__ + + +823 if +_e +. +do_ + == -1 ) { + +824 +_e +. +do_ + = + +825 + `oo_r_thad_g +()-> +e + & (1 << +ONLOAD_SPIN_UDP_RECV +); + +827 if +_e +. +do_ + ) { + +828 +_e +. +schedu_c + = sp_e. +t_c +; + +829 +_e +. +max_ + = +us +-> +s +. +b +. +_cyes +; + +830 if +us +-> +s +. +so +. +rcvtimeo_mc + ) { + +831 +ci_ut64 + +max_so_ + = (ci_ut64) +us +-> +s +. +so +. +rcvtimeo_mc + * + +832 + `IPTIMER_STATE +( +ni +)-> +khz +; + +833 if +max_so_ + < +_e +. +max_ + ) { + +834 +_e +. +max_ + = +max_so_ +; + +835 +_e +. +_lim_by_so + = 1; + +841 if +_e +. +do_ + ) { + +842 +rc + = + `ci_udp_cvmsg_socklocked_ +( +rf +-> +a +, +ni +, +us +, & +_e +); + +843 if +rc + == 0 ) + +844  +check_ul_cv_q +; + +845 if +rc + < 0 ) { + +846 + `CI_SET_ERROR +( +rc +, -rc); + +847  +out +; + +852 + `ci_sock_uock +( +ni +, & +us +-> +s +. +b +); + +853 +rf +-> +sock_locked + = 0; + +854 +rc + = + `ci_udp_cvmsg_block +( +rf +-> +a +, +ni +, +us +, +_e +. +timeout +); + +855 if +rc + == 0 ) { + +856 if! +rf +-> +sock_locked + ) + +857 +rc + = + `ci_sock_lock +( +ni +, & +us +-> +s +. +b +); + +859 if +rc + == 0 ) { + +860 +rf +-> +sock_locked + = 1; + +861  +check_ul_cv_q +; + +863 + `CI_SET_ERROR +( +rc +, -rc); + +865 +out +: + +866 +ni +-> +e +-> +is_r + = 0; + +867  +rc +; + +869 +ow_th +: + +870 +rc + = + `ci_udp_cvmsg_socklocked_owth +( +rf +, & +piov +); + +871 if +rc + == 0 ) + +872  +back_to__th +; + +873 if +rc + = +SLOWPATH_RET_IOVLEN_INITED + ) + +874  +piov_ed +; + +875 if +rc + = +SLOWPATH_RET_ZERO + ) { + +876 +rc + = 0; + +877  +out +; + +880  +out +; + +882 +ek_om_os +: + +883 if + `ci_udp_cvmsg_y_os +( +rf +, & +rc +) ) + +884  +out +; + +886  +check_ul_cv_q +; + +887 + } +} + +890  + $ci_udp_cvmsg +( +ci_udp_iomsg_gs + * +a +, +ci_msghdr +* +msg +,  +ags +) + +892 +ci_tif +* +ni + = +a +->ni; + +893 +ci_udp_e +* +us + = +a +->us; + +894  +rc +; + +895 +ci_udp_cv_fo + +rf +; + +897 +rf +. +a + =; + +898 +rf +. +msg + = msg; + +899 +rf +. +sock_locked + = 0; + +900 +rf +. +ags + = flags; + +902 +rc + = + `ci_udp_cvmsg_comm +(& +rf +); + +903 if +rf +. +sock_locked + ) + +904 + `ci_sock_uock +( +ni +, & +us +-> +s +. +b +); + +905 #i +HAVE_MSG_FLAGS + + +906 if +rc + >= 0 ) + +907 +msg +-> +msg_ags + = +rf +.msg_flags; + +910  +rc +; + +911 + } +} + +914 #i +CI_CFG_RECVMMSG + && ! +defed +( +__KERNEL__ +) + +915  + $ci_udp_cvmmsg +( +ci_udp_iomsg_gs + * +a +,  +mmsghdr +* +mmsg +, + +916  +vn +,  +ags +, + +917 cڡ  +timeec +* +timeout +) + +919 +ci_tif +* +ni + = +a +->ni; + +920 +ci_udp_e +* +us + = +a +->us; + +921  +rc +, +i +; + +922  +timev + +tv_befe +; + +923  +timeout_mc + = -1; + +924 +ci_udp_cv_fo + +rf +; + +926 +rf +. +a + =; + +927 +rf +. +sock_locked + = 0; + +928 +rf +. +ags + = flags; + +930 if +timeout + ) { + +931 +timeout_mc + = +timeout +-> +tv_c + * 1000 +imeout-> +tv_nc + / 1000000; + +932 + `gtimeofday +(& +tv_befe +, +NULL +); + +935 +i + = 0; + +936  +i + < +vn + ) { + +937 +rf +. +msg + = & +mmsg +[ +i +]. +msg_hdr +; + +938 +rc + = + `ci_udp_cvmsg_comm +(& +rf +); + +939 if +rc + >= 0 ) { + +940 +mmsg +[ +i +]. +msg_n + = +rc +; + +941 #i +HAVE_MSG_FLAGS + + +942 +mmsg +[ +i +]. +msg_hdr +. +msg_ags + = +rf +.msg_flags; + +946 if +i + !0 && +o + ! +EAGAIN + ) + +947 +us +-> +s +. +so_r + = +o +; + +948 if +rf +. +sock_locked + ) + +949 + `ci_sock_uock +( +ni +, & +us +-> +s +. +b +); + +950 if +i + != 0 ) + +951  +i +; + +953  +rc +; + +956 if +rf +. +ags + & +MSG_DONTWAIT + ) && +rc + == 0 ) + +959 if +rf +. +ags + & +MSG_WAITFORONE + ) + +960 +rf +. +ags + | +MSG_DONTWAIT +; + +962 ++ +i +; + +964 if +timeout_mc + >= 0 ) { + +965  +timev + +tv_a +, +tv_sub +; + +966 + `gtimeofday +(& +tv_a +, +NULL +); + +967 + `timsub +(& +tv_a +, & +tv_befe +, & +tv_sub +); + +968 +tv_befe + = +tv_a +; + +969 +timeout_mc + - +tv_sub +. +tv_c + * 1000 +v_sub. +tv_uc + / 1000; + +970 if +timeout_mc + < 0 ) + +975 if +rf +. +sock_locked + ) + +976 + `ci_sock_uock +( +ni +, & +us +-> +s +. +b +); + +978  +i +; + +979 + } +} + +983 #ide +__KERNEL__ + + +985  + $ci_udp_zc_cv_om_os +( +ci_tif +* +ni +, +ci_udp_e +* +us +, + +986  +ld_zc_cv_gs +* +gs +, + +987 +ld_zc_back_rc +* +cb_rc +) + +989  + #ZC_BUFFERS_FOR_64K_DATAGRAM + \ + +990 ((0x10000 / ( +CI_CFG_PKT_BUF_SIZE + - \ + +991 + `CI_MEMBER_OFFSET +( +ci__pkt_fmt +, +dma_t +))+ 1) + + ) + +993  +rc +, +i +, +cb_ags +; + +994  +msghdr + +msg +; + +995  +iovec + +iov +[ +ZC_BUFFERS_FOR_64K_DATAGRAM +]; + +996  +ld_zc_iovec + +zc_iov +[ +ZC_BUFFERS_FOR_64K_DATAGRAM +]; + +997 +oo_pkt_p + +pkt_p +, +f_pkt_p +; + +998 +ci__pkt_fmt +* +pkt +; + +1000 if +us +-> +zc_kl_dagm_cou + < +ZC_BUFFERS_FOR_64K_DATAGRAM +) { + +1004 + `ci_tif_lock +( +ni +); + +1005  +us +-> +zc_kl_dagm_cou + < +ZC_BUFFERS_FOR_64K_DATAGRAM + ) { + +1006 +pkt + = + `ci_tif_pkt_loc +( +ni +); + +1007 if! +pkt + ) { + +1008 + `ci_tif_uock +( +ni +); + +1009  - +ENOBUFS +; + +1011 +pkt +-> +ag_xt + = +us +-> +zc_kl_dagm +; + +1012 +us +-> +zc_kl_dagm + = + `OO_PKT_P +( +pkt +); + +1013 ++ +us +-> +zc_kl_dagm_cou +; + +1015 + `ci_tif_uock +( +ni +); + +1018 +pkt_p + = +us +-> +zc_kl_dagm +; + +1019 +i + = 0; + +1020  + `OO_PP_NOT_NULL +( +pkt_p +) ) { + +1021 #ide +NDEBUG + + +1022 + `ci_as_ +( +i +, +us +-> +zc_kl_dagm_cou +); + +1024 +pkt + = + `PKT_CHK_NNL +( +ni +, +pkt_p +); + +1025 +iov +[ +i +]. +iov_ba + = +pkt +-> +dma_t +; + +1026 +iov +[ +i +]. +iov_n + = ( +CI_CFG_PKT_BUF_SIZE + - + +1027 ((*) +pkt +-> +dma_t + - (*)pkt)); + +1028 ++ +i +; + +1029 +pkt_p + = +pkt +-> +ag_xt +; + +1032 +msg +. +msg_iov + = +iov +; + +1033 +msg +. +msg_iovn + = +i +; + +1034 +msg +. +msg_cڌ + = +gs +->msg. +msghdr +.msg_control; + +1035 +msg +. +msg_cڌn + = +gs +->msg. +msghdr +.msg_controllen; + +1036 +msg +. +msg_me + = +gs +->msg. +msghdr +.msg_name; + +1037 +msg +. +msg_m + = +gs +->msg. +msghdr +.msg_namelen; + +1038 +msg +. +msg_ags + = 0; + +1040 + `ci_as +( +us +-> +s +. +os_sock_us + & +OO_OS_STATUS_RX +); + +1041 +i + = + `__ci_udp_cvmsg_y_os +( +ni +, +us +, & +msg +, + +1042 +gs +-> +ags + & +ONLOAD_ZC_RECV_FLAGS_PTHRU_MASK +, + +1043 & +rc +); + +1044 + `ci_as_equ +( +i +, 1); + +1045 + `ci_as_gt +( +rc +, 0); + +1052 +i + = 0; + +1053 +pkt_p + = +us +-> +zc_kl_dagm +; + +1054  +rc + > 0 ) { + +1055 #ide +NDEBUG + + +1056 + `ci_as_ +( +i +, +us +-> +zc_kl_dagm_cou +); + +1058 +pkt + = + `PKT_CHK_NNL +( +ni +, +pkt_p +); + +1059 +zc_iov +[ +i +]. +iov_n + = +rc + > +iov +[i].iov_len ? iov[i].iov_len :c; + +1060 +zc_iov +[ +i +]. +iov_ba + = +iov +[i].iov_base; + +1061 +zc_iov +[ +i +]. +buf + = ( +ld_zc_hd +) +pkt +; + +1063 +rc + - +zc_iov +[ +i +]. +iov_n +; + +1064 ++ +i +; + +1065 +pkt_p + = +pkt +-> +ag_xt +; + +1071 +pkt +-> +ag_xt + = +OO_PP_NULL +; + +1076 +f_pkt_p + = +us +-> +zc_kl_dagm +; + +1077 +us +-> +zc_kl_dagm + = +pkt_p +; + +1078 #ide +NDEBUG + + +1079 + `ci_as_ge +( +us +-> +zc_kl_dagm_cou +, +i +); + +1081 +us +-> +zc_kl_dagm_cou + - +i +; + +1083 +gs +-> +msg +. +iov + = +zc_iov +; + +1084 +gs +-> +msg +. +msghdr +. +msg_iovn + = +i +; + +1085 +gs +-> +msg +. +msghdr +. +msg_cڌ + = msg.msg_control; + +1086 +gs +-> +msg +. +msghdr +. +msg_cڌn + = msg.msg_controllen; + +1087 +gs +-> +msg +. +msghdr +. +msg_me + = msg.msg_name; + +1088 +gs +-> +msg +. +msghdr +. +msg_m + = msg.msg_namelen; + +1089 +gs +-> +msg +. +msghdr +. +msg_ags + = msg.msg_flags; + +1091 +cb_ags + = 0; + +1092 if( + `ci_udp_cv_q_pkts +(& +us +-> +cv_q +) == 0) && + +1093 ( +us +-> +s +. +os_sock_us + & +OO_OS_STATUS_RX +) == 0 ) + +1094 +cb_ags + | +ONLOAD_ZC_END_OF_BURST +; + +1100 * +cb_rc + = (* +gs +-> +cb +)rgs, +cb_ags +); + +1102 if!((* +cb_rc +& +ONLOAD_ZC_KEEP +) ) { + +1104 +pkt +-> +ag_xt + = +us +-> +zc_kl_dagm +; + +1105 +us +-> +zc_kl_dagm + = +f_pkt_p +; + +1106 +us +-> +zc_kl_dagm_cou + + +i +; + +1109 if +cb_ags + & +ONLOAD_ZC_END_OF_BURST + ) { + +1115 (* +cb_rc +| +ONLOAD_ZC_TERMINATE +; + +1116 + `ci_as +(((* +cb_rc +& +ONLOAD_ZC_CONTINUE +) == 0); + +1120 + } +} + +1123  + $ci_udp_zc_cv +( +ci_udp_iomsg_gs +* +a +,  +ld_zc_cv_gs +* +gs +) + +1125  +rc +, +de_big_pl + = 0, +de_kl_pl + = 0, +de_back + = 0; + +1126 +ci_tif +* +ni + = +a +->ni; + +1127 +ci_udp_e +* +us + = +a +->us; + +1128 +ld_zc_back_rc + +cb_rc + = +ONLOAD_ZC_CONTINUE +; + +1129  +cvmsg_e + +_e + = {0}; + +1130 +size_t + +suld_cڌn + = +gs +-> +msg +. +msghdr +. +msg_cڌn +; + +1131 * +suld_cڌ + = +gs +-> +msg +. +msghdr +. +msg_cڌ +; + +1132 +sockn_t + +suld_m + = +gs +-> +msg +. +msghdr +. +msg_m +; + +1133 * +suld_me + = +gs +-> +msg +. +msghdr +. +msg_me +; + +1134  +ld_zc_iovec + +iovec +[ +CI_UDP_ZC_IOVEC_MAX +]; + +1135  +cb_ags +; + +1137 +_e +. +do_ + = -1; + +1138 +_e +. +si + = + `cp_sigl_g_ecific_ed +(); + +1139 +_e +. +timeout + = +us +-> +s +. +so +. +rcvtimeo_mc +; + +1141 +rc + = + `ci_sock_lock +( +ni +, & +us +-> +s +. +b +); + +1142 if( + `CI_UNLIKELY + +rc + != 0 )) + +1143  +rc +; + +1145 if + `CI_UNLIKELY +( +us +-> +s +. +so_r +) ) { + +1146 if( +rc + = + `ci_g_so_r +(& +us +-> +s +)) != 0 ) + +1147  - +rc +; + +1150 if + `ci_udp_cv_q_is_emy +(& +us +-> +cv_q +) ) + +1151  +emy +; + +1154 +n_emy +: + +1155 +gs +-> +msg +. +iov + = +iovec +; + +1156 +cb_ags + = 0; + +1158  + `ci_udp_cv_q_n_emy +(& +us +-> +cv_q +) ) { + +1159 +ci__pkt_fmt +* +pkt +; + +1160 + `ci_rmb +(); + +1162 +pkt + = + `ci_udp_cv_q_g +( +ni +, & +us +-> +cv_q +); + +1164 +gs +-> +msg +. +msghdr +. +msg_me + = +suld_me +; + +1165 +gs +-> +msg +. +msghdr +. +msg_m + = +suld_m +; + +1166 +gs +-> +msg +. +msghdr +. +msg_ags + = 0; + +1168 if + `CI_UNLIKELY +( +us +-> +s +. +cmsg_ags + != 0 ) ) { + +1169 +gs +-> +msg +. +msghdr +. +msg_cڌn + = +suld_cڌn +; + +1170 +gs +-> +msg +. +msghdr +. +msg_cڌ + = +suld_cڌ +; + +1171 + `ci__cmsg_cv +( +ni +, +us +, +pkt +, & +gs +-> +msg +. +msghdr +, 0, + +1172 & +gs +-> +msg +. +msghdr +. +msg_ags +); + +1175 +gs +-> +msg +. +msghdr +. +msg_cڌn + = 0; + +1177 + `ci_udp_cvmsg_fl_msghdr +( +ni +, & +gs +-> +msg +. +msghdr +, +pkt +, + +1178 & +us +-> +s +); + +1180 + `ci_udp_pkt_to_zc_msg +( +ni +, +pkt +, & +gs +-> +msg +); + +1182 +us +-> +amp + = +pkt +-> +pf +. +udp +. +rx_amp +; + +1183 +us +-> +udpags + | +CI_UDPF_LAST_RECV_ON +; + +1185 +cb_ags + = + `CI_IP_IS_MULTICAST +( + `oo__hdr +( +pkt +)-> +_daddr_be32 +) ? + +1186 +ONLOAD_ZC_MSG_SHARED + : 0; + +1187 if( + `ci_udp_cv_q_pkts +(& +us +-> +cv_q +) == 1) && + +1188 (( +us +-> +s +. +os_sock_us + & +OO_OS_STATUS_RX +) == 0) ) + +1189 +cb_ags + | +ONLOAD_ZC_END_OF_BURST +; + +1195 +pkt +-> +rx_ags + | +CI_PKT_RX_FLAG_UDP_KEEP +; + +1197 +cb_rc + = (* +gs +-> +cb +)rgs, +cb_ags +); + +1199 if! ( +cb_rc + & +ONLOAD_ZC_KEEP +) ) { + +1201 +pkt +-> +rx_ags + &=~ +CI_PKT_RX_FLAG_UDP_KEEP +; + +1204 + `ci_udp_cv_q_div +( +ni +, & +us +-> +cv_q +, +pkt +); + +1206 +de_back + = 1; + +1208 if +cb_rc + & +ONLOAD_ZC_TERMINATE + ) + +1209  +out +; + +1212 if +de_big_pl + && +de_kl_pl + && + +1213 ( +cb_ags + & +ONLOAD_ZC_END_OF_BURST +) ) + +1214  +out +; + +1216  +emy +; + +1219 +out +: + +1220 +ni +-> +e +-> +is_r + = 0; + +1221 + `ci_sock_uock +( +ni +, & +us +-> +s +. +b +); + +1223  +rc +; + +1225 +emy +: + +1226 if +_e +. +t_c + == 0 ) + +1227 + `ci_c64 +(& +_e +. +t_c +); + +1229 if + `ci_tif_may_pl +( +ni +) && + +1230 + `ci_tif_ed_pl_ng +( +ni +, +_e +. +t_c +) && + +1231 + `ci_tif_ylock +( +ni +) ) { + +1233 if + `ci_tif_pl_n +( +ni +, + `NI_OPTS +i). +evs_r_pl +) < + +1234 + `NI_OPTS +( +ni +). +evs_r_pl + ) + +1235 +de_big_pl + = 1; + +1238 if! +de_big_pl + && + `ci_udp_cv_q_is_emy +(& +us +-> +cv_q +) ) { + +1239 +de_big_pl + = 1; + +1240 + `ci_tif_pl +( +ni +); + +1243 + `ci_tif_uock +( +ni +); + +1245 if + `ci_udp_cv_q_n_emy +(& +us +-> +cv_q +) ) + +1246  +n_emy +; + +1249 +de_big_pl + = 1; + +1251 +_lo +: + +1252 if( + `CI_UNLIKELY +( +rc + = + `UDP_RX_ERRNO +( +us +)) )) { + +1253 +rc + = -rc; + +1254 +us +-> +s +. +rx_o + = us->s.rx_errno & 0xf0000000; + +1255  +out +; + +1257 if( + `CI_UNLIKELY + +us +-> +s +. +so_r + )) { + +1258  +rc1 + = + `ci_g_so_r +(& +us +-> +s +); + +1259 if +rc1 + != 0 ) { + +1260 +rc + = - +rc1 +; + +1261  +out +; + +1265 +de_kl_pl + = 1; + +1266 if +us +-> +s +. +os_sock_us + & +OO_OS_STATUS_RX + ) { + +1267 if +gs +-> +ags + & +ONLOAD_MSG_RECV_OS_INLINE + ) { + +1270 +gs +-> +msg +. +msghdr +. +msg_cڌn + = +suld_cڌn +; + +1271 +gs +-> +msg +. +msghdr +. +msg_cڌ + = +suld_cڌ +; + +1272 +gs +-> +msg +. +msghdr +. +msg_me + = +suld_me +; + +1273 +gs +-> +msg +. +msghdr +. +msg_m + = +suld_m +; + +1274 +rc + = + `ci_udp_zc_cv_om_os +( +ni +, +us +, +gs +, & +cb_rc +); + +1275 +de_back + = 1; + +1276 if +rc + !0 || +cb_rc + & +ONLOAD_ZC_TERMINATE + ) { + +1277 + `ci_as +( +de_big_pl +); + +1278  +out +; + +1280 if + `ci_udp_cv_q_n_emy +(& +us +-> +cv_q +) ) + +1281  +n_emy +; + +1282 }  +us +-> +s +. +os_sock_us + & +OO_OS_STATUS_RX + ); + +1286 +rc + = - +ENOTEMPTY +; + +1287  +out +; + +1295 if +de_back + ) { + +1296 + `ci_as +( +de_big_pl +); + +1297 + `ci_as +( +de_kl_pl +); + +1298 +rc + = 0; + +1299  +out +; + +1302 if(( +gs +-> +ags + | +us +-> +s +. +b +. +sb_aags +& +MSG_DONTWAIT +)) { + +1304 +rc + = - +EAGAIN +; + +1305 ++ +us +-> +s +. +n_rx_ga +; + +1306  +out +; + +1308 i( + `UDP_IS_SHUT_RD +( +us +)) { + +1310 +rc + = 0; + +1311  +out +; + +1317 if +_e +. +do_ + == -1 ) { + +1318 +_e +. +do_ + = + +1319 + `oo_r_thad_g +()-> +e + & (1 << +ONLOAD_SPIN_UDP_RECV +); + +1321 if +_e +. +do_ + ) { + +1322 +_e +. +si + = + `cp_sigl_g_ecific_ed +(); + +1323 +_e +. +max_ + = +us +-> +s +. +b +. +_cyes +; + +1325 if +us +-> +s +. +so +. +rcvtimeo_mc + ) { + +1326 +ci_ut64 + +max_so_ + = (ci_ut64) +us +-> +s +. +so +. +rcvtimeo_mc + * + +1327 + `IPTIMER_STATE +( +ni +)-> +khz +; + +1328 if +max_so_ + < +_e +. +max_ + ) { + +1329 +_e +. +max_ + = +max_so_ +; + +1330 +_e +. +_lim_by_so + = 1; + +1336 if +_e +. +do_ + ) { + +1337 +rc + = + `ci_udp_cvmsg_socklocked_ +( +a +, +ni +, +us +, & +_e +); + +1342 if +rc + == 0 ) { + +1343 if + `ci_udp_cv_q_n_emy +(& +us +-> +cv_q +) ) + +1344  +n_emy +; + +1345  +_lo +; + +1347 if +rc + < 0 ) + +1348  +out +; + +1351 + `ci_sock_uock +( +ni +, & +us +-> +s +. +b +); + +1352 +rc + = + `ci_udp_cvmsg_block +( +a +, +ni +, +us +, +_e +. +timeout +); + +1353 + `ci_sock_lock +( +ni +, & +us +-> +s +. +b +); + +1354 if +rc + == 0 ) { + +1355 if + `ci_udp_cv_q_n_emy +(& +us +-> +cv_q +) ) + +1356  +n_emy +; + +1358  +emy +; + +1361  +out +; + +1362 + } +} + +1365  + $ci_udp_cvmsg_kl +( +fd +, +ci_tif +* +ni +, +ci_udp_e +* +us +, + +1366  +msghdr +* +msg +,  +ags +) + +1368  +rc + = 0; + +1369  +rc1 +; + +1371 if +us +-> +s +. +os_sock_us + & +OO_OS_STATUS_RX + ) { + +1372 +rc1 + = + `__ci_udp_cvmsg_y_os +( +ni +, +us +, +msg +, +ags +, & +rc +); + +1373 if +rc1 + != 1 ) { + +1374 if +rc1 + == 0 ) + +1375 +rc + = - +EAGAIN +; + +1377 +rc + = +rc1 +; + +1380 if +rc + < 0 ) + +1381 + `CI_SET_ERROR +( +rc +, -rc); + +1384  +rc +; + +1385 + } +} + + @udp_rx.c + +14  + ~"_.h +" + +15  + ~"udp_.h +" + +16  + ~ + +18 #ifde +ONLOAD_OFE + + +19  + ~"o/ld.h +" + +23  + #LPF + "ci_udp_" + + ) + +24  + #LPFIN + "-> " +LPF + + + ) + +25  + #LPFOUT + "<- " +LPF + + + ) + +27  + #VERB +( +x +) + + ) + +33  + $ci_udp_timeamp_q_queue +( +ci_tif +* +ni +, +ci_udp_e +* +us +, + +34 +ci__pkt_fmt +* +pkt +) + +36 +ci__pkt_fmt +* +p +; + +37  +tsly + = +us +-> +s +. +timeampg_ags + & + +38 +ONLOAD_SOF_TIMESTAMPING_OPT_TSONLY +; + +41 if + `ci_udp_cv_q_pkts +(& +us +-> +timeamp_q ++ +pkt +-> +n_bufrs + > + +42 + `ci_udp_cv_q_bys2cks +( +us +-> +s +. +so +. +dbuf +) ) { + +46 + `ci_udp_cv_q_ +( +ni +, & +us +-> +timeamp_q +); + +47 if + `ci_udp_cv_q_pkts +(& +us +-> +timeamp_q ++ +pkt +-> +n_bufrs + >= + +48 + `ci_udp_cv_q_bys2cks +( +us +-> +s +. +so +. +dbuf +) ) { + +49  - +ENOSPC +; + +53 if +tsly + && + `OO_PP_NOT_NULL +( +pkt +-> +ag_xt +) ) { + +54 +p + = + `PKT_CHK +( +ni +, +pkt +-> +ag_xt +); + +55 +pkt +-> +ag_xt + = +OO_PP_NULL +; + +56 + `ci_tif_pkt_a +( +ni +, +p +); + +59 + `ci_udp_cv_q_put +( +ni +, & +us +-> +timeamp_q +, +pkt +); + +61 +us +-> +s +. +b +. +sb_ags + | +CI_SB_FLAG_RX_DELIVERED +; + +64 + `ci_wmb +(); + +66 + `ci_tif_put__po_pl +( +ni +, & +us +-> +s +. +b +); + +67 + `ci_udp_wake_possibly_n__pl +( +ni +, +us +, +CI_SB_FLAG_WAKE_RX +); + +70 + } +} + +73  + $ci_udp_cv_q_ +( +ci_tif +* +ni +, +ci_udp_cv_q +* +q +) + +75  +d + = 0; + +76  ! + `OO_PP_EQ +( +q +-> +hd +, + `OO_ACCESS_ONCE +(q-> +exa +)) ) { + +77 +ci__pkt_fmt +* +pkt + = + `PKT_CHK +( +ni +, +q +-> +hd +); + +78  +n_bufrs + = +pkt +->n_buffers; + +79 +q +-> +hd + = +pkt +-> +udp_rx_xt +; + +80 +d + + + `ci_tif_pkt_a_check_kp +( +ni +, +pkt +); + +81 +q +-> +pkts_ed + + +n_bufrs +; + +83  +d +; + +84 + } +} + +87  + $ci_udp_cv_q_dr +( +ci_tif +* +ni +, +ci_udp_cv_q +* +q +) + +89 +ci__pkt_fmt +* +pkt +; + +90  + `OO_PP_NOT_NULL +( +q +-> +hd +) ) { + +91 +pkt + = + `PKT_CHK +( +ni +, +q +-> +hd +); + +92 +q +-> +hd + = +pkt +-> +udp_rx_xt +; + +93 + `ci_tif_pkt_a_check_kp +( +ni +, +pkt +); + +95 + } +} + +98  + $ci_udp_csum_cܻ +( +ci__pkt_fmt +* +pkt +, +ci_udp_hdr +* +udp +) + +100  +_n +, +_yn +; + +101 +ci_4_pudo_hdr + +ph +; + +102  +csum +; + +104 +_n + = + `CI_BSWAP_BE16 +( + `oo__hdr +( +pkt +)-> +_t_n_be16 +); + +105 +_yn + = +_n + - ( +ci_4_hdr +); + +106 +pkt +-> +pf +. +udp +. +y_n + = + `CI_BSWAP_BE16 +(udp-> +udp_n_be16 +); + +108 if +pkt +-> +pf +. +udp +. +y_n + + ( +ci_udp_hdr +> +_yn + ) + +111 if +udp +-> +udp_check_be16 + == 0 ) + +114 +ph +. +_ddr_be32 + = + `oo__hdr +( +pkt +)->ip_saddr_be32; + +115 +ph +. +_daddr_be32 + = + `oo__hdr +( +pkt +)->ip_daddr_be32; + +116 +ph +. +zo + = 0; + +117 +ph +. +_oc + = +IPPROTO_UDP +; + +118 +ph +. +ngth_be16 + = + `CI_BSWAP_BE16 +( +pkt +-> +pf +. +udp +. +y_n +); + +120 +csum + = + `ci__csum_l +(0, & +ph +, (ph)); + +121 +csum + = + `ci__csum_l +(csum, +udp +, +pkt +-> +pf +.udp. +y_n +); + +122 +csum + = + `ci__hdr_csum_fish +(csum); + +123  +csum + == 0; + +124 + } +} + +127 #ifde +_WIN32 + + +128  + $ci_udp_rx_y_dr_d +( +ci_tif +* +ni +, +ci_udp_e +* +us +, + +129  +a_eded +) + +131 +ci__pkt_fmt +* +pkt +; + +133 if +us +-> +udpags + & +CI_UDPF_CIRCULAR_Q + ) { + +140 if + `ci_sock_ylock +( +ni +, & +us +-> +s +. +b +) ) { + +141  + `OO_PP_NOT_NULL +( +us +-> +cv_q +. +exa +&& +a_eded + > 0 ) { + +142 +pkt + = + `PKT_CHK +( +ni +, +us +-> +cv_q +. +exa +); + +143 if!( +pkt +-> +rx_ags + & +CI_PKT_RX_FLAG_RECV_Q_CONSUMED +) ) { + +144 +a_eded + - +pkt +-> +pf +. +udp +. +y_n +; + +145 +us +-> +cv_q +. +bys_dived + + +pkt +-> +pf +. +udp +. +y_n +; + +146 ++ +us +-> +cv_q +. +pkts_dived +; + +147 +pkt +-> +rx_ags + | +CI_PKT_RX_FLAG_RECV_Q_CONSUMED +; + +148 ++ +us +-> +s +. +n_rx_ovow +; + +150 if +a_eded + <0 || + `OO_PP_IS_NULL +( +pkt +-> +xt +) ) + +152 +us +-> +cv_q +. +exa + = +pkt +-> +xt +; + +154 + `ci_sock_uock +( +ni +, & +us +-> +s +. +b +); + +157  +a_eded + <= 0; + +158 + } +} + +162  + $ci_udp_rx_div +( +ci_sock_cmn +* +s +, * +aque_g +) + +166  +ci_udp_rx_div_e +* +e + = +aque_g +; + +167 +ci__pkt_fmt +* +pkt + = +e +->pkt; + +168 +ci__pkt_fmt +* +q_pkt +; + +169 +ci_udp_e +* +us + = + `SOCK_TO_UDP +( +s +); + +170 +ci_tif +* +ni + = +e +->ni; + +171  +cvq_dth + = + `ci_udp_cv_q_pkts +(& +us +-> +cv_q ++ +pkt +-> +n_bufrs +; + +173 + `LOG_UV +( + `log +("%s: " +NS_FMT + "y_n=%d " +CI_IP_PRINTF_FORMAT +" -> " + +174 +CI_IP_PRINTF_FORMAT +, +__FUNCTION__ +, + +175 + `NS_PRI_ARGS +( +ni +, +s +), +pkt +-> +pf +. +udp +. +y_n +, + +176 + `CI_IP_PRINTF_ARGS +(& + `oo__hdr +( +pkt +)-> +_ddr_be32 +), + +177 + `CI_IP_PRINTF_ARGS +(& + `oo__hdr +( +pkt +)-> +_daddr_be32 +))); + +179 +e +-> +dived + = 1; + +181 #ifde +ONLOAD_OFE + + +182 if +s +-> +o_code_t + ! +OFE_ADDR_NULL + && + +183 + `o_oss_ck +( +ni +-> +o_chl +, +s +-> +o_code_t +, + `ci__time_now +(ni), + +184 + `oo_h_hdr +( +pkt +),kt-> +y_n +,kt-> +vn +, + +185 + `CI_BSWAP_BE16 +( + `oo_h_ty_g +( +pkt +)), + +186 + `oo__hdr +( +pkt +)) + +187 ! +OFE_ACCEPT + ) { + +192 if( +cvq_dth + < +us +-> +s +. +max_cvq_pkts +) && + +193 ! ( +ni +-> +e +-> +mem_essu + & +OO_MEM_PRESSURE_CRITICAL +) ) { + +194  +mui_dei_pkt +; + +196 +_ive +: + +197 +mui_dei_pkt + = + +198 + `CI_IP_IS_MULTICAST +( + `oo__hdr +( +pkt +)-> +_daddr_be32 +) || + +199 + `oo__hdr +( +pkt +)-> +_daddr_be32 + = +CI_IP_ALL_BROADCAST +; + +206 if! +e +-> +queued + && !( +pkt +-> +ags + & +CI_PKT_FLAG_TX_TIMESTAMPED +) ) { + +207 +e +-> +queued + = 1; + +208 + `ci_tif_pkt_hd +( +ni +, +pkt +); + +217 if +ni +-> +e +-> +n_rx_pkts + > + `NI_OPTS +i). +max_rx_cks + || + +218 ( +q_pkt + = + `ci_tif_pkt_loc +( +ni +)= +NULL + ) + +219  +dr +; + +220 ++ +ni +-> +e +-> +n_rx_pkts +; + +221 +q_pkt +-> +pf +. +udp +. +y_n + = +pkt +->pf.udp.pay_len; + +222 +q_pkt +-> +pf +. +udp +. +rx_amp + = +pkt +->pf.udp.rx_stamp; + +223 +q_pkt +-> +pf +. +udp +. +rx_hw_amp +. +tv_c + = +pkt +->pf.udp.rx_hw_stamp.tv_sec; + +224 #ifde +_WIN32 + + +225 +q_pkt +-> +pf +. +udp +. +rx_icmp_r + = +pkt +->pf.udp.rx_icmp_error; + +227 + `oo_offbuf_ +(& +q_pkt +-> +buf +, + `PKT_START +(q_pkt), 0); + +228 +q_pkt +-> +ags + = ( +CI_PKT_FLAG_RX_INDIRECT + | +CI_PKT_FLAG_UDP + | + +229 +CI_PKT_FLAG_RX +); + +230 +q_pkt +-> +ag_xt + = + `OO_PKT_P +( +pkt +); + +231 +q_pkt +-> +n_bufrs + = +pkt +->n_buffers + 1; + +232 + `ci_tif_pkt_hd +( +ni +, +pkt +); + +233 +pkt + = +q_pkt +; + +235 + `ci_as +( +pkt +-> +rx_ags + & +CI_PKT_RX_FLAG_UDP_KEEP +) == 0 ); + +236 + `ci_udp_cv_q_put +( +ni +, & +us +-> +cv_q +, +pkt +); + +237 +us +-> +s +. +b +. +sb_ags + | +CI_SB_FLAG_RX_DELIVERED +; + +238 + `ci_tif_put__po_pl +( +ni +, & +us +-> +s +. +b +); + +239 + `ci_udp_wake_possibly_n__pl +( +ni +, +us +, +CI_SB_FLAG_WAKE_RX +); + +240 if +mui_dei_pkt + ) { + +253 if +cvq_dth + > +us +-> +s +. +max_cvq_pkts + ) { + +254 if +cvq_dth + < + `ci_udp_cv_q_bys2cks +( +us +-> +s +. +so +. +rcvbuf +) && + +255 ! ( +ni +-> +e +-> +mem_essu + & +OO_MEM_PRESSURE_CRITICAL +) ) { + +256 +us +-> +s +. +max_cvq_pkts + = +cvq_dth +; + +257  +_ive +; + +262 #ifde +_WIN32 + + +263 if! ( +ni +-> +e +-> +mem_essu + & +OO_MEM_PRESSURE_CRITICAL +) && + +264 + `ci_udp_rx_y_dr_d +( +ni +, +us +, +pkt +-> +pf +. +udp +. +y_n +) ) + +265  +_ive +; + +267 +dr +: + +268 if +cvq_dth + > + `ci_udp_cv_q_bys2cks +( +us +-> +s +. +so +. +rcvbuf +) ) { + +269 + `LOG_UR +( + `log +( +FNS_FMT + "OVERFLOWay_len=%d", + +270 + `FNS_PRI_ARGS +( +ni +, +s +), +pkt +-> +pf +. +udp +. +y_n +)); + +271 ++ +us +-> +s +. +n_rx_ovow +; + +274 + `LOG_UR +( + `log +( +FNS_FMT + "DROP (memoryressure)ay_len=%d", + +275 + `FNS_PRI_ARGS +( +ni +, +s +), +pkt +-> +pf +. +udp +. +y_n +)); + +276 + `CITP_STATS_NETIF_INC +( +ni +, +memy_essu_drs +); + +277 ++ +us +-> +s +. +n_rx_mem_dr +; + +280 + } +} + +287  + $ci_udp_hd_rx +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +, +ci_udp_hdr +* +udp +, + +288  +_yn +) + +290  +ci_udp_rx_div_e + +e +; + +291  +d_wh +; + +293 + `ASSERT_VALID_PKT +( +ni +, +pkt +); + +294 + `ci_as +( + `oo__hdr +( +pkt +)-> +_oc + = +IPPROTO_UDP +); + +295 + `ci_as +( + `oo_offbuf_r +(& +pkt +-> +buf += + `PKT_START +(pkt)); + +296 + `ci_as_gt +( +pkt +-> +y_n +, +_yn +); + +298 +pkt +-> +pf +. +udp +. +rx_amp + = + `IPTIMER_STATE +( +ni +)-> +c +; + +300 + `LOG_UV + + `log + +LPF + "hd_rx: UDP:%IP:%p", +udp +, + `oo__hdr +( +pkt +))); + +303 +pkt +-> +pf +. +udp +. +y_n + = + `CI_BSWAP_BE16 +(udp-> +udp_n_be16 +); + +304 if( +pkt +-> +pf +. +udp +. +y_n + < ( +ci_udp_hdr +)) | + +305 ( +pkt +-> +pf +. +udp +. +y_n + > +_yn +) ) + +306  +ngth_r +; + +307 +pkt +-> +pf +. +udp +. +y_n + -( +ci_udp_hdr +); + +309 #ifde +_WIN32 + + +310 +pkt +-> +pf +. +udp +. +rx_icmp_r + = 0; + +312 + `oo_offbuf_t_t +(& +pkt +-> +buf +, +udp + + 1); + +313 + `CI_UDP_STATS_INC_IN_DGRAMS +( +ni +); + +315 +e +. +ni + =i; + +316 +e +. +pkt + =kt; + +317 +e +. +queued + = 0; + +318 +e +. +dived + = 0; + +320 +d_wh + = + +321 + `ci_tif_fr_f_ch_mch +( +ni +, + +322 + `oo__hdr +( +pkt +)-> +_daddr_be32 +, + +323 +udp +-> +udp_de_be16 +, + +324 + `oo__hdr +( +pkt +)-> +_ddr_be32 +, + +325 +udp +-> +udp_sour_be16 +, + +326 +IPPROTO_UDP +, +pkt +-> +tf_i +,kt-> +vn +, + +327 +ci_udp_rx_div +, & +e +, +NULL +); + +328 if! +d_wh + ) { + +329 + `ci_tif_fr_f_ch_mch +( +ni +, + +330 + `oo__hdr +( +pkt +)-> +_daddr_be32 +, + +331 +udp +-> +udp_de_be16 +, + +332 0, 0, +IPPROTO_UDP +, +pkt +-> +tf_i +,kt-> +vn +, + +333 +ci_udp_rx_div +, & +e +, +NULL +); + +336 if +e +. +queued + ) { + +337 + `ci_as_gt +( +pkt +-> +fcou +, 1); + +338 -- +pkt +-> +fcou +; + +342 if +e +. +dived + == 0 ) { + +343 + `LOG_U + + `log +( +LPFOUT + "handle_rx: NO MATCH %s:%u->%s:%u", + +344 + `_addr_r +( + `oo__hdr +( +pkt +)-> +_ddr_be32 +), + +345 ( + `CI_BSWAP_BE16 +( +udp +-> +udp_sour_be16 +), + +346 + `_addr_r +( + `oo__hdr +( +pkt +)-> +_daddr_be32 +), + +347 ( + `CI_BSWAP_BE16 +( +udp +-> +udp_de_be16 +))); + +348 + `CITP_STATS_NETIF_INC +( +ni +, +udp_rx_no_mch_drs +); + +349 if! + `CI_IP_IS_MULTICAST +( + `oo__hdr +( +pkt +)-> +_daddr_be32 +) ) { + +350 + `CI_UDP_STATS_INC_NO_PORTS +( +ni +); + +351 + `ci_icmp_nd_pt_uėch +( +ni +, +pkt +); + +354  +dr_out +; + +356 +ngth_r +: + +357 + `CI_UDP_STATS_INC_IN_ERRS +( +ni +); + +358 + `LOG_U +( + `log +("%s: ip_paylen=%d udp_len=%d", + +359 +__FUNCTION__ +, +_yn +, +pkt +-> +pf +. +udp +. +y_n +)); + +360  +dr_out +; + +362 +dr_out +: + +363 + `ci_tif_pkt_a_rx_1f +( +ni +, +pkt +); + +365 + } +} + + @udp_send.c + +14  + ~"_.h +" + +15  + ~"udp_.h +" + +16  + ~"_tx.h +" + +17  + ~ + +18  + ~ + +19  + ~ + +20  + ~ + +22 #ifde +ONLOAD_OFE + + +23  + ~"o/ld.h +" + +27  + #VERB +( +x +) + + ) + +29  + #LPF + "ci_udp_" + + ) + +30  + #LPFIN + "-> " +LPF + + + ) + +31  + #LPFOUT + "<- " +LPF + + + ) + +35 #ide +__KERNEL__ + + +36  + #ERESTARTSYS + 0 + + ) + +40  + #TXQ_LEVEL +( +us +) \ + +41 (( +us +)-> +tx_cou + + + `oo_omic_ad +(&(us)-> +tx_async_q_v +)) + + ) + +47  + #ylock +( +ni +, +locked +) \ + +48 (( +locked +|| ( + `ci_tif_ylock +( +ni +&& (ocked1))) + + ) + +49  + #si_ylock +( +ni +, +sf +) \ + +50 + `ylock +(( +ni +), ( +sf +)-> +ack_locked +) + + ) + +51  + #ylock_d_c +( +ni +, +locked +, + +) \ + +52 (( +locked +|| ( + `ci_tif_ylock +( +ni +&& (++( + +), (locked1))) + + ) + +53  + #si_ylock_d_c +( +ni +, +sf +, + +) \ + +54 + `ylock_d_c +(( +ni +), ( +sf +)-> +ack_locked +, ( + +)) + + ) + +56 #ifde +__sun__ + + +57  + #msg_m_ok +( +m +(am=( +sockaddr_ +)) + + ) + +59  + #msg_m_ok +( +m +(am>( +sockaddr_ +)) + + ) + +62  + #oo_tx_udp_hdr +( +pkt +(( +ci_udp_hdr +* + `oo_tx__da +kt)) + + ) + +65  + sudp_nd_fo + { + +66  + mrc +; + +67 +ci__ched_hdrs + + mche +; + +68  + mud_che +; + +69  + mack_locked +; + +70 +ci_ut32 + + mtimeout +; + +74 +ci_nole +  + $ci_udp_ndmsg_chksum +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +, + +75 +ci_4_hdr +* +f_ +) + +78  + #MAX_IP_FRAGMENTS + 50 + + ) + +79  +iovec + +iov +[ +MAX_IP_FRAGMENTS +]; + +80  +n + = -1; + +81 +ci_udp_hdr +* +udp + = + `TX_PKT_UDP +( +pkt +); + +82 +ci__pkt_fmt +* +p + = +pkt +; + +83  +f_ag + = 1; + +86  + `OO_PP_NOT_NULL +( +p +-> +xt +) ) { + +87  +ag_n +; + +88 * +ag_t +; + +89  +max_sg_n +; + +92 if++ +n + = +MAX_IP_FRAGMENTS + ) + +95 if +f_ag + ) { + +96 +ag_t + = (*)( +udp + + 1); + +97 +ag_n + = + `CI_BSWAP_BE16 +( +f_ +-> +_t_n_be16 +) - + +98 + `CI_IP4_IHL +( +f_ +- ( +ci_udp_hdr +); + +99 +f_ag + = 0; + +102 +ci_4_hdr + * +p_ +; + +103 +p + = + `PKT_CHK +( +ni +,-> +xt +); + +104 +p_ + = + `oo_tx__hdr +( +p +); + +105 +ag_n + = + `CI_BSWAP_BE16 +( +p_ +-> +_t_n_be16 +- + `CI_IP4_IHL +(p_ip); + +106 +ag_t + = (*)( +p_ + + 1); + +109 +iov +[ +n +]. +iov_ba + = +ag_t +; + +110 +iov +[ +n +]. +iov_n + = +ag_n +; + +111 +max_sg_n + = + `CI_PTR_ALIGN_FWD +( + `PKT_START +( +p +), +CI_CFG_PKT_BUF_SIZE +) - + +112 +ag_t +; + +113 if +ag_n + > +max_sg_n + ) { + +114 +iov +[ +n +]. +iov_n + = +max_sg_n +; + +115 +ag_n + - +max_sg_n +; + +119 if +p +-> +ag_xt + !p-> +xt + ) { + +120 +ci__pkt_fmt +* +sg_pkt + = +p +; + +121  +sg_pkt +-> +ag_xt + ! +p +-> +xt + ) { + +122 + `ci_as +( +ag_n +); + +123 +sg_pkt + = + `PKT_CHK +( +ni +, sg_pkt-> +ag_xt +); + +124 ++ +n +; + +125 + `ci_as_ +( +n +, +MAX_IP_FRAGMENTS +); + +127 +iov +[ +n +]. +iov_ba + = + `PKT_START +( +sg_pkt +); + +128 +iov +[ +n +]. +iov_n + = +ag_n +; + +129 +max_sg_n + = + `CI_PTR_ALIGN_FWD +( + `PKT_START +( +sg_pkt +), + +130 +CI_CFG_PKT_BUF_SIZE +) - + +131 + `PKT_START +( +sg_pkt +); + +132 if +ag_n + > +max_sg_n + ) { + +133 +iov +[ +n +]. +iov_n + = +max_sg_n +; + +134 +ag_n + - +max_sg_n +; + +137 +ag_n + = 0; + +139 + `ci_as_equ +( +ag_n +, 0); + +143 +udp +-> +udp_check_be16 + = + `ci_udp_checksum +( +f_ +, udp, +iov +, +n ++1); + +144 + } +} + +147  + $ci__nd_udp_ow +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +, + +148 +ci__ched_hdrs +* +che +) + +150  +os_rc + = 0; + +152 + `ci_as_equ +( + `oo_h_ty_g +( +pkt +), +CI_ETHERTYPE_IP +); + +153 + `ci_as_equ +( + `CI_IP4_IHL +( + `oo_tx__hdr +( +pkt +)), ( +ci_4_hdr +)); + +158 + `ci_as_gt +( +pkt +-> +fcou +, 1); + +159 -- +pkt +-> +fcou +; + +161 + `ci_ur_der_nd +( +ni +, +rc_nomac +, & +os_rc +, + `OO_PKT_P +( +pkt +), + +162 +che +-> +ifdex +); + +167 + `ci_udp_dec_tx_cou +( + `SP_TO_UDP +( +ni +, +pkt +-> +pf +. +udp +. +tx_sock_id +),kt); + +168 + } +} + +171  + $ci_udp_ndmsg_lo +( +ci_sock_cmn +* +s +, * +aque_g +) + +173  +ci_udp_rx_div_e +* +e + = +aque_g +; + +174 +ci__pkt_fmt +* +ag_hd +; + +175 +ci__pkt_fmt +* +buf_pkt +; + +176  +g_i +, +buf_n +; + +177 +ci_udp_hdr +* +udp +; + +178 * +buf_t +; + +180 if! +e +-> +dived + ) { + +186 +ag_hd + = +e +-> +pkt +; + +187 +udp + = ( +ci_udp_hdr +*( + `oo__hdr +( +ag_hd +) + 1); + +188 +ag_hd +-> +pf +. +udp +. +rx_amp + = + `IPTIMER_STATE +( +e +-> +ni +)-> +c +; + +189 #ifde +_WIN32 + + +190 +ag_hd +-> +pf +. +udp +. +rx_icmp_r + = 0; + +192 +ag_hd +-> +pf +. +udp +. +y_n + = + `CI_BSWAP_BE16 +(udp-> +udp_n_be16 +) - (*udp); + +193 +buf_pkt + = +ag_hd +; + +194 +g_i + = 0; + +196 ++ +e +-> +ni +->e-> +n_rx_pkts +; + +197 + `ci_as +(!( +buf_pkt +-> +ags + & +CI_PKT_FLAG_RX +)); + +198 +buf_pkt +-> +ags + | +CI_PKT_FLAG_RX +; + +199 if +buf_pkt + = +e +-> +pkt + ) + +201 +buf_t + = +udp + + 1; + +202 if +g_i + == 0 ) + +204 +buf_t + = + `oo__hdr +( +buf_pkt +) + 1; + +207 +buf_t + = + `PKT_START +( +buf_pkt +); + +208 +buf_n + = +buf_pkt +->buf_len; + +209 +buf_n + -(* +buf_t + - + `PKT_START +( +buf_pkt +); + +210 + `oo_offbuf_ +(& +buf_pkt +-> +buf +, +buf_t +, +buf_n +); + +211 if + `OO_PP_IS_NULL +( +buf_pkt +-> +ag_xt +) ) + +213 +buf_pkt + = + `PKT_CHK +( +e +-> +ni +, buf_pkt-> +ag_xt +); + +214 if++ +g_i + = +ag_hd +-> +n_bufrs + ) { + +215 +g_i + = 0; + +216 +ag_hd + = +buf_pkt +; + +221 + `CITP_STATS_NETIF_INC +( +e +-> +ni +, +udp_nd_m_lo +); + +222 + `ci_udp_rx_div +( +s +, +aque_g +); + +223 + `cp_waab_wake_n__pl +( +e +-> +ni +, & +s +-> +b +, +CI_SB_FLAG_WAKE_RX +); + +226 + } +} + +229  + $ci_udp_ndmsg_m +( +ci_tif +* +ni +, +ci_udp_e +* +us +, + +230 +ci__ched_hdrs +* +che +, + +231 +ci__pkt_fmt +* +pkt +) + +242  +ci_udp_rx_div_e + +e +; + +243 cڡ +ci_udp_hdr +* +udp +; + +245 if! ( +us +-> +udpags + & +CI_UDPF_MCAST_LOOP +) || + +246 ! ( + `NI_OPTS +( +ni +). +m_nd + & +CITP_MCAST_SEND_FLAG_LOCAL +) ) + +248 if( + `CI_UNLIKELY + +ni +-> +e +-> +n_rx_pkts + > + `NI_OPTS +i). +max_rx_cks + )) { + +249 + `ci_tif_y_to_ +( +ni +, 100); + +250 if +ni +-> +e +-> +n_rx_pkts + > + `NI_OPTS +i). +max_rx_cks + ) { + +251 + `CITP_STATS_NETIF_INC +( +ni +, +udp_nd_m_lo_dr +); + +256 +e +. +ni + =i; + +257 +e +. +pkt + =kt; + +258 +e +. +queued + = 0; + +259 +e +. +dived + = 0; + +261 +udp + = + `TX_PKT_UDP +( +pkt +); + +263 + `ci_tif_fr_f_ch_mch +( +ni +, + +264 + `oo__hdr +( +pkt +)-> +_daddr_be32 +, + +265 +udp +-> +udp_de_be16 +, + +266 + `oo__hdr +( +pkt +)-> +_ddr_be32 +, + +267 +udp +-> +udp_sour_be16 +, + +268 +IPPROTO_UDP +, +che +-> +tf_i +, + +269 +che +-> +p +. +vn_id +, + +270 +ci_udp_ndmsg_lo +, & +e +, +NULL +); + +271 + `ci_tif_fr_f_ch_mch +( +ni +, + +272 + `oo__hdr +( +pkt +)-> +_daddr_be32 +, + +273 +udp +-> +udp_de_be16 +, + +274 0, 0, +IPPROTO_UDP +, +che +-> +tf_i +, + +275 +che +-> +p +. +vn_id +, + +276 +ci_udp_ndmsg_lo +, & +e +, +NULL +); + +277 + } +} + +281 +ci_le +  + $_nd_pkt +( +ci_tif +* +ni +, +ci_udp_e +* +us +, + +282 +ci__pkt_fmt +* +pkt +, +ci__ched_hdrs +* +che +) + +284 +ci_4_hdr + * + + = + `oo_tx__hdr +( +pkt +); + +285 +ni +-> +e +-> +n_async_pkts + - +pkt +-> +n_bufrs +; + +287 + +-> +_ddr_be32 + = +che +->ip_saddr_be32; + +288 + +-> +_daddr_be32 + = +che +->ip.ip_daddr_be32; + +289 + +-> +_l + = +che +->ip.ip_ttl; + +290 + `ci__t_mac_d_pt +( +ni +, +che +, +pkt +); + +291 +us +-> +tx_cou + + +pkt +-> +pf +. +udp +. +tx_ngth +; + +292 +pkt +-> +ags + | +CI_PKT_FLAG_UDP +; + +293 +pkt +-> +pf +. +udp +. +tx_sock_id + = + `S_SP +( +us +); + +294 + `CI_UDP_STATS_INC_OUT_DGRAMS + +ni + ); + +296 if( + +-> +_ag_off_be16 + & +CI_IP4_OFFSET_MASK +) == 0 ) { + +298 if +us +-> +s +. +timeampg_ags + & +ONLOAD_SOF_TIMESTAMPING_TX_HARDWARE + ) + +299 +pkt +-> +ags + | +CI_PKT_FLAG_TX_TIMESTAMPED +; + +300 if + +-> +_ag_off_be16 + & +CI_IP4_FRAG_MORE + ) { + +302 + `ci_udp_ndmsg_chksum +( +ni +, +pkt +, + +); + +305 + } +} + +308 #ifde +__KERNEL__ + + +310  + $do_sys_ndmsg +( +ci_sock_cmn + * +s +, +oo_os_fe + +os_sock +, + +311 cڡ +ci_msghdr +* +msg +, + +312  +ags +,  +ur_bufrs +,  +omic +) + +314  +sock +* +sock +; + +315  +i +, +bys +; + +316  +msghdr + +kmsg +; + +318 + `ci_as +( + `S_ISSOCK +( +os_sock +-> +f_dy +-> +d_ode +-> +i_mode +)); + +319 +sock + = + `SOCKET_I +( +os_sock +-> +f_dy +-> +d_ode +); + +320 + `ci_as +(! +ur_bufrs + || ! +omic +); + +322 + `LOG_NT +( + `ci_log +("%s: user_buffers=%dtomic=%d sk_allocation=%x ATOMIC=%x", + +323 +__FUNCTION__ +, +ur_bufrs +, +omic +, + +324 +sock +-> +sk +-> +sk_loti +, +GFP_ATOMIC +)); + +326 if +omic + && +sock +-> +sk +-> +sk_loti + ! +GFP_ATOMIC + ) { + +327 + `ci_log +("%s: cnمroed", +__FUNCTION__ +); + +328  - +EINVAL +; + +331  +i + = 0, +bys + = 0; i < +msg +-> +msg_iovn +; ++i ) + +332 +bys + + +msg +-> +msg_iov +[ +i +]. +iov_n +; + +334 + `memt +(& +kmsg +, 0, (kmsg)); + +335 if +ur_bufrs + ) { + +336 + `oo_msg_iov_ +(& +kmsg +, +WRITE +, +msg +-> +msg_iov +, msg-> +msg_iovn +, +bys +); + +337 +bys + = + `sock_ndmsg +( +sock +, & +kmsg +); + +340 +bys + = + `kl_ndmsg +( +sock +, & +kmsg +, + +341 ( +kvec +* +msg +-> +msg_iov +, msg-> +msg_iovn +, + +342 +bys +); + +346 + `oo_os_sock_us_b_r_hdd +( +s +, +os_sock +, +OO_OS_STATUS_TX +); + +347  +bys +; + +348 + } +} + +350  + $ci_udp_ndmsg_os +( +ci_tif +* +ni +, +ci_udp_e +* +us +, + +351 cڡ +ci_msghdr +* +msg +,  +ags +, + +352  +ur_bufrs +,  +omic +) + +354  +rc +; + +355 +oo_os_fe + +os_sock +; + +357 ++ +us +-> +s +. +n_tx_os +; + +359 +rc + = + `oo_os_sock_g +( +ni +, + `S_ID +( +us +), & +os_sock +); + +360 if +rc + == 0 ) { + +361 +rc + = + `do_sys_ndmsg +(& +us +-> +s +, +os_sock +, +msg +, +ags +, +ur_bufrs +, +omic +); + +362 + `oo_os_sock_put +( +os_sock +); + +364  +rc +; + +365 + } +} + +370 +ci_le +  + $ci_udp_ndmsg_os +( +ci_tif +* +ni +, +ci_udp_e +* +us +, + +371 cڡ  +msghdr +* +msg +,  +ags +, + +372  +ur_bufrs +,  +omic +) + +374  +rc +; + +376 ++ +us +-> +s +. +n_tx_os +; + +378 #i + `defed +( +__i386__ +|| (defed( +__powpc__ +&& !defed( +__powpc64__ +)) + +380 if +msg +-> +msg_cڌn + != 0 ) + +381 +rc + = + `oo_os_sock_ndmsg_w +( +ni +, + `S_SP +( +us +), +msg +, +ags +); + +384 +rc + = + `oo_os_sock_ndmsg +( +ni +, + `S_SP +( +us +), +msg +, +ags +); + +385  +rc + >= 0 ?c : -1; + +386 + } +} + +391 #ide +__KERNEL__ + + +398  + $ci_udp_ndmsg_os_g_bdg +( +cp_sock + * + +, +ci_fd_t + +fd +, + +399 cڡ  +msghdr + * +msg +,  +ags +) + +401 +ci_tif +* +ni + = + +-> +tif +; + +402 +ci_udp_e +* +us + = + `SOCK_TO_UDP +( + +-> +s +); + +403  +t +, +rc +, +r +; + +404  +sockaddr_ + + +; + +405 +sockn_t + +n + = ( + +); + +406 +ci_fd_t + +os_sock + = (ci_fd_t) + `ci_g_os_sock_fd +( +fd +); + +408 + `ci_as +! + `udp_t_be16 +( +us +)); + +410 i! + `CI_IS_VALID_SOCKET +( +os_sock +) ) { + +411 + `LOG_U + + `log +("%s: " +NT_FMT +" c'g OS sock (%d)", +__FUNCTION__ +, + +412 + `NT_PRI_ARGS +( +ni +, +us +), +os_sock +)); + +413 + `RET_WITH_ERRNO +(() +os_sock +); + +421 + `UDP_CLR_FLAG +( +us +, +CI_UDPF_EF_SEND +); + +425 ++ +us +-> +s +. +n_tx_os +; + +426 ++ +us +-> +s +. +n_tx_os_ow +; + +427 #ide +_WIN32 + + +428 +t + = + `ci_sys_ndmsg +( +os_sock +, +msg +, +ags +); + +446 +DWORD + + +; + +448 +t + = + `ci_sys_ndto +( + +, +msg +, & + +, +ags + & ( +MSG_DONTROUTE + | +MSG_PARTIAL +) ); + +449 if! +t + ) = + +; + +452 +r + = + `CI_GET_ERROR +( +t +); + +455 #ide +_WIN32 + + +456 +rc + = + `ci_sys_gsockme + +os_sock +, ( +sockaddr +*)& + +, & +n +); + +458 +rc + = + `ci_sys_gsockme + + +, ( +sockaddr +*)& + +, & +n +); + +462 if + `CI_UNLIKELY + +rc + || (!rc && + +463 + +. +s_my + ! +AF_INET + || + +464 +n + < ( +sockaddr_ +))))) { + +465 + `LOG_UV +( + `log +("%s: " +NT_FMT +" sys_getsocknamerob. (rc:%drr:%d, fam:%d, " + +467 +__FUNCTION__ +, + `NT_PRI_ARGS +( +ni +, +us +), +rc +, +o +, + +. +s_my +, + +468 +n +, ()( +sockaddr_ +))); + +469 + `ci_l_os_sock_fd + +os_sock + ); + +470 +o + = +r +; + +471  +t +; + +474 + `ci_tif_lock +( +ni +); + +475 if + `udp_t_be16 +( +us +) == 0 ) { + +476 +us +-> +udpags + | +CI_UDPF_IMPLICIT_BIND +; + +477 + `ci_udp_t_ddr +( + +, + +. +s_addr +. +s_addr +, sa. +s_pt +); + +480 if + +. +s_pt + != 0 && + +481 ( + +. +s_addr +. +s_addr + = +INADDR_ANY + || + +482 + `ci_ur_addr_is_lol_eb +( + `CICP_HANDLE +( +ni +),& + +. +s_addr +. +s_addr +)) ) { + +483 + `ci_as +! ( +us +-> +udpags + & +CI_UDPF_FILTERED +) ); + +485 #ifde +ONLOAD_OFE + + +486 if +ni +-> +o_chl + ! +NULL + ) + +487 +us +-> +s +. +o_code_t + = + `o_socktbl_fd +( + +488 +ni +-> +o +, +OFE_SOCKTYPE_UDP +, + +489 + `udp_ddr_be32 +( +us +), + `udp_ddr_be32 +(us), + +490 + `udp_t_be16 +( +us +), + `udp_t_be16 +(us)); + +492 +us +-> +s +. +o_code_t + = +OFE_ADDR_NULL +; + +495 +rc + = + `ci_t__t_frs +( +ni +, + `S_SP +( +us +), us-> +s +. + +. +so_bdtodevi +, + +496 +OO_SP_NULL +); + +497 if +rc + ) { + +498 + `LOG_U +( + `log +("%s: FILTER ADD FAIL %d", +__FUNCTION__ +, - +rc +)); + +501 + `UDP_SET_FLAG +( +us +, +CI_UDPF_FILTERED +); + +505 + `ci_tif_uock +( +ni +); + +507 + `LOG_UV +( + `ci_log +("%s: " +NT_FMT +"Unbound: first send via OS got L:[%s:%u]", + +508 +__FUNCTION__ +, + `NT_PRI_ARGS +( +ni +, +us +), + +509 + `_addr_r + + `udp_ddr_be32 +( +us +)), + `udp_t_be16 +(us))); + +510 + `ci_l_os_sock_fd + +os_sock + ); + +511 +o + = +r +; + +512  +t +; + +513 + } +} + +517  + $ci_udp_ndmsg_nd_pkt_v_os +( +ci_tif +* +ni +, +ci_udp_e +* +us +, + +518 +ci__pkt_fmt +* +pkt +,  +ags +, + +519  +udp_nd_fo +* +sf +) + +521  +rc +, +g_i +, +buf_n +, +iov_i +; + +522 +ci__pkt_fmt +* +ag_hd +; + +523 +ci__pkt_fmt +* +buf_pkt +; + +524  +iovec + +iov +[30]; + +525 +ci_udp_hdr +* +udp +; + +526 * +buf_t +; + +528 #ide +__KERNEL__ + + +529  +sockaddr_ + +s +; + +530 +ci_msghdr + +m +; + +532 if + `oo_tx__hdr +( +pkt +)-> +_daddr_be32 + != 0 ) { + +533 +s +. +s_my + = +AF_INET +; + +534 +s +. +s_addr +. +s_addr + = + `oo_tx__hdr +( +pkt +)-> +_daddr_be32 +; + +535 +s +. +s_pt + = + `TX_PKT_UDP +( +pkt +)-> +udp_de_be16 +; + +536 +m +. +msg_me + = & +s +; + +537 +m +. +msg_m + = ( +sockaddr_ +); + +540 +m +. +msg_me + = +NULL +; + +541 +m +. +msg_m + = 0; + +543 +m +. +msg_iov + = +iov +; + +544 +m +. +msg_iovn + = 0; + +545 #ifde +__lux__ + + +546 +m +. +msg_cڌn + = 0; + +548 #ifde +__sun__ + + +549 +m +. +msg_acights + = +NULL +; + +550 +m +. +msg_acight + = 0; + +554 +ag_hd + = +pkt +; + +555 +udp + = ( +ci_udp_hdr +*( + `oo_tx__hdr +( +ag_hd +) + 1); + +556 +buf_pkt + = +ag_hd +; + +557 +g_i + = 0; + +558 +iov_i + = 0; + +560 if +buf_pkt + = +pkt + ) + +562 +buf_t + = +udp + + 1; + +563 if +g_i + == 0 ) + +565 +buf_t + = + `oo_tx__hdr +( +buf_pkt +) + 1; + +568 +buf_t + = + `PKT_START +( +buf_pkt +); + +569 +buf_n + = +buf_pkt +->buf_len; + +570 +buf_n + -(* +buf_t + - + `PKT_START +( +buf_pkt +); + +571 +iov +[ +iov_i +]. +iov_ba + = +buf_t +; + +572 +iov +[ +iov_i +]. +iov_n + = +buf_n +; + +573 if + `OO_PP_IS_NULL +( +buf_pkt +-> +ag_xt +) ) + +575 if++ +iov_i + =( +iov +) / (iov[0]) ) { + +581 +buf_pkt + = + `PKT_CHK +( +ni +, buf_pkt-> +ag_xt +); + +582 if++ +g_i + = +ag_hd +-> +n_bufrs + ) { + +583 +g_i + = 0; + +584 +ag_hd + = +buf_pkt +; + +588 #ifde +__KERNEL__ + + +589 if +sf + = +NULL + ) { + +593 + `ci_as +( +ags + =0 || fg= +MSG_CONFIRM +); + +594 +ags + | +MSG_DONTWAIT +; + +602 #ide +__KERNEL__ + + +603 +m +. +msg_iovn + = +iov_i + + 1; + +604 +rc + = + `ci_udp_ndmsg_os +( +ni +, +us +, & +m +, +ags +, 0, +sf + = +NULL +); + +605 if +rc + < 0 ) { + +607 + `ci_log +("%s: faedc=%d", +__FUNCTION__ +, +rc +); + +610 ( +rc +; + +611 ( +ci_udp_ndmsg_os +; + +613 + } +} + +616  + $fixup_pkt_n_smd +( +ci_tif + * +ni +, +ci__pkt_fmt +* +pkt +) + +618 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +621 + `ci_as_gt +( +pkt +-> +n_bufrs +, 0); + +622 +ni +-> +e +-> +n_async_pkts + - +pkt +-> +n_bufrs +; + +626 + `ci_as_gt +( +pkt +-> +fcou +, 1); + +627 +pkt +-> +fcou +--; + +629 if + `OO_PP_IS_NULL +( +pkt +-> +xt +) ) + +631 +pkt + = + `PKT_CHK +( +ni +,kt-> +xt +); + +633 + } +} + +636  + $ci_udp_ndmsg_nd +( +ci_tif +* +ni +, +ci_udp_e +* +us +, + +637 +ci__pkt_fmt +* +pkt +,  +ags +, + +638  +udp_nd_fo +* +sf +) + +640 +ci__pkt_fmt +* +f_pkt + = +pkt +; + +641 +ci__ched_hdrs +* +che +; + +642  +che_ldab +; + +643 #ifde +__KERNEL__ + + +644  +i + = 0; + +647 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +649 if + `oo_tx__hdr +( +pkt +)-> +_daddr_be32 + != 0 ) { + +654 ++ +us +-> +s +. +n_tx_ld_uc +; + +655 +che + = & +us +-> +hem_pkt +; + +656 if + `oo_tx__hdr +( +pkt +)-> +_daddr_be32 + = +che +-> + +.ip_daddr_be32 && + +657 + `oo_tx_udp_hdr +( +pkt +)-> +udp_de_be16 + = +che +-> +dpt_be16 + ) { + +658 if + `ci__che_is_vid +( + `CICP_HANDLE +( +ni +), +che +) ) + +659  +de_hdr_upde +; + +662 +che +-> + +. +_daddr_be32 + = + `oo_tx__hdr +( +pkt +)->ip_daddr_be32; + +663 +che +-> +dpt_be16 + = + `oo_tx_udp_hdr +( +pkt +)-> +udp_de_be16 +; + +664 if +sf + ! +NULL + && sf-> +ud_che + && + +665 + `ci__che_is_vid +( + `CICP_HANDLE +( +ni +), & +sf +-> +che +) ) { + +669 + `ci__che_upde_om +( +ni +, +che +, & +sf +->ipcache); + +670  +de_hdr_upde +; + +674 ++ +us +-> +s +. +n_tx__uc_lookup +; + +675 + `ci_ur_ve +( +ni +, +che +, & +us +-> +s +. + +); + +681 ++ +us +-> +s +. +n_tx_ld_c +; + +682 if( + `CI_UNLIKELY +! + `udp_ddr_be32 +( +us +) )) + +683  +no_lg_ced +; + +684 +che + = & +us +-> +s +. +pkt +; + +685 if( + `CI_UNLIKELY +! + `ci__che_is_vid +( + `CICP_HANDLE +( +ni +), +che +) )) { + +686 ++ +us +-> +s +. +n_tx__c_lookup +; + +687 + `ci_ur_ve +( +ni +, +che +, & +us +-> +s +. + +); + +691 + `oo_tx__hdr +( +pkt +)-> +_daddr_be32 + = + `udp_ddr_be32 +( +us +); + +692 + `TX_PKT_UDP +( +pkt +)-> +udp_de_be16 + = + `udp_t_be16 +( +us +); + +696 +de_hdr_upde +: + +697  +che +-> +us + ) { + +698  +rc_sucss +: + +699 +che_ldab + = 1; + +701  +rc_nomac +: + +702 +che_ldab + = 0; + +705  +nd_pkt_v_os +; + +708 if( + `CI_UNLIKELY + + `CI_BSWAP_BE16 +( + `oo_tx__hdr +( +pkt +)-> +_t_n_be16 +) > + +709 +che +-> +mtu + )) + +719 + `ci_log +("%s:kmtu=%dxedth mtu=%d", +__FUNCTION__ +, + +720 + `CI_BSWAP_BE16 +( + `oo_tx__hdr +( +pkt +)-> +_t_n_be16 +), +che +-> +mtu +); + +722 + `ci_as_equ +( +ni +-> +e +-> +nd_may_pl +, 0); + +723 +ni +-> +e +-> +nd_may_pl + = + `ci_tif_may_pl +(ni); + +725 if +che +-> + +. +_l + ) { + +726 if( + `CI_LIKELY + +che_ldab + )) { + +729 +oo_pkt_p + +xt + = +pkt +->next; + +730 + `_nd_pkt +( +ni +, +us +, +pkt +, +che +); + +732 + `ci_tif_nd +( +ni +, +pkt +); + +733 if + `OO_PP_IS_NULL +( +xt +) ) + +735 +pkt + = + `PKT_CHK +( +ni +, +xt +); + +736 #ifde +__KERNEL__ + + +737 if( + `CI_UNLIKELY + +i +++ > +ni +-> +pkt_ts_n + << +CI_CFG_PKTS_PER_SET_S + )) { + +738 + `ci_tif_r_deed +( +ni +, +CI_NETIF_ERROR_UDP_SEND_PKTS_LIST +, + +739 +__FUNCTION__ +); + +743 + `ci__che_mac_upde +( +ni +, +che +, +ags + & +MSG_CONFIRM +); + +745 if + `CI_IP_IS_MULTICAST +( +che +-> + +. +_daddr_be32 +) ) + +746 + `ci_udp_ndmsg_m +( +ni +, +us +, +che +, +f_pkt +); + +760 ++ +us +-> +s +. +n_tx__no_mac +; + +762 +oo_pkt_p + +xt + = +pkt +->next; + +763 + `_nd_pkt +( +ni +, +us +, +pkt +, +che +); + +764 + `ci__nd_udp_ow +( +ni +, +pkt +, +che +); + +765 if + `OO_PP_IS_NULL +( +xt +) ) + +767 +pkt + = + `PKT_CHK +( +ni +, +xt +); + +768 #ifde +__KERNEL__ + + +769 if( + `CI_UNLIKELY + +i +++ > +ni +-> +pkt_ts_n + << +CI_CFG_PKTS_PER_SET_S + )) { + +770 + `ci_tif_r_deed +( +ni +, +CI_NETIF_ERROR_UDP_SEND_PKTS_LIST +, + +771 +__FUNCTION__ +); + +777 if + `CI_IP_IS_MULTICAST +( +che +-> + +. +_daddr_be32 +) ) { + +778 + `fixup_pkt_n_smd +( +ni +, +f_pkt +); + +779 + `ci_udp_ndmsg_m +( +ni +, +us +, +che +, +f_pkt +); + +782 + `fixup_pkt_n_smd +( +ni +, +f_pkt +); + +783 + `LOG_U +( + `ci_log +("%s: doot send UDPacket because IP TTL = 0", + +784 +__FUNCTION__ +)); + +787 +ni +-> +e +-> +nd_may_pl + = 0; + +790 +nd_pkt_v_os +: + +791 ++ +us +-> +s +. +n_tx_os_ϋ +; + +792 + `fixup_pkt_n_smd +( +ni +, +pkt +); + +793 + `ci_udp_ndmsg_nd_pkt_v_os +( +ni +, +us +, +pkt +, +ags +, +sf +); + +796 +no_lg_ced +: + +801 if +sf + ! +NULL + ) + +802 +sf +-> +rc + = - +EDESTADDRREQ +; + +810 ++ +us +-> +s +. +n_tx_unc_ϋ +; + +811 + `fixup_pkt_n_smd +( +ni +, +pkt +); + +813 + } +} + +816  + $ci_udp_tx_dagm_v +( +ci_tif +* +ni +, +ci__pkt_fmt +* +pkt +, + +817 +ci_boޗn_t + +ni_locked +) + +820  +v + = 0; + +821  ; ; +pkt + = + `PKT_CHK_NML +( +ni +,kt-> +xt +, +ni_locked +) ) { + +822 +v + + +pkt +-> +pf +. +udp +. +tx_ngth +; + +823 if + `OO_PP_IS_NULL +( +pkt +-> +xt +) ) + +824  +v +; + +826 + } +} + +829  + $ci_udp_ndmsg_nd_async_q +( +ci_tif +* +ni +, +ci_udp_e +* +us +) + +831 +oo_pkt_p + + +, +nd_li +; + +832 +ci__pkt_fmt +* +pkt +; + +833  +ags +, +v + = 0; + +837 + `OO_PP_INIT +( +ni +, + +, +us +-> +tx_async_q +); + +838 if + `OO_PP_IS_NULL +( + +) ) ; + +839 }  + `ci_s32_ +(& +us +-> +tx_async_q +, + `OO_PP_ID +( + +), +OO_PP_ID_NULL +) ); + +842 +nd_li + = +OO_PP_NULL +; + +844 +pkt + = + `PKT_CHK +( +ni +, + +); + +845 +v + + + `ci_udp_tx_dagm_v +( +ni +, +pkt +, +CI_TRUE +); + +846 + + = +pkt +-> +tif +. +tx +. +dmaq_xt +; + +847 +pkt +-> +tif +. +tx +. +dmaq_xt + = +nd_li +; + +848 +nd_li + = + `OO_PKT_P +( +pkt +); + +850  + `OO_PP_NOT_NULL +( + +) ); + +852 + `oo_omic_add +(& +us +-> +tx_async_q_v +, - +v +); + +856 + + = +pkt +-> +tif +. +tx +. +dmaq_xt +; + +857 if +pkt +-> +ags + & +CI_PKT_FLAG_MSG_CONFIRM + ) + +858 +ags + = +MSG_CONFIRM +; + +860 +ags + = 0; + +861 ++ +us +-> +s +. +n_tx_lock_der +; + +862 + `ci_udp_ndmsg_nd +( +ni +, +us +, +pkt +, +ags +, +NULL +); + +863 + `ci_tif_pkt_a +( +ni +, +pkt +); + +864 if + `OO_PP_IS_NULL +( + +) ) ; + +865 +pkt + = + `PKT_CHK +( +ni +, + +); + +867 + } +} + +869  + $ci_udp_ndmsg_async_q_queue +( +ci_tif +* +ni +, +ci_udp_e +* +us +, + +870 +ci__pkt_fmt +* +pkt +,  +ags +) + +872 if +ags + & +MSG_CONFIRM + ) + +874 +pkt +-> +ags + | +CI_PKT_FLAG_MSG_CONFIRM +; + +876 + `oo_omic_add +(& +us +-> +tx_async_q_v +, + +877 + `ci_udp_tx_dagm_v +( +ni +, +pkt +, +CI_FALSE +)); + +879 + `OO_PP_INIT +( +ni +, +pkt +-> +tif +. +tx +. +dmaq_xt +, +us +-> +tx_async_q +); + +880  + `ci_s32_ +(& +us +-> +tx_async_q +, + +881 + `OO_PP_ID +( +pkt +-> +tif +. +tx +. +dmaq_xt +), + `OO_PKT_ID +(pkt)) ); + +883 if + `ci_tif_lock__der_wk +( +ni +, & +us +-> +s +. +b +) ) + +884 + `ci_tif_uock +( +ni +); + +885 + } +} + +888 #ide +__KERNEL__ + + +890  + $ci_udp_me_is_ok +( +ci_udp_e +* +us +, cڡ  +msghdr +* +msg +) + +892 + `ci_as +( +us +); + +893 + `ci_as +( +msg + ! +NULL +); + +894 + `ci_as +( +msg +-> +msg_m + > 0); + +897 if +msg +-> +msg_me + = +NULL + ) + +900 #i +CI_CFG_FAKE_IPV6 + + +901 if +us +-> +s +. +doma + = +AF_INET6 + ) { + +902 #ifde +__sun__ + + +903 if +msg +-> +msg_m + > ( +sockaddr_6 +) ) + +906  +msg +-> +msg_m + > +SIN6_LEN_RFC2133 + && + +907 + `CI_SIN6 +( +msg +-> +msg_me +)-> +s6_my + = +AF_INET6 + && + +908 + `ci_t_v6_is_v4 +(( +sockaddr +* +msg +-> +msg_me +); + +912 #ifde +__sun__ + + +913 if +msg +-> +msg_m + > ( +sockaddr_ +) ) + +917  +msg +-> +msg_m + >( +sockaddr_ +) && + +918 + `CI_SIN +( +msg +-> +msg_me +)-> +s_my + = +AF_INET +; + +919 + } +} + +923  + #OO_TIMEVAL_UNINITIALISED + (( +oo_timev +*1) + + ) + +926  + $ci_udp_ndmsg_may_nd +( +ci_udp_e +* +us +,  +bys_to_nd +) + +928  +dbuf + = +us +-> +s +. +so +.sndbuf; + +930 if +bys_to_nd + > +dbuf + / 2 ) + +935 if + `TXQ_LEVEL +( +us +< +dbuf + ) + +938 if + `ci_udp_tx_advti_a +( +us +) ) + +945  +dbuf + >(( + `TXQ_LEVEL +( +us ++ +bys_to_nd +); + +946 + } +} + +949  + $ci_udp_ndmsg_wa +( +ci_tif +* +ni +, +ci_udp_e +* +us +, + +950  +bys_to_nd +,  +ags +, + +951  +udp_nd_fo +* +sf +) + +953 +ci_ut64 + +t_c + = 0, +now_c + = 0; + +954 +ci_ut64 + +schedu_c + = 0; + +955 #ide +__KERNEL__ + + +956 +cp_sigl_fo +* +si + = + `cp_sigl_g_ecific_ed +(); + +958 +ci_ut64 + +max_ + = 0; + +959  +_lim_by_so + = 0; + +960 +ci_ut64 + +p_q +; + +961  +rc +, +f_time + = 1; + +962  +udp_nd_ +; + +964 if + `ci_udp_ndmsg_may_nd +( +us +, +bys_to_nd +) ) + +967 #ide +__KERNEL__ + + +968 +udp_nd_ + = + `oo_r_thad_g +()-> +e + & (1 << +ONLOAD_SPIN_UDP_SEND +); + +970 +udp_nd_ + = 0; + +974 if + `ci_tif_may_pl +( +ni +&& + `ci_tif_has_evt +(ni) ) + +975 if + `si_ylock_d_c +( +ni +, +sf +, +us +-> +s +. +n_tx_lock_pl +) ) + +976 + `ci_tif_pl +( +ni +); + +978 +no_r +: + +980 +p_q + = +us +-> +s +. +b +.p_q. +l +; + +981 + `ci_rmb +(); + +982 if( + `CI_UNLIKELY +( +rc + = + `ci_g_so_r +(& +us +-> +s +)!0 || us->s. +tx_o + )) + +983  +so_r +; + +984 if + `ci_udp_ndmsg_may_nd +( +us +, +bys_to_nd +) ) { + +985 +us +-> +s +. +n_tx_pl_avoids_fu + + +f_time +; + +986 if +udp_nd_ + ) + +987 +ni +-> +e +-> +is_r + = 0; + +990 if( +ags + & +MSG_DONTWAIT +) || + +991 ( +us +-> +s +. +b +. +sb_aags + & ( +CI_SB_AFLAG_O_NONBLOCK +| +CI_SB_AFLAG_O_NDELAY +)) ) { + +992 ++ +us +-> +s +. +n_tx_ga +; + +993  - +EAGAIN +; + +995 if +f_time + ) { + +996 +f_time + = 0; + +997 if +udp_nd_ + ) { + +998 +max_ + = +us +-> +s +. +b +. +_cyes +; + +999 if +us +-> +s +. +so +. +dtimeo_mc + ) { + +1000 +ci_ut64 + +max_so_ + = +sf +-> +timeout + * + `IPTIMER_STATE +( +ni +)-> +khz +; + +1001 if +max_so_ + < +max_ + ) { + +1002 +max_ + = +max_so_ +; + +1003 +_lim_by_so + = 1; + +1006 ++ +us +-> +s +. +n_tx_ +; + +1007 + `ci_c64 +(& +t_c +); + +1008 +now_c + = +t_c +; + +1009 +schedu_c + = +t_c +; + +1012 if +udp_nd_ + ) { + +1013 if +now_c + - +t_c + < +max_ + ) { + +1014 #i +CI_CFG_SPIN_STATS + + +1015 +ni +-> +e +-> +s +. +_udp_nd +++; + +1017 if + `ci_tif_may_pl +( +ni +) ) { + +1018 if + `ci_tif_ed_pl_ng +( +ni +, +now_c +) ) { + +1019 if + `si_ylock +( +ni +, +sf +) ) + +1020 + `ci_tif_pl_n +( +ni +, + `NI_OPTS +i). +evs_r_pl +); + +1022 if! +ni +-> +e +-> +is_r + ) + +1023 +ni +-> +e +-> +is_r + = 1; + +1025 if +sf +-> +ack_locked + ) { + +1026 + `ci_tif_uock +( +ni +); + +1027 +sf +-> +ack_locked + = 0; + +1029 +rc + = + `OO_SPINLOOP_PAUSE_CHECK_SIGNALS +( +ni +, +now_c +, & +schedu_c +, + +1030 +us +-> +s +. +so +. +dtimeo_mc +, + +1031 +NULL +, +si +); + +1032 if +rc + != 0 ) { + +1033 +ni +-> +e +-> +is_r + = 0; + +1034  +rc +; + +1037 if +_lim_by_so + ) { + +1038 ++ +us +-> +s +. +n_tx_ga +; + +1039  - +EAGAIN +; + +1043 if +sf +-> +timeout + && +udp_nd_ + ) { + +1044 +ci_ut32 + +_ms + = + `NI_OPTS +( +ni +). +_uc + >> 10; + +1045 if +_ms + < +sf +-> +timeout + ) + +1046 +sf +-> +timeout + - +_ms +; + +1048 ++ +us +-> +s +. +n_tx_ga +; + +1049  - +EAGAIN +; + +1052 ++ +us +-> +s +. +n_tx_block +; + +1053 +rc + = + `ci_sock_p +( +ni +, & +us +-> +s +. +b +, +CI_SB_FLAG_WAKE_TX +, + +1054 +sf +-> +ack_locked + ? +CI_SLEEP_NETIF_LOCKED + : 0, + +1055 +p_q +, & +sf +-> +timeout +); + +1056 +sf +-> +ack_locked + = 0; + +1057 if +rc + < 0 ) + +1058  +rc +; + +1062 +so_r +: + +1063 if +udp_nd_ + ) + +1064 +ni +-> +e +-> +is_r + = 0; + +1065 if +rc + == 0 ) + +1066 +rc + = - +us +-> +s +. +tx_o +; + +1067 if +rc + == 0 ) + +1068  +no_r +; + +1069  +rc +; + +1070 + } +} + +1073 +ci_le + +ci_udp_hdr +* + $udp_ +( +ci_udp_e +* +us +, +ci__pkt_fmt +* +pkt +, + +1074  +yld_bys +) + +1076 +ci_udp_hdr +* +udp + = + `TX_PKT_UDP +( +pkt +); + +1077 +udp +-> +udp_n_be16 + = ( +ci_ut16 +( +yld_bys + + ( +ci_udp_hdr +)); + +1078 +udp +-> +udp_n_be16 + = + `CI_BSWAP_BE16 +(udp->udp_len_be16); + +1079 +udp +-> +udp_check_be16 + = 0; + +1080 +udp +-> +udp_sour_be16 + = + `udp_t_be16 +( +us +); + +1081  +udp +; + +1082 + } +} + +1087 +ci_le + +ci_4_hdr +* + $h__ +( +ci_tif +* +ni +, +ci_udp_e +* +us +, + +1088 +ci__pkt_fmt +* +pkt +) + +1090 +ci_4_hdr +* + +; + +1092 + + = + `oo_tx__hdr +( +pkt +); + +1094 + +-> +_ihl_vsi + = + `CI_IP4_IHL_VERSION +((*ip)); + +1095 + +-> +_tos + = + `UDP_IP_HDR +( +us +)->ip_tos; + +1098 + +-> +_ag_off_be16 + = +CI_IP4_FRAG_DONT +; + +1099 + +-> +_oc + = +IPPROTO_UDP +; + +1100 + +-> +_check_be16 + = 0; + +1101  + +; + +1102 + } +} + +1110  + $ci_udp_ndmsg_fl +( +ci_tif +* +ni +, +ci_udp_e +* +us +, + +1111 +ci_iovec_r +* +piov +,  +bys_to_nd +, + +1112  +ags +, + +1113  +oo_pkt_fr +* +pf +, + +1114  +udp_nd_fo +* +sf +) + +1116 +ci__pkt_fmt +* +f_pkt +; + +1117 +ci__pkt_fmt +* +w_pkt +; + +1118  +rc +, +ag_bys +, +yld_bys +; + +1119  +bys_ +, +ag_off +; + +1120 +ci_ut16 + +_id +; + +1121 +ci_4_hdr +* + +; + +1122  +pmtu + = +sf +-> +che +. +mtu +; + +1123  +n_block + = ! (( + `NI_OPTS +( +ni +). +udp_nblock_no_pkts_mode +) && + +1124 (( +ags + & +MSG_DONTWAIT +) || + +1125 ( +us +-> +s +. +b +. +sb_aags + & ( +CI_SB_AFLAG_O_NONBLOCK +| +CI_SB_AFLAG_O_NDELAY +)))); + +1127 + `ci_as +( +pmtu + > 0); + +1129 +ag_off + = 0; + +1130 +bys_ + = +bys_to_nd +; + +1135 if +bys_to_nd + < + `NI_OPTS +( +ni +). +udp_nd_uock_thsh + && + +1136 ! +sf +-> +ack_locked + ) + +1137 +sf +-> +ack_locked + = + `ci_tif_ylock +( +ni +); + +1139 +rc + = + `ci_tif_pkt_loc_block +( +ni +, & +us +-> +s +, & +sf +-> +ack_locked +, +n_block +, + +1140 & +f_pkt +); + +1141 if +rc + != 0 ) + +1142  +rc +; + +1143 + `oo_tx_pkt_yout_ +( +f_pkt +); + +1145 +_id + = + `NEXT_IP_ID +( +ni +); + +1146 +_id + = + `CI_BSWAP_BE16 +(ip_id); + +1148 + `udp_ +( +us +, +f_pkt +, +bys_to_nd +); + +1150 + `oo_pkt_fr_ +( +pf +, +f_pkt +, + +1151 ( +ut8_t +* + `oo_tx__da +( +f_pkt ++ ( +ci_udp_hdr +)); + +1152 +f_pkt +-> +y_n + = ((* + `oo_tx__da +(first_pkt) + +1153 + ( +ci_udp_hdr +- + `PKT_START +( +f_pkt +)); + +1155 +yld_bys + = +pmtu + - ( +ci_4_hdr +- ( +ci_udp_hdr +); + +1156 if +yld_bys + > +bys_ + ) { + +1157 +yld_bys + = +bys_ +; + +1158 +bys_ + = 0; + +1161 +yld_bys + = + `UDP_PAYLOAD1_SPACE_PMTU +( +pmtu +); + +1162 +bys_ + - +yld_bys +; + +1164 +ag_bys + = +yld_bys + + ( +ci_udp_hdr +); + +1167 +pf +-> +pkt +->pf. +udp +. +tx_ngth + = +yld_bys + + ( +ci_udp_hdr +) + + +1168 ( +ci_4_hdr ++ ( +ci_h_hdr +); + +1169 + + = + `h__ +( +ni +, +us +, +pf +-> +pkt +); + +1170 + +-> +_t_n_be16 + = +ag_bys + + ( +ci_4_hdr +); + +1171 + +-> +_t_n_be16 + = + `CI_BSWAP_BE16 +(ip->ip_tot_len_be16); + +1172 + +-> +_ag_off_be16 + = +ag_off + >> 3u; + +1173 + +-> +_ag_off_be16 + = + `CI_BSWAP_BE16 +(ip->ip_frag_off_be16); + +1174 if +bys_ + > 0 ) + +1175 + +-> +_ag_off_be16 + | +CI_IP4_FRAG_MORE +; + +1176 if +us +-> +s +. +s_ags + & +CI_SOCK_FLAG_ALWAYS_DF + || + +1177 +us +-> +s +. +s_ags + & +CI_SOCK_FLAG_PMTU_DO + && + +1178 +pf +-> +pkt + = +f_pkt + ) ) { + +1179 + +-> +_ag_off_be16 + = +CI_IP4_FRAG_DONT +; + +1181 +ag_off + + +ag_bys +; + +1182 + +-> +_id_be16 + = +_id +; + +1185 + `ci_tif_pkt_hd +( +ni +, +pf +-> +pkt +); + +1187 +rc + = + `oo_pkt_fl +( +ni +, & +us +-> +s +, & +sf +-> +ack_locked +, +n_block +, +pf +, +piov +, + +1188 +yld_bys + + `CI_KERNEL_ARG +( +CI_ADDR_SPC_CURRENT +)); + +1189 if + `CI_UNLIKELY + +rc + != 0 ) ) + +1190  +fl_ed +; + +1192 if +bys_ + == 0 ) + +1196 ++ +us +-> +s +. +n_tx_agmts +; + +1198 +rc + = + `ci_tif_pkt_loc_block +( +ni +, & +us +-> +s +, & +sf +-> +ack_locked +, + +1199 +n_block +, & +w_pkt +); + +1200 if + `CI_UNLIKELY + +rc + != 0 )) + +1201  +fl_ed +; + +1202 + `oo_tx_pkt_yout_ +( +w_pkt +); + +1204 +pf +-> +pkt +-> +xt + = + `OO_PKT_P +( +w_pkt +); + +1205 +pf +-> +ϡ_pkt +-> +ag_xt + = + `OO_PKT_P +( +w_pkt +); + +1206 + `oo_pkt_fr_ +( +pf +, +w_pkt +, + `oo_tx__da +(new_pkt)); + +1207 +w_pkt +-> +y_n + = (* + `oo_tx__da +ew_pkt- + `PKT_START +(new_pkt); + +1209 +yld_bys + = + `UDP_PAYLOAD2_SPACE_PMTU +( +pmtu +); + +1210 +yld_bys + = + `CI_MIN +ayld_bys, +bys_ +); + +1211 +bys_ + - +yld_bys +; + +1212 +ag_bys + = +yld_bys +; + +1215 +pf +-> +pkt +-> +xt + = +OO_PP_NULL +; + +1216 +pf +-> +ϡ_pkt + =f-> +pkt +; + +1217 +pf +-> +pkt + = +f_pkt +; + +1219  +bys_to_nd +; + +1221 +fl_ed +: + +1222 if! +sf +-> +ack_locked + && + `ci_tif_lock +( +ni +) == 0 ) + +1223 +sf +-> +ack_locked + = 1; + +1231 +ci__pkt_fmt +* +pkt + = +f_pkt +; + +1232  +n_bufrs +; + +1235 +n_bufrs + = +pkt +->n_buffers; + +1236 + `ci_as_gt +( +pkt +-> +fcou +, 1); + +1237 +pkt +-> +fcou +--; + +1240  +n_bufrs +-- > 0 ) { + +1241 + `CI_NETIF_STATE_MOD +( +ni +, +sf +-> +ack_locked +, +n_async_pkts +, -); + +1242 if + `OO_PP_IS_NULL +( +pkt +-> +ag_xt +) ) + +1243  +pkt_cha_ad +; + +1244 +pkt + = + `PKT_CHK +( +ni +,kt-> +ag_xt +); + +1248 +pkt_cha_ad +: + +1251 #ifde +__KERNEL__ + + +1252 if! +sf +-> +ack_locked + ) + +1253 + `ci_tif_t_mge_omic_ag +( +ni +); + +1254 + `ci_tif_pkt_a_m +( +ni +, +f_pkt +, & +sf +-> +ack_locked +); + +1257 + `ci_as +( +sf +-> +ack_locked +); + +1258 + `ci_tif_pkt_a +( +ni +, +f_pkt +); + +1261  +rc +; + +1262 + } +} + +1266  + $ci_udp_ndmsg_ld +( +ci_tif +* +ni +, +ci_udp_e +* +us +, + +1267 cڡ +ci_msghdr +* +msg +,  +ags +, + +1268  +udp_nd_fo +* +sf +) + +1270  +rc +, +i +, +bys_to_nd +; + +1271  +oo_pkt_fr + +pf +; + +1272 +ci_iovec_r + +piov +; + +1273  +was_locked +; + +1276 + `ci_as +( +ni +); + +1277 + `ci_as +( +us +); + +1278 + `ci_as +( +msg + ! +NULL +); + +1281 +bys_to_nd + = 0; + +1282 if +msg +-> +msg_iovn + > 0 ) { + +1283 +i + = +msg +-> +msg_iovn + - 1; + +1285 if + `CI_IOVEC_BASE +(& +msg +-> +msg_iov +[ +i +]! +NULL + ) + +1286 +bys_to_nd + + + `CI_IOVEC_LEN +(& +msg +-> +msg_iov +[ +i +]); + +1287 if + `CI_IOVEC_LEN +(& +msg +-> +msg_iov +[ +i +]) > 0 ) + +1288  +eu +; + +1289 }  -- +i + >= 0 ); + +1290 + `ci_iovec_r__nz +(& +piov +, +msg +-> +msg_iov +, msg-> +msg_iovn +); + +1293 + `ci_iovec_r_ +(& +piov +, +NULL +, 0); + +1297 +pf +. +loc_pkt + = +NULL +; + +1299 if! + `UDP_HAS_SENDQ_SPACE +( +us +, +bys_to_nd +) | + +1300 ( +bys_to_nd + > ( +CI_UDP_MAX_PAYLOAD_BYTES +) ) + +1301  +no_a__too_big +; + +1303 +back_to__th +: + +1304 +was_locked + = +sf +-> +ack_locked +; + +1305 if +bys_to_nd + > +sf +-> +che +. +mtu + - ( +ci_4_hdr +) - + +1306 ( +ci_udp_hdr +) && + +1307 ( +us +-> +s +. +s_ags + & +CI_SOCK_FLAG_ALWAYS_DF +) ) { + +1309 #ide +__KERNEL__ + + +1310 if +msg +-> +msg_m + == 0 || + +1311 ( +us +-> +s +. +so +. +so_debug + & +CI_SOCKOPT_FLAG_IP_RECVERR +) ) + +1313 +us +-> +s +. +so_r + = +EMSGSIZE +; + +1314 +sf +-> +rc + = - +EMSGSIZE +; + +1317 +rc + = + `ci_udp_ndmsg_fl +( +ni +, +us +, & +piov +, +bys_to_nd +, +ags +, & +pf +, +sf +); + +1318 if +us +-> +s +. +timeampg_ags + & +ONLOAD_SOF_TIMESTAMPING_OPT_ID + ) { + +1319 +pf +. +pkt +-> +ts_key + = +us +-> +s +.ts_key; + +1320 + `ci_omic32_c +(& +us +-> +s +. +ts_key +); + +1322 if +sf +-> +ack_locked + && ! +was_locked + ) + +1323 ++ +us +-> +s +. +n_tx_lock_pkt +; + +1324 if( + `CI_LIKELY + +rc + >= 0 )) { + +1325 +sf +-> +rc + = +bys_to_nd +; + +1326 + `oo_tx__hdr +( +pf +. +pkt +)-> +_daddr_be32 + = +sf +-> +che +. + +.ip_daddr_be32; + +1327 + `oo_tx_udp_hdr +( +pf +. +pkt +)-> +udp_de_be16 + = +sf +-> +che +. +dpt_be16 +; + +1328 if + `si_ylock_d_c +( +ni +, +sf +, +us +-> +s +. +n_tx_lock_d +) ) { + +1329 + `ci_udp_ndmsg_nd +( +ni +, +us +, +pf +. +pkt +, +ags +, +sf +); + +1330 + `ci_tif_pkt_a +( +ni +, +pf +. +pkt +); + +1331 + `ci_tif_uock +( +ni +); + +1332 +sf +-> +ack_locked + = 0; + +1335 + `ci_udp_ndmsg_async_q_queue +( +ni +, +us +, +pf +. +pkt +, +ags +); + +1339 +sf +-> +rc + =c; + +1345 +eu +: + +1346 +sf +-> +rc + = - +EFAULT +; + +1349 +no_a__too_big +: + +1353 if +bys_to_nd + > +CI_UDP_MAX_PAYLOAD_BYTES + ) { + +1354 +sf +-> +rc + = - +EMSGSIZE +; + +1359 +rc + = + `ci_udp_ndmsg_wa +( +ni +, +us +, +bys_to_nd +, +ags +, +sf +); + +1360 if( + `CI_UNLIKELY + +rc + != 0 )) { + +1361 +sf +-> +rc + =c; + +1365 + `LOG_UV +( + `ci_log +("%s: " +NT_FMT +"back硅h", +__FUNCTION__ +, + +1366 + `NT_PRI_ARGS +( +ni +, +us +))); + +1367  +back_to__th +; + +1368 + } +} + +1371  + $ci_udp_ndmsg +( +ci_udp_iomsg_gs + * +a +, + +1372 cڡ +ci_msghdr +* +msg +,  +ags +) + +1374 +ci_tif + * +ni + = +a +->ni; + +1375 +ci_udp_e + * +us + = +a +->us; + +1376  +udp_nd_fo + +sf +; + +1377  +rc +; + +1380 + `ci_as +( +msg + ! +NULL +); + +1383 +sf +. +rc + = 0; + +1384 +sf +. +ack_locked + = 0; + +1385 +sf +. +ud_che + = 0; + +1386 +sf +. +timeout + = +us +-> +s +. +so +. +dtimeo_mc +; + +1388 #i + `defed +( +__lux__ +&& !defed( +__KERNEL__ +) + +1390 if( + `CI_UNLIKELY + + `CMSG_FIRSTHDR +( +msg +! +NULL + )) { + +1391  +_pktfo +* +fo + = +NULL +; + +1392 if + `ci__cmsg_nd +( +msg +, & +fo +!0 || inf! +NULL + ) + +1393  +nd_v_os +; + +1397 if( + `CI_UNLIKELY + +ags + & +MSG_MORE + )) { + +1398 + `LOG_E +( + `ci_log +("%s: MSG_MORE y su܋d", +__FUNCTION__ +)); + +1399 + `CI_SET_ERROR +( +rc +, +EOPNOTSUPP +); + +1400  +rc +; + +1403 if( + `CI_UNLIKELY + +ags + & +MSG_OOB + )) + +1405  +nd_v_os +; + +1407 if( + `CI_UNLIKELY + +us +-> +s +. +so_r + | us->s. +tx_o + )) + +1408  +so_r +; + +1409 +no_r +: + +1411 #i +CI_CFG_UDP_SEND_UNLOCK_OPT + + +1412 if! + `NI_OPTS +( +ni +). +udp_nd_uocked + ) { + +1413 #ide +__KERNEL__ + + +1414 + `ci_tif_lock +( +ni +); + +1416 if( +rc + = + `ci_tif_lock +( +ni +)) < 0 ) { + +1417 +rc + = - +ERESTARTSYS +; + +1418  +r +; + +1421 +sf +. +ack_locked + = 1; + +1425 #ide +__KERNEL__ + + +1426 if +msg +-> +msg_m + == 0 ) + +1432 if( + `CI_UNLIKELY +! + `udp_ddr_be32 +( +us +) )) { + +1436 +rc + = - +EDESTADDRREQ +; + +1437  +r +; + +1440 +sf +. +che +. + +. +_daddr_be32 + = 0; + +1442 if +us +-> +s +. +pkt +. +us + = +rc_sucss + ) { + +1456 if( + `CI_UNLIKELY +! + `ci__che_is_vid +( + `CICP_HANDLE +( +ni +),& +us +-> +s +. +pkt +) )) { + +1457 if + `si_ylock_d_c +( +ni +, & +sf +, +us +-> +s +. +n_tx_lock_ +) ) { + +1458 ++ +us +-> +s +. +n_tx__c_lookup +; + +1459 + `ci_ur_ve +( +ni +, & +us +-> +s +. +pkt +, &us->s. + +); + +1462 if +us +-> +s +. +pkt +. +us + ! +rc_sucss + && + +1463 +us +-> +s +. +pkt +. +us + ! +rc_nomac + ) + +1464  +nd_v_os +; + +1466 +sf +. +che +. +mtu + = +us +-> +s +. +pkt +.mtu; + +1468 #ide +__KERNEL__ + + +1469 if( + `CI_UNLIKELY + +msg +-> +msg_me + = +NULL + )) { + +1470 +rc + = - +EFAULT +; + +1471  +r +; + +1477 if +msg +-> +msg_me + ! +NULL + && + `msg_m_ok +(msg-> +msg_m +) && + +1478 (! +CI_CFG_FAKE_IPV6 + || +us +-> +s +. +doma + = +AF_INET +) && + +1479 + `CI_SIN +( +msg +-> +msg_me +)-> +s_my + = +AF_INET + ) { + +1482 if! + `ci_udp_me_is_ok +( +us +, +msg +) ) + +1484  +nd_v_os +; + +1485 #ifde +__sun__ + + +1486 if( + `CI_UNLIKELY + + `udp_ddr_be32 +( +us +) != 0 )) { + +1487 + `CI_SET_ERROR +( +rc +, +EISCONN +); + +1488  +rc +; + +1491 if! +CI_CFG_FAKE_IPV6 + || + `CI_SA +( +msg +-> +msg_me +)-> +_my + = +AF_INET + ) { + +1492 +sf +. +che +. + +. +_daddr_be32 + = + `CI_SIN +( +msg +-> +msg_me +)-> +s_addr +. +s_addr +; + +1493 +sf +. +che +. +dpt_be16 + = + `CI_SIN +( +msg +-> +msg_me +)-> +s_pt +; + +1495 #i +CI_CFG_FAKE_IPV6 + + +1497 +sf +. +che +. + +. +_daddr_be32 + = + `ci_g_4_addr +( +AF_INET6 +, + +1498 + `CI_SA +( +msg +-> +msg_me +)); + +1499 +sf +. +che +. +dpt_be16 + = + `CI_SIN6 +( +msg +-> +msg_me +)-> +s6_pt +; + +1503 if( + `CI_UNLIKELY + +sf +. +che +. + +. +_daddr_be32 + = +INADDR_ANY + )) + +1504  +nd_v_os +; + +1506 #ide +__KERNEL__ + + +1507 if( + `CI_UNLIKELY + + `udp_t_be16 +( +us +) == 0 )) { + +1512 if +sf +. +ack_locked + ) + +1513 + `ci_tif_uock +( +ni +); + +1514  + `ci_udp_ndmsg_os_g_bdg +( +a +-> + +,-> +fd +, +msg +, +ags +); + +1518 if +sf +. +che +. +dpt_be16 + = +us +-> +hem_pkt +.dport_be16 && + +1519 +sf +. +che +. + +. +_daddr_be32 + == + +1520 +us +-> +hem_pkt +. + +. +_daddr_be32 + && + +1521 + `ci__che_is_vid +( + `CICP_HANDLE +( +ni +), & +us +-> +hem_pkt +) ) { + +1532 if +us +-> +hem_pkt +. +us + ! +rc_sucss + && + +1533 +us +-> +hem_pkt +. +us + ! +rc_nomac + ) + +1534  +nd_v_os +; + +1535 +sf +. +che +. +mtu + = +us +-> +hem_pkt +.mtu; + +1536 ++ +us +-> +s +. +n_tx__mch +; + +1538 if + `si_ylock_d_c +( +ni +, & +sf +, +us +-> +s +. +n_tx_lock_ +) ) { + +1539 if +sf +. +che +. +dpt_be16 + ! +us +-> +hem_pkt +.dport_be16 || + +1540 +sf +. +che +. + +. +_daddr_be32 + != + +1541 +us +-> +hem_pkt +. + +. +_daddr_be32 + ) { + +1542 +us +-> +hem_pkt +. + +. +_daddr_be32 + = +sf +. +che +.ip.ip_daddr_be32; + +1543 +us +-> +hem_pkt +. +dpt_be16 + = +sf +. +che +.dport_be16; + +1544 + `ci__che_vide +(& +us +-> +hem_pkt +); + +1546 if( + `CI_UNLIKELY +! + `ci__che_is_vid +( + `CICP_HANDLE +( +ni +), + +1547 & +us +-> +hem_pkt +) )) { + +1548 ++ +us +-> +s +. +n_tx__uc_lookup +; + +1549 + `ci_ur_ve +( +ni +, & +us +-> +hem_pkt +, &us-> +s +. + +); + +1551 if +us +-> +hem_pkt +. +us + ! +rc_sucss + && + +1552 +us +-> +hem_pkt +. +us + ! +rc_nomac + ) + +1553  +nd_v_os +; + +1554 +sf +. +che +. +mtu + = +us +-> +hem_pkt +.mtu; + +1560 +sf +. +ud_che + = 1; + +1561 ++ +us +-> +s +. +n_tx__a_lookup +; + +1562 +sf +. +che +. +mac_gry +. +row_dex + = 0; + +1563 + `ci_ur_ve +( +ni +, & +sf +. +che +, & +us +-> +s +. + +); + +1564 if +sf +. +che +. +us + ! +rc_sucss + && + +1565 +sf +. +che +. +us + ! +rc_nomac + ) + +1566  +nd_v_os +; + +1571 + `ci_as_gt +( +sf +. +che +. +mtu +, 0); + +1572 + `ci_udp_ndmsg_ld +( +ni +, +us +, +msg +, +ags +, & +sf +); + +1573 if +sf +. +ack_locked + ) + +1574 + `ci_tif_uock +( +ni +); + +1575 if +sf +. +rc + < 0 ) + +1576 + `CI_SET_ERROR +( +sf +. +rc +, -sinf.rc); + +1577  +sf +. +rc +; + +1579 +so_r +: + +1580 if( +rc + = - + `ci_g_so_r +(& +us +-> +s +)=0 && (r-us->s. +tx_o +) == 0 ) + +1581  +no_r +; + +1582  +r +; + +1584 +r +: + +1585 if +sf +. +ack_locked + ) + +1586 + `ci_tif_uock +( +ni +); + +1587 #ide +__lux__ + + +1588 if +rc + =- +EPIPE + && ! ( +ags + & +MSG_NOSIGNAL +) ) + +1589 + `ci_sys_iol +( + `ci_tif_g_driv_hd +( +ni +), +OO_IOC_KILL_SELF_SIGPIPE +, +NULL +); + +1591 + `CI_SET_ERROR +( +rc +, -rc); + +1592  +rc +; + +1594 +nd_v_os +: + +1595 if +sf +. +ack_locked + ) + +1596 + `ci_tif_uock +( +ni +); + +1597  + `ci_udp_ndmsg_os +( +ni +, +us +, +msg +, +ags +, 1, 0); + +1598 + } +} + + @udp_sockopts.c + +14  + ~"_.h +" + +16 #ide +__KERNEL__ + + +17  + ~ + +20 #ide +_WIN32 + + +21  + ~ + +25  + #LPF + "UDP SOCKOPTS " + + ) + +28  + $ci_m_ts_upded +( +ci_tif +* +ni +, +ci_udp_e +* +us +) + +30 if + `CI_IP_IS_MULTICAST +( +us +-> +hem_pkt +. + +. +_daddr_be32 +) ) + +31 + `ci__che_vide +(& +us +-> +hem_pkt +); + +32 if + `CI_IP_IS_MULTICAST +( +us +-> +s +. +pkt +. + +. +_daddr_be32 +) ) + +33 + `ci__che_vide +(& +us +-> +s +. +pkt +); + +34 + } +} + +37  + $ci_m_t_outgog_if +( +ci_tif +* +ni +, +ci_udp_e +* +us +, + +38  +ifdex +, +ci_ut32 + +ddr +) + +40  +rc +; + +42 +us +-> +s +. + +. +_mui_if_ddr_be32 + = +ddr +; + +43 if +ifdex + == 0 ) { + +44 if +ddr + = +INADDR_ANY + ) { + +45 +us +-> +s +. + +. +_mui_if + = +CI_IFID_BAD +; + +48 +rc + = + `ci_ur_fd_home +( + `CICP_HANDLE +( +ni +), & +ddr +, + +49 +NULL + , & +us +-> +s +. + +. +_mui_if +, + +50 +NULL + , NULL , NULL ); + +51 if( + `CI_UNLIKELY + +rc + != 0 )) + +57 + `LOG_E +( + `ci_log +("%s: cicp_user_find_home %s failed (%d)", + +58 +__FUNCTION__ +, + `_addr_r +( +ddr +), +rc +)); + +61 +us +-> +s +. + +. +_mui_if + = +ifdex +; + +63 + } +} + +66  + $ci_m_jo_ave +( +ci_tif +* +ni +, +ci_udp_e +* +us +, + +67 +ci_ifid_t + +ifdex +, +ci_ut32 + +ddr +, + +68 +ci_ut32 + +maddr +,  +add +) + +70 +ci_hwpt_id_t + +hwpt + = +CI_HWPORT_ID_BAD +; + +71 +ci_p_t + +p + = { +CICP_LLAP_TYPE_NONE +, 0}; + +72  +rc +; + +74 if +add + ) + +75 +us +-> +udpags + | +CI_UDPF_MCAST_JOIN +; + +77 if + `NI_OPTS +( +ni +). +m_jo_hdov + == 2 ) + +78  +CI_SOCKET_HANDOVER +; + +79 if! + `NI_OPTS +( +ni +). +m_cv + ) + +82 if +ifdex + != 0 ) + +83 +rc + = + `ci_έ_ve +( + `CICP_HANDLE +( +ni +), +ifdex +, +NULL +, & +hwpt +, NULL, + +84 & +p +, +NULL + , NULL); + +85 if +ddr + != 0 ) + +86 +rc + = + `ci_ur_fd_home +( + `CICP_HANDLE +( +ni +), & +ddr +, & +hwpt +, & +ifdex +, + +87 +NULL +, NULL, & +p +); + +89 +ci__ched_hdrs + +che +; + +90 + `ci__che_ +(& +che +); + +91 +che +. + +. +_daddr_be32 + = +maddr +; + +92 +che +. +dpt_be16 + = 0; + +93 + `ci_ur_ve +( +ni +, & +che +, & +us +-> +s +. + +); + +94 +hwpt + = +che +.hwport; + +95 +p + = +che +.encap; + +96 +ifdex + = +che +.ifindex; + +97  +che +. +us + ) { + +98  +rc_sucss +: + +99  +rc_nomac +: + +100 +rc + = 0; + +103 +rc + = 1; + +111 if +rc + !0 || ! + `ci_hwpt_check_ld +( +hwpt +, & +p +) ) + +116  + `NI_OPTS +( +ni +). +m_jo_hdov + ? +CI_SOCKET_HANDOVER + : 0; + +118 +rc + = + `ci_t__m_add_d +( +ni +, + `S_SP +( +us +), +ifdex +, +maddr +, +add +); + +119 if +rc + != 0 ) { + +120 + `LOG_E +( + `log +( +FNS_FMT + "%ifdex=%d maddr=" +CI_IP_PRINTF_FORMAT +" failed " + +121 "%d", + `FNS_PRI_ARGS +( +ni +, & +us +-> +s +), +add + ? "ADD" : "DROP", + +122 ( +ifdex +, + `CI_IP_PRINTF_ARGS +(& +maddr +), +rc +)); + +123 if +CITP_OPTS +. +no_ + ) + +127 + `RET_WITH_ERRNO +(- +rc +); + +131 + `LOG_UC +( + `log +( +FNS_FMT + "ci_t__m_add_d(%s, %d, " +CI_IP_PRINTF_FORMAT +")", + +132 + `FNS_PRI_ARGS +( +ni +, & +us +-> +s +), +add + ? "ADD" : "DROP", + +133 ( +ifdex +, + `CI_IP_PRINTF_ARGS +(& +maddr +))); + +135 if +add + ) + +136 +us +-> +udpags + | +CI_UDPF_MCAST_FILTER +; + +138 if +add + && + `NI_OPTS +( +ni +). +m_jo_bdtodevi + && + +139 ! ( +us +-> +udpags + & +CI_UDPF_NO_MCAST_B2D +) && + +140 +us +-> +s +. + +. +so_bdtodevi + = +CI_IFID_BAD + ) { + +144 if +us +-> +s +. +rx_bd2dev_ifdex + = +CI_IFID_BAD + ) { + +145 if( +rc + = + `ci_sock_rx_bd2dev +( +ni +, & +us +-> +s +, +ifdex +)) == 0 ) { + +146 + `LOG_UC +( + `log +( +FNS_FMT + "boundxo ifindex=%d", + +147 + `FNS_PRI_ARGS +( +ni +, & +us +-> +s +), +ifdex +)); + +148 +us +-> +udpags + | +CI_UDPF_MCAST_B2D +; + +151 + `LOG_E +( + `log +( +FNS_FMT + "ERROR: joined on ifindex=%d but bind failed (%d)", + +152 + `FNS_PRI_ARGS +( +ni +, & +us +-> +s +), +ifdex +, +rc +)); + +155 if +us +-> +s +. +rx_bd2dev_ifdex + ! +ifdex + ) { + +156 + `LOG_UC +( + `log +( +FNS_FMT + "unbinding socket from ifindex=%d", + +157 + `FNS_PRI_ARGS +( +ni +, & +us +-> +s +), us->s. +rx_bd2dev_ifdex +)); + +158 +us +-> +udpags + | +CI_UDPF_NO_MCAST_B2D +; + +159 +us +-> +s +. +rx_bd2dev_ifdex + = +CI_IFID_BAD +; + +160 +us +-> +s +. +rx_bd2dev_ba_ifdex + = 0; + +161 +us +-> +s +. +rx_bd2dev_vn + = 0; + +166 + } +} + +169 +ci_le +  + $__g_sock_t +( +cp_sock +* + +, +ci_fd_t + +sock +,  +v +, + +170  +me +, * +v +, +sockn_t +* +n + ) + +172 #ide +_WIN32 + + +173  + `CI_IS_VALID_SOCKET +( +sock +) ? + +174 + `ci_sys_gsockt +( +sock +, +v +, +me +, +v +, +n +) : -1; + +176  + `CI_IS_VALID_SOCKET +( +sock +) ? + +177 + `ci_sys_gsockt + + +, +v +, +me +, +v +, +n +) : -1; + +179 + } +} + +184  + $ci_udp_gsockt +( +cp_sock +* + +, +ci_fd_t + +fd +,  +v +, + +185  +݊ame +, * +tv +, +sockn_t + * +ݎ + ) + +187 +ci_tif +* +tif +; + +188 +ci_udp_e +* +us +; + +189  +u + = 0; + +191 + `ci_as +( + +); + +192 +tif + = + +->netif; + +193 +us + = + `SOCK_TO_UDP +( + +-> +s +); + +199 if( +v + = +SOL_SOCKET +) { + +200 #i + `defed +( +__sun__ +) + +201 if + `CI_UNLIKELY +(*( +sockn_t + *) +ݎ + == 0) ) + +202 + `RET_WITH_ERRNO +( +EINVAL +); + +204 if( +݊ame + = +SO_ERROR +) { + +207 +u + = 0; + +208 if +us +-> +s +. +so_r + ) { + +209 +u + = + `ci_g_so_r +(& +us +-> +s +); + +211 +ci_fd_t + +os_sock + = + `ci_g_os_sock_fd +( +fd +); + +212 if! + `__g_sock_t +( + +, +os_sock +, +v +, +݊ame +, +tv +, +ݎ +) ) + +213 +u + = *(*) +tv +; + +214 + `ci_l_os_sock_fd + +os_sock + ); + +216  +u_out +; + +220  + `ci_g_s_sock +( +tif +, & +us +-> +s +, +݊ame +, +tv +, +ݎ +); + +222 } i( +v + = +IPPROTO_IP +) { + +224  +݊ame +) { + +225 #ifde +__lux__ + + +226  +IP_RECVERR +: + +228 +ci_fd_t + +os_sock + = + `ci_g_os_sock_fd +( +fd +); + +229 if! + `__g_sock_t +( + +, +os_sock +, +v +, +݊ame +, +tv +, +ݎ +) ) + +230 +u + = *(*) +tv +; + +231 + `ci_l_os_sock_fd + +os_sock + ); + +233  +u_out +; + +236  +IP_MULTICAST_IF +: + +237 +u + = +us +-> +s +. + +. +_mui_if_ddr_be32 +; + +240  + `ci_gsockt_f +( +tv +, +ݎ +, +SOL_UDP +, & +u +, (u)); + +242  +IP_MULTICAST_LOOP +: + +243 +u + = ( +us +-> +udpags + & +CI_UDPF_MCAST_LOOP +) != 0; + +244  +u_out_ch +; + +246  +IP_MULTICAST_TTL +: + +247 +u + = +us +-> +s +. + +. +_m_l +; + +248  +u_out_ch +; + +251  + `ci_g_s_ +( +tif +, & +us +-> +s +, +fd +, +݊ame +, +tv +, +ݎ +); + +254 #i +CI_CFG_FAKE_IPV6 + + +255 } i( +v + = +IPPROTO_IPV6 + && +us +-> +s +. +doma + = +AF_INET6 +) { + +257  + `ci_g_s_6 +(& +us +-> +s +, +fd +, +݊ame +, +tv +, +ݎ +); + +260 } i( +v + = +IPPROTO_UDP +) { + +261 #ifde +_WIN32 + + +262 if +݊ame + = +UDP_NOCHECKSUM + ) { + +263 +u + = !!( +us +-> +udpags + & +CI_UDPF_NO_CHECKSUM +); + +264  +u_out +; + +266 + `RET_WITH_ERRNO +( +ENOPROTOOPT +); + +269 + `RET_WITH_ERRNO +( +ENOPROTOOPT +); + +272 + `SOCKOPT_RET_INVALID_LEVEL +(& +us +-> +s +); + +275 +u_out_ch +: + +276 #ifde +__sun__ + + +277 * +ݎ + = 1; + +278 if* +ݎ + > 0 ) + +279 *((*) +tv +() +u +; + +282 +u_out +: + +283  + `ci_gsockt_f +( +tv +, +ݎ +, +SOL_IP +, & +u +, (u)); + +284 + } +} + +287  + $ci_udp_tsockt_lk +( +cp_sock +* + +, +ci_fd_t + +fd +, ci_fd_ +os_sock +, + +288  +v +,  +݊ame +, cڡ * +tv +, + +289 +sockn_t + +ݎ +) + +291 +ci_tif +* +tif +; + +292 +ci_udp_e +* +us +; + +293  +rc +, +v +; + +295 + `ci_as +( + +); + +296 +tif + = + +->netif; + +297 +us + = + `SOCK_TO_UDP +( + +-> +s +); + +301 + `ci_as + + `CI_IS_VALID_SOCKET + +os_sock + ) ); + +303 if( +v + = +SOL_SOCKET +) { + +305  +݊ame +) { + +306  +SO_SNDBUF +: + +308 if( +rc + = + `t_n_ok +( +tv +, +ݎ +,)) ) + +309  +_v +; + +315 if + `__g_sock_t +( + +, +os_sock +, +SOL_SOCKET +, +SO_SNDBUF +, & +v +, & +ݎ +)) { + +318 +v + = *(* +tv +; + +319 +v + = + `CI_MAX +(v, () + `NI_OPTS +( +tif +). +udp_dbuf_m +); + +320 +v + = + `CI_MIN +(v, () + `NI_OPTS +( +tif +). +udp_dbuf_max +); + +321 +v + = + `oo_adju_SO_XBUF +(v); + +323 if + `NI_OPTS +( +tif +). +udp_dbuf_ur + ) { + +324 +v + = + `oo_adju_SO_XBUF +( + `NI_OPTS +( +tif +). +udp_dbuf_ur +); + +327 +us +-> +s +. +so +. +dbuf + = +v +; + +330  +SO_RCVBUF +: + +332 if( +rc + = + `t_n_ok +( +tv +, +ݎ +,)) ) + +333  +_v +; + +340 if + `__g_sock_t +( + +, +os_sock +, +SOL_SOCKET +, +SO_RCVBUF +, & +v +, & +ݎ +)) { + +343 +v + = *(* +tv +; + +344 +v + = + `CI_MAX +(v, () + `NI_OPTS +( +tif +). +udp_rcvbuf_m +); + +345 +v + = + `CI_MIN +(v, () + `NI_OPTS +( +tif +). +udp_rcvbuf_max +); + +346 +v + = + `oo_adju_SO_XBUF +(v); + +348 if + `NI_OPTS +( +tif +). +udp_rcvbuf_ur + ) { + +349 +v + = + `oo_adju_SO_XBUF +( + `NI_OPTS +( +tif +). +udp_rcvbuf_ur +); + +352 +us +-> +s +. +so +. +rcvbuf + = +v +; + +357 +us +-> +s +. +max_cvq_pkts + = 0; + +360  +SO_TIMESTAMP +: + +361  +SO_TIMESTAMPNS +: + +365 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +366  +_v +; + +367 if( +us +-> +s +. +cmsg_ags + & +CI_IP_CMSG_TIMESTAMP_ANY +) == 0 ) { + +371 if + `ci_g_tv +( +tv +, +ݎ +) ) + +372 +us +-> +amp_e_ss + = us-> +amp +; + +374 +us +-> +amp + = us-> +amp_e_ss +; + +377  + `ci_t_s_sock +( +tif +, & +us +-> +s +, +݊ame +, +tv +, +ݎ +); + +382  + `ci_t_s_sock +( +tif +, & +us +-> +s +, +݊ame +, +tv +, +ݎ +); + +384 } i( +v + = +IPPROTO_IP +) { + +386  +݊ame +) { + +387  +IP_ADD_MEMBERSHIP +: + +388  +IP_DROP_MEMBERSHIP +: + +390 #ifde +__lux__ + + +391 cڡ  +_mqn + * +mqn + = (*) +tv +; + +393 cڡ  +_mq + * +mq + = (*) +tv +; + +395 #ifde +__lux__ + + +396 if +ݎ + >( +_mqn +) ) { + +397 +rc + = + `ci_m_jo_ave +( +tif +, +us +, ( +ci_ifid_t +) +mqn +-> +imr_ifdex +, + +398 +mqn +-> +imr_addss +. +s_addr +, + +399 +mqn +-> +imr_muɟddr +. +s_addr +, + +400 +݊ame + = +IP_ADD_MEMBERSHIP +); + +404 if +ݎ + >( +_mq +) ) { + +405 +rc + = + `ci_m_jo_ave +( +tif +, +us +, 0, +mq +-> +imr_r +. +s_addr +, + +406 +mq +-> +imr_muɟddr +. +s_addr +, + +407 +݊ame + = +IP_ADD_MEMBERSHIP +); + +410 + `RET_WITH_ERRNO +( +EFAULT +); + +411 if +rc + ) { + +412 if +݊ame + = +IP_ADD_MEMBERSHIP + ) { + +413 + `ci_sys_tsockt +( +os_sock +, +SOL_IP +, +IP_DROP_MEMBERSHIP +, + +414 +tv +, +ݎ +); + +416  +rc +; + +421 #ifde +IP_ADD_SOURCE_MEMBERSHIP + + +422  +IP_ADD_SOURCE_MEMBERSHIP +: + +423  +IP_DROP_SOURCE_MEMBERSHIP +: + +433 cڡ  +_mq_sour + * +mqs + = (*) +tv +; + +435 if +ݎ + >( +_mq_sour +) ) { + +436 +rc + = + `ci_m_jo_ave +( +tif +, +us +, 0, +mqs +-> +imr_r +. +s_addr +, + +437 +mqs +-> +imr_muɟddr +. +s_addr +, + +438 +݊ame + = +IP_ADD_SOURCE_MEMBERSHIP +); + +441 + `RET_WITH_ERRNO +( +EFAULT +); + +442 if +rc + ) { + +443 if +݊ame + = +IP_ADD_SOURCE_MEMBERSHIP + ) { + +444 + `ci_sys_tsockt +( +os_sock +, +SOL_IP +, +IP_DROP_SOURCE_MEMBERSHIP +, + +445 +tv +, +ݎ +); + +447  +rc +; + +453 #ifde +MCAST_JOIN_GROUP + + +454  +MCAST_JOIN_GROUP +: + +455  +MCAST_LEAVE_GROUP +: + +457  +group_q + * +gq + = (*) +tv +; + +459 if +ݎ + < ( +group_q +) ) + +460 + `RET_WITH_ERRNO +( +EFAULT +); + +461 if +gq +-> +gr_group +. +ss_my + ! +AF_INET + ) + +462  +CI_SOCKET_HANDOVER +; + +463 +rc + = + `ci_m_jo_ave +( +tif +, +us +, +gq +-> +gr_r +, 0, + +464 + `CI_SIN +(& +gq +-> +gr_group +)-> +s_addr +. +s_addr +, + +465 +݊ame + = +MCAST_JOIN_GROUP +); + +466 if +rc + ) { + +467 if +݊ame + = +MCAST_JOIN_GROUP + ) { + +468 + `ci_sys_tsockt +( +os_sock +, +SOL_IP +, +MCAST_LEAVE_GROUP +, + +469 +tv +, +ݎ +); + +471  +rc +; + +477 #ifde +MCAST_JOIN_SOURCE_GROUP + + +478  +MCAST_JOIN_SOURCE_GROUP +: + +479  +MCAST_LEAVE_SOURCE_GROUP +: + +489  +group_sour_q + * +geq + = (*) +tv +; + +491 if +ݎ + < ( +group_sour_q +) ) + +492 + `RET_WITH_ERRNO +( +EFAULT +); + +493 if +geq +-> +g_group +. +ss_my + ! +AF_INET + ) + +494  +CI_SOCKET_HANDOVER +; + +495 +rc + = + `ci_m_jo_ave +( +tif +, +us +, +geq +-> +g_r +, 0, + +496 + `CI_SIN +(& +geq +-> +g_group +)-> +s_addr +. +s_addr +, + +497 +݊ame + = +MCAST_JOIN_SOURCE_GROUP +); + +498 if +rc + ) { + +499 if +݊ame + = +MCAST_JOIN_SOURCE_GROUP + ) { + +500 + `ci_sys_tsockt +( +os_sock +, +SOL_IP +, +MCAST_LEAVE_SOURCE_GROUP +, + +501 +tv +, +ݎ +); + +503  +rc +; + +509  +IP_MULTICAST_IF +: + +511 #ifde +__lux__ + + +512 cڡ  +_mqn + * +mqn + = (*) +tv +; + +514 if +ݎ + >( +_mqn +) ) + +515 + `ci_m_t_outgog_if +( +tif +, +us +, +mqn +-> +imr_ifdex +, + +516 +mqn +-> +imr_addss +. +s_addr +); + +519 if +ݎ + >( +_addr +) ) + +520 + `ci_m_t_outgog_if +( +tif +, +us +, 0, *( +ci_ut32 + *) +tv +); + +522 +us +-> +s +. + +. +_mui_if + = +CI_IFID_BAD +; + +523 + `ci_m_ts_upded +( +tif +, +us +); + +527  +IP_MULTICAST_LOOP +: + +528 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +529  +_v +; + +530 if + `ci_g_tv +( +tv +, +ݎ +) ) { + +531 +us +-> +udpags + | +CI_UDPF_MCAST_LOOP +; + +532 if + `NI_OPTS +( +tif +). +f_nd_mui + ) + +534 +us +-> +s +. + +. +sock__ags + &~ +OO_SCP_NO_MULTICAST +; + +536 +us +-> +s +. + +. +sock__ags + | +OO_SCP_NO_MULTICAST +; + +540 +us +-> +udpags + &~ +CI_UDPF_MCAST_LOOP +; + +541 +us +-> +s +. + +. +sock__ags + &~ +OO_SCP_NO_MULTICAST +; + +543 + `ci_m_ts_upded +( +tif +, +us +); + +546  +IP_MULTICAST_TTL +: + +548  +l +; + +549 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +550  +_v +; + +551 +l + = ( + `ci_g_tv +( +tv +, +ݎ +); + +553 +us +-> +s +. + +. +_m_l + = +l + == -1 ? 1 :tl; + +554 + `ci_m_ts_upded +( +tif +, +us +); + +559  + `ci_t_s_ + +tif +, & +us +-> +s +, +݊ame +, +tv +, +ݎ + ); + +562 #i +CI_CFG_FAKE_IPV6 + + +563 } i( +v + = +IPPROTO_IPV6 +) { + +565  + `ci_t_s_6 + +tif +, & +us +-> +s +, +݊ame +, +tv +, +ݎ +); + +568 } i( +v + = +IPPROTO_UDP +) { + +569 #ifde +_WIN32 + + +570 if +݊ame + = +UDP_NOCHECKSUM + ) { + +577 if( +rc + = + `t_n_ok +( +tv +, +ݎ +, )) ) + +578  +_v +; + +579 if + `ci_g_tv +( +tv +, +ݎ +) ) + +580 +us +-> +udpags + | +CI_UDPF_NO_CHECKSUM +; + +582 +us +-> +udpags + &~ +CI_UDPF_NO_CHECKSUM +; + +584 + `RET_WITH_ERRNO +( +ENOPROTOOPT +); + +586 + `RET_WITH_ERRNO +( +ENOPROTOOPT +); + +590 + `LOG_U +( + `log +( +FNS_FMT + "unknownevel=%d optname=%dccepted by O/S", + +591 + `FNS_PRI_ARGS +( +tif +, + +-> +s +), +v +, +݊ame +)); + +596 +_v +: + +597 + `LOG_UC +( + `log +("%s: " +SF_FMT +" option %itr/lenrror (EINVAL or EFAULT)", + +598 +__FUNCTION__ +, + `SF_PRI_ARGS +( + +, +fd +), +݊ame +)); + +599 + `RET_WITH_ERRNO +(- +rc +); + +601 + } +} + +603 +ci_le +  + $__t_sock_t +( +cp_sock +* + +, +ci_fd_t + +sock +,  +v +, + +604  +me +, cڡ * +v +, +sockn_t + +n + ) + +606 #ide +_WIN32 + + +607  + `CI_IS_VALID_SOCKET +( +sock +) ? + +608 + `ci_sys_tsockt +( +sock +, +v +, +me +, +v +, +n +) : -1; + +610  + `CI_IS_VALID_SOCKET +( +sock +) ? + +611 + `ci_sys_tsockt +( + +, +v +, +me +, +v +, +n +) : -1; + +613 + } +} + +615  + $ci_udp_tsockt +( +cp_sock +* + +, +ci_fd_t + +fd +,  +v +, + +616  +݊ame +, cڡ * +tv +, +sockn_t + +ݎ + ) + +618 +ci_fd_t + +os_sock +; + +619  +rc +; + +623 +os_sock + = + `ci_g_os_sock_fd +( +fd +); + +624 + `ci_as +( + `CI_IS_VALID_SOCKET +( +os_sock +)); + +625 +rc + = + `__t_sock_t +( + +, +os_sock +, +v +, +݊ame +, +tv +, +ݎ +); + +626 if +rc + = +CI_SOCKET_ERROR + && + +627 ! + `ci_tsockt_os__igne +( + +-> +tif +,p-> +s +, +o +, +v +, + +628 +݊ame +, +tv +, +ݎ +) ) { + +629  +out +; + +631 +rc + = 0; + +633 if +v + = +SOL_SOCKET + ) { + +634 +rc + = + `ci_t_s_sock_nock +( + +-> +tif +,p-> +s +, +݊ame +, +tv +, +ݎ +); + +635 if +rc + <0 )  +out +; + +639 + `ci_tif_lock_id +( + +-> +tif +, + `SC_SP +p-> +s +)); + +640 +rc + = + `ci_udp_tsockt_lk +( + +, +fd +, +os_sock +, +v +, +݊ame +, +tv +, +ݎ +); + +641 + `ci_tif_uock +( + +-> +tif +); + +642 +out +: + +643 + `ci_l_os_sock_fd +( +os_sock +); + +644  +rc +; + +645 + } +} + + @waitable.c + +14  + ~"_.h +" + +15  + ~ + +18  + $cp_waab_ +( +ci_tif +* +ni +, +cp_waab +* +w +) + +21 +w +-> +p_q +. +l + = 0; + +22 +w +-> +sigown + = 0; + +23 +w +-> +_cyes + = +ni +-> +e +-> +sock__cyes +; + +24 + } +} + +27  + $cp_waab_ +( +ci_tif +* +ni +, +cp_waab +* +w +,  +id +) + +31 +oo_p + + +; + +33 #i +CI_CFG_SOCKP_IS_PTR + + +34 +w +-> +bufid + = +id +; + +36 +w +-> +bufid + = + `OO_SP_FROM_INT +( +ni +, +id +); + +38 +w +-> +sb_ags + = 0; + +39 +w +-> +sb_aags + = +CI_SB_AFLAG_ORPHAN + | +CI_SB_AFLAG_NOT_READY +; + +41 + + = + `oo_sockp_to_ +( +ni +, + `W_SP +( +w +)); + +42 + `OO_P_ADD +( + +, + `CI_MEMBER_OFFSET +( +cp_waab +, +po_pl_lk +)); + +43 + `ci_ni_di_lk_ +( +ni +, & +w +-> +po_pl_lk +, + +, "ppll"); + +44 + `ci_ni_di_lf_lk +( +ni +, & +w +-> +po_pl_lk +); + +46 + + = + `oo_sockp_to_ +( +ni +, + `W_SP +( +w +)); + +47 + `OO_P_ADD +( + +, + `CI_MEMBER_OFFSET +( +cp_waab +, +ady_lk +)); + +48 + `ci_ni_di_lk_ +( +ni +, & +w +-> +ady_lk +, + +, "rll"); + +49 + `ci_ni_di_lf_lk +( +ni +, & +w +-> +ady_lk +); + +51 +w +-> +lock +. +wl_v + = 0; + +52 + `CI_DEBUG +( +w +-> +wt_xt + = +OO_SP_NULL +); + +53 + `CI_DEBUG +( +w +-> +xt_id + = +CI_ILL_END +); + +55 + `cp_waab_ +( +ni +, +w +); + +56 + } +} + +59 +cp_waab_obj +* + $cp_waab_obj_loc +( +ci_tif +* +tif +) + +61 +cp_waab_obj +* +wo +; + +63 + `ci_as +( +tif +); + +64 + `ci_as +( + `ci_tif_is_locked +( +tif +)); + +66 if +tif +-> +e +-> +deed__s_hd + ! +CI_ILL_END + ) { + +67 +ci_ut32 + +lk +; + +69 +lk + = +tif +-> +e +-> +deed__s_hd +; + +70  + `ci_s32_ +(& +tif +-> +e +-> +deed__s_hd +, + +71 +lk +, +CI_ILL_END +)); + +72  +lk + ! +CI_ILL_END + ) { + +73 +cp_waab +* +w + = + `ID_TO_WAITABLE +( +tif +, +lk +); + +74 +lk + = +w +-> +xt_id +; + +75 + `CI_DEBUG +( +w +-> +xt_id + = +CI_ILL_END +); + +76 + `ci_as_equ +( +w +-> +e +, +CI_TCP_STATE_FREE +); + +77 + `ci_as +( + `OO_SP_IS_NULL +( +w +-> +wt_xt +)); + +78 +w +-> +wt_xt + = +tif +-> +e +-> +_s_hd +; + +79 +tif +-> +e +-> +_s_hd + = + `W_SP +( +w +); + +83 if + `OO_SP_IS_NULL +( +tif +-> +e +-> +_s_hd +) ) { + +84 + `ci_t_hr_me_socks +( +tif +); + +86 if + `OO_SP_IS_NULL +( +tif +-> +e +-> +_s_hd +) ) + +87 + `ci_tif_timeout_ +( +tif +); + +90 if + `OO_SP_IS_NULL +( +tif +-> +e +-> +_s_hd +) ) + +91  +NULL +; + +93 + `LOG_TV +( + `ci_log +("%s:otg %d", +__FUNCTION__ +, + +94 + `OO_SP_FMT +( +tif +-> +e +-> +_s_hd +))); + +96 + `ci_as +( + `IS_VALID_SOCK_P +( +tif +,if-> +e +-> +_s_hd +)); + +97 +wo + = + `SP_TO_WAITABLE_OBJ +( +tif +,if-> +e +-> +_s_hd +); + +99 + `ci_as +( + `OO_SP_EQ +( + `W_SP +(& +wo +-> +waab +), +tif +-> +e +-> +_s_hd +)); + +100 + `ci_as_equ +( +wo +-> +waab +. +e +, +CI_TCP_STATE_FREE +); + +101 + `ci_as_equ +( +wo +-> +waab +. +sb_aags +, ( +CI_SB_AFLAG_ORPHAN + | +CI_SB_AFLAG_NOT_READY +)); + +102 + `ci_as_equ +( +wo +-> +waab +. +lock +. +wl_v +, 0); + +104 +tif +-> +e +-> +_s_hd + = +wo +-> +waab +. +wt_xt +; + +105 + `CI_DEBUG +( +wo +-> +waab +. +wt_xt + = +OO_SP_NULL +); + +106 + `ci_as_equ +( +wo +-> +waab +. +e +, +CI_TCP_STATE_FREE +); + +108  +wo +; + +109 + } +} + +112 #ifde +__KERNEL__ + + +113  + $ci_dr_ph +( +ci_tif + * +ni +) + +115 +ci_qlock_e_t + +lock_ags +; + +116 +t_hr_sour_t +* +s +; + +117  +dec_eded +; + +125 if +ni +-> +ags + & +CI_NETIF_FLAGS_DROP_SOCK_REFS + ) { + +126 +s + = + `tif2t_hr_sour +( +ni +); + +127 +dec_eded + = 0; + +129 + `ci_qlock_lock +(& +s +-> +lock +, & +lock_ags +); + +130 if +s +-> +n__osg_fs + > 0 ) { + +131 -- +s +-> +n__osg_fs +; + +132 +dec_eded + = 1; + +134 + `ci_qlock_uock +(& +s +-> +lock +, & +lock_ags +); + +136 if +dec_eded + ) + +137 + `eb_t_hr_k_f_cou_dec +( +s +); + +139 + } +} + +141  + #ci_dr_ph +( +ni +do{}0) + + ) + +145 #i +CI_CFG_FD_CACHING + + +146  + $cp_waab_obj__to_che +( +ci_tif +* +ni +, +cp_waab +* +w +) + +148 #i + `defed + ( +__KERNEL__ +&& !defed( +NDEBUG +) + +152 +t_hr_dpot_t +* + + = + `ci_tif_g_vid_ +( +ni +, +w +-> +bufid +); + +153 + `ci_as +(!( + +-> +_aags + & +OO_THR_EP_AFLAG_NON_ATOMIC +)); + +155 + `ci_as +(!( +w +-> +sb_aags + & +CI_SB_AFLAG_ORPHAN +)); + +156 + `ci_as +( +w +-> +sb_aags + & +CI_SB_AFLAG_NOT_READY +); + +157 + `ci_as +( +w +-> +sb_aags + & +CI_SB_AFLAG_IN_CACHE +); + +158 + `ci_as +( +w +-> +e + = +CI_TCP_CLOSED +); + +159 + `ci_as +( + `ci_ni_di_is_lf_lked +( +ni +, & +w +-> +po_pl_lk +)); + +160 + `ci_as +( + `OO_SP_IS_NULL +( +w +-> +wt_xt +)); + +171 +w +-> +wake_que + = 0; + +172 +w +-> +sb_ags + = 0; + +173 + `ci_omic32_d +(& +w +-> +sb_aags +, +CI_SB_AFLAG_NOT_READY + | + +174 +CI_SB_AFLAG_CACHE_PRESERVE +); + +175 +w +-> +lock +. +wl_v + = 0; + +176 +w +-> +ady_li_id + = 0; + +177 + `CI_USER_PTR_SET +( +w +-> +eem +, +NULL +); + +178 + } +} + +182  + $__cp_waab_obj_ +( +ci_tif +* +ni +, +cp_waab +* +w +) + +184 + `ci_as +( +w +-> +sb_aags + & +CI_SB_AFLAG_ORPHAN +); + +185 + `ci_as +( +w +-> +e + ! +CI_TCP_STATE_FREE +); + +186 + `ci_as +( + `ci_ni_di_is_lf_lked +( +ni +, & +w +-> +po_pl_lk +)); + +187 + `ci_as +( + `OO_SP_IS_NULL +( +w +-> +wt_xt +)); + +189 +w +-> +wake_que + = 0; + +190 +w +-> +sb_ags + = 0; + +191 +w +-> +sb_aags + = +CI_SB_AFLAG_ORPHAN + | +CI_SB_AFLAG_NOT_READY +; + +192 +w +-> +e + = +CI_TCP_STATE_FREE +; + +193 +w +-> +lock +. +wl_v + = 0; + +194 +w +-> +ady_li_id + = 0; + +195 + `CI_USER_PTR_SET +( +w +-> +eem +, +NULL +); + +196 + } +} + +199  + $cp_waab_obj_ +( +ci_tif +* +ni +, +cp_waab +* +w +) + +201 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +203 #ifde +__KERNEL__ + + +206 +t_hr_dpot_t +* + + = + `ci_tif_g_vid_ +( +ni +, +w +-> +bufid +); + +207  +_aags +; + +208 +aga +: + +209 if( +_aags + = + +->_aags& +OO_THR_EP_AFLAG_NON_ATOMIC + ) { + +210 + `ci_as +(!( +_aags + & +OO_THR_EP_AFLAG_NEED_FREE +)); + +211 if + `ci_s32_ +(& + +-> +_aags +,p_aflags, + +212 +_aags + | +OO_THR_EP_AFLAG_NEED_FREE +) ) + +213  +aga +; + +216 + `ci_rmb +(); + +220 + `__cp_waab_obj_ +( +ni +, +w +); + +221 +w +-> +wt_xt + = +ni +-> +e +-> +_s_hd +; + +222 +ni +-> +e +-> +_s_hd + = + `W_SP +( +w +); + +224 + `ci_dr_ph +( +ni +); + +225 + } +} + +228  + $cp_waab_obj__l +( +ci_tif +* +ni +, +cp_waab +* +w +) + +232 + `__cp_waab_obj_ +( +ni +, +w +); + +234 +w +-> +xt_id + = +ni +-> +e +-> +deed__s_hd +; + +235  + `ci_s32_ +(& +ni +-> +e +-> +deed__s_hd +, + +236 +w +-> +xt_id +, + `OO_SP_TO_INT +( + `W_SP +(w))) ); + +238 + `ci_dr_ph +( +ni +); + +239 + } +} + +242 #ifde +__KERNEL__ + + +245  + $cp_waab_nup +( +ci_tif +* +ni +, +cp_waab_obj +* +wo +,  +do_ +) + +247 if +wo +-> +waab +. +sb_aags + & +CI_SB_AFLAG_MOVED_AWAY + ) { + +248 if +do_ + ) + +249 + `cp_waab_obj_ +( +ni +, & +wo +-> +waab +); + +251 if +wo +-> +waab +. +e + = +CI_TCP_LISTEN + ) + +252 + `ci_t_li_l_fds_ge +( +ni +, & +wo +-> +t_li +, +do_ +); + +253 if +wo +-> +waab +. +e + & +CI_TCP_STATE_TCP + ) + +254 + `ci_t_l_fds_ge +( +ni +, & +wo +-> +t +, +do_ +); + +255 #i +CI_CFG_UDP + + +256 if +wo +-> +waab +. +e + = +CI_TCP_STATE_UDP + ) + +257 + `ci_udp_l_fds_ge +( +ni +, +wo +-> +waab +. +bufid +, +do_ +); + +259 #i +CI_CFG_USERSPACE_PIPE + + +260 if +wo +-> +waab +. +e + = +CI_TCP_STATE_PIPE + ) + +261 + `ci_pe_l_fds_ge +( +ni +, & +wo +-> +pe +, +do_ +); + +263 if +wo +-> +waab +. +e + = +CI_TCP_STATE_ACTIVE_WILD + ) + +264 + `ci_aive_wd_l_fds_ge +( +ni +, & +wo +-> +aw +, +do_ +); + +265 if +do_ + ) { + +269 + `cp_waab_obj_ +( +ni +, & +wo +-> +waab +); + +271 + } +} + +273  + $cp_waab_l_fds_ge +( +ci_tif +* +ni +, +oo_ + +w_id +) + +275 +cp_waab_obj +* +wo +; + +277 + `ci_as +( +ni +); + +278 + `ci_as +( + `IS_VALID_SOCK_P +( +ni +, +w_id +)); + +279 + `ci_as +( + `ci_tif_is_locked +( +ni +)); + +281 +wo + = + `SP_TO_WAITABLE_OBJ +( +ni +, +w_id +); + +282 + `ci_as +( +wo +-> +waab +. +e + ! +CI_TCP_STATE_FREE +); + +284 + `LOG_NC +( + `ci_log +("%s: %d:%d %s", +__FUNCTION__ +, + `NI_ID +( +ni +), + `OO_SP_FMT +( +w_id +), + +285 + `ci_t_e_r +( +wo +-> +waab +. +e +))); + +290 + `CI_DEBUG +(if( +wo +-> +waab +. +sb_aags + & +CI_SB_AFLAG_ORPHAN +) && + +291 +wo +-> +waab +. +e + ! +CI_TCP_LISTEN + && + +292 +wo +-> +waab +. +e + ! +CI_TCP_STATE_ACTIVE_WILD + ) + +293 + `ci_log +("%s: %d:%d̗dy oh", +__FUNCTION__ +, + +294 + `NI_ID +( +ni +), + `OO_SP_FMT +( +w_id +))); + +304 + `ci_tif_purge_deed_sock_li +( +ni +); + +305 + `ci_b_t +(& +wo +-> +waab +. +sb_aags +, +CI_SB_AFLAG_ORPHAN_BIT +); + +310 + `ci_ni_di_move_ +( +ni +, & +wo +-> +waab +. +po_pl_lk +); + +311 + `ci_ni_di_move_ +( +ni +, & +wo +-> +waab +. +ady_lk +); + +312 +wo +-> +waab +. +ady_li_id + = 0; + +314 + `cp_waab_nup +( +ni +, +wo +, 1); + +315 + } +} + +320 cڡ * + $cp_waab_ty_r +( +cp_waab +* +w +) + +322 if +w +-> +e + & +CI_TCP_STATE_TCP + )  "TCP"; + +323 if +w +-> +e + = +CI_TCP_STATE_UDP + )  "UDP"; + +324 if +w +-> +e + = +CI_TCP_STATE_FREE + )  "FREE"; + +325 #i +CI_CFG_USERSPACE_PIPE + + +326 if +w +-> +e + = +CI_TCP_STATE_PIPE + )  "PIPE"; + +328 if +w +-> +e + = +CI_TCP_STATE_AUXBUF + )  "AUXBUFS"; + +329 if +w +-> +e + = +CI_TCP_STATE_ACTIVE_WILD + )  "ACTIVE_WILD"; + +331 + } +} + +334  + $cp_waab_dump2 +( +ci_tif +* +ni +, +cp_waab +* +w +, cڡ * +pf +, + +335 +oo_dump_log__t + +logg +, * +log_g +) + +337  +tmp +; + +338 +ci_sock_cmn +* +s + = +NULL +; + +340 if + `CI_TCP_STATE_IS_SOCKET +( +w +-> +e +) ) { + +341 +s + = + `CI_CONTAINER +( +ci_sock_cmn +, +b +, +w +); + +342 + `logg +( +log_g +, "%s%" +NT_FMT +"l=" +OOF_IP4PORT +"mt="OOF_IP4PORT" %s", + +343 +pf +, + `cp_waab_ty_r +( +w +), + `NI_ID +( +ni +), + `W_FMT +(w), + +344 + `OOFA_IP4PORT +( + `sock_ddr_be32 +( +s +), + `sock_t_be16 +(s)), + +345 + `OOFA_IP4PORT +( + `sock_ddr_be32 +( +s +), + `sock_t_be16 +(s)), + +346 + `ci_t_e_r +( +w +-> +e +)); + +349 + `logg +( +log_g +, "%s%" +NT_FMT +, +pf +, + +350 + `cp_waab_ty_r +( +w +), + `NI_ID +( +ni +), + `W_FMT +(w)); + +352 if +w +-> +e + = +CI_TCP_STATE_FREE + || w->= +CI_TCP_STATE_AUXBUF + || + +353 +w +-> +e + = +CI_TCP_STATE_ACTIVE_WILD + ) + +356 +tmp + = +w +-> +lock +. +wl_v +; + +357 + `logg +( +log_g +, "%ock: %x %s%s", +pf +, +tmp +, + +358 ( +tmp + & +OO_WAITABLE_LK_LOCKED +) ? "LOCKED" : "", + +359 ( +tmp + & +OO_WAITABLE_LK_NEED_WAKE +) ? " CONTENDED": ""); + +361 + `logg +( +log_g +, "%x_wake=%08x%tx_wake=%08x%ags: " +CI_SB_FLAGS_FMT +, + +362 +pf +, + +363 +w +-> +p_q +. +rw +. +rx +, + +364 + `ci_b_ +(& +w +-> +wake_que +, +CI_SB_FLAG_WAKE_RX_B +) ? "(RQ)":" ", + +365 +w +-> +p_q +. +rw +. +tx +, + +366 + `ci_b_ +(& +w +-> +wake_que +, +CI_SB_FLAG_WAKE_TX_B +) ? "(RQ)":" ", + +367 + `CI_SB_FLAGS_PRI_ARG +( +w +)); + +369 if +w +-> +_cyes + == -1 ) + +370 + `logg +( +log_g +, "% ul_pl: -1 sp cye-1 ucs", +pf +); + +372 + `logg +( +log_g +, "% ul_pl: %u sp cye%u uc", +pf +, + +373 +w +-> +_cyes +, + `oo_cyes64_to_uc +( +ni +, w->spin_cycles)); + +374 + } +} + +377  + $cp_waab_dump +( +ci_tif +* +ni +, +cp_waab +* +w +, cڡ * +pf +) + +379 + `cp_waab_dump_to_logg +( +ni +, +w +, +pf +, +ci_log_dump_ +, +NULL +); + +380 + } +} + +382  + $cp_waab_dump_to_logg +( +ci_tif +* +ni +, +cp_waab +* +w +, + +383 cڡ * +pf +, + +384 +oo_dump_log__t + +logg +, * +log_g +) + +386 +cp_waab_obj +* +wo + = + `CI_CONTAINER +(cp_waab_obj, +waab +, +w +); + +388 + `cp_waab_dump2 +( +ni +, +w +, +pf +, +logg +, +log_g +); + +389 if + `CI_TCP_STATE_IS_SOCKET +( +w +-> +e +) ) { + +390 if +w +-> +e + = +CI_TCP_STATE_ACTIVE_WILD + ) + +393 + `ci_sock_cmn_dump +( +ni +, & +wo +-> +sock +, +pf +, +logg +, +log_g +); + +394 if +w +-> +e + = +CI_TCP_LISTEN + ) + +395 + `ci_t_sock_li_dump +( +ni +, & +wo +-> +t_li +, +pf +, +logg +, +log_g +); + +396 if +w +-> +e + & +CI_TCP_STATE_TCP + ) + +397 + `ci_t_e_dump +( +ni +, & +wo +-> +t +, +pf +, +logg +, +log_g +); + +398 #i +CI_CFG_UDP + + +399 if +w +-> +e + = +CI_TCP_STATE_UDP + ) + +400 + `ci_udp_e_dump +( +ni +, & +wo +-> +udp +, +pf +, +logg +, +log_g +); + +403 #i +CI_CFG_USERSPACE_PIPE + + +404 if +w +-> +e + = +CI_TCP_STATE_PIPE + ) + +405 + `oo_pe_dump +( +ni +, & +wo +-> +pe +, +pf +, +logg +, +log_g +); + +407 + } +} + +410  + $cp_waab_t +( +cp_waab +* +w +) + +416 if + `CI_TCP_STATE_IS_SOCKET +( +w +-> +e +) ) { + +417 +ci_sock_cmn +* +s + = + `CI_CONTAINER +(ci_sock_cmn, +b +, +w +); + +418 +cp_waab_obj +* +wo + = + `CI_CONTAINER +(cp_waab_obj, +waab +, +w +); + +419  +tq + = 0; + +420  +rq + = 0; + +422 if( +w +-> +e + & +CI_TCP_STATE_TCP +) && + +423 !( +w +-> +e + & +CI_TCP_STATE_NOT_CONNECTED +) ) { + +424 +tq + = + `ci_t_ndq_n_pkts +(& +wo +-> +t +); + +425 +rq + = +wo +-> +t +. +cv1 +. +num + + wo->t. +cv2 +.num; + +427 if +w +-> +e + = +CI_TCP_STATE_UDP + ) { + +428 +tq + = +wo +-> +udp +. +tx_cou + + + `oo_omic_ad +(&wo->udp. +tx_async_q_v +); + +429 +rq + = + `ci_udp_cv_q_pkts +(& +wo +-> +udp +. +cv_q +); + +431 + `log +("%%d %d " +OOF_IP4PORT +" "OOF_IP4PORT" %s", + +432 + `cp_waab_ty_r +( +w +), +rq +, +tq +, + +433 + `OOFA_IP4PORT +( + `sock_ddr_be32 +( +s +), + `sock_t_be16 +(s)), + +434 + `OOFA_IP4PORT +( + `sock_ddr_be32 +( +s +), + `sock_t_be16 +(s)), + +435 + `ci_t_e_r +( +w +-> +e +)); + +437 + } +} + +440 #ide +__KERNEL__ + + +442  + $cp_waab_wakeup +( +ci_tif +* +ni +, +cp_waab +* +w +) + +444 +oo_waab_wake_t + + +; + +445 + +. +sock_id + = +w +-> +bufid +; + +446 + `oo_sour_ +( + `ci_tif_g_driv_hd +( +ni +), + +447 +OO_IOC_WAITABLE_WAKE +, & + +); + +448 + } +} + +452  + $cp_waab_wake_n__pl +( +ci_tif +* +ni +, +cp_waab +* +sb +, + +453  +wh +) + +455 + `ci_as +( +wh +); + +456 + `ci_as +(( +wh + & ~( +CI_SB_FLAG_WAKE_RX +| +CI_SB_FLAG_WAKE_TX +)) == 0u); + +457 + `ci_as +(! +ni +-> +e +-> +_pl +); + +458 + `ci_wmb +(); + +459 if +wh + & +CI_SB_FLAG_WAKE_RX + ) + +460 ++ +sb +-> +p_q +. +rw +. +rx +; + +461 if +wh + & +CI_SB_FLAG_WAKE_TX + ) + +462 ++ +sb +-> +p_q +. +rw +. +tx +; + +463 + `ci_mb +(); + +465 #ifde +__KERNEL__ + + +470 + `ci_ni_di_move +( +ni +, & +sb +-> +ady_lk +); + +471 + `ci_ni_di_put +( +ni +, &ni-> +e +-> +ady_lis +[ +sb +-> +ady_li_id +], + +472 & +sb +-> +ady_lk +); + +474 if +wh + & +sb +-> +wake_que + ) { + +475 +sb +-> +sb_ags + | +wh +; + +476 + `cp_waab_wakeup +( +ni +, +sb +); + +480 if +ni +-> +e +-> +ady_li_ags +[ +sb +-> +ady_li_id +] & + +481 +CI_NI_READY_LIST_FLAG_WAKE + ) + +482 + `eb_t_hr_ady_li_wakeup +( + `tif2t_hr_sour +( +ni +), + +483 +sb +-> +ady_li_id +); + +485 if +wh + & +sb +-> +wake_que + ) { + +486 +sb +-> +sb_ags + | +wh +; + +487 + `ci_tif_put__po_pl +( +ni +, +sb +); + +488 + `ef_lock_hd_t_ag +(& +ni +-> +e +-> +lock +, +CI_EPLOCK_NETIF_NEED_WAKE +); + +495 + `ci_ni_di_move +( +ni +, & +sb +-> +ady_lk +); + +496 + `ci_ni_di_put +( +ni +, &ni-> +e +-> +ady_lis +[ +sb +-> +ady_li_id +], + +497 & +sb +-> +ady_lk +); + +499 if +ni +-> +e +-> +ady_li_ags +[ +sb +-> +ady_li_id +] & + +500 +CI_NI_READY_LIST_FLAG_WAKE + ) + +501 + `ef_lock_hd_t_ag +(& +ni +-> +e +-> +lock +, +CI_EPLOCK_NETIF_NEED_WAKE +); + +504 + } +} + + @/usr/include/aio.h + +22 #ide +_AIO_H + + +23  + #_AIO_H + 1 + + ) + +25  + ~ + +26  + ~ + +27  + #__ed_sigevt_t + + + ) + +28  + ~ + +29  + #__ed_timeec + + + ) + +30  + ~ + +32 +__BEGIN_DECLS + + +35  + saiocb + + +37  + maio_fdes +; + +38  + maio_lio_code +; + +39  + maio_qio +; + +40 vީ* + maio_buf +; + +41 +size_t + + maio_nbys +; + +42  +sigevt + + maio_sigevt +; + +45  +aiocb + * + m__xt_io +; + +46  + m__abs_io +; + +47  + m__picy +; + +48  + m__r_code +; + +49 +__ssize_t + + m__tu_vue +; + +51 #ide +__USE_FILE_OFFSET64 + + +52 +__off_t + + maio_offt +; + +53  + m__d +[ ( +__off64_t +-  ( +__off_t +)]; + +55 +__off64_t + + maio_offt +; + +57  + m__glibc_rved +[32]; + +62 #ifde +__USE_LARGEFILE64 + + +63  + saiocb64 + + +65  + maio_fdes +; + +66  + maio_lio_code +; + +67  + maio_qio +; + +68 vީ* + maio_buf +; + +69 +size_t + + maio_nbys +; + +70  +sigevt + + maio_sigevt +; + +73  +aiocb + * + m__xt_io +; + +74  + m__abs_io +; + +75  + m__picy +; + +76  + m__r_code +; + +77 +__ssize_t + + m__tu_vue +; + +79 +__off64_t + + maio_offt +; + +80  + m__glibc_rved +[32]; + +85 #ifde +__USE_GNU + + +88  + saio + + +90  + maio_thads +; + +91  + maio_num +; + +92  + maio_locks +; + +93  + maio_udba +; + +94  + maio_debug +; + +95  + maio_numurs +; + +96  + maio_id_time +; + +98  + maio_rved +; + +106 + mAIO_CANCELED +, + +107  + #AIO_CANCELED + +AIO_CANCELED + + + ) + +108 + mAIO_NOTCANCELED +, + +109  + #AIO_NOTCANCELED + +AIO_NOTCANCELED + + + ) + +110 + mAIO_ALLDONE + + +111  + #AIO_ALLDONE + +AIO_ALLDONE + + + ) + +118 + mLIO_READ +, + +119  + #LIO_READ + +LIO_READ + + + ) + +120 + mLIO_WRITE +, + +121  + #LIO_WRITE + +LIO_WRITE + + + ) + +122 + mLIO_NOP + + +123  + #LIO_NOP + +LIO_NOP + + + ) + +130 + mLIO_WAIT +, + +131  + #LIO_WAIT + +LIO_WAIT + + + ) + +132 + mLIO_NOWAIT + + +133  + #LIO_NOWAIT + +LIO_NOWAIT + + + ) + +138 #ifde +__USE_GNU + + +139  + $aio_ + (cڡ  +aio + * +__ + +__THROW + + `__nnu + ((1)); + +143 #ide +__USE_FILE_OFFSET64 + + +145  + $aio_ad + ( +aiocb + * +__aiocbp + +__THROW + + `__nnu + ((1)); + +147  + $aio_wre + ( +aiocb + * +__aiocbp + +__THROW + + `__nnu + ((1)); + +150  + $lio_liio + ( +__mode +, + +151  +aiocb + *cڡ +__li +[ +__ri_r +], + +152  +__ +,  +sigevt + * +__ri + +__sig +) + +153 +__THROW + + `__nnu + ((2)); + +156  + $aio_r + (cڡ  +aiocb + * +__aiocbp + +__THROW + + `__nnu + ((1)); + +158 +__ssize_t + + $aio_tu + ( +aiocb + * +__aiocbp + +__THROW + + `__nnu + ((1)); + +162  + $aio_nl + ( +__fdes +,  +aiocb + * +__aiocbp + +__THROW +; + +169  + $aio_sud + (cڡ  +aiocb + *cڡ +__li +[],  +__ +, + +170 cڡ  +timeec + * +__ri + +__timeout +) + +171 + `__nnu + ((1)); + +175  + $aio_fsync + ( +__ݔi +,  +aiocb + * +__aiocbp +) + +176 +__THROW + + `__nnu + ((2)); + +178 #ifde +__REDIRECT_NTH + + +179  + `__REDIRECT_NTH + ( +aio_ad +, ( +aiocb + * +__aiocbp +), +aio_ad64 +) + +180 + `__nnu + ((1)); + +181  + `__REDIRECT_NTH + ( +aio_wre +, ( +aiocb + * +__aiocbp +), +aio_wre64 +) + +182 + `__nnu + ((1)); + +184  + `__REDIRECT_NTH + ( +lio_liio +, + +185 ( +__mode +, + +186  +aiocb + *cڡ +__li +[ +__ri_r +], + +187  +__ +,  +sigevt + * +__ri + +__sig +), + +188 +lio_liio64 + + `__nnu + ((2)); + +190  + `__REDIRECT_NTH + ( +aio_r +, (cڡ  +aiocb + * +__aiocbp +), + +191 +aio_r64 + + `__nnu + ((1)); + +192 +__ssize_t + + `__REDIRECT_NTH + ( +aio_tu +, ( +aiocb + * +__aiocbp +), + +193 +aio_tu64 + + `__nnu + ((1)); + +195  + `__REDIRECT_NTH + ( +aio_nl +, + +196 ( +__fdes +,  +aiocb + * +__aiocbp +), + +197 +aio_nl64 +); + +199  + `__REDIRECT_NTH + ( +aio_sud +, + +200 (cڡ  +aiocb + *cڡ +__li +[],  +__ +, + +201 cڡ  +timeec + * +__ri + +__timeout +), + +202 +aio_sud64 + + `__nnu + ((1)); + +204  + `__REDIRECT_NTH + ( +aio_fsync +, + +205 ( +__ݔi +,  +aiocb + * +__aiocbp +), + +206 +aio_fsync64 + + `__nnu + ((2)); + +209  + #aio_ad + +aio_ad64 + + + ) + +210  + #aio_wre + +aio_wre64 + + + ) + +211  + #lio_liio + +lio_liio64 + + + ) + +212  + #aio_r + +aio_r64 + + + ) + +213  + #aio_tu + +aio_tu64 + + + ) + +214  + #aio_nl + +aio_nl64 + + + ) + +215  + #aio_sud + +aio_sud64 + + + ) + +216  + #aio_fsync + +aio_fsync64 + + + ) + +220 #ifde +__USE_LARGEFILE64 + + +221  + $aio_ad64 + ( +aiocb64 + * +__aiocbp + +__THROW + + `__nnu + ((1)); + +222  + $aio_wre64 + ( +aiocb64 + * +__aiocbp + +__THROW + + `__nnu + ((1)); + +224  + $lio_liio64 + ( +__mode +, + +225  +aiocb64 + *cڡ +__li +[ +__ri_r +], + +226  +__ +,  +sigevt + * +__ri + +__sig +) + +227 +__THROW + + `__nnu + ((2)); + +229  + $aio_r64 + (cڡ  +aiocb64 + * +__aiocbp +) + +230 +__THROW + + `__nnu + ((1)); + +231 +__ssize_t + + $aio_tu64 + ( +aiocb64 + * +__aiocbp +) + +232 +__THROW + + `__nnu + ((1)); + +234  + $aio_nl64 + ( +__fdes +,  +aiocb64 + * +__aiocbp + +__THROW +; + +236  + $aio_sud64 + (cڡ  +aiocb64 + *cڡ +__li +[],  +__ +, + +237 cڡ  +timeec + * +__ri + +__timeout +) + +238 +__THROW + + `__nnu + ((1)); + +240  + $aio_fsync64 + ( +__ݔi +,  +aiocb64 + * +__aiocbp +) + +241 +__THROW + + `__nnu + ((2)); + +244 +__END_DECLS + + + @/usr/include/asm/unistd.h + +1 #ide +_ASM_X86_UNISTD_H + + +2  + #_ASM_X86_UNISTD_H + + + ) + +5  + #__X32_SYSCALL_BIT + 0x40000000 + + ) + +7 #ifde +__i386__ + + +8  + ~ + +9 #i +defed +( +__ILP32__ +) + +10  + ~ + +12  + ~ + + @/usr/include/limits.h + +22 #ide +_LIBC_LIMITS_H_ + + +23  + #_LIBC_LIMITS_H_ + 1 + + ) + +25  + ~ + +31  + #MB_LEN_MAX + 16 + + ) + +36 #i! +defed + +__GNUC__ + || __GNUC__ < 2 + +41 #ide +_LIMITS_H + + +42  + #_LIMITS_H + 1 + + ) + +44  + ~ + +53  + #CHAR_BIT + 8 + + ) + +56  + #SCHAR_MIN + (-128) + + ) + +57  + #SCHAR_MAX + 127 + + ) + +60  + #UCHAR_MAX + 255 + + ) + +63 #ifde +__CHAR_UNSIGNED__ + + +64  + #CHAR_MIN + 0 + + ) + +65  + #CHAR_MAX + +UCHAR_MAX + + + ) + +67  + #CHAR_MIN + +SCHAR_MIN + + + ) + +68  + #CHAR_MAX + +SCHAR_MAX + + + ) + +72  + #SHRT_MIN + (-32768) + + ) + +73  + #SHRT_MAX + 32767 + + ) + +76  + #USHRT_MAX + 65535 + + ) + +79  + #INT_MIN + (- +INT_MAX + - 1) + + ) + +80  + #INT_MAX + 2147483647 + + ) + +83  + #UINT_MAX + 4294967295U + + ) + +86 #i +__WORDSIZE + == 64 + +87  + #LONG_MAX + 9223372036854775807L + + ) + +89  + #LONG_MAX + 2147483647L + + ) + +91  + #LONG_MIN + (- +LONG_MAX + - 1L) + + ) + +94 #i +__WORDSIZE + == 64 + +95  + #ULONG_MAX + 18446744073709551615UL + + ) + +97  + #ULONG_MAX + 4294967295UL + + ) + +100 #ifde +__USE_ISOC99 + + +103  + #LLONG_MAX + 9223372036854775807LL + + ) + +104  + #LLONG_MIN + (- +LLONG_MAX + - 1LL) + + ) + +107  + #ULLONG_MAX + 18446744073709551615ULL + + ) + +121 #i +defed + +__GNUC__ + && !defed +_GCC_LIMITS_H_ + + +123 #ude_x< +lims +. +h +> + +129 #i +defed + +__USE_ISOC99 + && defed +__GNUC__ + + +130 #ide +LLONG_MIN + + +131  + #LLONG_MIN + (- +LLONG_MAX +-1) + + ) + +133 #ide +LLONG_MAX + + +134  + #LLONG_MAX + +__LONG_LONG_MAX__ + + + ) + +136 #ide +ULLONG_MAX + + +137  + #ULLONG_MAX + ( +LLONG_MAX + * 2ULL + 1) + + ) + +141 #ifdef +__USE_POSIX + + +143  + ~ + +146 #ifdef +__USE_POSIX2 + + +147  + ~ + +150 #ifdef +__USE_XOPEN + + +151  + ~ + + @/usr/include/linux/pkt_sched.h + +1 #ide +__LINUX_PKT_SCHED_H + + +2  + #__LINUX_PKT_SCHED_H + + + ) + +4  + ~ + +19  + #TC_PRIO_BESTEFFORT + 0 + + ) + +20  + #TC_PRIO_FILLER + 1 + + ) + +21  + #TC_PRIO_BULK + 2 + + ) + +22  + #TC_PRIO_INTERACTIVE_BULK + 4 + + ) + +23  + #TC_PRIO_INTERACTIVE + 6 + + ) + +24  + #TC_PRIO_CONTROL + 7 + + ) + +26  + #TC_PRIO_MAX + 15 + + ) + +32  + stc_s + { + +33 +__u64 + + mbys +; + +34 +__u32 + + mcks +; + +35 +__u32 + + mdrs +; + +36 +__u32 + + movlims +; + +38 +__u32 + + mbps +; + +39 +__u32 + + ms +; + +40 +__u32 + + mqn +; + +41 +__u32 + + mbacklog +; + +44  + stc_eim + { + +45 sigd  + mrv +; + +46  + mewma_log +; + +66  + #TC_H_MAJ_MASK + (0xFFFF0000U) + + ) + +67  + #TC_H_MIN_MASK + (0x0000FFFFU) + + ) + +68  + #TC_H_MAJ +( +h +((h)& +TC_H_MAJ_MASK +) + + ) + +69  + #TC_H_MIN +( +h +((h)& +TC_H_MIN_MASK +) + + ) + +70  + #TC_H_MAKE +( +maj +, +m +(((maj)& +TC_H_MAJ_MASK +)|((m)& +TC_H_MIN_MASK +)) + + ) + +72  + #TC_H_UNSPEC + (0U) + + ) + +73  + #TC_H_ROOT + (0xFFFFFFFFU) + + ) + +74  + #TC_H_INGRESS + (0xFFFFFFF1U) + + ) + +75  + #TC_H_CLSACT + +TC_H_INGRESS + + + ) + +77  + #TC_H_MIN_INGRESS + 0xFFF2U + + ) + +78  + #TC_H_MIN_EGRESS + 0xFFF3U + + ) + +81 + etc_lk_y + { + +82 + mTC_LINKLAYER_UNAWARE +, + +83 + mTC_LINKLAYER_ETHERNET +, + +84 + mTC_LINKLAYER_ATM +, + +86  + #TC_LINKLAYER_MASK + 0x0F + + ) + +88  + stc_ec + { + +89  + m_log +; + +90 +__u8 + + mlky +; + +91  + movhd +; + +92  + m_ign +; + +93  + mmpu +; + +94 +__u32 + + m +; + +97  + #TC_RTAB_SIZE + 1024 + + ) + +99  + stc_sizeec + { + +100  + m_log +; + +101  + msize_log +; + +102  + m_ign +; + +103  + movhd +; + +104  + mlky +; + +105  + mmpu +; + +106  + mmtu +; + +107  + mtsize +; + +111 + mTCA_STAB_UNSPEC +, + +112 + mTCA_STAB_BASE +, + +113 + mTCA_STAB_DATA +, + +114 + m__TCA_STAB_MAX + + +117  + #TCA_STAB_MAX + ( +__TCA_STAB_MAX + - 1) + + ) + +121  + stc_fifo_qt + { + +122 +__u32 + + mlim +; + +127  + #TCQ_PRIO_BANDS + 16 + + ) + +128  + #TCQ_MIN_PRIO_BANDS + 2 + + ) + +130  + stc_io_qt + { + +131  + mbds +; + +132 +__u8 + + miom +[ +TC_PRIO_MAX ++1]; + +137  + stc_muiq_qt + { + +138 +__u16 + + mbds +; + +139 +__u16 + + mmax_bds +; + +144  + #TCQ_PLUG_BUFFER + 0 + + ) + +145  + #TCQ_PLUG_RELEASE_ONE + 1 + + ) + +146  + #TCQ_PLUG_RELEASE_INDEFINITE + 2 + + ) + +147  + #TCQ_PLUG_LIMIT + 3 + + ) + +149  + stc_ug_qt + { + +159  + mai +; + +160 +__u32 + + mlim +; + +165  + stc_tbf_qt + { + +166  +tc_ec + + m +; + +167  +tc_ec + + mak +; + +168 +__u32 + + mlim +; + +169 +__u32 + + mbufr +; + +170 +__u32 + + mmtu +; + +174 + mTCA_TBF_UNSPEC +, + +175 + mTCA_TBF_PARMS +, + +176 + mTCA_TBF_RTAB +, + +177 + mTCA_TBF_PTAB +, + +178 + mTCA_TBF_RATE64 +, + +179 + mTCA_TBF_PRATE64 +, + +180 + mTCA_TBF_BURST +, + +181 + mTCA_TBF_PBURST +, + +182 + mTCA_TBF_PAD +, + +183 + m__TCA_TBF_MAX +, + +186  + #TCA_TBF_MAX + ( +__TCA_TBF_MAX + - 1) + + ) + +195  + stc_sfq_qt + { + +196  + mqutum +; + +197  + murb_riod +; + +198 +__u32 + + mlim +; + +199  + mdivis +; + +200  + mows +; + +203  + stc_sfqd_s + { + +204 +__u32 + + mob_dr +; + +205 +__u32 + + mfd_dr +; + +206 +__u32 + + mob_mk +; + +207 +__u32 + + mfd_mk +; + +208 +__u32 + + mob_mk_hd +; + +209 +__u32 + + mfd_mk_hd +; + +212  + stc_sfq_qt_v1 + { + +213  +tc_sfq_qt + + mv0 +; + +214  + mdth +; + +215  + mhddr +; + +217 +__u32 + + mlim +; + +218 +__u32 + + mqth_m +; + +219 +__u32 + + mqth_max +; + +220  + mWlog +; + +221  + mPlog +; + +222  + mS_log +; + +223  + mags +; + +224 +__u32 + + mmax_P +; + +226  +tc_sfqd_s + + ms +; + +230  + stc_sfq_xs + { + +231 +__s32 + + ml +; + +237 + mTCA_RED_UNSPEC +, + +238 + mTCA_RED_PARMS +, + +239 + mTCA_RED_STAB +, + +240 + mTCA_RED_MAX_P +, + +241 + m__TCA_RED_MAX +, + +244  + #TCA_RED_MAX + ( +__TCA_RED_MAX + - 1) + + ) + +246  + stc_d_qt + { + +247 +__u32 + + mlim +; + +248 +__u32 + + mqth_m +; + +249 +__u32 + + mqth_max +; + +250  + mWlog +; + +251  + mPlog +; + +252  + mS_log +; + +253  + mags +; + +254  + #TC_RED_ECN + 1 + + ) + +255  + #TC_RED_HARDDROP + 2 + + ) + +256  + #TC_RED_ADAPTATIVE + 4 + + ) + +259  + stc_d_xs + { + +260 +__u32 + + my +; + +261 +__u32 + + mpdr +; + +262 +__u32 + + mh +; + +263 +__u32 + + mmked +; + +268  + #MAX_DPs + 16 + + ) + +271 + mTCA_GRED_UNSPEC +, + +272 + mTCA_GRED_PARMS +, + +273 + mTCA_GRED_STAB +, + +274 + mTCA_GRED_DPS +, + +275 + mTCA_GRED_MAX_P +, + +276 + mTCA_GRED_LIMIT +, + +277 + m__TCA_GRED_MAX +, + +280  + #TCA_GRED_MAX + ( +__TCA_GRED_MAX + - 1) + + ) + +282  + stc_gd_qt + { + +283 +__u32 + + mlim +; + +284 +__u32 + + mqth_m +; + +285 +__u32 + + mqth_max +; + +286 +__u32 + + mDP +; + +287 +__u32 + + mbacklog +; + +288 +__u32 + + mqave +; + +289 +__u32 + + mfd +; + +290 +__u32 + + my +; + +291 +__u32 + + mh +; + +292 +__u32 + + mpdr +; + +293 +__u8 + + mWlog +; + +294 +__u8 + + mPlog +; + +295 +__u8 + + mS_log +; + +296 +__u8 + + mio +; + +297 +__u32 + + mcks +; + +298 +__u32 + + mbys +; + +302  + stc_gd_st + { + +303 +__u32 + + mDPs +; + +304 +__u32 + + mdef_DP +; + +305 +__u8 + + mgrio +; + +306 +__u8 + + mags +; + +307 +__u16 + + md1 +; + +313 + mTCA_CHOKE_UNSPEC +, + +314 + mTCA_CHOKE_PARMS +, + +315 + mTCA_CHOKE_STAB +, + +316 + mTCA_CHOKE_MAX_P +, + +317 + m__TCA_CHOKE_MAX +, + +320  + #TCA_CHOKE_MAX + ( +__TCA_CHOKE_MAX + - 1) + + ) + +322  + stc_choke_qt + { + +323 +__u32 + + mlim +; + +324 +__u32 + + mqth_m +; + +325 +__u32 + + mqth_max +; + +326  + mWlog +; + +327  + mPlog +; + +328  + mS_log +; + +329  + mags +; + +332  + stc_choke_xs + { + +333 +__u32 + + my +; + +334 +__u32 + + mpdr +; + +335 +__u32 + + mh +; + +336 +__u32 + + mmked +; + +337 +__u32 + + mmched +; + +341  + #TC_HTB_NUMPRIO + 8 + + ) + +342  + #TC_HTB_MAXDEPTH + 8 + + ) + +343  + #TC_HTB_PROTOVER + 3 + + ) + +345  + stc_htb_t + { + +346  +tc_ec + + m +; + +347  +tc_ec + + m +; + +348 +__u32 + + mbufr +; + +349 +__u32 + + mcbufr +; + +350 +__u32 + + mqutum +; + +351 +__u32 + + mv +; + +352 +__u32 + + mio +; + +354  + stc_htb_glob + { + +355 +__u32 + + mvsi +; + +356 +__u32 + + m2qutum +; + +357 +__u32 + + mdefs +; + +358 +__u32 + + mdebug +; + +361 +__u32 + + mde_pkts +; + +364 + mTCA_HTB_UNSPEC +, + +365 + mTCA_HTB_PARMS +, + +366 + mTCA_HTB_INIT +, + +367 + mTCA_HTB_CTAB +, + +368 + mTCA_HTB_RTAB +, + +369 + mTCA_HTB_DIRECT_QLEN +, + +370 + mTCA_HTB_RATE64 +, + +371 + mTCA_HTB_CEIL64 +, + +372 + mTCA_HTB_PAD +, + +373 + m__TCA_HTB_MAX +, + +376  + #TCA_HTB_MAX + ( +__TCA_HTB_MAX + - 1) + + ) + +378  + stc_htb_xs + { + +379 +__u32 + + mnds +; + +380 +__u32 + + mbrows +; + +381 +__u32 + + mgs +; + +382 +__u32 + + mtoks +; + +383 +__u32 + + moks +; + +388  + stc_hfsc_qt + { + +389 +__u16 + + mdefs +; + +392  + stc_rvi_curve + { + +393 +__u32 + + mm1 +; + +394 +__u32 + + md +; + +395 +__u32 + + mm2 +; + +398  + stc_hfsc_s + { + +399 +__u64 + + mwk +; + +400 +__u64 + + mwk +; + +401 +__u32 + + mriod +; + +402 +__u32 + + mv +; + +406 + mTCA_HFSC_UNSPEC +, + +407 + mTCA_HFSC_RSC +, + +408 + mTCA_HFSC_FSC +, + +409 + mTCA_HFSC_USC +, + +410 + m__TCA_HFSC_MAX +, + +413  + #TCA_HFSC_MAX + ( +__TCA_HFSC_MAX + - 1) + + ) + +418  + #TC_CBQ_MAXPRIO + 8 + + ) + +419  + #TC_CBQ_MAXLEVEL + 8 + + ) + +420  + #TC_CBQ_DEF_EWMA + 5 + + ) + +422  + stc_cbq_lsst + { + +423  + mchge +; + +424  + mags +; + +425  + #TCF_CBQ_LSS_BOUNDED + 1 + + ) + +426  + #TCF_CBQ_LSS_ISOLATED + 2 + + ) + +427  + mewma_log +; + +428  + mv +; + +429  + #TCF_CBQ_LSS_FLAGS + 1 + + ) + +430  + #TCF_CBQ_LSS_EWMA + 2 + + ) + +431  + #TCF_CBQ_LSS_MAXIDLE + 4 + + ) + +432  + #TCF_CBQ_LSS_MINIDLE + 8 + + ) + +433  + #TCF_CBQ_LSS_OFFTIME + 0x10 + + ) + +434  + #TCF_CBQ_LSS_AVPKT + 0x20 + + ) + +435 +__u32 + + mmaxid +; + +436 +__u32 + + mmid +; + +437 +__u32 + + mofime +; + +438 +__u32 + + mavpkt +; + +441  + stc_cbq_wt + { + +442  + mags +; + +443  + miܙy +; + +444  + mriܙy +; + +445  + m__rved +; + +446 +__u32 + + ml +; + +447 +__u32 + + mweight +; + +450  + stc_cbq_ovl + { + +451  + mgy +; + +452  + #TC_CBQ_OVL_CLASSIC + 0 + + ) + +453  + #TC_CBQ_OVL_DELAY + 1 + + ) + +454  + #TC_CBQ_OVL_LOWPRIO + 2 + + ) + +455  + #TC_CBQ_OVL_DROP + 3 + + ) + +456  + #TC_CBQ_OVL_RCLASSIC + 4 + + ) + +457  + miܙy2 +; + +458 +__u16 + + md +; + +459 +__u32 + + my +; + +462  + stc_cbq_pi + { + +463  + mpi +; + +464  + m__s1 +; + +465  + m__s2 +; + +468  + stc_cbq_ft + { + +469 +__u32 + + ml +; + +470 +__u32 + + mdefm +; + +471 +__u32 + + mdefchge +; + +474  + stc_cbq_xs + { + +475 +__u32 + + mbrows +; + +476 +__u32 + + movais +; + +477 +__s32 + + mavgid +; + +478 +__s32 + + mundtime +; + +482 + mTCA_CBQ_UNSPEC +, + +483 + mTCA_CBQ_LSSOPT +, + +484 + mTCA_CBQ_WRROPT +, + +485 + mTCA_CBQ_FOPT +, + +486 + mTCA_CBQ_OVL_STRATEGY +, + +487 + mTCA_CBQ_RATE +, + +488 + mTCA_CBQ_RTAB +, + +489 + mTCA_CBQ_POLICE +, + +490 + m__TCA_CBQ_MAX +, + +493  + #TCA_CBQ_MAX + ( +__TCA_CBQ_MAX + - 1) + + ) + +498 + mTCA_DSMARK_UNSPEC +, + +499 + mTCA_DSMARK_INDICES +, + +500 + mTCA_DSMARK_DEFAULT_INDEX +, + +501 + mTCA_DSMARK_SET_TC_INDEX +, + +502 + mTCA_DSMARK_MASK +, + +503 + mTCA_DSMARK_VALUE +, + +504 + m__TCA_DSMARK_MAX +, + +507  + #TCA_DSMARK_MAX + ( +__TCA_DSMARK_MAX + - 1) + + ) + +512 + mTCA_ATM_UNSPEC +, + +513 + mTCA_ATM_FD +, + +514 + mTCA_ATM_PTR +, + +515 + mTCA_ATM_HDR +, + +516 + mTCA_ATM_EXCESS +, + +517 + mTCA_ATM_ADDR +, + +518 + mTCA_ATM_STATE +, + +519 + m__TCA_ATM_MAX +, + +522  + #TCA_ATM_MAX + ( +__TCA_ATM_MAX + - 1) + + ) + +527 + mTCA_NETEM_UNSPEC +, + +528 + mTCA_NETEM_CORR +, + +529 + mTCA_NETEM_DELAY_DIST +, + +530 + mTCA_NETEM_REORDER +, + +531 + mTCA_NETEM_CORRUPT +, + +532 + mTCA_NETEM_LOSS +, + +533 + mTCA_NETEM_RATE +, + +534 + mTCA_NETEM_ECN +, + +535 + mTCA_NETEM_RATE64 +, + +536 + mTCA_NETEM_PAD +, + +537 + m__TCA_NETEM_MAX +, + +540  + #TCA_NETEM_MAX + ( +__TCA_NETEM_MAX + - 1) + + ) + +542  + stc_Ëm_qt + { + +543 +__u32 + + mϋncy +; + +544 +__u32 + + mlim +; + +545 +__u32 + + mloss +; + +546 +__u32 + + mg +; + +547 +__u32 + + mdui +; + +548 +__u32 + + mjr +; + +551  + stc_Ëm_cr + { + +552 +__u32 + + mday_cr +; + +553 +__u32 + + mloss_cr +; + +554 +__u32 + + mdup_cr +; + +557  + stc_Ëm_d + { + +558 +__u32 + + mobaby +; + +559 +__u32 + + mcܻti +; + +562  + stc_Ëm_cru + { + +563 +__u32 + + mobaby +; + +564 +__u32 + + mcܻti +; + +567  + stc_Ëm_ + { + +568 +__u32 + + m +; + +569 +__s32 + + mck_ovhd +; + +570 +__u32 + + m_size +; + +571 +__s32 + + m_ovhd +; + +575 + mNETEM_LOSS_UNSPEC +, + +576 + mNETEM_LOSS_GI +, + +577 + mNETEM_LOSS_GE +, + +578 + m__NETEM_LOSS_MAX + + +580  + #NETEM_LOSS_MAX + ( +__NETEM_LOSS_MAX + - 1) + + ) + +583  + stc_Ëm_gimod + { + +584 +__u32 + + mp13 +; + +585 +__u32 + + mp31 +; + +586 +__u32 + + mp32 +; + +587 +__u32 + + mp14 +; + +588 +__u32 + + mp23 +; + +592  + stc_Ëm_gemod + { + +593 +__u32 + + mp +; + +594 +__u32 + + mr +; + +595 +__u32 + + mh +; + +596 +__u32 + + mk1 +; + +599  + #NETEM_DIST_SCALE + 8192 + + ) + +600  + #NETEM_DIST_MAX + 16384 + + ) + +605 + mTCA_DRR_UNSPEC +, + +606 + mTCA_DRR_QUANTUM +, + +607 + m__TCA_DRR_MAX + + +610  + #TCA_DRR_MAX + ( +__TCA_DRR_MAX + - 1) + + ) + +612  + stc_d_s + { + +613 +__u32 + + mdefic +; + +617  + #TC_QOPT_BITMASK + 15 + + ) + +618  + #TC_QOPT_MAX_QUEUE + 16 + + ) + +620  + stc_mqio_qt + { + +621 +__u8 + + mnum_tc +; + +622 +__u8 + + mio_tc_m +[ +TC_QOPT_BITMASK + + 1]; + +623 +__u8 + + mhw +; + +624 +__u16 + + mcou +[ +TC_QOPT_MAX_QUEUE +]; + +625 +__u16 + + mofft +[ +TC_QOPT_MAX_QUEUE +]; + +631 + mTCA_SFB_UNSPEC +, + +632 + mTCA_SFB_PARMS +, + +633 + m__TCA_SFB_MAX +, + +636  + #TCA_SFB_MAX + ( +__TCA_SFB_MAX + - 1) + + ) + +641  + stc_sfb_qt + { + +642 +__u32 + + mhash_rv +; + +643 +__u32 + + mwmup_time +; + +644 +__u32 + + mmax +; + +645 +__u32 + + mb_size +; + +646 +__u32 + + memt +; + +647 +__u32 + + mdeemt +; + +648 +__u32 + + mlim +; + +649 +__u32 + + my_ +; + +650 +__u32 + + my_bur +; + +653  + stc_sfb_xs + { + +654 +__u32 + + mydr +; + +655 +__u32 + + mydr +; + +656 +__u32 + + mbuckdr +; + +657 +__u32 + + mqueuedr +; + +658 +__u32 + + mchddr +; + +659 +__u32 + + mmked +; + +660 +__u32 + + mmaxqn +; + +661 +__u32 + + mmaxob +; + +662 +__u32 + + mavgob +; + +665  + #SFB_MAX_PROB + 0xFFFF + + ) + +669 + mTCA_QFQ_UNSPEC +, + +670 + mTCA_QFQ_WEIGHT +, + +671 + mTCA_QFQ_LMAX +, + +672 + m__TCA_QFQ_MAX + + +675  + #TCA_QFQ_MAX + ( +__TCA_QFQ_MAX + - 1) + + ) + +677  + stc_qfq_s + { + +678 +__u32 + + mweight +; + +679 +__u32 + + mlmax +; + +685 + mTCA_CODEL_UNSPEC +, + +686 + mTCA_CODEL_TARGET +, + +687 + mTCA_CODEL_LIMIT +, + +688 + mTCA_CODEL_INTERVAL +, + +689 + mTCA_CODEL_ECN +, + +690 + mTCA_CODEL_CE_THRESHOLD +, + +691 + m__TCA_CODEL_MAX + + +694  + #TCA_CODEL_MAX + ( +__TCA_CODEL_MAX + - 1) + + ) + +696  + stc_cod_xs + { + +697 +__u32 + + mmaxck +; + +698 +__u32 + + mcou +; + +701 +__u32 + + mϡcou +; + +702 +__u32 + + mlday +; + +703 +__s32 + + mdr_xt +; + +704 +__u32 + + mdr_ovlim +; + +705 +__u32 + + me_mk +; + +706 +__u32 + + mdrpg +; + +707 +__u32 + + m_mk +; + +713 + mTCA_FQ_CODEL_UNSPEC +, + +714 + mTCA_FQ_CODEL_TARGET +, + +715 + mTCA_FQ_CODEL_LIMIT +, + +716 + mTCA_FQ_CODEL_INTERVAL +, + +717 + mTCA_FQ_CODEL_ECN +, + +718 + mTCA_FQ_CODEL_FLOWS +, + +719 + mTCA_FQ_CODEL_QUANTUM +, + +720 + mTCA_FQ_CODEL_CE_THRESHOLD +, + +721 + mTCA_FQ_CODEL_DROP_BATCH_SIZE +, + +722 + mTCA_FQ_CODEL_MEMORY_LIMIT +, + +723 + m__TCA_FQ_CODEL_MAX + + +726  + #TCA_FQ_CODEL_MAX + ( +__TCA_FQ_CODEL_MAX + - 1) + + ) + +729 + mTCA_FQ_CODEL_XSTATS_QDISC +, + +730 + mTCA_FQ_CODEL_XSTATS_CLASS +, + +733  + stc_fq_cod_qd_s + { + +734 +__u32 + + mmaxck +; + +735 +__u32 + + mdr_ovlim +; + +738 +__u32 + + me_mk +; + +741 +__u32 + + mw_ow_cou +; + +744 +__u32 + + mw_ows_n +; + +745 +__u32 + + md_ows_n +; + +746 +__u32 + + m_mk +; + +747 +__u32 + + mmemy_uge +; + +748 +__u32 + + mdr_ovmemy +; + +751  + stc_fq_cod__s + { + +752 +__s32 + + mdefic +; + +753 +__u32 + + mlday +; + +756 +__u32 + + mcou +; + +757 +__u32 + + mϡcou +; + +758 +__u32 + + mdrpg +; + +759 +__s32 + + mdr_xt +; + +762  + stc_fq_cod_xs + { + +763 +__u32 + + mty +; + +765  +tc_fq_cod_qd_s + + mqdisc_s +; + +766  +tc_fq_cod__s + + mass_s +; + +773 + mTCA_FQ_UNSPEC +, + +775 + mTCA_FQ_PLIMIT +, + +777 + mTCA_FQ_FLOW_PLIMIT +, + +779 + mTCA_FQ_QUANTUM +, + +781 + mTCA_FQ_INITIAL_QUANTUM +, + +783 + mTCA_FQ_RATE_ENABLE +, + +785 + mTCA_FQ_FLOW_DEFAULT_RATE +, + +787 + mTCA_FQ_FLOW_MAX_RATE +, + +789 + mTCA_FQ_BUCKETS_LOG +, + +791 + mTCA_FQ_FLOW_REFILL_DELAY +, + +793 + mTCA_FQ_ORPHAN_MASK +, + +795 + mTCA_FQ_LOW_RATE_THRESHOLD +, + +797 + m__TCA_FQ_MAX + + +800  + #TCA_FQ_MAX + ( +__TCA_FQ_MAX + - 1) + + ) + +802  + stc_fq_qd_s + { + +803 +__u64 + + mgc_ows +; + +804 +__u64 + + mhighio_cks +; + +805 +__u64 + + mt_s +; + +806 +__u64 + + mthrَed +; + +807 +__u64 + + mows_im +; + +808 +__u64 + + mpkts_too_lg +; + +809 +__u64 + + mloti_rs +; + +810 +__s64 + + mtime_xt_dayed_ow +; + +811 +__u32 + + mows +; + +812 +__u32 + + maive_ows +; + +813 +__u32 + + mthrَed_ows +; + +814 +__u32 + + muhrَe_ϋncy_ns +; + +820 + mTCA_HHF_UNSPEC +, + +821 + mTCA_HHF_BACKLOG_LIMIT +, + +822 + mTCA_HHF_QUANTUM +, + +823 + mTCA_HHF_HH_FLOWS_LIMIT +, + +824 + mTCA_HHF_RESET_TIMEOUT +, + +825 + mTCA_HHF_ADMIT_BYTES +, + +826 + mTCA_HHF_EVICT_TIMEOUT +, + +827 + mTCA_HHF_NON_HH_WEIGHT +, + +828 + m__TCA_HHF_MAX + + +831  + #TCA_HHF_MAX + ( +__TCA_HHF_MAX + - 1) + + ) + +833  + stc_hhf_xs + { + +834 +__u32 + + mdr_ovlim +; + +837 +__u32 + + mhh_ovlim +; + +838 +__u32 + + mhh_t_cou +; + +839 +__u32 + + mhh_cur_cou +; + +844 + mTCA_PIE_UNSPEC +, + +845 + mTCA_PIE_TARGET +, + +846 + mTCA_PIE_LIMIT +, + +847 + mTCA_PIE_TUPDATE +, + +848 + mTCA_PIE_ALPHA +, + +849 + mTCA_PIE_BETA +, + +850 + mTCA_PIE_ECN +, + +851 + mTCA_PIE_BYTEMODE +, + +852 + m__TCA_PIE_MAX + + +854  + #TCA_PIE_MAX + ( +__TCA_PIE_MAX + - 1) + + ) + +856  + stc_p_xs + { + +857 +__u32 + + mob +; + +858 +__u32 + + mday +; + +859 +__u32 + + mavg_dq_ +; + +860 +__u32 + + mcks_ +; + +861 +__u32 + + mdrݳd +; + +862 +__u32 + + movlim +; + +863 +__u32 + + mmaxq +; + +864 +__u32 + + me_mk +; + + @/usr/include/linux/sockios.h + +18 #ide +_LINUX_SOCKIOS_H + + +19  + #_LINUX_SOCKIOS_H + + + ) + +21  + ~ + +24  + #SIOCINQ + +FIONREAD + + + ) + +25  + #SIOCOUTQ + +TIOCOUTQ + + + ) + +28  + #SIOCADDRT + 0x890B + + ) + +29  + #SIOCDELRT + 0x890C + + ) + +30  + #SIOCRTMSG + 0x890D + + ) + +33  + #SIOCGIFNAME + 0x8910 + + ) + +34  + #SIOCSIFLINK + 0x8911 + + ) + +35  + #SIOCGIFCONF + 0x8912 + + ) + +36  + #SIOCGIFFLAGS + 0x8913 + + ) + +37  + #SIOCSIFFLAGS + 0x8914 + + ) + +38  + #SIOCGIFADDR + 0x8915 + + ) + +39  + #SIOCSIFADDR + 0x8916 + + ) + +40  + #SIOCGIFDSTADDR + 0x8917 + + ) + +41  + #SIOCSIFDSTADDR + 0x8918 + + ) + +42  + #SIOCGIFBRDADDR + 0x8919 + + ) + +43  + #SIOCSIFBRDADDR + 0x891 + + ) + +44  + #SIOCGIFNETMASK + 0x891b + + ) + +45  + #SIOCSIFNETMASK + 0x891 + + ) + +46  + #SIOCGIFMETRIC + 0x891d + + ) + +47  + #SIOCSIFMETRIC + 0x891 + + ) + +48  + #SIOCGIFMEM + 0x891 + + ) + +49  + #SIOCSIFMEM + 0x8920 + + ) + +50  + #SIOCGIFMTU + 0x8921 + + ) + +51  + #SIOCSIFMTU + 0x8922 + + ) + +52  + #SIOCSIFNAME + 0x8923 + + ) + +53  + #SIOCSIFHWADDR + 0x8924 + + ) + +54  + #SIOCGIFENCAP + 0x8925 + + ) + +55  + #SIOCSIFENCAP + 0x8926 + + ) + +56  + #SIOCGIFHWADDR + 0x8927 + + ) + +57  + #SIOCGIFSLAVE + 0x8929 + + ) + +58  + #SIOCSIFSLAVE + 0x8930 + + ) + +59  + #SIOCADDMULTI + 0x8931 + + ) + +60  + #SIOCDELMULTI + 0x8932 + + ) + +61  + #SIOCGIFINDEX + 0x8933 + + ) + +62  + #SIOGIFINDEX + +SIOCGIFINDEX + + + ) + +63  + #SIOCSIFPFLAGS + 0x8934 + + ) + +64  + #SIOCGIFPFLAGS + 0x8935 + + ) + +65  + #SIOCDIFADDR + 0x8936 + + ) + +66  + #SIOCSIFHWBROADCAST + 0x8937 + + ) + +67  + #SIOCGIFCOUNT + 0x8938 + + ) + +69  + #SIOCGIFBR + 0x8940 + + ) + +70  + #SIOCSIFBR + 0x8941 + + ) + +72  + #SIOCGIFTXQLEN + 0x8942 + + ) + +73  + #SIOCSIFTXQLEN + 0x8943 + + ) + +78  + #SIOCETHTOOL + 0x8946 + + ) + +80  + #SIOCGMIIPHY + 0x8947 + + ) + +81  + #SIOCGMIIREG + 0x8948 + + ) + +82  + #SIOCSMIIREG + 0x8949 + + ) + +84  + #SIOCWANDEV + 0x894A + + ) + +86  + #SIOCOUTQNSD + 0x894B + + ) + +90  + #SIOCDARP + 0x8953 + + ) + +91  + #SIOCGARP + 0x8954 + + ) + +92  + #SIOCSARP + 0x8955 + + ) + +95  + #SIOCDRARP + 0x8960 + + ) + +96  + #SIOCGRARP + 0x8961 + + ) + +97  + #SIOCSRARP + 0x8962 + + ) + +101  + #SIOCGIFMAP + 0x8970 + + ) + +102  + #SIOCSIFMAP + 0x8971 + + ) + +106  + #SIOCADDDLCI + 0x8980 + + ) + +107  + #SIOCDELDLCI + 0x8981 + + ) + +109  + #SIOCGIFVLAN + 0x8982 + + ) + +110  + #SIOCSIFVLAN + 0x8983 + + ) + +114  + #SIOCBONDENSLAVE + 0x8990 + + ) + +115  + #SIOCBONDRELEASE + 0x8991 + + ) + +116  + #SIOCBONDSETHWADDR + 0x8992 + + ) + +117  + #SIOCBONDSLAVEINFOQUERY + 0x8993 + + ) + +118  + #SIOCBONDINFOQUERY + 0x8994 + + ) + +119  + #SIOCBONDCHANGEACTIVE + 0x8995 + + ) + +122  + #SIOCBRADDBR + 0x89a0 + + ) + +123  + #SIOCBRDELBR + 0x89a1 + + ) + +124  + #SIOCBRADDIF + 0x89a2 + + ) + +125  + #SIOCBRDELIF + 0x89a3 + + ) + +128  + #SIOCSHWTSTAMP + 0x89b0 + + ) + +129  + #SIOCGHWTSTAMP + 0x89b1 + + ) + +142  + #SIOCDEVPRIVATE + 0x89F0 + + ) + +148  + #SIOCPROTOPRIVATE + 0x89E0 + + ) + + @/usr/include/linux/time.h + +1 #ide +_LINUX_TIME_H + + +2  + #_LINUX_TIME_H + + + ) + +4  + ~ + +7 #ide +_STRUCT_TIMESPEC + + +8  + #_STRUCT_TIMESPEC + + + ) + +9  + stimeec + { + +10 +__kl_time_t + + mtv_c +; + +11  + mtv_nc +; + +15  + stimev + { + +16 +__kl_time_t + + mtv_c +; + +17 +__kl_sucds_t + + mtv_uc +; + +20  + stimeze + { + +21  + mtz_muswe +; + +22  + mtz_dtime +; + +30  + #ITIMER_REAL + 0 + + ) + +31  + #ITIMER_VIRTUAL + 1 + + ) + +32  + #ITIMER_PROF + 2 + + ) + +34  + simec + { + +35  +timeec + + m_rv +; + +36  +timeec + + m_vue +; + +39  + simv + { + +40  +timev + + m_rv +; + +41  +timev + + m_vue +; + +47  + #CLOCK_REALTIME + 0 + + ) + +48  + #CLOCK_MONOTONIC + 1 + + ) + +49  + #CLOCK_PROCESS_CPUTIME_ID + 2 + + ) + +50  + #CLOCK_THREAD_CPUTIME_ID + 3 + + ) + +51  + #CLOCK_MONOTONIC_RAW + 4 + + ) + +52  + #CLOCK_REALTIME_COARSE + 5 + + ) + +53  + #CLOCK_MONOTONIC_COARSE + 6 + + ) + +54  + #CLOCK_BOOTTIME + 7 + + ) + +55  + #CLOCK_REALTIME_ALARM + 8 + + ) + +56  + #CLOCK_BOOTTIME_ALARM + 9 + + ) + +57  + #CLOCK_SGI_CYCLE + 10 + + ) + +58  + #CLOCK_TAI + 11 + + ) + +60  + #MAX_CLOCKS + 16 + + ) + +61  + #CLOCKS_MASK + ( +CLOCK_REALTIME + | +CLOCK_MONOTONIC +) + + ) + +62  + #CLOCKS_MONO + +CLOCK_MONOTONIC + + + ) + +67  + #TIMER_ABSTIME + 0x01 + + ) + + @/usr/include/linux/types.h + +1 #ide +_LINUX_TYPES_H + + +2  + #_LINUX_TYPES_H + + + ) + +4  + ~ + +6 #ide +__ASSEMBLY__ + + +8  + ~ + +16 #ifde +__CHECKER__ + + +17  + #__bwi__ + + `__ibu__ +(( +bwi +)) + + ) + +19  + #__bwi__ + + + ) + +21 #ifde +__CHECK_ENDIAN__ + + +22  + #__bwi + +__bwi__ + + + ) + +24  + #__bwi + + + ) + +27  +__u16 + + t__bwi + + t__16 +; + +28  +__u16 + + t__bwi + + t__be16 +; + +29  +__u32 + + t__bwi + + t__32 +; + +30  +__u32 + + t__bwi + + t__be32 +; + +31  +__u64 + + t__bwi + + t__64 +; + +32  +__u64 + + t__bwi + + t__be64 +; + +34  +__u16 + + t__bwi + + t__sum16 +; + +35  +__u32 + + t__bwi + + t__wsum +; + +46  + #__igd_u64 + +__u64 + + `__ibu__ +(( + `igd +(8))) + + ) + +47  + #__igd_be64 + +__be64 + + `__ibu__ +(( + `igd +(8))) + + ) + +48  + #__igd_64 + +__64 + + `__ibu__ +(( + `igd +(8))) + + ) + + @/usr/include/linux/version.h + +1  + #LINUX_VERSION_CODE + 264461 + + ) + +2  + #KERNEL_VERSION +( +a +, +b +, +c +((<< 16+ ((b<< 8+ (c)) + + ) + + @/usr/include/net/if.h + +19 #ide +_NET_IF_H + + +20  + #_NET_IF_H + 1 + + ) + +22  + ~ + +24 #ifde +__USE_MISC + + +25  + ~ + +26  + ~ + +31  + #IF_NAMESIZE + 16 + + ) + +33  + sif_medex + + +35  + mif_dex +; + +36 * + mif_me +; + +40 #ifde +__USE_MISC + + +44 + mIFF_UP + = 0x1, + +45  + #IFF_UP + +IFF_UP + + + ) + +46 + mIFF_BROADCAST + = 0x2, + +47  + #IFF_BROADCAST + +IFF_BROADCAST + + + ) + +48 + mIFF_DEBUG + = 0x4, + +49  + #IFF_DEBUG + +IFF_DEBUG + + + ) + +50 + mIFF_LOOPBACK + = 0x8, + +51  + #IFF_LOOPBACK + +IFF_LOOPBACK + + + ) + +52 + mIFF_POINTOPOINT + = 0x10, + +53  + #IFF_POINTOPOINT + +IFF_POINTOPOINT + + + ) + +54 + mIFF_NOTRAILERS + = 0x20, + +55  + #IFF_NOTRAILERS + +IFF_NOTRAILERS + + + ) + +56 + mIFF_RUNNING + = 0x40, + +57  + #IFF_RUNNING + +IFF_RUNNING + + + ) + +58 + mIFF_NOARP + = 0x80, + +59  + #IFF_NOARP + +IFF_NOARP + + + ) + +60 + mIFF_PROMISC + = 0x100, + +61  + #IFF_PROMISC + +IFF_PROMISC + + + ) + +64 + mIFF_ALLMULTI + = 0x200, + +65  + #IFF_ALLMULTI + +IFF_ALLMULTI + + + ) + +67 + mIFF_MASTER + = 0x400, + +68  + #IFF_MASTER + +IFF_MASTER + + + ) + +69 + mIFF_SLAVE + = 0x800, + +70  + #IFF_SLAVE + +IFF_SLAVE + + + ) + +72 + mIFF_MULTICAST + = 0x1000, + +73  + #IFF_MULTICAST + +IFF_MULTICAST + + + ) + +75 + mIFF_PORTSEL + = 0x2000, + +76  + #IFF_PORTSEL + +IFF_PORTSEL + + + ) + +77 + mIFF_AUTOMEDIA + = 0x4000, + +78  + #IFF_AUTOMEDIA + +IFF_AUTOMEDIA + + + ) + +79 + mIFF_DYNAMIC + = 0x8000 + +80  + #IFF_DYNAMIC + +IFF_DYNAMIC + + + ) + +88  + siddr + + +90  +sockaddr + + mi_addr +; + +93  +sockaddr + + mifu_brdaddr +; + +94  +sockaddr + + mifu_daddr +; + +95 } + mi_ifu +; + +96  +i + * + mi_i +; + +97  +iddr + * + mi_xt +; + +100  + #i_brdaddr + +i_ifu +. +ifu_brdaddr + + + ) + +101  + #i_daddr + +i_ifu +. +ifu_daddr + + + ) + +111  + sifm + + +113  + mmem_t +; + +114  + mmem_d +; + +115  + mba_addr +; + +116  + mq +; + +117  + mdma +; + +118  + mpt +; + +126  + sieq + + +128  + #IFHWADDRLEN + 6 + + ) + +129  + #IFNAMSIZ + +IF_NAMESIZE + + + ) + +132  + min_me +[ +IFNAMSIZ +]; + +133 } + mi_in +; + +137  +sockaddr + + miu_addr +; + +138  +sockaddr + + miu_daddr +; + +139  +sockaddr + + miu_brdaddr +; + +140  +sockaddr + + miu_tmask +; + +141  +sockaddr + + miu_hwaddr +; + +142  + miu_ags +; + +143  + miu_ivue +; + +144  + miu_mtu +; + +145  +ifm + + miu_m +; + +146  + miu_ave +[ +IFNAMSIZ +]; + +147  + miu_wme +[ +IFNAMSIZ +]; + +148 +__ddr_t + + miu_da +; + +149 } + mi_iu +; + +151  + #i_me + +i_in +. +in_me + + + ) + +152  + #i_hwaddr + +i_iu +. +iu_hwaddr + + + ) + +153  + #i_addr + +i_iu +. +iu_addr + + + ) + +154  + #i_daddr + +i_iu +. +iu_daddr + + + ) + +155  + #i_brdaddr + +i_iu +. +iu_brdaddr + + + ) + +156  + #i_tmask + +i_iu +. +iu_tmask + + + ) + +157  + #i_ags + +i_iu +. +iu_ags + + + ) + +158  + #i_mric + +i_iu +. +iu_ivue + + + ) + +159  + #i_mtu + +i_iu +. +iu_mtu + + + ) + +160  + #i_m + +i_iu +. +iu_m + + + ) + +161  + #i_ave + +i_iu +. +iu_ave + + + ) + +162  + #i_da + +i_iu +. +iu_da + + + ) + +163  + #i_ifdex + +i_iu +. +iu_ivue + + + ) + +164  + #i_bdwidth + +i_iu +. +iu_ivue + + + ) + +165  + #i_qn + +i_iu +. +iu_ivue + + + ) + +166  + #i_wme + +i_iu +. +iu_wme + + + ) + +167  + #_IOT_ieq + + `_IOT +( + `_IOTS +(), +IFNAMSIZ +,_IOTS(),16,0,0) + + ) + +168  + #_IOT_ieq_sht + + `_IOT +( + `_IOTS +(), +IFNAMSIZ +,_IOTS(),1,0,0) + + ) + +169  + #_IOT_ieq_t + + `_IOT +( + `_IOTS +(), +IFNAMSIZ +,_IOTS(),1,0,0) + + ) + +176  + sifcf + + +178  + mifc_n +; + +181 +__ddr_t + + mifcu_buf +; + +182  +ieq + * + mifcu_q +; + +183 } + mifc_ifcu +; + +185  + #ifc_buf + +ifc_ifcu +. +ifcu_buf + + + ) + +186  + #ifc_q + +ifc_ifcu +. +ifcu_q + + + ) + +187  + #_IOT_ifcf + + `_IOT +( + `_IOTS +( +ifcf +),1,0,0,0,0 + + ) + +190 +__BEGIN_DECLS + + +193  + $if_modex + (cڡ * +__iame + +__THROW +; + +194 * + $if_dextame + ( +__ifdex +, * +__iame + +__THROW +; + +197  +if_medex + * + $if_medex + ( +__THROW +; + +200  + $if_medex + ( +if_medex + * +__r + +__THROW +; + +202 +__END_DECLS + + + @/usr/include/net/if_arp.h + +22 #ide +_NET_IF_ARP_H + + +24  + #_NET_IF_ARP_H + 1 + + ) + +25  + ~ + +27  + ~ + +28  + ~ + +30 + g__BEGIN_DECLS + + +33  + #MAX_ADDR_LEN + 7 + + ) + +39  + #ARPOP_REQUEST + 1 + + ) + +40  + #ARPOP_REPLY + 2 + + ) + +41  + #ARPOP_RREQUEST + 3 + + ) + +42  + #ARPOP_RREPLY + 4 + + ) + +43  + #ARPOP_InREQUEST + 8 + + ) + +44  + #ARPOP_InREPLY + 9 + + ) + +45  + #ARPOP_NAK + 10 + + ) + +54  + sphdr + + +56  + m_hrd +; + +57  + m_o +; + +58  + m_h +; + +59  + m_n +; + +60  + m_ +; + +64  + m___sha +[ +ETH_ALEN +]; + +65  + m___s +[4]; + +66  + m___tha +[ +ETH_ALEN +]; + +67  + m___t +[4]; + +73  + #ARPHRD_NETROM + 0 + + ) + +74  + #ARPHRD_ETHER + 1 + + ) + +75  + #ARPHRD_EETHER + 2 + + ) + +76  + #ARPHRD_AX25 + 3 + + ) + +77  + #ARPHRD_PRONET + 4 + + ) + +78  + #ARPHRD_CHAOS + 5 + + ) + +79  + #ARPHRD_IEEE802 + 6 + + ) + +80  + #ARPHRD_ARCNET + 7 + + ) + +81  + #ARPHRD_APPLETLK + 8 + + ) + +82  + #ARPHRD_DLCI + 15 + + ) + +83  + #ARPHRD_ATM + 19 + + ) + +84  + #ARPHRD_METRICOM + 23 + + ) + +85  + #ARPHRD_IEEE1394 + 24 + + ) + +86  + #ARPHRD_EUI64 + 27 + + ) + +87  + #ARPHRD_INFINIBAND + 32 + + ) + +90  + #ARPHRD_SLIP + 256 + + ) + +91  + #ARPHRD_CSLIP + 257 + + ) + +92  + #ARPHRD_SLIP6 + 258 + + ) + +93  + #ARPHRD_CSLIP6 + 259 + + ) + +94  + #ARPHRD_RSRVD + 260 + + ) + +95  + #ARPHRD_ADAPT + 264 + + ) + +96  + #ARPHRD_ROSE + 270 + + ) + +97  + #ARPHRD_X25 + 271 + + ) + +98  + #ARPHRD_HWX25 + 272 + + ) + +99  + #ARPHRD_PPP + 512 + + ) + +100  + #ARPHRD_CISCO + 513 + + ) + +101  + #ARPHRD_HDLC + +ARPHRD_CISCO + + + ) + +102  + #ARPHRD_LAPB + 516 + + ) + +103  + #ARPHRD_DDCMP + 517 + + ) + +104  + #ARPHRD_RAWHDLC + 518 + + ) + +106  + #ARPHRD_TUNNEL + 768 + + ) + +107  + #ARPHRD_TUNNEL6 + 769 + + ) + +108  + #ARPHRD_FRAD + 770 + + ) + +109  + #ARPHRD_SKIP + 771 + + ) + +110  + #ARPHRD_LOOPBACK + 772 + + ) + +111  + #ARPHRD_LOCALTLK + 773 + + ) + +112  + #ARPHRD_FDDI + 774 + + ) + +113  + #ARPHRD_BIF + 775 + + ) + +114  + #ARPHRD_SIT + 776 + + ) + +115  + #ARPHRD_IPDDP + 777 + + ) + +116  + #ARPHRD_IPGRE + 778 + + ) + +117  + #ARPHRD_PIMREG + 779 + + ) + +118  + #ARPHRD_HIPPI + 780 + + ) + +119  + #ARPHRD_ASH + 781 + + ) + +120  + #ARPHRD_ECONET + 782 + + ) + +121  + #ARPHRD_IRDA + 783 + + ) + +122  + #ARPHRD_FCPP + 784 + + ) + +123  + #ARPHRD_FCAL + 785 + + ) + +124  + #ARPHRD_FCPL + 786 + + ) + +125  + #ARPHRD_FCFABRIC + 787 + + ) + +126  + #ARPHRD_IEEE802_TR + 800 + + ) + +127  + #ARPHRD_IEEE80211 + 801 + + ) + +128  + #ARPHRD_IEEE80211_PRISM + 802 + + ) + +129  + #ARPHRD_IEEE80211_RADIOTAP + 803 + + ) + +130  + #ARPHRD_IEEE802154 + 804 + + ) + +131  + #ARPHRD_IEEE802154_PHY + 805 + + ) + +133  + #ARPHRD_VOID + 0xFFFF + + ) + +134  + #ARPHRD_NONE + 0xFFFE + + ) + +138  + seq + + +140  +sockaddr + + mp_ +; + +141  +sockaddr + + mp_ha +; + +142  + mp_ags +; + +143  +sockaddr + + mp_tmask +; + +144  + mp_dev +[16]; + +147  + seq_d + + +149  +sockaddr + + mp_ +; + +150  +sockaddr + + mp_ha +; + +151  + mp_ags +; + +152  +sockaddr + + mp_tmask +; + +156  + #ATF_COM + 0x02 + + ) + +157  + #ATF_PERM + 0x04 + + ) + +158  + #ATF_PUBL + 0x08 + + ) + +159  + #ATF_USETRAILERS + 0x10 + + ) + +160  + #ATF_NETMASK + 0x20 + + ) + +162  + #ATF_DONTPUB + 0x40 + + ) + +163  + #ATF_MAGIC + 0x80 + + ) + +167  + #ARPD_UPDATE + 0x01 + + ) + +168  + #ARPD_LOOKUP + 0x02 + + ) + +169  + #ARPD_FLUSH + 0x03 + + ) + +171  + spd_que + + +173  + mq +; + +174 +u_t32_t + + m +; + +175  + mdev +; + +176  + mamp +; + +177  + mupded +; + +178  + mha +[ +MAX_ADDR_LEN +]; + +181 + g__END_DECLS + + + @/usr/include/netinet/in.h + +18 #idef +_NETINET_IN_H + + +19  + #_NETINET_IN_H + 1 + + ) + +21  + ~ + +22  + ~ + +23  + ~ + +24  + ~ + +27 +__BEGIN_DECLS + + +30  +ut32_t + + t_addr_t +; + +31  + s_addr + + +33 +_addr_t + + ms_addr +; + +37  + ~ + +42 + mIPPROTO_IP + = 0, + +43  + #IPPROTO_IP + +IPPROTO_IP + + + ) + +44 + mIPPROTO_ICMP + = 1, + +45  + #IPPROTO_ICMP + +IPPROTO_ICMP + + + ) + +46 + mIPPROTO_IGMP + = 2, + +47  + #IPPROTO_IGMP + +IPPROTO_IGMP + + + ) + +48 + mIPPROTO_IPIP + = 4, + +49  + #IPPROTO_IPIP + +IPPROTO_IPIP + + + ) + +50 + mIPPROTO_TCP + = 6, + +51  + #IPPROTO_TCP + +IPPROTO_TCP + + + ) + +52 + mIPPROTO_EGP + = 8, + +53  + #IPPROTO_EGP + +IPPROTO_EGP + + + ) + +54 + mIPPROTO_PUP + = 12, + +55  + #IPPROTO_PUP + +IPPROTO_PUP + + + ) + +56 + mIPPROTO_UDP + = 17, + +57  + #IPPROTO_UDP + +IPPROTO_UDP + + + ) + +58 + mIPPROTO_IDP + = 22, + +59  + #IPPROTO_IDP + +IPPROTO_IDP + + + ) + +60 + mIPPROTO_TP + = 29, + +61  + #IPPROTO_TP + +IPPROTO_TP + + + ) + +62 + mIPPROTO_DCCP + = 33, + +63  + #IPPROTO_DCCP + +IPPROTO_DCCP + + + ) + +64 + mIPPROTO_IPV6 + = 41, + +65  + #IPPROTO_IPV6 + +IPPROTO_IPV6 + + + ) + +66 + mIPPROTO_RSVP + = 46, + +67  + #IPPROTO_RSVP + +IPPROTO_RSVP + + + ) + +68 + mIPPROTO_GRE + = 47, + +69  + #IPPROTO_GRE + +IPPROTO_GRE + + + ) + +70 + mIPPROTO_ESP + = 50, + +71  + #IPPROTO_ESP + +IPPROTO_ESP + + + ) + +72 + mIPPROTO_AH + = 51, + +73  + #IPPROTO_AH + +IPPROTO_AH + + + ) + +74 + mIPPROTO_MTP + = 92, + +75  + #IPPROTO_MTP + +IPPROTO_MTP + + + ) + +76 + mIPPROTO_BEETPH + = 94, + +77  + #IPPROTO_BEETPH + +IPPROTO_BEETPH + + + ) + +78 + mIPPROTO_ENCAP + = 98, + +79  + #IPPROTO_ENCAP + +IPPROTO_ENCAP + + + ) + +80 + mIPPROTO_PIM + = 103, + +81  + #IPPROTO_PIM + +IPPROTO_PIM + + + ) + +82 + mIPPROTO_COMP + = 108, + +83  + #IPPROTO_COMP + +IPPROTO_COMP + + + ) + +84 + mIPPROTO_SCTP + = 132, + +85  + #IPPROTO_SCTP + +IPPROTO_SCTP + + + ) + +86 + mIPPROTO_UDPLITE + = 136, + +87  + #IPPROTO_UDPLITE + +IPPROTO_UDPLITE + + + ) + +88 + mIPPROTO_MPLS + = 137, + +89  + #IPPROTO_MPLS + +IPPROTO_MPLS + + + ) + +90 + mIPPROTO_RAW + = 255, + +91  + #IPPROTO_RAW + +IPPROTO_RAW + + + ) + +92 + mIPPROTO_MAX + + +98 #ide +__USE_KERNEL_IPV6_DEFS + + +101 + mIPPROTO_HOPOPTS + = 0, + +102  + #IPPROTO_HOPOPTS + +IPPROTO_HOPOPTS + + + ) + +103 + mIPPROTO_ROUTING + = 43, + +104  + #IPPROTO_ROUTING + +IPPROTO_ROUTING + + + ) + +105 + mIPPROTO_FRAGMENT + = 44, + +106  + #IPPROTO_FRAGMENT + +IPPROTO_FRAGMENT + + + ) + +107 + mIPPROTO_ICMPV6 + = 58, + +108  + #IPPROTO_ICMPV6 + +IPPROTO_ICMPV6 + + + ) + +109 + mIPPROTO_NONE + = 59, + +110  + #IPPROTO_NONE + +IPPROTO_NONE + + + ) + +111 + mIPPROTO_DSTOPTS + = 60, + +112  + #IPPROTO_DSTOPTS + +IPPROTO_DSTOPTS + + + ) + +113 + mIPPROTO_MH + = 135 + +114  + #IPPROTO_MH + +IPPROTO_MH + + + ) + +119  +ut16_t + + t_pt_t +; + +124 + mIPPORT_ECHO + = 7, + +125 + mIPPORT_DISCARD + = 9, + +126 + mIPPORT_SYSTAT + = 11, + +127 + mIPPORT_DAYTIME + = 13, + +128 + mIPPORT_NETSTAT + = 15, + +129 + mIPPORT_FTP + = 21, + +130 + mIPPORT_TELNET + = 23, + +131 + mIPPORT_SMTP + = 25, + +132 + mIPPORT_TIMESERVER + = 37, + +133 + mIPPORT_NAMESERVER + = 42, + +134 + mIPPORT_WHOIS + = 43, + +135 + mIPPORT_MTP + = 57, + +137 + mIPPORT_TFTP + = 69, + +138 + mIPPORT_RJE + = 77, + +139 + mIPPORT_FINGER + = 79, + +140 + mIPPORT_TTYLINK + = 87, + +141 + mIPPORT_SUPDUP + = 95, + +144 + mIPPORT_EXECSERVER + = 512, + +145 + mIPPORT_LOGINSERVER + = 513, + +146 + mIPPORT_CMDSERVER + = 514, + +147 + mIPPORT_EFSSERVER + = 520, + +150 + mIPPORT_BIFFUDP + = 512, + +151 + mIPPORT_WHOSERVER + = 513, + +152 + mIPPORT_ROUTESERVER + = 520, + +155 + mIPPORT_RESERVED + = 1024, + +158 + mIPPORT_USERRESERVED + = 5000 + +166  + #IN_CLASSA +( +a +(((( +_addr_t +))& 0x80000000=0) + + ) + +167  + #IN_CLASSA_NET + 0xff000000 + + ) + +168  + #IN_CLASSA_NSHIFT + 24 + + ) + +169  + #IN_CLASSA_HOST + (0xfffffff& ~ +IN_CLASSA_NET +) + + ) + +170  + #IN_CLASSA_MAX + 128 + + ) + +172  + #IN_CLASSB +( +a +(((( +_addr_t +))& 0xc0000000=0x80000000) + + ) + +173  + #IN_CLASSB_NET + 0xffff0000 + + ) + +174  + #IN_CLASSB_NSHIFT + 16 + + ) + +175  + #IN_CLASSB_HOST + (0xfffffff& ~ +IN_CLASSB_NET +) + + ) + +176  + #IN_CLASSB_MAX + 65536 + + ) + +178  + #IN_CLASSC +( +a +(((( +_addr_t +))& 0xe0000000=0xc0000000) + + ) + +179  + #IN_CLASSC_NET + 0xffffff00 + + ) + +180  + #IN_CLASSC_NSHIFT + 8 + + ) + +181  + #IN_CLASSC_HOST + (0xfffffff& ~ +IN_CLASSC_NET +) + + ) + +183  + #IN_CLASSD +( +a +(((( +_addr_t +))& 0xf0000000=0xe0000000) + + ) + +184  + #IN_MULTICAST +( +a + + `IN_CLASSD +) + + ) + +186  + #IN_EXPERIMENTAL +( +a +(((( +_addr_t +))& 0xe0000000=0xe0000000) + + ) + +187  + #IN_BADCLASS +( +a +(((( +_addr_t +))& 0xf0000000=0xf0000000) + + ) + +190  + #INADDR_ANY + (( +_addr_t +0x00000000) + + ) + +192  + #INADDR_BROADCAST + (( +_addr_t +0xffffffff) + + ) + +194  + #INADDR_NONE + (( +_addr_t +0xffffffff) + + ) + +197  + #IN_LOOPBACKNET + 127 + + ) + +199 #ide +INADDR_LOOPBACK + + +200  + #INADDR_LOOPBACK + (( +_addr_t +0x7f000001 + + ) + +204  + #INADDR_UNSPEC_GROUP + (( +_addr_t +0xe0000000 + + ) + +205  + #INADDR_ALLHOSTS_GROUP + (( +_addr_t +0xe0000001 + + ) + +206  + #INADDR_ALLRTRS_GROUP + (( +_addr_t +0xe0000002 + + ) + +207  + #INADDR_MAX_LOCAL_GROUP + (( +_addr_t +0xe00000ff + + ) + +209 #ide +__USE_KERNEL_IPV6_DEFS + + +211  + s6_addr + + +215 +ut8_t + + m__u6_addr8 +[16]; + +216 #ifde +__USE_MISC + + +217 +ut16_t + + m__u6_addr16 +[8]; + +218 +ut32_t + + m__u6_addr32 +[4]; + +220 } + m__6_u +; + +221  + #s6_addr + +__6_u +. +__u6_addr8 + + + ) + +222 #ifde +__USE_MISC + + +223  + #s6_addr16 + +__6_u +. +__u6_addr16 + + + ) + +224  + #s6_addr32 + +__6_u +. +__u6_addr32 + + + ) + +229 cڡ  +6_addr + +6addr_y +; + +230 cڡ  +6_addr + +6addr_loback +; + +231  + #IN6ADDR_ANY_INIT + { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } } + + ) + +232  + #IN6ADDR_LOOPBACK_INIT + { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } } + + ) + +234  + #INET_ADDRSTRLEN + 16 + + ) + +235  + #INET6_ADDRSTRLEN + 46 + + ) + +239  + ssockaddr_ + + +241 +__SOCKADDR_COMMON + ( +s_ +); + +242 +_pt_t + + ms_pt +; + +243  +_addr + + ms_addr +; + +246  + ms_zo +[ ( +sockaddr +) - + +247 +__SOCKADDR_COMMON_SIZE + - + +248  ( +_pt_t +) - + +249  ( +_addr +)]; + +252 #ide +__USE_KERNEL_IPV6_DEFS + + +254  + ssockaddr_6 + + +256 +__SOCKADDR_COMMON + ( +s6_ +); + +257 +_pt_t + + ms6_pt +; + +258 +ut32_t + + ms6_owfo +; + +259  +6_addr + + ms6_addr +; + +260 +ut32_t + + ms6_sce_id +; + +264 #ifde +__USE_MISC + + +266  + s_mq + + +269  +_addr + + mimr_muɟddr +; + +272  +_addr + + mimr_r +; + +275  + s_mq_sour + + +278  +_addr + + mimr_muɟddr +; + +281  +_addr + + mimr_r +; + +284  +_addr + + mimr_souraddr +; + +288 #ide +__USE_KERNEL_IPV6_DEFS + + +290  + sv6_mq + + +293  +6_addr + + mv6mr_muɟddr +; + +296  + mv6mr_r +; + +300 #ifde +__USE_MISC + + +302  + sgroup_q + + +305 +ut32_t + + mgr_r +; + +308  +sockaddr_age + + mgr_group +; + +311  + sgroup_sour_q + + +314 +ut32_t + + mg_r +; + +317  +sockaddr_age + + mg_group +; + +320  +sockaddr_age + + mg_sour +; + +325  + s_msfr + + +328  +_addr + + mimsf_muɟddr +; + +331  +_addr + + mimsf_r +; + +334 +ut32_t + + mimsf_fmode +; + +337 +ut32_t + + mimsf_numc +; + +339  +_addr + + mimsf_i +[1]; + +342  + #IP_MSFILTER_SIZE +( +numc +( ( +_msfr +) \ + +343 -  ( +_addr +) \ + +344 + ( +numc +*  ( +_addr +)) + + ) + +346  + sgroup_fr + + +349 +ut32_t + + mgf_r +; + +352  +sockaddr_age + + mgf_group +; + +355 +ut32_t + + mgf_fmode +; + +358 +ut32_t + + mgf_numc +; + +360  +sockaddr_age + + mgf_i +[1]; + +363  + #GROUP_FILTER_SIZE +( +numc +( ( +group_fr +) \ + +364 -  ( +sockaddr_age +) \ + +365 + (( +numc +) \ + +366 *  ( +sockaddr_age +))) + + ) + +376 +ut32_t + + $ohl + ( +ut32_t + +__Îg + +__THROW + + `__ibu__ + (( +__cڡ__ +)); + +377 +ut16_t + + $ohs + ( +ut16_t + +__tsht +) + +378 +__THROW + + `__ibu__ + (( +__cڡ__ +)); + +379 +ut32_t + + $htl + ( +ut32_t + +__holg +) + +380 +__THROW + + `__ibu__ + (( +__cڡ__ +)); + +381 +ut16_t + + $hts + ( +ut16_t + +__hosht +) + +382 +__THROW + + `__ibu__ + (( +__cڡ__ +)); + +384  + ~ + +387  + ~ + +389 #ifde +__OPTIMIZE__ + + +393 #i +__BYTE_ORDER + = +__BIG_ENDIAN + + +396  + #ohl +( +x +(x) + + ) + +397  + #ohs +( +x +(x) + + ) + +398  + #htl +( +x +(x) + + ) + +399  + #hts +( +x +(x) + + ) + +401 #i +__BYTE_ORDER + = +__LITTLE_ENDIAN + + +402  + #ohl +( +x + + `__bsw_32 + (x) + + ) + +403  + #ohs +( +x + + `__bsw_16 + (x) + + ) + +404  + #htl +( +x + + `__bsw_32 + (x) + + ) + +405  + #hts +( +x + + `__bsw_16 + (x) + + ) + +410 #ifde +__GNUC__ + + +411  + #IN6_IS_ADDR_UNSPECIFIED +( +a +) \ + +412 ( +__exnsi__ + \ + +413 ({ cڡ  +6_addr + * +__a + = (cڡ 6_add*( +a +); \ + +414 +__a +-> +s6_addr32 +[0] == 0 \ + +415 && +__a +-> +s6_addr32 +[1] == 0 \ + +416 && +__a +-> +s6_addr32 +[2] == 0 \ + +417 && +__a +-> +s6_addr32 +[3] =0; + } +})) + + ) + +419  + #IN6_IS_ADDR_LOOPBACK +( +a +) \ + +420 ( +__exnsi__ + \ + +421 ({ cڡ  +6_addr + * +__a + = (cڡ 6_add*( +a +); \ + +422 +__a +-> +s6_addr32 +[0] == 0 \ + +423 && +__a +-> +s6_addr32 +[1] == 0 \ + +424 && +__a +-> +s6_addr32 +[2] == 0 \ + +425 && +__a +-> +s6_addr32 +[3] = + `htl + (1); })) + + ) + +427  + #IN6_IS_ADDR_LINKLOCAL +( +a +) \ + +428 ( +__exnsi__ + \ + +429 ({ cڡ  +6_addr + * +__a + = (cڡ 6_add*( +a +); \ + +430 ( +__a +-> +s6_addr32 +[0] & + `htl + (0xffc00000)=ht(0x800000); })) + + ) + +432  + #IN6_IS_ADDR_SITELOCAL +( +a +) \ + +433 ( +__exnsi__ + \ + +434 ({ cڡ  +6_addr + * +__a + = (cڡ 6_add*( +a +); \ + +435 ( +__a +-> +s6_addr32 +[0] & + `htl + (0xffc00000)=ht(0xc00000); })) + + ) + +437  + #IN6_IS_ADDR_V4MAPPED +( +a +) \ + +438 ( +__exnsi__ + \ + +439 ({ cڡ  +6_addr + * +__a + = (cڡ 6_add*( +a +); \ + +440 +__a +-> +s6_addr32 +[0] == 0 \ + +441 && +__a +-> +s6_addr32 +[1] == 0 \ + +442 && +__a +-> +s6_addr32 +[2] = + `htl + (0xffff); })) + + ) + +444  + #IN6_IS_ADDR_V4COMPAT +( +a +) \ + +445 ( +__exnsi__ + \ + +446 ({ cڡ  +6_addr + * +__a + = (cڡ 6_add*( +a +); \ + +447 +__a +-> +s6_addr32 +[0] == 0 \ + +448 && +__a +-> +s6_addr32 +[1] == 0 \ + +449 && +__a +-> +s6_addr32 +[2] == 0 \ + +450 && + `ohl + ( +__a +-> +s6_addr32 +[3]> 1; })) + + ) + +452  + #IN6_ARE_ADDR_EQUAL +( +a +, +b +) \ + +453 ( +__exnsi__ + \ + +454 ({ cڡ  +6_addr + * +__a + = (cڡ 6_add*( +a +); \ + +455 cڡ  +6_addr + * +__b + = (cڡ 6_add*( +b +); \ + +456 +__a +-> +s6_addr32 +[0] = +__b +->s6_addr32[0] \ + +457 && +__a +-> +s6_addr32 +[1] = +__b +->s6_addr32[1] \ + +458 && +__a +-> +s6_addr32 +[2] = +__b +->s6_addr32[2] \ + +459 && +__a +-> +s6_addr32 +[3] = +__b +->s6_addr32[3]; })) + + ) + +461  + #IN6_IS_ADDR_UNSPECIFIED +( +a +) \ + +462 (((cڡ +ut32_t + *( +a +))[0] == 0 \ + +463 && ((cڡ +ut32_t + *( +a +))[1] == 0 \ + +464 && ((cڡ +ut32_t + *( +a +))[2] == 0 \ + +465 && ((cڡ +ut32_t + *( +a +))[3] =0) + + ) + +467  + #IN6_IS_ADDR_LOOPBACK +( +a +) \ + +468 (((cڡ +ut32_t + *( +a +))[0] == 0 \ + +469 && ((cڡ +ut32_t + *( +a +))[1] == 0 \ + +470 && ((cڡ +ut32_t + *( +a +))[2] == 0 \ + +471 && ((cڡ +ut32_t + *( +a +))[3] = + `htl + (1)) + + ) + +473  + #IN6_IS_ADDR_LINKLOCAL +( +a +) \ + +474 ((((cڡ +ut32_t + *( +a +))[0] & + `htl + (0xffc00000)) \ + +475 = + `htl + (0x800000)) + + ) + +477  + #IN6_IS_ADDR_SITELOCAL +( +a +) \ + +478 ((((cڡ +ut32_t + *( +a +))[0] & + `htl + (0xffc00000)) \ + +479 = + `htl + (0xc00000)) + + ) + +481  + #IN6_IS_ADDR_V4MAPPED +( +a +) \ + +482 ((((cڡ +ut32_t + *( +a +))[0] == 0) \ + +483 && (((cڡ +ut32_t + *( +a +))[1] == 0) \ + +484 && (((cڡ +ut32_t + *( +a +))[2] = + `htl + (0xffff))) + + ) + +486  + #IN6_IS_ADDR_V4COMPAT +( +a +) \ + +487 ((((cڡ +ut32_t + *( +a +))[0] == 0) \ + +488 && (((cڡ +ut32_t + *( +a +))[1] == 0) \ + +489 && (((cڡ +ut32_t + *( +a +))[2] == 0) \ + +490 && ( + `ohl + (((cڡ +ut32_t + *( +a +))[3]> 1)) + + ) + +492  + #IN6_ARE_ADDR_EQUAL +( +a +, +b +) \ + +493 ((((cڡ +ut32_t + *( +a +))[0] =((cڡ ut32_*( +b +))[0]) \ + +494 && (((cڡ +ut32_t + *( +a +))[1] =((cڡ ut32_*( +b +))[1]) \ + +495 && (((cڡ +ut32_t + *( +a +))[2] =((cڡ ut32_*( +b +))[2]) \ + +496 && (((cڡ +ut32_t + *( +a +))[3] =((cڡ ut32_*( +b +))[3])) + + ) + +499  + #IN6_IS_ADDR_MULTICAST +( +a +(((cڡ +ut8_t + *))[0] =0xff) + + ) + +501 #ifde +__USE_MISC + + +503  + $bdsvpt + ( +__sockfd +,  +sockaddr_ + * +__sock_ + +__THROW +; + +506  + $bdsvpt6 + ( +__sockfd +,  +sockaddr_6 + * +__sock_ +) + +507 +__THROW +; + +511  + #IN6_IS_ADDR_MC_NODELOCAL +( +a +) \ + +512 ( + `IN6_IS_ADDR_MULTICAST +( +a +) \ + +513 && ((((cڡ +ut8_t + *( +a +))[1] & 0xf=0x1)) + + ) + +515  + #IN6_IS_ADDR_MC_LINKLOCAL +( +a +) \ + +516 ( + `IN6_IS_ADDR_MULTICAST +( +a +) \ + +517 && ((((cڡ +ut8_t + *( +a +))[1] & 0xf=0x2)) + + ) + +519  + #IN6_IS_ADDR_MC_SITELOCAL +( +a +) \ + +520 ( + `IN6_IS_ADDR_MULTICAST +( +a +) \ + +521 && ((((cڡ +ut8_t + *( +a +))[1] & 0xf=0x5)) + + ) + +523  + #IN6_IS_ADDR_MC_ORGLOCAL +( +a +) \ + +524 ( + `IN6_IS_ADDR_MULTICAST +( +a +) \ + +525 && ((((cڡ +ut8_t + *( +a +))[1] & 0xf=0x8)) + + ) + +527  + #IN6_IS_ADDR_MC_GLOBAL +( +a +) \ + +528 ( + `IN6_IS_ADDR_MULTICAST +( +a +) \ + +529 && ((((cڡ +ut8_t + *( +a +))[1] & 0xf=0xe)) + + ) + +532 #ifde +__USE_GNU + + +533  +cmsghdr +; + +535 #ide +__USE_KERNEL_IPV6_DEFS + + +537  + s6_pktfo + + +539  +6_addr + +i6_addr +; + +540  +i6_ifdex +; + +544  + s6_mtufo + + +546  +sockaddr_6 + +6m_addr +; + +547 +ut32_t + +6m_mtu +; + +552  + $6_ti_a + ( +__nbys +) + +553 +__THROW + +__ibu_dd__ +; + +554  + $6_ti_ + (* +__bp +,  +cmsghdr + ** +__cmsgp +, + +555  +__ty + +__THROW + +__ibu_dd__ +; + +556  + $6_ti_nd + ( +cmsghdr + * +__cmsg +, + +557 cڡ +ut8_t + * +__typ +,  +__mux +, + +558  +__usy + +__THROW + +__ibu_dd__ +; + +559 +ut8_t + * + $6_ti_loc + ( +cmsghdr + * +__cmsg +,  +__d +, + +560  +__mux +,  +__usy +) + +561 +__THROW + +__ibu_dd__ +; + +562  + $6_ti_xt + (cڡ  +cmsghdr + * +__cmsg +, + +563 +ut8_t + ** +__p +) + +564 +__THROW + +__ibu_dd__ +; + +565  + $6_ti_fd + (cڡ  +cmsghdr + * +__cmsg +, + +566 +ut8_t + ** +__p +,  +__ty +) + +567 +__THROW + +__ibu_dd__ +; + +571  + $6_t_ + (* +__extbuf +, +sockn_t + +__ex + +__THROW +; + +572  + $6_t_nd + (* +__extbuf +, +sockn_t + +__ex +,  +__offt +, + +573 +ut8_t + +__ty +, +sockn_t + +__n +, ut8_ +__ign +, + +574 ** +__dabu + +__THROW +; + +575  + $6_t_fish + (* +__extbuf +, +sockn_t + +__ex +,  +__offt +) + +576 +__THROW +; + +577  + $6_t_t_v + (* +__dabuf +,  +__offt +, * +__v +, + +578 +sockn_t + +__vn + +__THROW +; + +579  + $6_t_xt + (* +__extbuf +, +sockn_t + +__ex +,  +__offt +, + +580 +ut8_t + * +__typ +, +sockn_t + * +__ +, + +581 ** +__dabu + +__THROW +; + +582  + $6_t_fd + (* +__extbuf +, +sockn_t + +__ex +,  +__offt +, + +583 +ut8_t + +__ty +, +sockn_t + * +__ +, + +584 ** +__dabu + +__THROW +; + +585  + $6_t_g_v + (* +__dabuf +,  +__offt +, * +__v +, + +586 +sockn_t + +__vn + +__THROW +; + +590 +sockn_t + + $6_h_a + ( +__ty +,  +__gmts + +__THROW +; + +591 * + $6_h_ + (* +__bp +, +sockn_t + +__bp_n +,  +__ty +, + +592  +__gmts + +__THROW +; + +593  + $6_h_add + (* +__bp +, cڡ  +6_addr + * +__addr + +__THROW +; + +594  + $6_h_v + (cڡ * +__ +, * +__out + +__THROW +; + +595  + $6_h_gmts + (cڡ * +__bp + +__THROW +; + +596  +6_addr + * + $6_h_gaddr + (cڡ * +__bp +,  +__dex +) + +597 +__THROW +; + +603  + $gv4sourfr + ( +__s +,  +_addr + +__r_addr +, + +604  +_addr + +__group +, +ut32_t + * +__fmode +, + +605 +ut32_t + * +__numc +,  +_addr + * +__i +) + +606 +__THROW +; + +609  + $tv4sourfr + ( +__s +,  +_addr + +__r_addr +, + +610  +_addr + +__group +, +ut32_t + +__fmode +, + +611 +ut32_t + +__numc +, + +612 cڡ  +_addr + * +__i +) + +613 +__THROW +; + +617  + $gsourfr + ( +__s +, +ut32_t + +__r_addr +, + +618 cڡ  +sockaddr + * +__group +, + +619 +sockn_t + +__grou +, +ut32_t + * +__fmode +, + +620 +ut32_t + * +__numc +, + +621  +sockaddr_age + * +__i + +__THROW +; + +624  + $tsourfr + ( +__s +, +ut32_t + +__r_addr +, + +625 cڡ  +sockaddr + * +__group +, + +626 +sockn_t + +__grou +, +ut32_t + +__fmode +, + +627 +ut32_t + +__numc +, + +628 cڡ  +sockaddr_age + * +__i + +__THROW +; + +631 +__END_DECLS + + + @/usr/include/netinet/tcp.h + +32 #ide +_NETINET_TCP_H + + +33  + #_NETINET_TCP_H + 1 + + ) + +35  + ~ + +40  + #TCP_NODELAY + 1 + + ) + +41  + #TCP_MAXSEG + 2 + + ) + +42  + #TCP_CORK + 3 + + ) + +43  + #TCP_KEEPIDLE + 4 + + ) + +44  + #TCP_KEEPINTVL + 5 + + ) + +45  + #TCP_KEEPCNT + 6 + + ) + +46  + #TCP_SYNCNT + 7 + + ) + +47  + #TCP_LINGER2 + 8 + + ) + +48  + #TCP_DEFER_ACCEPT + 9 + + ) + +49  + #TCP_WINDOW_CLAMP + 10 + + ) + +50  + #TCP_INFO + 11 + + ) + +51  + #TCP_QUICKACK + 12 + + ) + +52  + #TCP_CONGESTION + 13 + + ) + +53  + #TCP_MD5SIG + 14 + + ) + +54  + #TCP_COOKIE_TRANSACTIONS + 15 + + ) + +55  + #TCP_THIN_LINEAR_TIMEOUTS + 16 + + ) + +56  + #TCP_THIN_DUPACK + 17 + + ) + +57  + #TCP_USER_TIMEOUT + 18 + + ) + +58  + #TCP_REPAIR + 19 + + ) + +59  + #TCP_REPAIR_QUEUE + 20 + + ) + +60  + #TCP_QUEUE_SEQ + 21 + + ) + +61  + #TCP_REPAIR_OPTIONS + 22 + + ) + +62  + #TCP_FASTOPEN + 23 + + ) + +63  + #TCP_TIMESTAMP + 24 + + ) + +64  + #TCP_NOTSENT_LOWAT + 25 + + ) + +66  + #TCP_CC_INFO + 26 + + ) + +68  + #TCP_SAVE_SYN + 27 + + ) + +70  + #TCP_SAVED_SYN + 28 + + ) + +73 #ifde +__USE_MISC + + +74  + ~ + +75  + ~ + +77  +u_t32_t + + tt_q +; + +82  + sthdr + + +84 +__exnsi__ + union + +88 +u_t16_t + + mth_t +; + +89 +u_t16_t + + mth_dpt +; + +90 +t_q + + mth_q +; + +91 +t_q + + mth_ack +; + +92 #i +__BYTE_ORDER + = +__LITTLE_ENDIAN + + +93 +u_t8_t + + mth_x2 +:4; + +94 +u_t8_t + + mth_off +:4; + +96 #i +__BYTE_ORDER + = +__BIG_ENDIAN + + +97 +u_t8_t + + mth_off +:4; + +98 +u_t8_t + + mth_x2 +:4; + +100 +u_t8_t + + mth_ags +; + +101  + #TH_FIN + 0x01 + + ) + +102  + #TH_SYN + 0x02 + + ) + +103  + #TH_RST + 0x04 + + ) + +104  + #TH_PUSH + 0x08 + + ) + +105  + #TH_ACK + 0x10 + + ) + +106  + #TH_URG + 0x20 + + ) + +107 +u_t16_t + + mth_w +; + +108 +u_t16_t + + mth_sum +; + +109 +u_t16_t + + mth_u +; + +113 +u_t16_t + + msour +; + +114 +u_t16_t + + mde +; + +115 +u_t32_t + + mq +; + +116 +u_t32_t + + mack_q +; + +117 #i +__BYTE_ORDER + = +__LITTLE_ENDIAN + + +118 +u_t16_t + + ms1 +:4; + +119 +u_t16_t + + mdoff +:4; + +120 +u_t16_t + + mf +:1; + +121 +u_t16_t + + msyn +:1; + +122 +u_t16_t + + mr +:1; + +123 +u_t16_t + + mpsh +:1; + +124 +u_t16_t + + mack +:1; + +125 +u_t16_t + + murg +:1; + +126 +u_t16_t + + ms2 +:2; + +127 #i +__BYTE_ORDER + = +__BIG_ENDIAN + + +128 +u_t16_t + + mdoff +:4; + +129 +u_t16_t + + ms1 +:4; + +130 +u_t16_t + + ms2 +:2; + +131 +u_t16_t + + murg +:1; + +132 +u_t16_t + + mack +:1; + +133 +u_t16_t + + mpsh +:1; + +134 +u_t16_t + + mr +:1; + +135 +u_t16_t + + msyn +:1; + +136 +u_t16_t + + mf +:1; + +140 +u_t16_t + + mwdow +; + +141 +u_t16_t + + mcheck +; + +142 +u_t16_t + + murg_r +; + +149 + mTCP_ESTABLISHED + = 1, + +150 + mTCP_SYN_SENT +, + +151 + mTCP_SYN_RECV +, + +152 + mTCP_FIN_WAIT1 +, + +153 + mTCP_FIN_WAIT2 +, + +154 + mTCP_TIME_WAIT +, + +155 + mTCP_CLOSE +, + +156 + mTCP_CLOSE_WAIT +, + +157 + mTCP_LAST_ACK +, + +158 + mTCP_LISTEN +, + +159 + mTCP_CLOSING + + +162  + #TCPOPT_EOL + 0 + + ) + +163  + #TCPOPT_NOP + 1 + + ) + +164  + #TCPOPT_MAXSEG + 2 + + ) + +165  + #TCPOLEN_MAXSEG + 4 + + ) + +166  + #TCPOPT_WINDOW + 3 + + ) + +167  + #TCPOLEN_WINDOW + 3 + + ) + +168  + #TCPOPT_SACK_PERMITTED + 4 + + ) + +169  + #TCPOLEN_SACK_PERMITTED + 2 + + ) + +170  + #TCPOPT_SACK + 5 + + ) + +171  + #TCPOPT_TIMESTAMP + 8 + + ) + +172  + #TCPOLEN_TIMESTAMP + 10 + + ) + +173  + #TCPOLEN_TSTAMP_APPA + ( +TCPOLEN_TIMESTAMP ++2 + + ) + +175  + #TCPOPT_TSTAMP_HDR + \ + +176 ( +TCPOPT_NOP +<<24|TCPOPT_NOP<<16| +TCPOPT_TIMESTAMP +<<8| +TCPOLEN_TIMESTAMP +) + + ) + +184  + #TCP_MSS + 512 + + ) + +186  + #TCP_MAXWIN + 65535 + + ) + +188  + #TCP_MAX_WINSHIFT + 14 + + ) + +190  + #SOL_TCP + 6 + + ) + +193  + #TCPI_OPT_TIMESTAMPS + 1 + + ) + +194  + #TCPI_OPT_SACK + 2 + + ) + +195  + #TCPI_OPT_WSCALE + 4 + + ) + +196  + #TCPI_OPT_ECN + 8 + + ) + +197  + #TCPI_OPT_ECN_SEEN + 16 + + ) + +198  + #TCPI_OPT_SYN_DATA + 32 + + ) + +201 + et__e + + +203 + mTCP_CA_On + = 0, + +204 + mTCP_CA_Disd + = 1, + +205 + mTCP_CA_CWR + = 2, + +206 + mTCP_CA_Recovy + = 3, + +207 + mTCP_CA_Loss + = 4 + +210  + st_fo + + +212 +u_t8_t + + mti_e +; + +213 +u_t8_t + + mti__e +; + +214 +u_t8_t + + mti_sms +; + +215 +u_t8_t + + mti_obes +; + +216 +u_t8_t + + mti_backoff +; + +217 +u_t8_t + + mti_tis +; + +218 +u_t8_t + + mti_d_ws + : 4, + mti_rcv_ws + : 4; + +220 +u_t32_t + + mti_o +; + +221 +u_t32_t + + mti_o +; + +222 +u_t32_t + + mti_d_mss +; + +223 +u_t32_t + + mti_rcv_mss +; + +225 +u_t32_t + + mti_ucked +; + +226 +u_t32_t + + mti_cked +; + +227 +u_t32_t + + mti_lo +; + +228 +u_t32_t + + mti_s +; + +229 +u_t32_t + + mti_cks +; + +232 +u_t32_t + + mti_ϡ_da_ +; + +233 +u_t32_t + + mti_ϡ_ack_ +; + +234 +u_t32_t + + mti_ϡ_da_cv +; + +235 +u_t32_t + + mti_ϡ_ack_cv +; + +238 +u_t32_t + + mti_pmtu +; + +239 +u_t32_t + + mti_rcv_shsh +; + +240 +u_t32_t + + mti_t +; + +241 +u_t32_t + + mti_tv +; + +242 +u_t32_t + + mti_d_shsh +; + +243 +u_t32_t + + mti_d_cwnd +; + +244 +u_t32_t + + mti_advmss +; + +245 +u_t32_t + + mti_dg +; + +247 +u_t32_t + + mti_rcv_t +; + +248 +u_t32_t + + mti_rcv_a +; + +250 +u_t32_t + + mti_tٮ_s +; + +255  + #TCP_MD5SIG_MAXKEYLEN + 80 + + ) + +257  + st_md5sig + + +259  +sockaddr_age + + mtm_addr +; + +260 +u_t16_t + + m__tm_d1 +; + +261 +u_t16_t + + mtm_keyn +; + +262 +u_t32_t + + m__tm_d2 +; + +263 +u_t8_t + + mtm_key +[ +TCP_MD5SIG_MAXKEYLEN +]; + +267  + st__t + + +269 +u_t32_t + + mt_code +; + +270 +u_t32_t + + mt_v +; + +276 + mTCP_NO_QUEUE +, + +277 + mTCP_RECV_QUEUE +, + +278 + mTCP_SEND_QUEUE +, + +279 + mTCP_QUEUES_NR +, + +283  + #TCP_COOKIE_MIN + 8 + + ) + +284  + #TCP_COOKIE_MAX + 16 + + ) + +285  + #TCP_COOKIE_PAIR_SIZE + (2* +TCP_COOKIE_MAX +) + + ) + +288  + #TCP_COOKIE_IN_ALWAYS + (1 << 0 + + ) + +289  + #TCP_COOKIE_OUT_NEVER + (1 << 1 + + ) + +293  + #TCP_S_DATA_IN + (1 << 2 + + ) + +294  + #TCP_S_DATA_OUT + (1 << 3 + + ) + +296  + #TCP_MSS_DEFAULT + 536U + + ) + +297  + #TCP_MSS_DESIRED + 1220U + + ) + +299  + st_cook_is + + +301 +u_t16_t + + mt_ags +; + +302 +u_t8_t + + m__t_d1 +; + +303 +u_t8_t + + mt_cook_desed +; + +304 +u_t16_t + + mt_s_da_desed +; + +305 +u_t16_t + + mt_ud +; + +306 +u_t8_t + + mt_vue +[ +TCP_MSS_DEFAULT +]; + + @/usr/include/netinet/udp.h + +47 #ide +__NETINET_UDP_H + + +48  + #__NETINET_UDP_H + 1 + + ) + +50  + ~ + +51  + ~ + +56  + sudphdr + + +58 +__exnsi__ + union + +62 +u_t16_t + + muh_t +; + +63 +u_t16_t + + muh_dpt +; + +64 +u_t16_t + + muh_un +; + +65 +u_t16_t + + muh_sum +; + +69 +u_t16_t + + msour +; + +70 +u_t16_t + + mde +; + +71 +u_t16_t + + mn +; + +72 +u_t16_t + + mcheck +; + +78  + #UDP_CORK + 1 + + ) + +79  + #UDP_ENCAP + 100 + + ) + +81  + #UDP_NO_CHECK6_TX + 101 + + ) + +83  + #UDP_NO_CHECK6_RX + 102 + + ) + +87  + #UDP_ENCAP_ESPINUDP_NON_IKE + 1 + + ) + +88  + #UDP_ENCAP_ESPINUDP + 2 + + ) + +89  + #UDP_ENCAP_L2TPINUDP + 3 + + ) + +91  + #SOL_UDP + 17 + + ) + + @/usr/include/sys/shm.h + +18 #ide +_SYS_SHM_H + + +19  + #_SYS_SHM_H + 1 + + ) + +21  + ~ + +23  + #__ed_size_t + + + ) + +24  + ~ + +27  + ~ + +30  + ~ + +33  + #__ed_time_t + + + ) + +34  + ~ + +36 #ifde +__USE_XOPEN + + +37 #ide +__pid_t_defed + + +38  +__pid_t + + tpid_t +; + +39  + #__pid_t_defed + + + ) + +44 +__BEGIN_DECLS + + +50  + $shml + ( +__shmid +,  +__cmd +,  +shmid_ds + * +__buf + +__THROW +; + +53  + $shmg + ( +key_t + +__key +, +size_t + +__size +,  +__shmg + +__THROW +; + +56 * + $shm + ( +__shmid +, cڡ * +__shmaddr +,  +__shmg +) + +57 +__THROW +; + +60  + $shmdt + (cڡ * +__shmaddr + +__THROW +; + +62 +__END_DECLS + + + @/usr/include/sys/socket.h + +19 #idef +_SYS_SOCKET_H + + +20  + #_SYS_SOCKET_H + 1 + + ) + +22  + ~ + +24 + g__BEGIN_DECLS + + +26  + ~ + +27  + #__ed_size_t + + + ) + +28  + ~ + +29 #ifde +__USE_GNU + + +31  + ~ + +38  + ~ + +40 #ifde +__USE_MISC + + +43  + sosockaddr + + +45  + m_my +; + +46  + m_da +[14]; + +54 + mSHUT_RD + = 0, + +55  + #SHUT_RD + +SHUT_RD + + + ) + +56 + mSHUT_WR +, + +57  + #SHUT_WR + +SHUT_WR + + + ) + +58 + mSHUT_RDWR + + +59  + #SHUT_RDWR + +SHUT_RDWR + + + ) + +68 #i +defed + +__lulus + || ! +__GNUC_PREREQ + (2, 7|| !defed +__USE_GNU + + +69  + #__SOCKADDR_ARG +  +sockaddr + * +__ri + + + ) + +70  + #__CONST_SOCKADDR_ARG + cڡ  +sockaddr + * + + ) + +74  + #__SOCKADDR_ALLTYPES + \ + +75 + `__SOCKADDR_ONETYPE + ( +sockaddr +) \ + +76 + `__SOCKADDR_ONETYPE + ( +sockaddr_ +) \ + +77 + `__SOCKADDR_ONETYPE + ( +sockaddr_ax25 +) \ + +78 + `__SOCKADDR_ONETYPE + ( +sockaddr_dl +) \ + +79 + `__SOCKADDR_ONETYPE + ( +sockaddr_e +) \ + +80 + `__SOCKADDR_ONETYPE + ( +sockaddr_ +) \ + +81 + `__SOCKADDR_ONETYPE + ( +sockaddr_6 +) \ + +82 + `__SOCKADDR_ONETYPE + ( +sockaddr_p +) \ + +83 + `__SOCKADDR_ONETYPE + ( +sockaddr_x +) \ + +84 + `__SOCKADDR_ONETYPE + ( +sockaddr_iso +) \ + +85 + `__SOCKADDR_ONETYPE + ( +sockaddr_ns +) \ + +86 + `__SOCKADDR_ONETYPE + ( +sockaddr_un +) \ + +87 + `__SOCKADDR_ONETYPE + ( +sockaddr_x25 +) + + ) + +89  + #__SOCKADDR_ONETYPE +( +ty +ty * +__ri + +__ +##ty##__; + + ) + +90 uni { + m__SOCKADDR_ALLTYPES + + +91 } + t__SOCKADDR_ARG + + t__ibu__ + (( + t__t_uni__ +)); + +92 #unde +__SOCKADDR_ONETYPE + + +93  + #__SOCKADDR_ONETYPE +( +ty +cڡ ty * +__ri + +__ +##ty##__; + + ) + +94 uni { + m__SOCKADDR_ALLTYPES + + +95 } + t__CONST_SOCKADDR_ARG + + t__ibu__ + (( + t__t_uni__ +)); + +96 #unde +__SOCKADDR_ONETYPE + + +99 #ifde +__USE_GNU + + +101  + smmsghdr + + +103  +msghdr + + mmsg_hdr +; + +104  + mmsg_n +; + +113  + $sock + ( +__doma +,  +__ty +,  +__oc + +__THROW +; + +119  + $sock + ( +__doma +,  +__ty +,  +__oc +, + +120  +__fds +[2] +__THROW +; + +123  + $bd + ( +__fd +, +__CONST_SOCKADDR_ARG + +__addr +, +sockn_t + +__n +) + +124 +__THROW +; + +127  + $gsockme + ( +__fd +, +__SOCKADDR_ARG + +__addr +, + +128 +sockn_t + * +__ri + +__n + +__THROW +; + +137  + `c + ( +__fd +, +__CONST_SOCKADDR_ARG + +__addr +, +sockn_t + +__n +); + +141  + $gme + ( +__fd +, +__SOCKADDR_ARG + +__addr +, + +142 +sockn_t + * +__ri + +__n + +__THROW +; + +149 +ssize_t + + `nd + ( +__fd +, cڡ * +__buf +, +size_t + +__n +,  +__ags +); + +156 +ssize_t + + `cv + ( +__fd +, * +__buf +, +size_t + +__n +,  +__ags +); + +163 +ssize_t + + `ndto + ( +__fd +, cڡ * +__buf +, +size_t + +__n +, + +164  +__ags +, +__CONST_SOCKADDR_ARG + +__addr +, + +165 +sockn_t + +__addr_n +); + +174 +ssize_t + + `cvom + ( +__fd +, * +__ri + +__buf +, +size_t + +__n +, + +175  +__ags +, +__SOCKADDR_ARG + +__addr +, + +176 +sockn_t + * +__ri + +__addr_n +); + +184 +ssize_t + + `ndmsg + ( +__fd +, cڡ  +msghdr + * +__mesge +, + +185  +__ags +); + +187 #ifde +__USE_GNU + + +193  + `ndmmsg + ( +__fd +,  +mmsghdr + * +__vmesges +, + +194  +__vn +,  +__ags +); + +202 +ssize_t + + `cvmsg + ( +__fd +,  +msghdr + * +__mesge +,  +__ags +); + +204 #ifde +__USE_GNU + + +210  + `cvmmsg + ( +__fd +,  +mmsghdr + * +__vmesges +, + +211  +__vn +,  +__ags +, + +212  +timeec + * +__tmo +); + +219  + $gsockt + ( +__fd +,  +__v +,  +__݊ame +, + +220 * +__ri + +__tv +, + +221 +sockn_t + * +__ri + +__ݎ + +__THROW +; + +226  + $tsockt + ( +__fd +,  +__v +,  +__݊ame +, + +227 cڡ * +__tv +, +sockn_t + +__ݎ + +__THROW +; + +233  + $li + ( +__fd +,  +__n + +__THROW +; + +243  + `ac + ( +__fd +, +__SOCKADDR_ARG + +__addr +, + +244 +sockn_t + * +__ri + +__addr_n +); + +246 #ifde +__USE_GNU + + +251  + `ac4 + ( +__fd +, +__SOCKADDR_ARG + +__addr +, + +252 +sockn_t + * +__ri + +__addr_n +,  +__ags +); + +261  + $shutdown + ( +__fd +,  +__how + +__THROW +; + +264 #ifde +__USE_XOPEN2K + + +266  + $sockmk + ( +__fd + +__THROW +; + +270 #ifde +__USE_MISC + + +274  + $isfdty + ( +__fd +,  +__fdty + +__THROW +; + +279 #i +__USE_FORTIFY_LEVEL + > 0 && +defed + +__ftify_funi + + +280  + ~ + +283 +__END_DECLS + + + @/usr/include/sys/time.h + +18 #ide +_SYS_TIME_H + + +19  + #_SYS_TIME_H + 1 + + ) + +21  + ~ + +23  + ~ + +24  + #__ed_time_t + + + ) + +25  + ~ + +26  + #__ed_timev + + + ) + +27  + ~ + +29  + ~ + +31 #ide +__sucds_t_defed + + +32  +__sucds_t + + tsucds_t +; + +33  + #__sucds_t_defed + + + ) + +37 + g__BEGIN_DECLS + + +39 #ifde +__USE_GNU + + +41  + #TIMEVAL_TO_TIMESPEC +( +tv +, +ts +) { \ + +42 ( +ts +)-> +tv_c + = ( +tv +)->tv_sec; \ + +43 ( +ts +)-> +tv_nc + = ( +tv +)-> +tv_uc + * 1000; \ + +44 } + + ) + +45  + #TIMESPEC_TO_TIMEVAL +( +tv +, +ts +) { \ + +46 ( +tv +)-> +tv_c + = ( +ts +)->tv_sec; \ + +47 ( +tv +)-> +tv_uc + = ( +ts +)-> +tv_nc + / 1000; \ + +48 } + + ) + +52 #ifde +__USE_MISC + + +55  + stimeze + + +57  + mtz_muswe +; + +58  + mtz_dtime +; + +61  +timeze + * + t__ri + + t__timeze_r_t +; + +63 * + t__ri + + t__timeze_r_t +; + +71  + $gtimeofday + ( +timev + * +__ri + +__tv +, + +72 +__timeze_r_t + +__tz + +__THROW + + `__nnu + ((1)); + +74 #ifde +__USE_MISC + + +77  + $imeofday + (cڡ  +timev + * +__tv +, + +78 cڡ  +timeze + * +__tz +) + +79 +__THROW +; + +85  + $adjtime + (cڡ  +timev + * +__d +, + +86  +timev + * +__dd + +__THROW +; + +91 + e__im_which + + +94 +ITIMER_REAL + = 0, + +95  + #ITIMER_REAL + +ITIMER_REAL + + + ) + +97 +ITIMER_VIRTUAL + = 1, + +98  + #ITIMER_VIRTUAL + +ITIMER_VIRTUAL + + + ) + +101 +ITIMER_PROF + = 2 + +102  + #ITIMER_PROF + +ITIMER_PROF + + + ) + +107  + simv + + +110  +timev + +_rv +; + +112  +timev + +_vue +; + +115 #i +defed + +__USE_GNU + && !defed +__lulus + + +118  +__im_which + + t__im_which_t +; + +120  + t__im_which_t +; + +125  + $gim + ( +__im_which_t + +__which +, + +126  +imv + * +__vue + +__THROW +; + +131  + $tim + ( +__im_which_t + +__which +, + +132 cڡ  +imv + * +__ri + +__w +, + +133  +imv + * +__ri + +__d + +__THROW +; + +138  + $utimes + (cڡ * +__fe +, cڡ  +timev + +__tvp +[2]) + +139 +__THROW + + `__nnu + ((1)); + +141 #ifde +__USE_MISC + + +143  + $lutimes + (cڡ * +__fe +, cڡ  +timev + +__tvp +[2]) + +144 +__THROW + + `__nnu + ((1)); + +147  + $futimes + ( +__fd +, cڡ  +timev + +__tvp +[2] +__THROW +; + +150 #ifde +__USE_GNU + + +154  + $futimet + ( +__fd +, cڡ * +__fe +, + +155 cڡ  +timev + +__tvp +[2] +__THROW +; + +159 #ifde +__USE_MISC + + +162  + #timist +( +tvp +(vp)-> +tv_c + || (tvp)-> +tv_uc +) + + ) + +163  + #timr +( +tvp +(vp)-> +tv_c + = (tvp)-> +tv_uc + = 0) + + ) + +164  + #timcmp +( +a +, +b +, +CMP +) \ + +165 ((( +a +)-> +tv_c + =( +b +)->tv_sec) ? \ + +166 (( +a +)-> +tv_uc + + `CMP + ( +b +)->tv_usec) : \ + +167 (( +a +)-> +tv_c + + `CMP + ( +b +)->tv_c)) + + ) + +168  + #timadd +( +a +, +b +, +su +) \ + +170 ( +su +)-> +tv_c + = ( +a +)->tv_+ ( +b +)->tv_sec; \ + +171 ( +su +)-> +tv_uc + = ( +a +)->tv_u+ ( +b +)->tv_usec; \ + +172 i(( +su +)-> +tv_uc + >= 1000000) \ + +174 ++( +su +)-> +tv_c +; \ + +175 ( +su +)-> +tv_uc + -= 1000000; \ + +177 + } +} 0) + + ) + +178  + #timsub +( +a +, +b +, +su +) \ + +180 ( +su +)-> +tv_c + = ( +a +)->tv_- ( +b +)->tv_sec; \ + +181 ( +su +)-> +tv_uc + = ( +a +)->tv_u- ( +b +)->tv_usec; \ + +182 i(( +su +)-> +tv_uc + < 0) { \ + +183 --( +su +)-> +tv_c +; \ + +184 ( +su +)-> +tv_uc + += 1000000; \ + +186 } 0) + + ) + +189 + g__END_DECLS + + + @/usr/include/time.h + +22 #idef +_TIME_H + + +24 #i(! +defed + +__ed_time_t + && !defed +__ed_ock_t + && \ + +25 ! +defed + + g__ed_timeec +) + +26  + #_TIME_H + 1 + + ) + +27  + ~ + +29 + g__BEGIN_DECLS + + +33 #ifdef +_TIME_H + + +35  + #__ed_size_t + + + ) + +36  + #__ed_NULL + + + ) + +37  + ~ + +41  + ~ + +44 #i! +defed + +__STRICT_ANSI__ + && !defed +__USE_XOPEN2K + + +45 #ide +CLK_TCK + + +46  + #CLK_TCK + +CLOCKS_PER_SEC + + + ) + +52 #i! +defed + +__ock_t_defed + && (defed +_TIME_H + || defed +__ed_ock_t +) + +53  + #__ock_t_defed + 1 + + ) + +55  + ~ + +57 +__BEGIN_NAMESPACE_STD + + +59  +__ock_t + + tock_t +; + +60 + g__END_NAMESPACE_STD + + +61 #i +defed + +__USE_XOPEN + || defed +__USE_POSIX + + +62 + $__USING_NAMESPACE_STD +( +ock_t +) + +66 #unde +__ed_ock_t + + +68 #i! +defed + +__time_t_defed + && (defed +_TIME_H + || defed +__ed_time_t +) + +69  + #__time_t_defed + 1 + + ) + +71  + ~ + +73 +__BEGIN_NAMESPACE_STD + + +75  +__time_t + + ttime_t +; + +76 +__END_NAMESPACE_STD + + +77 #ifde +__USE_POSIX + + +78 + $__USING_NAMESPACE_STD +( +time_t +) + +82 #unde +__ed_time_t + + +84 #i! +defed + +__ockid_t_defed + && \ + +85 (( +defed + +_TIME_H + && defed +__USE_POSIX199309 +|| defed +__ed_ockid_t +) + +86  + #__ockid_t_defed + 1 + + ) + +88  + ~ + +91  +__ockid_t + + tockid_t +; + +94 #unde +__ockid_time_t + + +96 #i! +defed + +__tim_t_defed + && \ + +97 (( +defed + +_TIME_H + && defed +__USE_POSIX199309 +|| defed +__ed_tim_t +) + +98  + #__tim_t_defed + 1 + + ) + +100  + ~ + +103  +__tim_t + + ttim_t +; + +106 #unde +__ed_tim_t + + +109 #i(! +defed + +__timeec_defed + \ + +110 && (( +defed + +_TIME_H + \ + +111 && ( +defed + +__USE_POSIX199309 + \ + +112 || +defed + +__USE_ISOC11 +)) \ + +113 || +defed + +__ed_timeec +)) + +114  + #__timeec_defed + 1 + + ) + +116  + ~ + +120  + stimeec + + +122 +__time_t + +tv_c +; + +123 +__sys_g_t + +tv_nc +; + +127 #unde +__ed_timeec + + +130 #ifdef +_TIME_H + + +131 +__BEGIN_NAMESPACE_STD + + +133  + stm + + +135  +tm_c +; + +136  +tm_m +; + +137  +tm_hour +; + +138  +tm_mday +; + +139  +tm_m +; + +140  +tm_yr +; + +141  +tm_wday +; + +142  +tm_yday +; + +143  +tm_isd +; + +145 #ifdef +__USE_MISC + + +146  +tm_gmtoff +; + +147 cڡ * +tm_ze +; + +149  +__tm_gmtoff +; + +150 cڡ * +__tm_ze +; + +153 +__END_NAMESPACE_STD + + +154 #i +defed + +__USE_XOPEN + || defed +__USE_POSIX + + +155 + $__USING_NAMESPACE_STD +( +tm +) + +159 #ifde +__USE_POSIX199309 + + +161  + simec + + +163  +timeec + +_rv +; + +164  +timeec + +_vue +; + +168  +sigevt +; + +172 #ifde +__USE_XOPEN2K + + +173 #ide +__pid_t_defed + + +174  +__pid_t + + tpid_t +; + +175  + #__pid_t_defed + + + ) + +180 #ifde +__USE_ISOC11 + + +182  + #TIME_UTC + 1 + + ) + +186 +__BEGIN_NAMESPACE_STD + + +189 +ock_t + + $ock + ( +__THROW +; + +192 +time_t + + $time + ( +time_t + * +__tim + +__THROW +; + +195  + $difime + ( +time_t + +__time1 +,ime_ +__time0 +) + +196 +__THROW + + `__ibu__ + (( +__cڡ__ +)); + +199 +time_t + + $mktime + ( +tm + * +__ + +__THROW +; + +205 +size_t + + $rime + (* +__ri + +__s +, +size_t + +__maxsize +, + +206 cڡ * +__ri + +__fm +, + +207 cڡ  +tm + * +__ri + +__ + +__THROW +; + +208 +__END_NAMESPACE_STD + + +210 #ifde +__USE_XOPEN + + +213 * + $time + (cڡ * +__ri + +__s +, + +214 cڡ * +__ri + +__fmt +,  +tm + * +__ +) + +215 +__THROW +; + +218 #ifde +__USE_XOPEN2K8 + + +221  + ~ + +223 +size_t + + $rime_l + (* +__ri + +__s +, +size_t + +__maxsize +, + +224 cڡ * +__ri + +__fm +, + +225 cڡ  +tm + * +__ri + +__ +, + +226 +__lo_t + +__loc + +__THROW +; + +229 #ifde +__USE_GNU + + +230 * + $time_l + (cڡ * +__ri + +__s +, + +231 cڡ * +__ri + +__fmt +,  +tm + * +__ +, + +232 +__lo_t + +__loc + +__THROW +; + +236 +__BEGIN_NAMESPACE_STD + + +239  +tm + * + $gmtime + (cڡ +time_t + * +__tim + +__THROW +; + +243  +tm + * + $loime + (cڡ +time_t + * +__tim + +__THROW +; + +244 +__END_NAMESPACE_STD + + +246 #ifde +__USE_POSIX + + +249  +tm + * + $gmtime_r + (cڡ +time_t + * +__ri + +__tim +, + +250  +tm + * +__ri + +__ + +__THROW +; + +254  +tm + * + $loime_r + (cڡ +time_t + * +__ri + +__tim +, + +255  +tm + * +__ri + +__ + +__THROW +; + +258 +__BEGIN_NAMESPACE_STD + + +261 * + $asime + (cڡ  +tm + * +__ + +__THROW +; + +264 * + $ime + (cڡ +time_t + * +__tim + +__THROW +; + +265 +__END_NAMESPACE_STD + + +267 #ifde +__USE_POSIX + + +272 * + $asime_r + (cڡ  +tm + * +__ri + +__ +, + +273 * +__ri + +__buf + +__THROW +; + +276 * + $ime_r + (cڡ +time_t + * +__ri + +__tim +, + +277 * +__ri + +__buf + +__THROW +; + +282 * +__tzme +[2]; + +283  +__daylight +; + +284  +__timeze +; + +287 #ifdef +__USE_POSIX + + +289 * +tzme +[2]; + +293  + $tzt + ( +__THROW +; + +296 #i +defed + +__USE_MISC + || defed +__USE_XOPEN + + +297  +daylight +; + +298  +timeze +; + +301 #ifde +__USE_MISC + + +304  + $ime + (cڡ +time_t + * +__wh + +__THROW +; + +310  + #__ip +( +yr +) \ + +311 (( +yr +% 4 =0 && ((yr% 100 !0 || (yr% 400 =0)) + + ) + +314 #ifde +__USE_MISC + + +319 +time_t + + $timegm + ( +tm + * +__ + +__THROW +; + +322 +time_t + + $timol + ( +tm + * +__ + +__THROW +; + +325  + $dysize + ( +__yr + +__THROW + + `__ibu__ + (( +__cڡ__ +)); + +329 #ifde +__USE_POSIX199309 + + +334  + `nop + (cڡ  +timeec + * +__queed_time +, + +335  +timeec + * +__mag +); + +339  + $ock_gs + ( +ockid_t + +__ock_id +,  +timeec + * +__s + +__THROW +; + +342  + $ock_gtime + ( +ockid_t + +__ock_id +,  +timeec + * +__ + +__THROW +; + +345  + $ock_ime + ( +ockid_t + +__ock_id +, cڡ  +timeec + * +__ +) + +346 +__THROW +; + +348 #ifde +__USE_XOPEN2K + + +353  + `ock_nop + ( +ockid_t + +__ock_id +,  +__ags +, + +354 cڡ  +timeec + * +__q +, + +355  +timeec + * +__m +); + +358  + $ock_guockid + ( +pid_t + +__pid +, +ockid_t + * +__ock_id + +__THROW +; + +363  + $tim_ + ( +ockid_t + +__ock_id +, + +364  +sigevt + * +__ri + +__evp +, + +365 +tim_t + * +__ri + +__timid + +__THROW +; + +368  + $tim_de + ( +tim_t + +__timid + +__THROW +; + +371  + $tim_ime + ( +tim_t + +__timid +,  +__ags +, + +372 cڡ  +imec + * +__ri + +__vue +, + +373  +imec + * +__ri + +__ovue + +__THROW +; + +376  + $tim_gtime + ( +tim_t + +__timid +,  +imec + * +__vue +) + +377 +__THROW +; + +380  + $tim_govrun + ( +tim_t + +__timid + +__THROW +; + +384 #ifde +__USE_ISOC11 + + +386  + $timeec_g + ( +timeec + * +__ts +,  +__ba +) + +387 +__THROW + + `__nnu + ((1)); + +391 #ifde +__USE_XOPEN_EXTENDED + + +403  +gde_r +; + +412  +tm + * + `gde + (cڡ * +__rg +); + +415 #ifde +__USE_GNU + + +426  + `gde_r + (cڡ * +__ri + +__rg +, + +427  +tm + * +__ri + +__sbu +); + +430 +__END_DECLS + + + @/usr/include/asm/sockios.h + +1  + ~ + + @/usr/include/asm/types.h + +1 #ide +_ASM_X86_TYPES_H + + +2  + #_ASM_X86_TYPES_H + + + ) + +4  + ~ + + @/usr/include/asm/unistd_32.h + +1 #ide +_ASM_X86_UNISTD_32_H + + +2  + #_ASM_X86_UNISTD_32_H + 1 + + ) + +4  + #__NR_t_sys + 0 + + ) + +5  + #__NR_ex + 1 + + ) + +6  + #__NR_fk + 2 + + ) + +7  + #__NR_ad + 3 + + ) + +8  + #__NR_wre + 4 + + ) + +9  + #__NR_ݒ + 5 + + ) + +10  + #__NR_o + 6 + + ) + +11  + #__NR_wapid + 7 + + ) + +12  + #__NR_t + 8 + + ) + +13  + #__NR_lk + 9 + + ) + +14  + #__NR_uƚk + 10 + + ) + +15  + #__NR_execve + 11 + + ) + +16  + #__NR_chd + 12 + + ) + +17  + #__NR_time + 13 + + ) + +18  + #__NR_mknod + 14 + + ) + +19  + #__NR_chmod + 15 + + ) + +20  + #__NR_lchown + 16 + + ) + +21  + #__NR_bak + 17 + + ) + +22  + #__NR_d + 18 + + ) + +23  + #__NR_lek + 19 + + ) + +24  + #__NR_gpid + 20 + + ) + +25  + #__NR_mou + 21 + + ) + +26  + #__NR_umou + 22 + + ) + +27  + #__NR_tuid + 23 + + ) + +28  + #__NR_guid + 24 + + ) + +29  + #__NR_ime + 25 + + ) + +30  + #__NR_ + 26 + + ) + +31  + #__NR_m + 27 + + ) + +32  + #__NR_df + 28 + + ) + +33  + #__NR_u + 29 + + ) + +34  + #__NR_utime + 30 + + ) + +35  + #__NR_ty + 31 + + ) + +36  + #__NR_gy + 32 + + ) + +37  + #__NR_acss + 33 + + ) + +38  + #__NR_ni + 34 + + ) + +39  + #__NR_ime + 35 + + ) + +40  + #__NR_sync + 36 + + ) + +41  + #__NR_kl + 37 + + ) + +42  + #__NR_me + 38 + + ) + +43  + #__NR_mkd + 39 + + ) + +44  + #__NR_rmd + 40 + + ) + +45  + #__NR_dup + 41 + + ) + +46  + #__NR_pe + 42 + + ) + +47  + #__NR_times + 43 + + ) + +48  + #__NR_of + 44 + + ) + +49  + #__NR_brk + 45 + + ) + +50  + #__NR_tgid + 46 + + ) + +51  + #__NR_ggid + 47 + + ) + +52  + #__NR_sigl + 48 + + ) + +53  + #__NR_geuid + 49 + + ) + +54  + #__NR_gegid + 50 + + ) + +55  + #__NR_ac + 51 + + ) + +56  + #__NR_umou2 + 52 + + ) + +57  + #__NR_lock + 53 + + ) + +58  + #__NR_iol + 54 + + ) + +59  + #__NR_f + 55 + + ) + +60  + #__NR_mpx + 56 + + ) + +61  + #__NR_gid + 57 + + ) + +62  + #__NR_ulim + 58 + + ) + +63  + #__NR_ddume + 59 + + ) + +64  + #__NR_umask + 60 + + ) + +65  + #__NR_chro + 61 + + ) + +66  + #__NR_u + 62 + + ) + +67  + #__NR_dup2 + 63 + + ) + +68  + #__NR_gid + 64 + + ) + +69  + #__NR_gpg + 65 + + ) + +70  + #__NR_tsid + 66 + + ) + +71  + #__NR_sigai + 67 + + ) + +72  + #__NR_sgmask + 68 + + ) + +73  + #__NR_stmask + 69 + + ) + +74  + #__NR_euid + 70 + + ) + +75  + #__NR_egid + 71 + + ) + +76  + #__NR_sigsud + 72 + + ) + +77  + #__NR_signdg + 73 + + ) + +78  + #__NR_thome + 74 + + ) + +79  + #__NR_lim + 75 + + ) + +80  + #__NR_gim + 76 + + ) + +81  + #__NR_gruge + 77 + + ) + +82  + #__NR_gtimeofday + 78 + + ) + +83  + #__NR_imeofday + 79 + + ) + +84  + #__NR_ggroups + 80 + + ) + +85  + #__NR_tgroups + 81 + + ) + +86  + #__NR_ + 82 + + ) + +87  + #__NR_symlk + 83 + + ) + +88  + #__NR_dl + 84 + + ) + +89  + #__NR_adlk + 85 + + ) + +90  + #__NR_ulib + 86 + + ) + +91  + #__NR_sw + 87 + + ) + +92  + #__NR_bo + 88 + + ) + +93  + #__NR_add + 89 + + ) + +94  + #__NR_mm + 90 + + ) + +95  + #__NR_munm + 91 + + ) + +96  + #__NR_un + 92 + + ) + +97  + #__NR_run + 93 + + ) + +98  + #__NR_fchmod + 94 + + ) + +99  + #__NR_fchown + 95 + + ) + +100  + #__NR_giܙy + 96 + + ) + +101  + #__NR_riܙy + 97 + + ) + +102  + #__NR_of + 98 + + ) + +103  + #__NR_fs + 99 + + ) + +104  + #__NR_ffs + 100 + + ) + +105  + #__NR_iݔm + 101 + + ) + +106  + #__NR_sock + 102 + + ) + +107  + #__NR_syog + 103 + + ) + +108  + #__NR_tim + 104 + + ) + +109  + #__NR_gim + 105 + + ) + +110  + #__NR_ + 106 + + ) + +111  + #__NR_l + 107 + + ) + +112  + #__NR_f + 108 + + ) + +113  + #__NR_dume + 109 + + ) + +114  + #__NR_il + 110 + + ) + +115  + #__NR_vhgup + 111 + + ) + +116  + #__NR_id + 112 + + ) + +117  + #__NR_vm86d + 113 + + ) + +118  + #__NR_wa4 + 114 + + ) + +119  + #__NR_swoff + 115 + + ) + +120  + #__NR_sysfo + 116 + + ) + +121  + #__NR_c + 117 + + ) + +122  + #__NR_fsync + 118 + + ) + +123  + #__NR_sigtu + 119 + + ) + +124  + #__NR_e + 120 + + ) + +125  + #__NR_tdomame + 121 + + ) + +126  + #__NR_ume + 122 + + ) + +127  + #__NR_modify_ldt + 123 + + ) + +128  + #__NR_adjtimex + 124 + + ) + +129  + #__NR_me + 125 + + ) + +130  + #__NR_sigocmask + 126 + + ) + +131  + #__NR__modu + 127 + + ) + +132  + #__NR__modu + 128 + + ) + +133  + #__NR_de_modu + 129 + + ) + +134  + #__NR_g_kl_syms + 130 + + ) + +135  + #__NR_qual + 131 + + ) + +136  + #__NR_gpgid + 132 + + ) + +137  + #__NR_fchd + 133 + + ) + +138  + #__NR_bdush + 134 + + ) + +139  + #__NR_sysfs + 135 + + ) + +140  + #__NR_rsڮy + 136 + + ) + +141  + #__NR_afs_sys + 137 + + ) + +142  + #__NR_tfsuid + 138 + + ) + +143  + #__NR_tfsgid + 139 + + ) + +144  + #__NR__Σek + 140 + + ) + +145  + #__NR_gdts + 141 + + ) + +146  + #__NR__w + 142 + + ) + +147  + #__NR_ock + 143 + + ) + +148  + #__NR_msync + 144 + + ) + +149  + #__NR_adv + 145 + + ) + +150  + #__NR_wrev + 146 + + ) + +151  + #__NR_gsid + 147 + + ) + +152  + #__NR_fdasync + 148 + + ) + +153  + #__NR__sysl + 149 + + ) + +154  + #__NR_mlock + 150 + + ) + +155  + #__NR_muock + 151 + + ) + +156  + #__NR_mlockl + 152 + + ) + +157  + #__NR_muockl + 153 + + ) + +158  + #__NR_sched_am + 154 + + ) + +159  + #__NR_sched_gm + 155 + + ) + +160  + #__NR_sched_tschedur + 156 + + ) + +161  + #__NR_sched_gschedur + 157 + + ) + +162  + #__NR_sched_yld + 158 + + ) + +163  + #__NR_sched_g_iܙy_max + 159 + + ) + +164  + #__NR_sched_g_iܙy_m + 160 + + ) + +165  + #__NR_sched__g_rv + 161 + + ) + +166  + #__NR_nop + 162 + + ) + +167  + #__NR_mm + 163 + + ) + +168  + #__NR_esuid + 164 + + ) + +169  + #__NR_gsuid + 165 + + ) + +170  + #__NR_vm86 + 166 + + ) + +171  + #__NR_quy_modu + 167 + + ) + +172  + #__NR_pl + 168 + + ) + +173  + #__NR_nfsrvl + 169 + + ) + +174  + #__NR_esgid + 170 + + ) + +175  + #__NR_gsgid + 171 + + ) + +176  + #__NR_l + 172 + + ) + +177  + #__NR__sigtu + 173 + + ) + +178  + #__NR__sigai + 174 + + ) + +179  + #__NR__sigocmask + 175 + + ) + +180  + #__NR__signdg + 176 + + ) + +181  + #__NR__sigtimedwa + 177 + + ) + +182  + #__NR__sigqueuefo + 178 + + ) + +183  + #__NR__sigsud + 179 + + ) + +184  + #__NR_d64 + 180 + + ) + +185  + #__NR_pwre64 + 181 + + ) + +186  + #__NR_chown + 182 + + ) + +187  + #__NR_gcwd + 183 + + ) + +188  + #__NR_pg + 184 + + ) + +189  + #__NR_pt + 185 + + ) + +190  + #__NR_sigtack + 186 + + ) + +191  + #__NR_ndfe + 187 + + ) + +192  + #__NR_gpmsg + 188 + + ) + +193  + #__NR_pumsg + 189 + + ) + +194  + #__NR_vfk + 190 + + ) + +195  + #__NR_ugim + 191 + + ) + +196  + #__NR_mm2 + 192 + + ) + +197  + #__NR_un64 + 193 + + ) + +198  + #__NR_run64 + 194 + + ) + +199  + #__NR_64 + 195 + + ) + +200  + #__NR_l64 + 196 + + ) + +201  + #__NR_f64 + 197 + + ) + +202  + #__NR_lchown32 + 198 + + ) + +203  + #__NR_guid32 + 199 + + ) + +204  + #__NR_ggid32 + 200 + + ) + +205  + #__NR_geuid32 + 201 + + ) + +206  + #__NR_gegid32 + 202 + + ) + +207  + #__NR_euid32 + 203 + + ) + +208  + #__NR_egid32 + 204 + + ) + +209  + #__NR_ggroups32 + 205 + + ) + +210  + #__NR_tgroups32 + 206 + + ) + +211  + #__NR_fchown32 + 207 + + ) + +212  + #__NR_esuid32 + 208 + + ) + +213  + #__NR_gsuid32 + 209 + + ) + +214  + #__NR_esgid32 + 210 + + ) + +215  + #__NR_gsgid32 + 211 + + ) + +216  + #__NR_chown32 + 212 + + ) + +217  + #__NR_tuid32 + 213 + + ) + +218  + #__NR_tgid32 + 214 + + ) + +219  + #__NR_tfsuid32 + 215 + + ) + +220  + #__NR_tfsgid32 + 216 + + ) + +221  + #__NR_piv_ro + 217 + + ) + +222  + #__NR_mce + 218 + + ) + +223  + #__NR_madvi + 219 + + ) + +224  + #__NR_gdts64 + 220 + + ) + +225  + #__NR_f64 + 221 + + ) + +226  + #__NR_gtid + 224 + + ) + +227  + #__NR_adahd + 225 + + ) + +228  + #__NR_tx + 226 + + ) + +229  + #__NR_ltx + 227 + + ) + +230  + #__NR_ftx + 228 + + ) + +231  + #__NR_gx + 229 + + ) + +232  + #__NR_lgx + 230 + + ) + +233  + #__NR_fgx + 231 + + ) + +234  + #__NR_lix + 232 + + ) + +235  + #__NR_ix + 233 + + ) + +236  + #__NR_ix + 234 + + ) + +237  + #__NR_movex + 235 + + ) + +238  + #__NR_emovex + 236 + + ) + +239  + #__NR_emovex + 237 + + ) + +240  + #__NR_tkl + 238 + + ) + +241  + #__NR_ndfe64 + 239 + + ) + +242  + #__NR_fux + 240 + + ) + +243  + #__NR_sched_ffy + 241 + + ) + +244  + #__NR_sched_gaffy + 242 + + ) + +245  + #__NR_t_thad_ + 243 + + ) + +246  + #__NR_g_thad_ + 244 + + ) + +247  + #__NR_io_tup + 245 + + ) + +248  + #__NR_io_deroy + 246 + + ) + +249  + #__NR_io_gevts + 247 + + ) + +250  + #__NR_io_subm + 248 + + ) + +251  + #__NR_io_nl + 249 + + ) + +252  + #__NR_dvi64 + 250 + + ) + +253  + #__NR_ex_group + 252 + + ) + +254  + #__NR_lookup_dcook + 253 + + ) + +255  + #__NR_l_ + 254 + + ) + +256  + #__NR_l_l + 255 + + ) + +257  + #__NR_l_wa + 256 + + ) + +258  + #__NR_m_fe_ges + 257 + + ) + +259  + #__NR_t_tid_addss + 258 + + ) + +260  + #__NR_tim_ + 259 + + ) + +261  + #__NR_tim_ime + 260 + + ) + +262  + #__NR_tim_gtime + 261 + + ) + +263  + #__NR_tim_govrun + 262 + + ) + +264  + #__NR_tim_de + 263 + + ) + +265  + #__NR_ock_ime + 264 + + ) + +266  + #__NR_ock_gtime + 265 + + ) + +267  + #__NR_ock_gs + 266 + + ) + +268  + #__NR_ock_nop + 267 + + ) + +269  + #__NR_fs64 + 268 + + ) + +270  + #__NR_ffs64 + 269 + + ) + +271  + #__NR_tgkl + 270 + + ) + +272  + #__NR_utimes + 271 + + ) + +273  + #__NR_dvi64_64 + 272 + + ) + +274  + #__NR_vrv + 273 + + ) + +275  + #__NR_mbd + 274 + + ) + +276  + #__NR_g_mempicy + 275 + + ) + +277  + #__NR_t_mempicy + 276 + + ) + +278  + #__NR_mq_ݒ + 277 + + ) + +279  + #__NR_mq_uƚk + 278 + + ) + +280  + #__NR_mq_timednd + 279 + + ) + +281  + #__NR_mq_timedive + 280 + + ) + +282  + #__NR_mq_nify + 281 + + ) + +283  + #__NR_mq_gr + 282 + + ) + +284  + #__NR_kexec_ld + 283 + + ) + +285  + #__NR_waid + 284 + + ) + +286  + #__NR_add_key + 286 + + ) + +287  + #__NR_que_key + 287 + + ) + +288  + #__NR_keyl + 288 + + ) + +289  + #__NR_irio_t + 289 + + ) + +290  + #__NR_irio_g + 290 + + ) + +291  + #__NR_ify_ + 291 + + ) + +292  + #__NR_ify_add_wch + 292 + + ) + +293  + #__NR_ify_rm_wch + 293 + + ) + +294  + #__NR_mig_ges + 294 + + ) + +295  + #__NR_ݒ + 295 + + ) + +296  + #__NR_mkd + 296 + + ) + +297  + #__NR_mknod + 297 + + ) + +298  + #__NR_fchowt + 298 + + ) + +299  + #__NR_futimet + 299 + + ) + +300  + #__NR_f64 + 300 + + ) + +301  + #__NR_uƚk + 301 + + ) + +302  + #__NR_mt + 302 + + ) + +303  + #__NR_lk + 303 + + ) + +304  + #__NR_symlk + 304 + + ) + +305  + #__NR_adlk + 305 + + ) + +306  + #__NR_fchmod + 306 + + ) + +307  + #__NR_cst + 307 + + ) + +308  + #__NR_p6 + 308 + + ) + +309  + #__NR_l + 309 + + ) + +310  + #__NR_unshe + 310 + + ) + +311  + #__NR_t_robu_li + 311 + + ) + +312  + #__NR_g_robu_li + 312 + + ) + +313  + #__NR_li + 313 + + ) + +314  + #__NR_sync_fe_nge + 314 + + ) + +315  + #__NR_e + 315 + + ) + +316  + #__NR_vmli + 316 + + ) + +317  + #__NR_move_ges + 317 + + ) + +318  + #__NR_gu + 318 + + ) + +319  + #__NR_l_pwa + 319 + + ) + +320  + #__NR_utimt + 320 + + ) + +321  + #__NR_siglfd + 321 + + ) + +322  + #__NR_timfd_ + 322 + + ) + +323  + #__NR_evtfd + 323 + + ) + +324  + #__NR_o + 324 + + ) + +325  + #__NR_timfd_ime + 325 + + ) + +326  + #__NR_timfd_gtime + 326 + + ) + +327  + #__NR_siglfd4 + 327 + + ) + +328  + #__NR_evtfd2 + 328 + + ) + +329  + #__NR_l_1 + 329 + + ) + +330  + #__NR_dup3 + 330 + + ) + +331  + #__NR_pe2 + 331 + + ) + +332  + #__NR_ify_1 + 332 + + ) + +333  + #__NR_dv + 333 + + ) + +334  + #__NR_pwrev + 334 + + ) + +335  + #__NR__tgsigqueuefo + 335 + + ) + +336  + #__NR_rf_evt_ݒ + 336 + + ) + +337  + #__NR_cvmmsg + 337 + + ) + +338  + #__NR_nify_ + 338 + + ) + +339  + #__NR_nify_mk + 339 + + ) + +340  + #__NR_lim64 + 340 + + ) + +341  + #__NR_me_to_hd_ + 341 + + ) + +342  + #__NR_ݒ_by_hd_ + 342 + + ) + +343  + #__NR_ock_adjtime + 343 + + ) + +344  + #__NR_syncfs + 344 + + ) + +345  + #__NR_ndmmsg + 345 + + ) + +346  + #__NR_s + 346 + + ) + +347  + #__NR_oss_vm_adv + 347 + + ) + +348  + #__NR_oss_vm_wrev + 348 + + ) + +349  + #__NR_kcmp + 349 + + ) + +350  + #__NR_f_modu + 350 + + ) + +351  + #__NR_sched_r + 351 + + ) + +352  + #__NR_sched_g + 352 + + ) + +353  + #__NR_mt2 + 353 + + ) + +354  + #__NR_ccomp + 354 + + ) + +355  + #__NR_gndom + 355 + + ) + +356  + #__NR_memfd_ + 356 + + ) + +357  + #__NR_bpf + 357 + + ) + +358  + #__NR_execvt + 358 + + ) + +359  + #__NR_sock + 359 + + ) + +360  + #__NR_sock + 360 + + ) + +361  + #__NR_bd + 361 + + ) + +362  + #__NR_c + 362 + + ) + +363  + #__NR_li + 363 + + ) + +364  + #__NR_ac4 + 364 + + ) + +365  + #__NR_gsockt + 365 + + ) + +366  + #__NR_tsockt + 366 + + ) + +367  + #__NR_gsockme + 367 + + ) + +368  + #__NR_gme + 368 + + ) + +369  + #__NR_ndto + 369 + + ) + +370  + #__NR_ndmsg + 370 + + ) + +371  + #__NR_cvom + 371 + + ) + +372  + #__NR_cvmsg + 372 + + ) + +373  + #__NR_shutdown + 373 + + ) + +374  + #__NR_urufd + 374 + + ) + +375  + #__NR_membrr + 375 + + ) + +376  + #__NR_mlock2 + 376 + + ) + +377  + #__NR_cy_fe_nge + 377 + + ) + +378  + #__NR_dv2 + 378 + + ) + +379  + #__NR_pwrev2 + 379 + + ) + +380  + #__NR_pkey_me + 380 + + ) + +381  + #__NR_pkey_loc + 381 + + ) + +382  + #__NR_pkey_ + 382 + + ) + + @/usr/include/asm/unistd_64.h + +1 #ide +_ASM_X86_UNISTD_64_H + + +2  + #_ASM_X86_UNISTD_64_H + 1 + + ) + +4  + #__NR_ad + 0 + + ) + +5  + #__NR_wre + 1 + + ) + +6  + #__NR_ݒ + 2 + + ) + +7  + #__NR_o + 3 + + ) + +8  + #__NR_ + 4 + + ) + +9  + #__NR_f + 5 + + ) + +10  + #__NR_l + 6 + + ) + +11  + #__NR_pl + 7 + + ) + +12  + #__NR_lek + 8 + + ) + +13  + #__NR_mm + 9 + + ) + +14  + #__NR_me + 10 + + ) + +15  + #__NR_munm + 11 + + ) + +16  + #__NR_brk + 12 + + ) + +17  + #__NR__sigai + 13 + + ) + +18  + #__NR__sigocmask + 14 + + ) + +19  + #__NR__sigtu + 15 + + ) + +20  + #__NR_iol + 16 + + ) + +21  + #__NR_d64 + 17 + + ) + +22  + #__NR_pwre64 + 18 + + ) + +23  + #__NR_adv + 19 + + ) + +24  + #__NR_wrev + 20 + + ) + +25  + #__NR_acss + 21 + + ) + +26  + #__NR_pe + 22 + + ) + +27  + #__NR_ + 23 + + ) + +28  + #__NR_sched_yld + 24 + + ) + +29  + #__NR_mm + 25 + + ) + +30  + #__NR_msync + 26 + + ) + +31  + #__NR_mce + 27 + + ) + +32  + #__NR_madvi + 28 + + ) + +33  + #__NR_shmg + 29 + + ) + +34  + #__NR_shm + 30 + + ) + +35  + #__NR_shml + 31 + + ) + +36  + #__NR_dup + 32 + + ) + +37  + #__NR_dup2 + 33 + + ) + +38  + #__NR_u + 34 + + ) + +39  + #__NR_nop + 35 + + ) + +40  + #__NR_gim + 36 + + ) + +41  + #__NR_m + 37 + + ) + +42  + #__NR_tim + 38 + + ) + +43  + #__NR_gpid + 39 + + ) + +44  + #__NR_ndfe + 40 + + ) + +45  + #__NR_sock + 41 + + ) + +46  + #__NR_c + 42 + + ) + +47  + #__NR_ac + 43 + + ) + +48  + #__NR_ndto + 44 + + ) + +49  + #__NR_cvom + 45 + + ) + +50  + #__NR_ndmsg + 46 + + ) + +51  + #__NR_cvmsg + 47 + + ) + +52  + #__NR_shutdown + 48 + + ) + +53  + #__NR_bd + 49 + + ) + +54  + #__NR_li + 50 + + ) + +55  + #__NR_gsockme + 51 + + ) + +56  + #__NR_gme + 52 + + ) + +57  + #__NR_sock + 53 + + ) + +58  + #__NR_tsockt + 54 + + ) + +59  + #__NR_gsockt + 55 + + ) + +60  + #__NR_e + 56 + + ) + +61  + #__NR_fk + 57 + + ) + +62  + #__NR_vfk + 58 + + ) + +63  + #__NR_execve + 59 + + ) + +64  + #__NR_ex + 60 + + ) + +65  + #__NR_wa4 + 61 + + ) + +66  + #__NR_kl + 62 + + ) + +67  + #__NR_ume + 63 + + ) + +68  + #__NR_mg + 64 + + ) + +69  + #__NR_m + 65 + + ) + +70  + #__NR_ml + 66 + + ) + +71  + #__NR_shmdt + 67 + + ) + +72  + #__NR_msgg + 68 + + ) + +73  + #__NR_msgd + 69 + + ) + +74  + #__NR_msgrcv + 70 + + ) + +75  + #__NR_msgl + 71 + + ) + +76  + #__NR_f + 72 + + ) + +77  + #__NR_ock + 73 + + ) + +78  + #__NR_fsync + 74 + + ) + +79  + #__NR_fdasync + 75 + + ) + +80  + #__NR_un + 76 + + ) + +81  + #__NR_run + 77 + + ) + +82  + #__NR_gdts + 78 + + ) + +83  + #__NR_gcwd + 79 + + ) + +84  + #__NR_chd + 80 + + ) + +85  + #__NR_fchd + 81 + + ) + +86  + #__NR_me + 82 + + ) + +87  + #__NR_mkd + 83 + + ) + +88  + #__NR_rmd + 84 + + ) + +89  + #__NR_t + 85 + + ) + +90  + #__NR_lk + 86 + + ) + +91  + #__NR_uƚk + 87 + + ) + +92  + #__NR_symlk + 88 + + ) + +93  + #__NR_adlk + 89 + + ) + +94  + #__NR_chmod + 90 + + ) + +95  + #__NR_fchmod + 91 + + ) + +96  + #__NR_chown + 92 + + ) + +97  + #__NR_fchown + 93 + + ) + +98  + #__NR_lchown + 94 + + ) + +99  + #__NR_umask + 95 + + ) + +100  + #__NR_gtimeofday + 96 + + ) + +101  + #__NR_gim + 97 + + ) + +102  + #__NR_gruge + 98 + + ) + +103  + #__NR_sysfo + 99 + + ) + +104  + #__NR_times + 100 + + ) + +105  + #__NR_ + 101 + + ) + +106  + #__NR_guid + 102 + + ) + +107  + #__NR_syog + 103 + + ) + +108  + #__NR_ggid + 104 + + ) + +109  + #__NR_tuid + 105 + + ) + +110  + #__NR_tgid + 106 + + ) + +111  + #__NR_geuid + 107 + + ) + +112  + #__NR_gegid + 108 + + ) + +113  + #__NR_gid + 109 + + ) + +114  + #__NR_gid + 110 + + ) + +115  + #__NR_gpg + 111 + + ) + +116  + #__NR_tsid + 112 + + ) + +117  + #__NR_euid + 113 + + ) + +118  + #__NR_egid + 114 + + ) + +119  + #__NR_ggroups + 115 + + ) + +120  + #__NR_tgroups + 116 + + ) + +121  + #__NR_esuid + 117 + + ) + +122  + #__NR_gsuid + 118 + + ) + +123  + #__NR_esgid + 119 + + ) + +124  + #__NR_gsgid + 120 + + ) + +125  + #__NR_gpgid + 121 + + ) + +126  + #__NR_tfsuid + 122 + + ) + +127  + #__NR_tfsgid + 123 + + ) + +128  + #__NR_gsid + 124 + + ) + +129  + #__NR_pg + 125 + + ) + +130  + #__NR_pt + 126 + + ) + +131  + #__NR__signdg + 127 + + ) + +132  + #__NR__sigtimedwa + 128 + + ) + +133  + #__NR__sigqueuefo + 129 + + ) + +134  + #__NR__sigsud + 130 + + ) + +135  + #__NR_sigtack + 131 + + ) + +136  + #__NR_utime + 132 + + ) + +137  + #__NR_mknod + 133 + + ) + +138  + #__NR_ulib + 134 + + ) + +139  + #__NR_rsڮy + 135 + + ) + +140  + #__NR_u + 136 + + ) + +141  + #__NR_fs + 137 + + ) + +142  + #__NR_ffs + 138 + + ) + +143  + #__NR_sysfs + 139 + + ) + +144  + #__NR_giܙy + 140 + + ) + +145  + #__NR_riܙy + 141 + + ) + +146  + #__NR_sched_am + 142 + + ) + +147  + #__NR_sched_gm + 143 + + ) + +148  + #__NR_sched_tschedur + 144 + + ) + +149  + #__NR_sched_gschedur + 145 + + ) + +150  + #__NR_sched_g_iܙy_max + 146 + + ) + +151  + #__NR_sched_g_iܙy_m + 147 + + ) + +152  + #__NR_sched__g_rv + 148 + + ) + +153  + #__NR_mlock + 149 + + ) + +154  + #__NR_muock + 150 + + ) + +155  + #__NR_mlockl + 151 + + ) + +156  + #__NR_muockl + 152 + + ) + +157  + #__NR_vhgup + 153 + + ) + +158  + #__NR_modify_ldt + 154 + + ) + +159  + #__NR_piv_ro + 155 + + ) + +160  + #__NR__sysl + 156 + + ) + +161  + #__NR_l + 157 + + ) + +162  + #__NR_ch_l + 158 + + ) + +163  + #__NR_adjtimex + 159 + + ) + +164  + #__NR_lim + 160 + + ) + +165  + #__NR_chro + 161 + + ) + +166  + #__NR_sync + 162 + + ) + +167  + #__NR_ac + 163 + + ) + +168  + #__NR_imeofday + 164 + + ) + +169  + #__NR_mou + 165 + + ) + +170  + #__NR_umou2 + 166 + + ) + +171  + #__NR_sw + 167 + + ) + +172  + #__NR_swoff + 168 + + ) + +173  + #__NR_bo + 169 + + ) + +174  + #__NR_thome + 170 + + ) + +175  + #__NR_tdomame + 171 + + ) + +176  + #__NR_il + 172 + + ) + +177  + #__NR_iݔm + 173 + + ) + +178  + #__NR__modu + 174 + + ) + +179  + #__NR__modu + 175 + + ) + +180  + #__NR_de_modu + 176 + + ) + +181  + #__NR_g_kl_syms + 177 + + ) + +182  + #__NR_quy_modu + 178 + + ) + +183  + #__NR_qual + 179 + + ) + +184  + #__NR_nfsrvl + 180 + + ) + +185  + #__NR_gpmsg + 181 + + ) + +186  + #__NR_pumsg + 182 + + ) + +187  + #__NR_afs_sys + 183 + + ) + +188  + #__NR_tux + 184 + + ) + +189  + #__NR_cury + 185 + + ) + +190  + #__NR_gtid + 186 + + ) + +191  + #__NR_adahd + 187 + + ) + +192  + #__NR_tx + 188 + + ) + +193  + #__NR_ltx + 189 + + ) + +194  + #__NR_ftx + 190 + + ) + +195  + #__NR_gx + 191 + + ) + +196  + #__NR_lgx + 192 + + ) + +197  + #__NR_fgx + 193 + + ) + +198  + #__NR_lix + 194 + + ) + +199  + #__NR_ix + 195 + + ) + +200  + #__NR_ix + 196 + + ) + +201  + #__NR_movex + 197 + + ) + +202  + #__NR_emovex + 198 + + ) + +203  + #__NR_emovex + 199 + + ) + +204  + #__NR_tkl + 200 + + ) + +205  + #__NR_time + 201 + + ) + +206  + #__NR_fux + 202 + + ) + +207  + #__NR_sched_ffy + 203 + + ) + +208  + #__NR_sched_gaffy + 204 + + ) + +209  + #__NR_t_thad_ + 205 + + ) + +210  + #__NR_io_tup + 206 + + ) + +211  + #__NR_io_deroy + 207 + + ) + +212  + #__NR_io_gevts + 208 + + ) + +213  + #__NR_io_subm + 209 + + ) + +214  + #__NR_io_nl + 210 + + ) + +215  + #__NR_g_thad_ + 211 + + ) + +216  + #__NR_lookup_dcook + 212 + + ) + +217  + #__NR_l_ + 213 + + ) + +218  + #__NR_l_l_d + 214 + + ) + +219  + #__NR_l_wa_d + 215 + + ) + +220  + #__NR_m_fe_ges + 216 + + ) + +221  + #__NR_gdts64 + 217 + + ) + +222  + #__NR_t_tid_addss + 218 + + ) + +223  + #__NR_t_sys + 219 + + ) + +224  + #__NR_mtimed + 220 + + ) + +225  + #__NR_dvi64 + 221 + + ) + +226  + #__NR_tim_ + 222 + + ) + +227  + #__NR_tim_ime + 223 + + ) + +228  + #__NR_tim_gtime + 224 + + ) + +229  + #__NR_tim_govrun + 225 + + ) + +230  + #__NR_tim_de + 226 + + ) + +231  + #__NR_ock_ime + 227 + + ) + +232  + #__NR_ock_gtime + 228 + + ) + +233  + #__NR_ock_gs + 229 + + ) + +234  + #__NR_ock_nop + 230 + + ) + +235  + #__NR_ex_group + 231 + + ) + +236  + #__NR_l_wa + 232 + + ) + +237  + #__NR_l_l + 233 + + ) + +238  + #__NR_tgkl + 234 + + ) + +239  + #__NR_utimes + 235 + + ) + +240  + #__NR_vrv + 236 + + ) + +241  + #__NR_mbd + 237 + + ) + +242  + #__NR_t_mempicy + 238 + + ) + +243  + #__NR_g_mempicy + 239 + + ) + +244  + #__NR_mq_ݒ + 240 + + ) + +245  + #__NR_mq_uƚk + 241 + + ) + +246  + #__NR_mq_timednd + 242 + + ) + +247  + #__NR_mq_timedive + 243 + + ) + +248  + #__NR_mq_nify + 244 + + ) + +249  + #__NR_mq_gr + 245 + + ) + +250  + #__NR_kexec_ld + 246 + + ) + +251  + #__NR_waid + 247 + + ) + +252  + #__NR_add_key + 248 + + ) + +253  + #__NR_que_key + 249 + + ) + +254  + #__NR_keyl + 250 + + ) + +255  + #__NR_irio_t + 251 + + ) + +256  + #__NR_irio_g + 252 + + ) + +257  + #__NR_ify_ + 253 + + ) + +258  + #__NR_ify_add_wch + 254 + + ) + +259  + #__NR_ify_rm_wch + 255 + + ) + +260  + #__NR_mig_ges + 256 + + ) + +261  + #__NR_ݒ + 257 + + ) + +262  + #__NR_mkd + 258 + + ) + +263  + #__NR_mknod + 259 + + ) + +264  + #__NR_fchowt + 260 + + ) + +265  + #__NR_futimet + 261 + + ) + +266  + #__NR_wf + 262 + + ) + +267  + #__NR_uƚk + 263 + + ) + +268  + #__NR_mt + 264 + + ) + +269  + #__NR_lk + 265 + + ) + +270  + #__NR_symlk + 266 + + ) + +271  + #__NR_adlk + 267 + + ) + +272  + #__NR_fchmod + 268 + + ) + +273  + #__NR_cst + 269 + + ) + +274  + #__NR_p6 + 270 + + ) + +275  + #__NR_l + 271 + + ) + +276  + #__NR_unshe + 272 + + ) + +277  + #__NR_t_robu_li + 273 + + ) + +278  + #__NR_g_robu_li + 274 + + ) + +279  + #__NR_li + 275 + + ) + +280  + #__NR_e + 276 + + ) + +281  + #__NR_sync_fe_nge + 277 + + ) + +282  + #__NR_vmli + 278 + + ) + +283  + #__NR_move_ges + 279 + + ) + +284  + #__NR_utimt + 280 + + ) + +285  + #__NR_l_pwa + 281 + + ) + +286  + #__NR_siglfd + 282 + + ) + +287  + #__NR_timfd_ + 283 + + ) + +288  + #__NR_evtfd + 284 + + ) + +289  + #__NR_o + 285 + + ) + +290  + #__NR_timfd_ime + 286 + + ) + +291  + #__NR_timfd_gtime + 287 + + ) + +292  + #__NR_ac4 + 288 + + ) + +293  + #__NR_siglfd4 + 289 + + ) + +294  + #__NR_evtfd2 + 290 + + ) + +295  + #__NR_l_1 + 291 + + ) + +296  + #__NR_dup3 + 292 + + ) + +297  + #__NR_pe2 + 293 + + ) + +298  + #__NR_ify_1 + 294 + + ) + +299  + #__NR_dv + 295 + + ) + +300  + #__NR_pwrev + 296 + + ) + +301  + #__NR__tgsigqueuefo + 297 + + ) + +302  + #__NR_rf_evt_ݒ + 298 + + ) + +303  + #__NR_cvmmsg + 299 + + ) + +304  + #__NR_nify_ + 300 + + ) + +305  + #__NR_nify_mk + 301 + + ) + +306  + #__NR_lim64 + 302 + + ) + +307  + #__NR_me_to_hd_ + 303 + + ) + +308  + #__NR_ݒ_by_hd_ + 304 + + ) + +309  + #__NR_ock_adjtime + 305 + + ) + +310  + #__NR_syncfs + 306 + + ) + +311  + #__NR_ndmmsg + 307 + + ) + +312  + #__NR_s + 308 + + ) + +313  + #__NR_gu + 309 + + ) + +314  + #__NR_oss_vm_adv + 310 + + ) + +315  + #__NR_oss_vm_wrev + 311 + + ) + +316  + #__NR_kcmp + 312 + + ) + +317  + #__NR_f_modu + 313 + + ) + +318  + #__NR_sched_r + 314 + + ) + +319  + #__NR_sched_g + 315 + + ) + +320  + #__NR_mt2 + 316 + + ) + +321  + #__NR_ccomp + 317 + + ) + +322  + #__NR_gndom + 318 + + ) + +323  + #__NR_memfd_ + 319 + + ) + +324  + #__NR_kexec_fe_ld + 320 + + ) + +325  + #__NR_bpf + 321 + + ) + +326  + #__NR_execvt + 322 + + ) + +327  + #__NR_urufd + 323 + + ) + +328  + #__NR_membrr + 324 + + ) + +329  + #__NR_mlock2 + 325 + + ) + +330  + #__NR_cy_fe_nge + 326 + + ) + +331  + #__NR_dv2 + 327 + + ) + +332  + #__NR_pwrev2 + 328 + + ) + +333  + #__NR_pkey_me + 329 + + ) + +334  + #__NR_pkey_loc + 330 + + ) + +335  + #__NR_pkey_ + 331 + + ) + + @/usr/include/asm/unistd_x32.h + +1 #ide +_ASM_X86_UNISTD_X32_H + + +2  + #_ASM_X86_UNISTD_X32_H + 1 + + ) + +4  + #__NR_ad + ( +__X32_SYSCALL_BIT + + 0) + + ) + +5  + #__NR_wre + ( +__X32_SYSCALL_BIT + + 1) + + ) + +6  + #__NR_ݒ + ( +__X32_SYSCALL_BIT + + 2) + + ) + +7  + #__NR_o + ( +__X32_SYSCALL_BIT + + 3) + + ) + +8  + #__NR_ + ( +__X32_SYSCALL_BIT + + 4) + + ) + +9  + #__NR_f + ( +__X32_SYSCALL_BIT + + 5) + + ) + +10  + #__NR_l + ( +__X32_SYSCALL_BIT + + 6) + + ) + +11  + #__NR_pl + ( +__X32_SYSCALL_BIT + + 7) + + ) + +12  + #__NR_lek + ( +__X32_SYSCALL_BIT + + 8) + + ) + +13  + #__NR_mm + ( +__X32_SYSCALL_BIT + + 9) + + ) + +14  + #__NR_me + ( +__X32_SYSCALL_BIT + + 10) + + ) + +15  + #__NR_munm + ( +__X32_SYSCALL_BIT + + 11) + + ) + +16  + #__NR_brk + ( +__X32_SYSCALL_BIT + + 12) + + ) + +17  + #__NR__sigocmask + ( +__X32_SYSCALL_BIT + + 14) + + ) + +18  + #__NR_d64 + ( +__X32_SYSCALL_BIT + + 17) + + ) + +19  + #__NR_pwre64 + ( +__X32_SYSCALL_BIT + + 18) + + ) + +20  + #__NR_acss + ( +__X32_SYSCALL_BIT + + 21) + + ) + +21  + #__NR_pe + ( +__X32_SYSCALL_BIT + + 22) + + ) + +22  + #__NR_ + ( +__X32_SYSCALL_BIT + + 23) + + ) + +23  + #__NR_sched_yld + ( +__X32_SYSCALL_BIT + + 24) + + ) + +24  + #__NR_mm + ( +__X32_SYSCALL_BIT + + 25) + + ) + +25  + #__NR_msync + ( +__X32_SYSCALL_BIT + + 26) + + ) + +26  + #__NR_mce + ( +__X32_SYSCALL_BIT + + 27) + + ) + +27  + #__NR_madvi + ( +__X32_SYSCALL_BIT + + 28) + + ) + +28  + #__NR_shmg + ( +__X32_SYSCALL_BIT + + 29) + + ) + +29  + #__NR_shm + ( +__X32_SYSCALL_BIT + + 30) + + ) + +30  + #__NR_shml + ( +__X32_SYSCALL_BIT + + 31) + + ) + +31  + #__NR_dup + ( +__X32_SYSCALL_BIT + + 32) + + ) + +32  + #__NR_dup2 + ( +__X32_SYSCALL_BIT + + 33) + + ) + +33  + #__NR_u + ( +__X32_SYSCALL_BIT + + 34) + + ) + +34  + #__NR_nop + ( +__X32_SYSCALL_BIT + + 35) + + ) + +35  + #__NR_gim + ( +__X32_SYSCALL_BIT + + 36) + + ) + +36  + #__NR_m + ( +__X32_SYSCALL_BIT + + 37) + + ) + +37  + #__NR_tim + ( +__X32_SYSCALL_BIT + + 38) + + ) + +38  + #__NR_gpid + ( +__X32_SYSCALL_BIT + + 39) + + ) + +39  + #__NR_ndfe + ( +__X32_SYSCALL_BIT + + 40) + + ) + +40  + #__NR_sock + ( +__X32_SYSCALL_BIT + + 41) + + ) + +41  + #__NR_c + ( +__X32_SYSCALL_BIT + + 42) + + ) + +42  + #__NR_ac + ( +__X32_SYSCALL_BIT + + 43) + + ) + +43  + #__NR_ndto + ( +__X32_SYSCALL_BIT + + 44) + + ) + +44  + #__NR_shutdown + ( +__X32_SYSCALL_BIT + + 48) + + ) + +45  + #__NR_bd + ( +__X32_SYSCALL_BIT + + 49) + + ) + +46  + #__NR_li + ( +__X32_SYSCALL_BIT + + 50) + + ) + +47  + #__NR_gsockme + ( +__X32_SYSCALL_BIT + + 51) + + ) + +48  + #__NR_gme + ( +__X32_SYSCALL_BIT + + 52) + + ) + +49  + #__NR_sock + ( +__X32_SYSCALL_BIT + + 53) + + ) + +50  + #__NR_e + ( +__X32_SYSCALL_BIT + + 56) + + ) + +51  + #__NR_fk + ( +__X32_SYSCALL_BIT + + 57) + + ) + +52  + #__NR_vfk + ( +__X32_SYSCALL_BIT + + 58) + + ) + +53  + #__NR_ex + ( +__X32_SYSCALL_BIT + + 60) + + ) + +54  + #__NR_wa4 + ( +__X32_SYSCALL_BIT + + 61) + + ) + +55  + #__NR_kl + ( +__X32_SYSCALL_BIT + + 62) + + ) + +56  + #__NR_ume + ( +__X32_SYSCALL_BIT + + 63) + + ) + +57  + #__NR_mg + ( +__X32_SYSCALL_BIT + + 64) + + ) + +58  + #__NR_m + ( +__X32_SYSCALL_BIT + + 65) + + ) + +59  + #__NR_ml + ( +__X32_SYSCALL_BIT + + 66) + + ) + +60  + #__NR_shmdt + ( +__X32_SYSCALL_BIT + + 67) + + ) + +61  + #__NR_msgg + ( +__X32_SYSCALL_BIT + + 68) + + ) + +62  + #__NR_msgd + ( +__X32_SYSCALL_BIT + + 69) + + ) + +63  + #__NR_msgrcv + ( +__X32_SYSCALL_BIT + + 70) + + ) + +64  + #__NR_msgl + ( +__X32_SYSCALL_BIT + + 71) + + ) + +65  + #__NR_f + ( +__X32_SYSCALL_BIT + + 72) + + ) + +66  + #__NR_ock + ( +__X32_SYSCALL_BIT + + 73) + + ) + +67  + #__NR_fsync + ( +__X32_SYSCALL_BIT + + 74) + + ) + +68  + #__NR_fdasync + ( +__X32_SYSCALL_BIT + + 75) + + ) + +69  + #__NR_un + ( +__X32_SYSCALL_BIT + + 76) + + ) + +70  + #__NR_run + ( +__X32_SYSCALL_BIT + + 77) + + ) + +71  + #__NR_gdts + ( +__X32_SYSCALL_BIT + + 78) + + ) + +72  + #__NR_gcwd + ( +__X32_SYSCALL_BIT + + 79) + + ) + +73  + #__NR_chd + ( +__X32_SYSCALL_BIT + + 80) + + ) + +74  + #__NR_fchd + ( +__X32_SYSCALL_BIT + + 81) + + ) + +75  + #__NR_me + ( +__X32_SYSCALL_BIT + + 82) + + ) + +76  + #__NR_mkd + ( +__X32_SYSCALL_BIT + + 83) + + ) + +77  + #__NR_rmd + ( +__X32_SYSCALL_BIT + + 84) + + ) + +78  + #__NR_t + ( +__X32_SYSCALL_BIT + + 85) + + ) + +79  + #__NR_lk + ( +__X32_SYSCALL_BIT + + 86) + + ) + +80  + #__NR_uƚk + ( +__X32_SYSCALL_BIT + + 87) + + ) + +81  + #__NR_symlk + ( +__X32_SYSCALL_BIT + + 88) + + ) + +82  + #__NR_adlk + ( +__X32_SYSCALL_BIT + + 89) + + ) + +83  + #__NR_chmod + ( +__X32_SYSCALL_BIT + + 90) + + ) + +84  + #__NR_fchmod + ( +__X32_SYSCALL_BIT + + 91) + + ) + +85  + #__NR_chown + ( +__X32_SYSCALL_BIT + + 92) + + ) + +86  + #__NR_fchown + ( +__X32_SYSCALL_BIT + + 93) + + ) + +87  + #__NR_lchown + ( +__X32_SYSCALL_BIT + + 94) + + ) + +88  + #__NR_umask + ( +__X32_SYSCALL_BIT + + 95) + + ) + +89  + #__NR_gtimeofday + ( +__X32_SYSCALL_BIT + + 96) + + ) + +90  + #__NR_gim + ( +__X32_SYSCALL_BIT + + 97) + + ) + +91  + #__NR_gruge + ( +__X32_SYSCALL_BIT + + 98) + + ) + +92  + #__NR_sysfo + ( +__X32_SYSCALL_BIT + + 99) + + ) + +93  + #__NR_times + ( +__X32_SYSCALL_BIT + + 100) + + ) + +94  + #__NR_guid + ( +__X32_SYSCALL_BIT + + 102) + + ) + +95  + #__NR_syog + ( +__X32_SYSCALL_BIT + + 103) + + ) + +96  + #__NR_ggid + ( +__X32_SYSCALL_BIT + + 104) + + ) + +97  + #__NR_tuid + ( +__X32_SYSCALL_BIT + + 105) + + ) + +98  + #__NR_tgid + ( +__X32_SYSCALL_BIT + + 106) + + ) + +99  + #__NR_geuid + ( +__X32_SYSCALL_BIT + + 107) + + ) + +100  + #__NR_gegid + ( +__X32_SYSCALL_BIT + + 108) + + ) + +101  + #__NR_gid + ( +__X32_SYSCALL_BIT + + 109) + + ) + +102  + #__NR_gid + ( +__X32_SYSCALL_BIT + + 110) + + ) + +103  + #__NR_gpg + ( +__X32_SYSCALL_BIT + + 111) + + ) + +104  + #__NR_tsid + ( +__X32_SYSCALL_BIT + + 112) + + ) + +105  + #__NR_euid + ( +__X32_SYSCALL_BIT + + 113) + + ) + +106  + #__NR_egid + ( +__X32_SYSCALL_BIT + + 114) + + ) + +107  + #__NR_ggroups + ( +__X32_SYSCALL_BIT + + 115) + + ) + +108  + #__NR_tgroups + ( +__X32_SYSCALL_BIT + + 116) + + ) + +109  + #__NR_esuid + ( +__X32_SYSCALL_BIT + + 117) + + ) + +110  + #__NR_gsuid + ( +__X32_SYSCALL_BIT + + 118) + + ) + +111  + #__NR_esgid + ( +__X32_SYSCALL_BIT + + 119) + + ) + +112  + #__NR_gsgid + ( +__X32_SYSCALL_BIT + + 120) + + ) + +113  + #__NR_gpgid + ( +__X32_SYSCALL_BIT + + 121) + + ) + +114  + #__NR_tfsuid + ( +__X32_SYSCALL_BIT + + 122) + + ) + +115  + #__NR_tfsgid + ( +__X32_SYSCALL_BIT + + 123) + + ) + +116  + #__NR_gsid + ( +__X32_SYSCALL_BIT + + 124) + + ) + +117  + #__NR_pg + ( +__X32_SYSCALL_BIT + + 125) + + ) + +118  + #__NR_pt + ( +__X32_SYSCALL_BIT + + 126) + + ) + +119  + #__NR__sigsud + ( +__X32_SYSCALL_BIT + + 130) + + ) + +120  + #__NR_utime + ( +__X32_SYSCALL_BIT + + 132) + + ) + +121  + #__NR_mknod + ( +__X32_SYSCALL_BIT + + 133) + + ) + +122  + #__NR_rsڮy + ( +__X32_SYSCALL_BIT + + 135) + + ) + +123  + #__NR_u + ( +__X32_SYSCALL_BIT + + 136) + + ) + +124  + #__NR_fs + ( +__X32_SYSCALL_BIT + + 137) + + ) + +125  + #__NR_ffs + ( +__X32_SYSCALL_BIT + + 138) + + ) + +126  + #__NR_sysfs + ( +__X32_SYSCALL_BIT + + 139) + + ) + +127  + #__NR_giܙy + ( +__X32_SYSCALL_BIT + + 140) + + ) + +128  + #__NR_riܙy + ( +__X32_SYSCALL_BIT + + 141) + + ) + +129  + #__NR_sched_am + ( +__X32_SYSCALL_BIT + + 142) + + ) + +130  + #__NR_sched_gm + ( +__X32_SYSCALL_BIT + + 143) + + ) + +131  + #__NR_sched_tschedur + ( +__X32_SYSCALL_BIT + + 144) + + ) + +132  + #__NR_sched_gschedur + ( +__X32_SYSCALL_BIT + + 145) + + ) + +133  + #__NR_sched_g_iܙy_max + ( +__X32_SYSCALL_BIT + + 146) + + ) + +134  + #__NR_sched_g_iܙy_m + ( +__X32_SYSCALL_BIT + + 147) + + ) + +135  + #__NR_sched__g_rv + ( +__X32_SYSCALL_BIT + + 148) + + ) + +136  + #__NR_mlock + ( +__X32_SYSCALL_BIT + + 149) + + ) + +137  + #__NR_muock + ( +__X32_SYSCALL_BIT + + 150) + + ) + +138  + #__NR_mlockl + ( +__X32_SYSCALL_BIT + + 151) + + ) + +139  + #__NR_muockl + ( +__X32_SYSCALL_BIT + + 152) + + ) + +140  + #__NR_vhgup + ( +__X32_SYSCALL_BIT + + 153) + + ) + +141  + #__NR_modify_ldt + ( +__X32_SYSCALL_BIT + + 154) + + ) + +142  + #__NR_piv_ro + ( +__X32_SYSCALL_BIT + + 155) + + ) + +143  + #__NR_l + ( +__X32_SYSCALL_BIT + + 157) + + ) + +144  + #__NR_ch_l + ( +__X32_SYSCALL_BIT + + 158) + + ) + +145  + #__NR_adjtimex + ( +__X32_SYSCALL_BIT + + 159) + + ) + +146  + #__NR_lim + ( +__X32_SYSCALL_BIT + + 160) + + ) + +147  + #__NR_chro + ( +__X32_SYSCALL_BIT + + 161) + + ) + +148  + #__NR_sync + ( +__X32_SYSCALL_BIT + + 162) + + ) + +149  + #__NR_ac + ( +__X32_SYSCALL_BIT + + 163) + + ) + +150  + #__NR_imeofday + ( +__X32_SYSCALL_BIT + + 164) + + ) + +151  + #__NR_mou + ( +__X32_SYSCALL_BIT + + 165) + + ) + +152  + #__NR_umou2 + ( +__X32_SYSCALL_BIT + + 166) + + ) + +153  + #__NR_sw + ( +__X32_SYSCALL_BIT + + 167) + + ) + +154  + #__NR_swoff + ( +__X32_SYSCALL_BIT + + 168) + + ) + +155  + #__NR_bo + ( +__X32_SYSCALL_BIT + + 169) + + ) + +156  + #__NR_thome + ( +__X32_SYSCALL_BIT + + 170) + + ) + +157  + #__NR_tdomame + ( +__X32_SYSCALL_BIT + + 171) + + ) + +158  + #__NR_il + ( +__X32_SYSCALL_BIT + + 172) + + ) + +159  + #__NR_iݔm + ( +__X32_SYSCALL_BIT + + 173) + + ) + +160  + #__NR__modu + ( +__X32_SYSCALL_BIT + + 175) + + ) + +161  + #__NR_de_modu + ( +__X32_SYSCALL_BIT + + 176) + + ) + +162  + #__NR_qual + ( +__X32_SYSCALL_BIT + + 179) + + ) + +163  + #__NR_gpmsg + ( +__X32_SYSCALL_BIT + + 181) + + ) + +164  + #__NR_pumsg + ( +__X32_SYSCALL_BIT + + 182) + + ) + +165  + #__NR_afs_sys + ( +__X32_SYSCALL_BIT + + 183) + + ) + +166  + #__NR_tux + ( +__X32_SYSCALL_BIT + + 184) + + ) + +167  + #__NR_cury + ( +__X32_SYSCALL_BIT + + 185) + + ) + +168  + #__NR_gtid + ( +__X32_SYSCALL_BIT + + 186) + + ) + +169  + #__NR_adahd + ( +__X32_SYSCALL_BIT + + 187) + + ) + +170  + #__NR_tx + ( +__X32_SYSCALL_BIT + + 188) + + ) + +171  + #__NR_ltx + ( +__X32_SYSCALL_BIT + + 189) + + ) + +172  + #__NR_ftx + ( +__X32_SYSCALL_BIT + + 190) + + ) + +173  + #__NR_gx + ( +__X32_SYSCALL_BIT + + 191) + + ) + +174  + #__NR_lgx + ( +__X32_SYSCALL_BIT + + 192) + + ) + +175  + #__NR_fgx + ( +__X32_SYSCALL_BIT + + 193) + + ) + +176  + #__NR_lix + ( +__X32_SYSCALL_BIT + + 194) + + ) + +177  + #__NR_ix + ( +__X32_SYSCALL_BIT + + 195) + + ) + +178  + #__NR_ix + ( +__X32_SYSCALL_BIT + + 196) + + ) + +179  + #__NR_movex + ( +__X32_SYSCALL_BIT + + 197) + + ) + +180  + #__NR_emovex + ( +__X32_SYSCALL_BIT + + 198) + + ) + +181  + #__NR_emovex + ( +__X32_SYSCALL_BIT + + 199) + + ) + +182  + #__NR_tkl + ( +__X32_SYSCALL_BIT + + 200) + + ) + +183  + #__NR_time + ( +__X32_SYSCALL_BIT + + 201) + + ) + +184  + #__NR_fux + ( +__X32_SYSCALL_BIT + + 202) + + ) + +185  + #__NR_sched_ffy + ( +__X32_SYSCALL_BIT + + 203) + + ) + +186  + #__NR_sched_gaffy + ( +__X32_SYSCALL_BIT + + 204) + + ) + +187  + #__NR_io_deroy + ( +__X32_SYSCALL_BIT + + 207) + + ) + +188  + #__NR_io_gevts + ( +__X32_SYSCALL_BIT + + 208) + + ) + +189  + #__NR_io_nl + ( +__X32_SYSCALL_BIT + + 210) + + ) + +190  + #__NR_lookup_dcook + ( +__X32_SYSCALL_BIT + + 212) + + ) + +191  + #__NR_l_ + ( +__X32_SYSCALL_BIT + + 213) + + ) + +192  + #__NR_m_fe_ges + ( +__X32_SYSCALL_BIT + + 216) + + ) + +193  + #__NR_gdts64 + ( +__X32_SYSCALL_BIT + + 217) + + ) + +194  + #__NR_t_tid_addss + ( +__X32_SYSCALL_BIT + + 218) + + ) + +195  + #__NR_t_sys + ( +__X32_SYSCALL_BIT + + 219) + + ) + +196  + #__NR_mtimed + ( +__X32_SYSCALL_BIT + + 220) + + ) + +197  + #__NR_dvi64 + ( +__X32_SYSCALL_BIT + + 221) + + ) + +198  + #__NR_tim_ime + ( +__X32_SYSCALL_BIT + + 223) + + ) + +199  + #__NR_tim_gtime + ( +__X32_SYSCALL_BIT + + 224) + + ) + +200  + #__NR_tim_govrun + ( +__X32_SYSCALL_BIT + + 225) + + ) + +201  + #__NR_tim_de + ( +__X32_SYSCALL_BIT + + 226) + + ) + +202  + #__NR_ock_ime + ( +__X32_SYSCALL_BIT + + 227) + + ) + +203  + #__NR_ock_gtime + ( +__X32_SYSCALL_BIT + + 228) + + ) + +204  + #__NR_ock_gs + ( +__X32_SYSCALL_BIT + + 229) + + ) + +205  + #__NR_ock_nop + ( +__X32_SYSCALL_BIT + + 230) + + ) + +206  + #__NR_ex_group + ( +__X32_SYSCALL_BIT + + 231) + + ) + +207  + #__NR_l_wa + ( +__X32_SYSCALL_BIT + + 232) + + ) + +208  + #__NR_l_l + ( +__X32_SYSCALL_BIT + + 233) + + ) + +209  + #__NR_tgkl + ( +__X32_SYSCALL_BIT + + 234) + + ) + +210  + #__NR_utimes + ( +__X32_SYSCALL_BIT + + 235) + + ) + +211  + #__NR_mbd + ( +__X32_SYSCALL_BIT + + 237) + + ) + +212  + #__NR_t_mempicy + ( +__X32_SYSCALL_BIT + + 238) + + ) + +213  + #__NR_g_mempicy + ( +__X32_SYSCALL_BIT + + 239) + + ) + +214  + #__NR_mq_ݒ + ( +__X32_SYSCALL_BIT + + 240) + + ) + +215  + #__NR_mq_uƚk + ( +__X32_SYSCALL_BIT + + 241) + + ) + +216  + #__NR_mq_timednd + ( +__X32_SYSCALL_BIT + + 242) + + ) + +217  + #__NR_mq_timedive + ( +__X32_SYSCALL_BIT + + 243) + + ) + +218  + #__NR_mq_gr + ( +__X32_SYSCALL_BIT + + 245) + + ) + +219  + #__NR_add_key + ( +__X32_SYSCALL_BIT + + 248) + + ) + +220  + #__NR_que_key + ( +__X32_SYSCALL_BIT + + 249) + + ) + +221  + #__NR_keyl + ( +__X32_SYSCALL_BIT + + 250) + + ) + +222  + #__NR_irio_t + ( +__X32_SYSCALL_BIT + + 251) + + ) + +223  + #__NR_irio_g + ( +__X32_SYSCALL_BIT + + 252) + + ) + +224  + #__NR_ify_ + ( +__X32_SYSCALL_BIT + + 253) + + ) + +225  + #__NR_ify_add_wch + ( +__X32_SYSCALL_BIT + + 254) + + ) + +226  + #__NR_ify_rm_wch + ( +__X32_SYSCALL_BIT + + 255) + + ) + +227  + #__NR_mig_ges + ( +__X32_SYSCALL_BIT + + 256) + + ) + +228  + #__NR_ݒ + ( +__X32_SYSCALL_BIT + + 257) + + ) + +229  + #__NR_mkd + ( +__X32_SYSCALL_BIT + + 258) + + ) + +230  + #__NR_mknod + ( +__X32_SYSCALL_BIT + + 259) + + ) + +231  + #__NR_fchowt + ( +__X32_SYSCALL_BIT + + 260) + + ) + +232  + #__NR_futimet + ( +__X32_SYSCALL_BIT + + 261) + + ) + +233  + #__NR_wf + ( +__X32_SYSCALL_BIT + + 262) + + ) + +234  + #__NR_uƚk + ( +__X32_SYSCALL_BIT + + 263) + + ) + +235  + #__NR_mt + ( +__X32_SYSCALL_BIT + + 264) + + ) + +236  + #__NR_lk + ( +__X32_SYSCALL_BIT + + 265) + + ) + +237  + #__NR_symlk + ( +__X32_SYSCALL_BIT + + 266) + + ) + +238  + #__NR_adlk + ( +__X32_SYSCALL_BIT + + 267) + + ) + +239  + #__NR_fchmod + ( +__X32_SYSCALL_BIT + + 268) + + ) + +240  + #__NR_cst + ( +__X32_SYSCALL_BIT + + 269) + + ) + +241  + #__NR_p6 + ( +__X32_SYSCALL_BIT + + 270) + + ) + +242  + #__NR_l + ( +__X32_SYSCALL_BIT + + 271) + + ) + +243  + #__NR_unshe + ( +__X32_SYSCALL_BIT + + 272) + + ) + +244  + #__NR_li + ( +__X32_SYSCALL_BIT + + 275) + + ) + +245  + #__NR_e + ( +__X32_SYSCALL_BIT + + 276) + + ) + +246  + #__NR_sync_fe_nge + ( +__X32_SYSCALL_BIT + + 277) + + ) + +247  + #__NR_utimt + ( +__X32_SYSCALL_BIT + + 280) + + ) + +248  + #__NR_l_pwa + ( +__X32_SYSCALL_BIT + + 281) + + ) + +249  + #__NR_siglfd + ( +__X32_SYSCALL_BIT + + 282) + + ) + +250  + #__NR_timfd_ + ( +__X32_SYSCALL_BIT + + 283) + + ) + +251  + #__NR_evtfd + ( +__X32_SYSCALL_BIT + + 284) + + ) + +252  + #__NR_o + ( +__X32_SYSCALL_BIT + + 285) + + ) + +253  + #__NR_timfd_ime + ( +__X32_SYSCALL_BIT + + 286) + + ) + +254  + #__NR_timfd_gtime + ( +__X32_SYSCALL_BIT + + 287) + + ) + +255  + #__NR_ac4 + ( +__X32_SYSCALL_BIT + + 288) + + ) + +256  + #__NR_siglfd4 + ( +__X32_SYSCALL_BIT + + 289) + + ) + +257  + #__NR_evtfd2 + ( +__X32_SYSCALL_BIT + + 290) + + ) + +258  + #__NR_l_1 + ( +__X32_SYSCALL_BIT + + 291) + + ) + +259  + #__NR_dup3 + ( +__X32_SYSCALL_BIT + + 292) + + ) + +260  + #__NR_pe2 + ( +__X32_SYSCALL_BIT + + 293) + + ) + +261  + #__NR_ify_1 + ( +__X32_SYSCALL_BIT + + 294) + + ) + +262  + #__NR_rf_evt_ݒ + ( +__X32_SYSCALL_BIT + + 298) + + ) + +263  + #__NR_nify_ + ( +__X32_SYSCALL_BIT + + 300) + + ) + +264  + #__NR_nify_mk + ( +__X32_SYSCALL_BIT + + 301) + + ) + +265  + #__NR_lim64 + ( +__X32_SYSCALL_BIT + + 302) + + ) + +266  + #__NR_me_to_hd_ + ( +__X32_SYSCALL_BIT + + 303) + + ) + +267  + #__NR_ݒ_by_hd_ + ( +__X32_SYSCALL_BIT + + 304) + + ) + +268  + #__NR_ock_adjtime + ( +__X32_SYSCALL_BIT + + 305) + + ) + +269  + #__NR_syncfs + ( +__X32_SYSCALL_BIT + + 306) + + ) + +270  + #__NR_s + ( +__X32_SYSCALL_BIT + + 308) + + ) + +271  + #__NR_gu + ( +__X32_SYSCALL_BIT + + 309) + + ) + +272  + #__NR_kcmp + ( +__X32_SYSCALL_BIT + + 312) + + ) + +273  + #__NR_f_modu + ( +__X32_SYSCALL_BIT + + 313) + + ) + +274  + #__NR_sched_r + ( +__X32_SYSCALL_BIT + + 314) + + ) + +275  + #__NR_sched_g + ( +__X32_SYSCALL_BIT + + 315) + + ) + +276  + #__NR_mt2 + ( +__X32_SYSCALL_BIT + + 316) + + ) + +277  + #__NR_ccomp + ( +__X32_SYSCALL_BIT + + 317) + + ) + +278  + #__NR_gndom + ( +__X32_SYSCALL_BIT + + 318) + + ) + +279  + #__NR_memfd_ + ( +__X32_SYSCALL_BIT + + 319) + + ) + +280  + #__NR_kexec_fe_ld + ( +__X32_SYSCALL_BIT + + 320) + + ) + +281  + #__NR_bpf + ( +__X32_SYSCALL_BIT + + 321) + + ) + +282  + #__NR_urufd + ( +__X32_SYSCALL_BIT + + 323) + + ) + +283  + #__NR_membrr + ( +__X32_SYSCALL_BIT + + 324) + + ) + +284  + #__NR_mlock2 + ( +__X32_SYSCALL_BIT + + 325) + + ) + +285  + #__NR_cy_fe_nge + ( +__X32_SYSCALL_BIT + + 326) + + ) + +286  + #__NR_pkey_me + ( +__X32_SYSCALL_BIT + + 329) + + ) + +287  + #__NR_pkey_loc + ( +__X32_SYSCALL_BIT + + 330) + + ) + +288  + #__NR_pkey_ + ( +__X32_SYSCALL_BIT + + 331) + + ) + +289  + #__NR__sigai + ( +__X32_SYSCALL_BIT + + 512) + + ) + +290  + #__NR__sigtu + ( +__X32_SYSCALL_BIT + + 513) + + ) + +291  + #__NR_iol + ( +__X32_SYSCALL_BIT + + 514) + + ) + +292  + #__NR_adv + ( +__X32_SYSCALL_BIT + + 515) + + ) + +293  + #__NR_wrev + ( +__X32_SYSCALL_BIT + + 516) + + ) + +294  + #__NR_cvom + ( +__X32_SYSCALL_BIT + + 517) + + ) + +295  + #__NR_ndmsg + ( +__X32_SYSCALL_BIT + + 518) + + ) + +296  + #__NR_cvmsg + ( +__X32_SYSCALL_BIT + + 519) + + ) + +297  + #__NR_execve + ( +__X32_SYSCALL_BIT + + 520) + + ) + +298  + #__NR_ + ( +__X32_SYSCALL_BIT + + 521) + + ) + +299  + #__NR__signdg + ( +__X32_SYSCALL_BIT + + 522) + + ) + +300  + #__NR__sigtimedwa + ( +__X32_SYSCALL_BIT + + 523) + + ) + +301  + #__NR__sigqueuefo + ( +__X32_SYSCALL_BIT + + 524) + + ) + +302  + #__NR_sigtack + ( +__X32_SYSCALL_BIT + + 525) + + ) + +303  + #__NR_tim_ + ( +__X32_SYSCALL_BIT + + 526) + + ) + +304  + #__NR_mq_nify + ( +__X32_SYSCALL_BIT + + 527) + + ) + +305  + #__NR_kexec_ld + ( +__X32_SYSCALL_BIT + + 528) + + ) + +306  + #__NR_waid + ( +__X32_SYSCALL_BIT + + 529) + + ) + +307  + #__NR_t_robu_li + ( +__X32_SYSCALL_BIT + + 530) + + ) + +308  + #__NR_g_robu_li + ( +__X32_SYSCALL_BIT + + 531) + + ) + +309  + #__NR_vmli + ( +__X32_SYSCALL_BIT + + 532) + + ) + +310  + #__NR_move_ges + ( +__X32_SYSCALL_BIT + + 533) + + ) + +311  + #__NR_dv + ( +__X32_SYSCALL_BIT + + 534) + + ) + +312  + #__NR_pwrev + ( +__X32_SYSCALL_BIT + + 535) + + ) + +313  + #__NR__tgsigqueuefo + ( +__X32_SYSCALL_BIT + + 536) + + ) + +314  + #__NR_cvmmsg + ( +__X32_SYSCALL_BIT + + 537) + + ) + +315  + #__NR_ndmmsg + ( +__X32_SYSCALL_BIT + + 538) + + ) + +316  + #__NR_oss_vm_adv + ( +__X32_SYSCALL_BIT + + 539) + + ) + +317  + #__NR_oss_vm_wrev + ( +__X32_SYSCALL_BIT + + 540) + + ) + +318  + #__NR_tsockt + ( +__X32_SYSCALL_BIT + + 541) + + ) + +319  + #__NR_gsockt + ( +__X32_SYSCALL_BIT + + 542) + + ) + +320  + #__NR_io_tup + ( +__X32_SYSCALL_BIT + + 543) + + ) + +321  + #__NR_io_subm + ( +__X32_SYSCALL_BIT + + 544) + + ) + +322  + #__NR_execvt + ( +__X32_SYSCALL_BIT + + 545) + + ) + +323  + #__NR_dv2 + ( +__X32_SYSCALL_BIT + + 546) + + ) + +324  + #__NR_pwrev2 + ( +__X32_SYSCALL_BIT + + 547) + + ) + + @/usr/include/bits/byteswap.h + +19 #i! +defed + +_BYTESWAP_H + && !defed +_NETINET_IN_H + && !defed +_ENDIAN_H + + +23 #ide +_BITS_BYTESWAP_H + + +24  + #_BITS_BYTESWAP_H + 1 + + ) + +26  + ~ + +27  + ~ + +28  + ~ + +31  + #__bsw_cڡt_16 +( +x +) \ + +32 (((((( +x +>> 8& 0xff| (((x& 0xff<< 8))) + + ) + +35  + ~ + +38  + #__bsw_cڡt_32 +( +x +) \ + +39 (((( +x +) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ + +40 ((( +x +& 0x0000ff00<< 8| (((x& 0x000000ff<< 24)) + + ) + +42 #ifde +__GNUC__ + + +43 #i +__GNUC_PREREQ + (4, 3) + +44  +__le +  + +45 + $__bsw_32 + ( +__bsx +) + +47  + `__but_bsw32 + ( +__bsx +); + +48 + } +} + +49 #i +__GNUC__ + >= 2 + +50 #i +__WORDSIZE + =64 || ( +defed + +__i486__ + || defed +__ium__ + \ + +51 || +defed + + g__iumo__ + || defed + g__ium4__ + \ + +52 || +defed + + g__k8__ + || defed + g__hl__ + \ + +53 || +defed + + g__k6__ + || defed + g__noca__ + \ + +54 || +defed + + g__ce2__ + || defed + g__geode__ + \ + +55 || +defed + + g__amdm10__ +) + +58  + #__bsw_32 +( +x +) \ + +59 ( +__exnsi__ + \ + +60 ({  +__v +, +__x + = ( +x +); \ + +61 i( + `__but_cڡt_p + ( +__x +)) \ + +62 +__v + = + `__bsw_cڡt_32 + ( +__x +); \ + +64 + `__asm__ + ("bsw %0" : "" ( +__v +: "0" ( +__x +)); \ + +65 +__v +; })) + + ) + +67  + #__bsw_32 +( +x +) \ + +68 ( +__exnsi__ + \ + +69 ({  +__v +, +__x + = ( +x +); \ + +70 i( + `__but_cڡt_p + ( +__x +)) \ + +71 +__v + = + `__bsw_cڡt_32 + ( +__x +); \ + +73 + `__asm__ + ("rorw $8, %w0;" \ + +76 : "" ( +__v +) \ + +77 : "0" ( +__x +) \ + +79 +__v +; })) + + ) + +82  + #__bsw_32 +( +x +) \ + +83 ( +__exnsi__ + \ + +84 ({  +__x + = ( +x +); + `__bsw_cڡt_32 + (__x); })) + + ) + +87  +__le +  + +88 + $__bsw_32 + ( +__bsx +) + +90  + `__bsw_cڡt_32 + ( +__bsx +); + +91 + } +} + +95 #i +__GNUC_PREREQ + (2, 0) + +97  + #__bsw_cڡt_64 +( +x +) \ + +98 ( + `__exnsi__ + (((( +x +) & 0xff00000000000000ull) >> 56) \ + +99 | ((( +x +) & 0x00ff000000000000ull) >> 40) \ + +100 | ((( +x +) & 0x0000ff0000000000ull) >> 24) \ + +101 | ((( +x +) & 0x000000ff00000000ull) >> 8) \ + +102 | ((( +x +) & 0x00000000ff000000ull) << 8) \ + +103 | ((( +x +) & 0x0000000000ff0000ull) << 24) \ + +104 | ((( +x +) & 0x000000000000ff00ull) << 40) \ + +105 | ((( +x +& 0x00000000000000ffu<< 56))) + + ) + +107 #i +__GNUC_PREREQ + (4, 3) + +108  +__le + +__ut64_t + + +109 + $__bsw_64 + ( +__ut64_t + +__bsx +) + +111  + `__but_bsw64 + ( +__bsx +); + +112 + } +} + +113 #i +__WORDSIZE + == 64 + +114  + #__bsw_64 +( +x +) \ + +115 ( +__exnsi__ + \ + +116 ({ +__ut64_t + +__v +, +__x + = ( +x +); \ + +117 i( + `__but_cڡt_p + ( +__x +)) \ + +118 +__v + = + `__bsw_cڡt_64 + ( +__x +); \ + +120 + `__asm__ + ("bsw %q0" : "" ( +__v +: "0" ( +__x +)); \ + +121 +__v +; })) + + ) + +123  + #__bsw_64 +( +x +) \ + +124 ( +__exnsi__ + \ + +125 ({ uni { +__exnsi__ + +__ut64_t + +__ +; \ + +126  +__l +[2]; } +__w +, +__r +; \ + +127 i( + `__but_cڡt_p + ( +x +)) \ + +128 +__r +. +__ + = + `__bsw_cڡt_64 + ( +x +); \ + +131 +__w +. +__ + = ( +x +); \ + +132 +__r +. +__l +[0] = + `__bsw_32 + ( +__w +.__l[1]); \ + +133 +__r +. +__l +[1] = + `__bsw_32 + ( +__w +.__l[0]); \ + +135 +__r +. +__ +; })) + + ) + +138  + #__bsw_cڡt_64 +( +x +) \ + +139 (((( +x +) & 0xff00000000000000ull) >> 56) \ + +140 | ((( +x +) & 0x00ff000000000000ull) >> 40) \ + +141 | ((( +x +) & 0x0000ff0000000000ull) >> 24) \ + +142 | ((( +x +) & 0x000000ff00000000ull) >> 8) \ + +143 | ((( +x +) & 0x00000000ff000000ull) << 8) \ + +144 | ((( +x +) & 0x0000000000ff0000ull) << 24) \ + +145 | ((( +x +) & 0x000000000000ff00ull) << 40) \ + +146 | ((( +x +& 0x00000000000000ffu<< 56)) + + ) + +148  +__le + +__ut64_t + + +149 + $__bsw_64 + ( +__ut64_t + +__bsx +) + +151  + `__bsw_cڡt_64 + ( +__bsx +); + +152 + } +} + + @/usr/include/bits/in.h + +20 #ide +_NETINET_IN_H + + +29 #i +defed + +_UAPI_LINUX_IN6_H + || defed +_UAPI_IPV6_H + + +33  + #__USE_KERNEL_IPV6_DEFS + + + ) + +39  + #IP_OPTIONS + 4 + + ) + +40  + #IP_HDRINCL + 3 + + ) + +41  + #IP_TOS + 1 + + ) + +42  + #IP_TTL + 2 + + ) + +43  + #IP_RECVOPTS + 6 + + ) + +45  + #IP_RECVRETOPTS + +IP_RETOPTS + + + ) + +46  + #IP_RETOPTS + 7 + + ) + +47  + #IP_MULTICAST_IF + 32 + + ) + +48  + #IP_MULTICAST_TTL + 33 + + ) + +49  + #IP_MULTICAST_LOOP + 34 + + ) + +50  + #IP_ADD_MEMBERSHIP + 35 + + ) + +51  + #IP_DROP_MEMBERSHIP + 36 + + ) + +52  + #IP_UNBLOCK_SOURCE + 37 + + ) + +53  + #IP_BLOCK_SOURCE + 38 + + ) + +54  + #IP_ADD_SOURCE_MEMBERSHIP + 39 + + ) + +55  + #IP_DROP_SOURCE_MEMBERSHIP + 40 + + ) + +56  + #IP_MSFILTER + 41 + + ) + +57 #ifde +__USE_MISC + + +58  + #MCAST_JOIN_GROUP + 42 + + ) + +59  + #MCAST_BLOCK_SOURCE + 43 + + ) + +60  + #MCAST_UNBLOCK_SOURCE + 44 + + ) + +61  + #MCAST_LEAVE_GROUP + 45 + + ) + +62  + #MCAST_JOIN_SOURCE_GROUP + 46 + + ) + +63  + #MCAST_LEAVE_SOURCE_GROUP + 47 + + ) + +64  + #MCAST_MSFILTER + 48 + + ) + +65  + #IP_MULTICAST_ALL + 49 + + ) + +66  + #IP_UNICAST_IF + 50 + + ) + +68  + #MCAST_EXCLUDE + 0 + + ) + +69  + #MCAST_INCLUDE + 1 + + ) + +72  + #IP_ROUTER_ALERT + 5 + + ) + +73  + #IP_PKTINFO + 8 + + ) + +74  + #IP_PKTOPTIONS + 9 + + ) + +75  + #IP_PMTUDISC + 10 + + ) + +76  + #IP_MTU_DISCOVER + 10 + + ) + +77  + #IP_RECVERR + 11 + + ) + +78  + #IP_RECVTTL + 12 + + ) + +79  + #IP_RECVTOS + 13 + + ) + +80  + #IP_MTU + 14 + + ) + +81  + #IP_FREEBIND + 15 + + ) + +82  + #IP_IPSEC_POLICY + 16 + + ) + +83  + #IP_XFRM_POLICY + 17 + + ) + +84  + #IP_PASSSEC + 18 + + ) + +85  + #IP_TRANSPARENT + 19 + + ) + +86  + #IP_MULTICAST_ALL + 49 + + ) + +89  + #IP_ORIGDSTADDR + 20 + + ) + +90  + #IP_RECVORIGDSTADDR + +IP_ORIGDSTADDR + + + ) + +92  + #IP_MINTTL + 21 + + ) + +93  + #IP_NODEFRAG + 22 + + ) + +94  + #IP_CHECKSUM + 23 + + ) + +95  + #IP_BIND_ADDRESS_NO_PORT + 24 + + ) + +98  + #IP_PMTUDISC_DONT + 0 + + ) + +99  + #IP_PMTUDISC_WANT + 1 + + ) + +100  + #IP_PMTUDISC_DO + 2 + + ) + +101  + #IP_PMTUDISC_PROBE + 3 + + ) + +105  + #IP_PMTUDISC_INTERFACE + 4 + + ) + +107  + #IP_PMTUDISC_OMIT + 5 + + ) + +109  + #IP_MULTICAST_IF + 32 + + ) + +110  + #IP_MULTICAST_TTL + 33 + + ) + +111  + #IP_MULTICAST_LOOP + 34 + + ) + +112  + #IP_ADD_MEMBERSHIP + 35 + + ) + +113  + #IP_DROP_MEMBERSHIP + 36 + + ) + +114  + #IP_UNBLOCK_SOURCE + 37 + + ) + +115  + #IP_BLOCK_SOURCE + 38 + + ) + +116  + #IP_ADD_SOURCE_MEMBERSHIP + 39 + + ) + +117  + #IP_DROP_SOURCE_MEMBERSHIP + 40 + + ) + +118  + #IP_MSFILTER + 41 + + ) + +119  + #IP_MULTICAST_ALL + 49 + + ) + +120  + #IP_UNICAST_IF + 50 + + ) + +123  + #SOL_IP + 0 + + ) + +125  + #IP_DEFAULT_MULTICAST_TTL + 1 + + ) + +126  + #IP_DEFAULT_MULTICAST_LOOP + 1 + + ) + +127  + #IP_MAX_MEMBERSHIPS + 20 + + ) + +129 #ifde +__USE_MISC + + +133  + s_ts + + +135  +_addr + + m_d +; + +136  + m_ts +[40]; + +140  + s_mqn + + +142  +_addr + + mimr_muɟddr +; + +143  +_addr + + mimr_addss +; + +144  + mimr_ifdex +; + +148  + s_pktfo + + +150  + mi_ifdex +; + +151  +_addr + + mi_ec_d +; + +152  +_addr + + mi_addr +; + +159  + #IPV6_ADDRFORM + 1 + + ) + +160  + #IPV6_2292PKTINFO + 2 + + ) + +161  + #IPV6_2292HOPOPTS + 3 + + ) + +162  + #IPV6_2292DSTOPTS + 4 + + ) + +163  + #IPV6_2292RTHDR + 5 + + ) + +164  + #IPV6_2292PKTOPTIONS + 6 + + ) + +165  + #IPV6_CHECKSUM + 7 + + ) + +166  + #IPV6_2292HOPLIMIT + 8 + + ) + +168  + #SCM_SRCRT + +IPV6_RXSRCRT + + + ) + +170  + #IPV6_NEXTHOP + 9 + + ) + +171  + #IPV6_AUTHHDR + 10 + + ) + +172  + #IPV6_UNICAST_HOPS + 16 + + ) + +173  + #IPV6_MULTICAST_IF + 17 + + ) + +174  + #IPV6_MULTICAST_HOPS + 18 + + ) + +175  + #IPV6_MULTICAST_LOOP + 19 + + ) + +176  + #IPV6_JOIN_GROUP + 20 + + ) + +177  + #IPV6_LEAVE_GROUP + 21 + + ) + +178  + #IPV6_ROUTER_ALERT + 22 + + ) + +179  + #IPV6_MTU_DISCOVER + 23 + + ) + +180  + #IPV6_MTU + 24 + + ) + +181  + #IPV6_RECVERR + 25 + + ) + +182  + #IPV6_V6ONLY + 26 + + ) + +183  + #IPV6_JOIN_ANYCAST + 27 + + ) + +184  + #IPV6_LEAVE_ANYCAST + 28 + + ) + +185  + #IPV6_IPSEC_POLICY + 34 + + ) + +186  + #IPV6_XFRM_POLICY + 35 + + ) + +189  + #IPV6_RECVPKTINFO + 49 + + ) + +190  + #IPV6_PKTINFO + 50 + + ) + +191  + #IPV6_RECVHOPLIMIT + 51 + + ) + +192  + #IPV6_HOPLIMIT + 52 + + ) + +193  + #IPV6_RECVHOPOPTS + 53 + + ) + +194  + #IPV6_HOPOPTS + 54 + + ) + +195  + #IPV6_RTHDRDSTOPTS + 55 + + ) + +196  + #IPV6_RECVRTHDR + 56 + + ) + +197  + #IPV6_RTHDR + 57 + + ) + +198  + #IPV6_RECVDSTOPTS + 58 + + ) + +199  + #IPV6_DSTOPTS + 59 + + ) + +200  + #IPV6_RECVPATHMTU + 60 + + ) + +201  + #IPV6_PATHMTU + 61 + + ) + +202  + #IPV6_DONTFRAG + 62 + + ) + +205  + #IPV6_RECVTCLASS + 66 + + ) + +206  + #IPV6_TCLASS + 67 + + ) + +209  + #IPV6_ADD_MEMBERSHIP + +IPV6_JOIN_GROUP + + + ) + +210  + #IPV6_DROP_MEMBERSHIP + +IPV6_LEAVE_GROUP + + + ) + +211  + #IPV6_RXHOPOPTS + +IPV6_HOPOPTS + + + ) + +212  + #IPV6_RXDSTOPTS + +IPV6_DSTOPTS + + + ) + +215  + #IPV6_PMTUDISC_DONT + 0 + + ) + +216  + #IPV6_PMTUDISC_WANT + 1 + + ) + +217  + #IPV6_PMTUDISC_DO + 2 + + ) + +218  + #IPV6_PMTUDISC_PROBE + 3 + + ) + +219  + #IPV6_PMTUDISC_INTERFACE + 4 + + ) + +220  + #IPV6_PMTUDISC_OMIT + 5 + + ) + +223  + #SOL_IPV6 + 41 + + ) + +224  + #SOL_ICMPV6 + 58 + + ) + +227  + #IPV6_RTHDR_LOOSE + 0 + + ) + +228  + #IPV6_RTHDR_STRICT + 1 + + ) + +230  + #IPV6_RTHDR_TYPE_0 + 0 + + ) + + @/usr/include/bits/posix1_lim.h + +24 #idef +_BITS_POSIX1_LIM_H + + +25  + #_BITS_POSIX1_LIM_H + 1 + + ) + +31  + #_POSIX_AIO_LISTIO_MAX + 2 + + ) + +34  + #_POSIX_AIO_MAX + 1 + + ) + +37  + #_POSIX_ARG_MAX + 4096 + + ) + +40 #ifde +__USE_XOPEN2K + + +41  + #_POSIX_CHILD_MAX + 25 + + ) + +43  + #_POSIX_CHILD_MAX + 6 + + ) + +47  + #_POSIX_DELAYTIMER_MAX + 32 + + ) + +51  + #_POSIX_HOST_NAME_MAX + 255 + + ) + +54  + #_POSIX_LINK_MAX + 8 + + ) + +57  + #_POSIX_LOGIN_NAME_MAX + 9 + + ) + +60  + #_POSIX_MAX_CANON + 255 + + ) + +64  + #_POSIX_MAX_INPUT + 255 + + ) + +67  + #_POSIX_MQ_OPEN_MAX + 8 + + ) + +70  + #_POSIX_MQ_PRIO_MAX + 32 + + ) + +73  + #_POSIX_NAME_MAX + 14 + + ) + +76 #ifde +__USE_XOPEN2K + + +77  + #_POSIX_NGROUPS_MAX + 8 + + ) + +79  + #_POSIX_NGROUPS_MAX + 0 + + ) + +83 #ifde +__USE_XOPEN2K + + +84  + #_POSIX_OPEN_MAX + 20 + + ) + +86  + #_POSIX_OPEN_MAX + 16 + + ) + +89 #i! +defed + +__USE_XOPEN2K + || defed +__USE_GNU + + +92  + #_POSIX_FD_SETSIZE + +_POSIX_OPEN_MAX + + + ) + +96  + #_POSIX_PATH_MAX + 256 + + ) + +99  + #_POSIX_PIPE_BUF + 512 + + ) + +103  + #_POSIX_RE_DUP_MAX + 255 + + ) + +106  + #_POSIX_RTSIG_MAX + 8 + + ) + +109  + #_POSIX_SEM_NSEMS_MAX + 256 + + ) + +112  + #_POSIX_SEM_VALUE_MAX + 32767 + + ) + +115  + #_POSIX_SIGQUEUE_MAX + 32 + + ) + +118  + #_POSIX_SSIZE_MAX + 32767 + + ) + +121  + #_POSIX_STREAM_MAX + 8 + + ) + +124  + #_POSIX_SYMLINK_MAX + 255 + + ) + +128  + #_POSIX_SYMLOOP_MAX + 8 + + ) + +131  + #_POSIX_TIMER_MAX + 32 + + ) + +134  + #_POSIX_TTY_NAME_MAX + 9 + + ) + +137 #ifde +__USE_XOPEN2K + + +138  + #_POSIX_TZNAME_MAX + 6 + + ) + +140  + #_POSIX_TZNAME_MAX + 3 + + ) + +143 #i! +defed + +__USE_XOPEN2K + || defed +__USE_GNU + + +145  + #_POSIX_QLIMIT + 1 + + ) + +149  + #_POSIX_HIWAT + +_POSIX_PIPE_BUF + + + ) + +152  + #_POSIX_UIO_MAXIOV + 16 + + ) + +156  + #_POSIX_CLOCKRES_MIN + 20000000 + + ) + +160  + ~ + +163 #idef +SSIZE_MAX + + +164  + #SSIZE_MAX + +LONG_MAX + + + ) + +171 #idef +NGROUPS_MAX + + +172  + #NGROUPS_MAX + 8 + + ) + + @/usr/include/bits/posix2_lim.h + +22 #idef +_BITS_POSIX2_LIM_H + + +23  + #_BITS_POSIX2_LIM_H + 1 + + ) + +27  + #_POSIX2_BC_BASE_MAX + 99 + + ) + +30  + #_POSIX2_BC_DIM_MAX + 2048 + + ) + +33  + #_POSIX2_BC_SCALE_MAX + 99 + + ) + +36  + #_POSIX2_BC_STRING_MAX + 1000 + + ) + +40  + #_POSIX2_COLL_WEIGHTS_MAX + 2 + + ) + +44  + #_POSIX2_EXPR_NEST_MAX + 32 + + ) + +47  + #_POSIX2_LINE_MAX + 2048 + + ) + +51  + #_POSIX2_RE_DUP_MAX + 255 + + ) + +55  + #_POSIX2_CHARCLASS_NAME_MAX + 14 + + ) + +62 #idef +BC_BASE_MAX + + +63  + #BC_BASE_MAX + +_POSIX2_BC_BASE_MAX + + + ) + +65 #idef +BC_DIM_MAX + + +66  + #BC_DIM_MAX + +_POSIX2_BC_DIM_MAX + + + ) + +68 #idef +BC_SCALE_MAX + + +69  + #BC_SCALE_MAX + +_POSIX2_BC_SCALE_MAX + + + ) + +71 #idef +BC_STRING_MAX + + +72  + #BC_STRING_MAX + +_POSIX2_BC_STRING_MAX + + + ) + +74 #idef +COLL_WEIGHTS_MAX + + +75  + #COLL_WEIGHTS_MAX + 255 + + ) + +77 #idef +EXPR_NEST_MAX + + +78  + #EXPR_NEST_MAX + +_POSIX2_EXPR_NEST_MAX + + + ) + +80 #idef +LINE_MAX + + +81  + #LINE_MAX + +_POSIX2_LINE_MAX + + + ) + +83 #idef +CHARCLASS_NAME_MAX + + +84  + #CHARCLASS_NAME_MAX + 2048 + + ) + +88  + #RE_DUP_MAX + (0x7fff) + + ) + + @/usr/include/bits/shm.h + +18 #ide +_SYS_SHM_H + + +22  + ~ + +25  + #SHM_R + 0400 + + ) + +26  + #SHM_W + 0200 + + ) + +29  + #SHM_RDONLY + 010000 + + ) + +30  + #SHM_RND + 020000 + + ) + +31  + #SHM_REMAP + 040000 + + ) + +32  + #SHM_EXEC + 0100000 + + ) + +35  + #SHM_LOCK + 11 + + ) + +36  + #SHM_UNLOCK + 12 + + ) + +38 + g__BEGIN_DECLS + + +41  + #SHMLBA + ( + `__ggesize + ()) + + ) + +42  + $__ggesize + ( +__THROW + + `__ibu__ + (( +__cڡ__ +)); + +46  +__sys_ulg_t + + tshmt_t +; + +49  + sshmid_ds + + +51  +c_rm + +shm_rm +; + +52 +size_t + +shm_gsz +; + +53 +__time_t + +shm_ime +; + +54 #ide +__x86_64__ + + +55  +__glibc_rved1 +; + +57 +__time_t + +shm_dtime +; + +58 #ide +__x86_64__ + + +59  +__glibc_rved2 +; + +61 +__time_t + +shm_ime +; + +62 #ide +__x86_64__ + + +63  +__glibc_rved3 +; + +65 +__pid_t + +shm_id +; + +66 +__pid_t + +shm_id +; + +67 +shmt_t + +shm_ljch +; + +68 +__sys_ulg_t + +__glibc_rved4 +; + +69 +__sys_ulg_t + +__glibc_rved5 +; + +72 #ifde +__USE_MISC + + +75  + #SHM_STAT + 13 + + ) + +76  + #SHM_INFO + 14 + + ) + +79  + #SHM_DEST + 01000 + + ) + +80  + #SHM_LOCKED + 02000 + + ) + +81  + #SHM_HUGETLB + 04000 + + ) + +82  + #SHM_NORESERVE + 010000 + + ) + +84  + sshmfo + + +86 +__sys_ulg_t + +shmmax +; + +87 +__sys_ulg_t + +shmm +; + +88 +__sys_ulg_t + +shmmni +; + +89 +__sys_ulg_t + +shmg +; + +90 +__sys_ulg_t + +shml +; + +91 +__sys_ulg_t + +__glibc_rved1 +; + +92 +__sys_ulg_t + +__glibc_rved2 +; + +93 +__sys_ulg_t + +__glibc_rved3 +; + +94 +__sys_ulg_t + +__glibc_rved4 +; + +97  + sshm_fo + + +99  +ud_ids +; + +100 +__sys_ulg_t + +shm_t +; + +101 +__sys_ulg_t + +shm_rss +; + +102 +__sys_ulg_t + +shm_swp +; + +103 +__sys_ulg_t + +sw_ms +; + +104 +__sys_ulg_t + +sw_sucss +; + +109 +__END_DECLS + + + @/usr/include/bits/siginfo.h + +19 #i! +defed + +_SIGNAL_H + && !defed +__ed_sigfo_t + \ + +20 && ! +defed + + g__ed_sigevt_t + + +24  + ~ + +26 #i(! +defed + +__have_sigv_t + \ + +27 && ( +defed + + g_SIGNAL_H + || defed + g__ed_sigfo_t + \ + +28 || +defed + + g__ed_sigevt_t +)) + +29  + #__have_sigv_t + 1 + + ) + +32  + usigv + + +34  + msiv_t +; + +35 * + msiv_r +; + +36 } + tsigv_t +; + +39 #i(! +defed + +__have_sigfo_t + \ + +40 && ( +defed + + g_SIGNAL_H + || defed + g__ed_sigfo_t +)) + +41  + #__have_sigfo_t + 1 + + ) + +43  + #__SI_MAX_SIZE + 128 + + ) + +44 #i +__WORDSIZE + == 64 + +45  + #__SI_PAD_SIZE + (( +__SI_MAX_SIZE + /  ()- 4) + + ) + +47  + #__SI_PAD_SIZE + (( +__SI_MAX_SIZE + /  ()- 3) + + ) + +50 #i +defed + +__x86_64__ + && +__WORDSIZE + == 32 + +55  +__ock_t + + t__ibu__ + (( + t__igd__ + (4)) + t__sigchld_ock_t +; + +56  + #__SI_ALIGNMENT + + `__ibu__ + (( + `__igd__ + (8))) + + ) + +58  +__ock_t + + t__sigchld_ock_t +; + +59  + #__SI_ALIGNMENT + + + ) + +64  +si_signo +; + +65  +si_o +; + +67  +si_code +; + +71  +_d +[ +__SI_PAD_SIZE +]; + +76 +__pid_t + +si_pid +; + +77 +__uid_t + +si_uid +; + +78 } +_kl +; + +83  +si_tid +; + +84  +si_ovrun +; + +85 +sigv_t + +si_sigv +; + +86 } +_tim +; + +91 +__pid_t + +si_pid +; + +92 +__uid_t + +si_uid +; + +93 +sigv_t + +si_sigv +; + +94 } +_ +; + +99 +__pid_t + +si_pid +; + +100 +__uid_t + +si_uid +; + +101  +si_us +; + +102 +__sigchld_ock_t + +si_utime +; + +103 +__sigchld_ock_t + +si_ime +; + +104 } +_sigchld +; + +109 * +si_addr +; + +110  +si_addr_lsb +; + +113 * +_low +; + +114 * +_u +; + +115 } +si_addr_bnd +; + +116 } +_sigu +; + +121  +si_bd +; + +122  +si_fd +; + +123 } +_sigpl +; + +128 * +__addr +; + +129  +_sys +; + +130  +_ch +; + +131 } +_sigsys +; + +132 } +_siflds +; + +133 } + tsigfo_t + + t__SI_ALIGNMENT +; + +137  + #si_pid + +_siflds +. +_kl +. +si_pid + + + ) + +138  + #si_uid + +_siflds +. +_kl +. +si_uid + + + ) + +139  + #si_timid + +_siflds +. +_tim +. +si_tid + + + ) + +140  + #si_ovrun + +_siflds +. +_tim +. +si_ovrun + + + ) + +141  + #si_us + +_siflds +. +_sigchld +. +si_us + + + ) + +142  + #si_utime + +_siflds +. +_sigchld +. +si_utime + + + ) + +143  + #si_ime + +_siflds +. +_sigchld +. +si_ime + + + ) + +144  + #si_vue + +_siflds +. +_ +. +si_sigv + + + ) + +145  + #si_t + +_siflds +. +_ +. +si_sigv +. +siv_t + + + ) + +146  + #si_r + +_siflds +. +_ +. +si_sigv +. +siv_r + + + ) + +147  + #si_addr + +_siflds +. +_sigu +. +si_addr + + + ) + +148  + #si_addr_lsb + +_siflds +. +_sigu +. +si_addr_lsb + + + ) + +149  + #si_low + +_siflds +. +_sigu +. +si_addr_bnd +. +_low + + + ) + +150  + #si_u + +_siflds +. +_sigu +. +si_addr_bnd +. +_u + + + ) + +151  + #si_bd + +_siflds +. +_sigpl +. +si_bd + + + ) + +152  + #si_fd + +_siflds +. +_sigpl +. +si_fd + + + ) + +153  + #si__addr + +_siflds +. +_sigsys +. +__addr + + + ) + +154  + #si_sys + +_siflds +. +_sigsys +. +_sys + + + ) + +155  + #si_ch + +_siflds +. +_sigsys +. +_ch + + + ) + +162 +SI_ASYNCNL + = -60, + +163  + #SI_ASYNCNL + +SI_ASYNCNL + + + ) + +164 +SI_TKILL + = -6, + +165  + #SI_TKILL + +SI_TKILL + + + ) + +166 +SI_SIGIO +, + +167  + #SI_SIGIO + +SI_SIGIO + + + ) + +168 +SI_ASYNCIO +, + +169  + #SI_ASYNCIO + +SI_ASYNCIO + + + ) + +170 +SI_MESGQ +, + +171  + #SI_MESGQ + +SI_MESGQ + + + ) + +172 +SI_TIMER +, + +173  + #SI_TIMER + +SI_TIMER + + + ) + +174 +SI_QUEUE +, + +175  + #SI_QUEUE + +SI_QUEUE + + + ) + +176 +SI_USER +, + +177  + #SI_USER + +SI_USER + + + ) + +178 +SI_KERNEL + = 0x80 + +179  + #SI_KERNEL + +SI_KERNEL + + + ) + +183 #i +defed + +__USE_XOPEN_EXTENDED + || defed +__USE_XOPEN2K8 + + +187 +ILL_ILLOPC + = 1, + +188  + #ILL_ILLOPC + +ILL_ILLOPC + + + ) + +189 +ILL_ILLOPN +, + +190  + #ILL_ILLOPN + +ILL_ILLOPN + + + ) + +191 +ILL_ILLADR +, + +192  + #ILL_ILLADR + +ILL_ILLADR + + + ) + +193 +ILL_ILLTRP +, + +194  + #ILL_ILLTRP + +ILL_ILLTRP + + + ) + +195 +ILL_PRVOPC +, + +196  + #ILL_PRVOPC + +ILL_PRVOPC + + + ) + +197 +ILL_PRVREG +, + +198  + #ILL_PRVREG + +ILL_PRVREG + + + ) + +199 +ILL_COPROC +, + +200  + #ILL_COPROC + +ILL_COPROC + + + ) + +201 +ILL_BADSTK + + +202  + #ILL_BADSTK + +ILL_BADSTK + + + ) + +208 +FPE_INTDIV + = 1, + +209  + #FPE_INTDIV + +FPE_INTDIV + + + ) + +210 +FPE_INTOVF +, + +211  + #FPE_INTOVF + +FPE_INTOVF + + + ) + +212 +FPE_FLTDIV +, + +213  + #FPE_FLTDIV + +FPE_FLTDIV + + + ) + +214 +FPE_FLTOVF +, + +215  + #FPE_FLTOVF + +FPE_FLTOVF + + + ) + +216 +FPE_FLTUND +, + +217  + #FPE_FLTUND + +FPE_FLTUND + + + ) + +218 +FPE_FLTRES +, + +219  + #FPE_FLTRES + +FPE_FLTRES + + + ) + +220 +FPE_FLTINV +, + +221  + #FPE_FLTINV + +FPE_FLTINV + + + ) + +222 +FPE_FLTSUB + + +223  + #FPE_FLTSUB + +FPE_FLTSUB + + + ) + +229 +SEGV_MAPERR + = 1, + +230  + #SEGV_MAPERR + +SEGV_MAPERR + + + ) + +231 +SEGV_ACCERR + + +232  + #SEGV_ACCERR + +SEGV_ACCERR + + + ) + +238 +BUS_ADRALN + = 1, + +239  + #BUS_ADRALN + +BUS_ADRALN + + + ) + +240 +BUS_ADRERR +, + +241  + #BUS_ADRERR + +BUS_ADRERR + + + ) + +242 +BUS_OBJERR +, + +243  + #BUS_OBJERR + +BUS_OBJERR + + + ) + +244 +BUS_MCEERR_AR +, + +245  + #BUS_MCEERR_AR + +BUS_MCEERR_AR + + + ) + +246 +BUS_MCEERR_AO + + +247  + #BUS_MCEERR_AO + +BUS_MCEERR_AO + + + ) + +251 #ifde +__USE_XOPEN_EXTENDED + + +255 +TRAP_BRKPT + = 1, + +256  + #TRAP_BRKPT + +TRAP_BRKPT + + + ) + +257 +TRAP_TRACE + + +258  + #TRAP_TRACE + +TRAP_TRACE + + + ) + +262 #i +defed + +__USE_XOPEN_EXTENDED + || defed +__USE_XOPEN2K8 + + +266 +CLD_EXITED + = 1, + +267  + #CLD_EXITED + +CLD_EXITED + + + ) + +268 +CLD_KILLED +, + +269  + #CLD_KILLED + +CLD_KILLED + + + ) + +270 +CLD_DUMPED +, + +271  + #CLD_DUMPED + +CLD_DUMPED + + + ) + +272 +CLD_TRAPPED +, + +273  + #CLD_TRAPPED + +CLD_TRAPPED + + + ) + +274 +CLD_STOPPED +, + +275  + #CLD_STOPPED + +CLD_STOPPED + + + ) + +276 +CLD_CONTINUED + + +277  + #CLD_CONTINUED + +CLD_CONTINUED + + + ) + +283 +POLL_IN + = 1, + +284  + #POLL_IN + +POLL_IN + + + ) + +285 +POLL_OUT +, + +286  + #POLL_OUT + +POLL_OUT + + + ) + +287 +POLL_MSG +, + +288  + #POLL_MSG + +POLL_MSG + + + ) + +289 +POLL_ERR +, + +290  + #POLL_ERR + +POLL_ERR + + + ) + +291 +POLL_PRI +, + +292  + #POLL_PRI + +POLL_PRI + + + ) + +293 +POLL_HUP + + +294  + #POLL_HUP + +POLL_HUP + + + ) + +298 #unde +__ed_sigfo_t + + +302 #i( +defed + +_SIGNAL_H + || defed +__ed_sigevt_t +) \ + +303 && ! +defed + +__have_sigevt_t + + +304  + #__have_sigevt_t + 1 + + ) + +307  + #__SIGEV_MAX_SIZE + 64 + + ) + +308 #i +__WORDSIZE + == 64 + +309  + #__SIGEV_PAD_SIZE + (( +__SIGEV_MAX_SIZE + /  ()- 4) + + ) + +311  + #__SIGEV_PAD_SIZE + (( +__SIGEV_MAX_SIZE + /  ()- 3) + + ) + +315 #ide +__have_had__t + + +316  +had__t + + thad__t +; + +317  + #__have_had__t + 1 + + ) + +320  + ssigevt + + +322 +sigv_t + +sigev_vue +; + +323  +sigev_signo +; + +324  +sigev_nify +; + +328  +_d +[ +__SIGEV_PAD_SIZE +]; + +332 +__pid_t + +_tid +; + +336 (* +_funi +( +sigv_t +); + +337 +had__t + * +_ibu +; + +338 } +_sigev_thad +; + +339 } +_sigev_un +; + +340 } + tsigevt_t +; + +343  + #sigev_nify_funi + +_sigev_un +. +_sigev_thad +. +_funi + + + ) + +344  + #sigev_nify_ibus + +_sigev_un +. +_sigev_thad +. +_ibu + + + ) + +349 +SIGEV_SIGNAL + = 0, + +350  + #SIGEV_SIGNAL + +SIGEV_SIGNAL + + + ) + +351 +SIGEV_NONE +, + +352  + #SIGEV_NONE + +SIGEV_NONE + + + ) + +353 +SIGEV_THREAD +, + +354  + #SIGEV_THREAD + +SIGEV_THREAD + + + ) + +356 +SIGEV_THREAD_ID + = 4 + +357  + #SIGEV_THREAD_ID + +SIGEV_THREAD_ID + + + ) + + @/usr/include/bits/sigset.h + +19 #idef +_SIGSET_H_tys + + +20  + #_SIGSET_H_tys + 1 + + ) + +22  + t__sig_omic_t +; + +26  + #_SIGSET_NWORDS + (1024 / (8 *  ())) + + ) + +29  + m__v +[ +_SIGSET_NWORDS +]; + +30 } + t__sigt_t +; + +41 #i! +defed + +_SIGSET_H_s + && defed +_SIGNAL_H + + +42  + #_SIGSET_H_s + 1 + + ) + +44 #ide +_EXTERN_INLINE + + +45  + #_EXTERN_INLINE + +__ex_le + + + ) + +49  + #__sigmask +( +sig +) \ + +50 (((1<< ((( +sig +- 1% (8 *  ()))) + + ) + +53  + #__sigwd +( +sig +(((sig- 1/ (8 *  ())) + + ) + +55 #i +defed + +__GNUC__ + && __GNUC__ >= 2 + +56  + #__sigemyt +( +t +) \ + +57 ( + `__exnsi__ + ({  +__t + = +_SIGSET_NWORDS +; \ + +58 +sigt_t + * +__t + = ( +t +); \ + +59 -- +__t + >0 +__t +-> +__v +[__cnt] = 0; \ + +60 0; })) + + ) + +61  + #__sigflt +( +t +) \ + +62 ( + `__exnsi__ + ({  +__t + = +_SIGSET_NWORDS +; \ + +63 +sigt_t + * +__t + = ( +t +); \ + +64 -- +__t + >0 +__t +-> +__v +[__cnt] = ~0UL; \ + +65 0; })) + + ) + +67 #ifde +__USE_GNU + + +71  + #__sigimyt +( +t +) \ + +72 ( + `__exnsi__ + ({  +__t + = +_SIGSET_NWORDS +; \ + +73 cڡ +sigt_t + * +__t + = ( +t +); \ + +74  +__t + = +__t +-> +__v +[-- +__t +]; \ + +75 ! +__t + && -- +__t + >= 0) \ + +76 +__t + = +__t +-> +__v +[ +__t +]; \ + +77 +__t + =0; })) + + ) + +78  + #__sigdt +( +de +, + +, +right +) \ + +79 ( + `__exnsi__ + ({  +__t + = +_SIGSET_NWORDS +; \ + +80 +sigt_t + * +__de + = ( +de +); \ + +81 cڡ +sigt_t + * +__ + = ( + +); \ + +82 cڡ +sigt_t + * +__right + = ( +right +); \ + +83 -- +__t + >= 0) \ + +84 +__de +-> +__v +[ +__t +] = ( +__ +->__val[__cnt] \ + +85 & +__right +-> +__v +[ +__t +]); \ + +86 0; })) + + ) + +87  + #__sigܣt +( +de +, + +, +right +) \ + +88 ( + `__exnsi__ + ({  +__t + = +_SIGSET_NWORDS +; \ + +89 +sigt_t + * +__de + = ( +de +); \ + +90 cڡ +sigt_t + * +__ + = ( + +); \ + +91 cڡ +sigt_t + * +__right + = ( +right +); \ + +92 -- +__t + >= 0) \ + +93 +__de +-> +__v +[ +__t +] = ( +__ +->__val[__cnt] \ + +94 | +__right +-> +__v +[ +__t +]); \ + +95 0; })) + + ) + +102  +__sigismemb + (cڡ +__sigt_t + *, ); + +103  +__sigaddt + ( +__sigt_t + *, ); + +104  +__sigdt + ( +__sigt_t + *, ); + +106 #ifde +__USE_EXTERN_INLINES + + +107  + #__SIGSETFN +( +NAME +, +BODY +, +CONST +) \ + +108 +_EXTERN_INLINE + \ + +109 + `NAME + ( +CONST + +__sigt_t + * +__t +,  +__sig +) \ + +111  +__mask + = + `__sigmask + ( +__sig +); \ + +112  +__wd + = + `__sigwd + ( +__sig +); \ + +113  +BODY +; \ + +114 } + + ) + +116 +__SIGSETFN + ( +__sigismemb +, ( +__t +-> +__v +[ +__wd +] & +__mask +) ? 1 : 0, const) + +117 +__SIGSETFN + ( +__sigaddt +, (( +__t +-> +__v +[ +__wd +] | +__mask +), 0), ) + +118 +__SIGSETFN + ( +__sigdt +, (( +__t +-> +__v +[ +__wd +] &~ +__mask +), 0), ) + +120 #unde +__SIGSETFN + + + @/usr/include/bits/socket.h + +19 #ide +__BITS_SOCKET_H + + +20  + #__BITS_SOCKET_H + + + ) + +22 #ide +_SYS_SOCKET_H + + +26  + #__ed_size_t + + + ) + +27  + ~ + +29  + ~ + +32 #ide +__sockn_t_defed + + +33  +__sockn_t + + tsockn_t +; + +34  + #__sockn_t_defed + + + ) + +38  + ~ + +41  + #PF_UNSPEC + 0 + + ) + +42  + #PF_LOCAL + 1 + + ) + +43  + #PF_UNIX + +PF_LOCAL + + + ) + +44  + #PF_FILE + +PF_LOCAL + + + ) + +45  + #PF_INET + 2 + + ) + +46  + #PF_AX25 + 3 + + ) + +47  + #PF_IPX + 4 + + ) + +48  + #PF_APPLETALK + 5 + + ) + +49  + #PF_NETROM + 6 + + ) + +50  + #PF_BRIDGE + 7 + + ) + +51  + #PF_ATMPVC + 8 + + ) + +52  + #PF_X25 + 9 + + ) + +53  + #PF_INET6 + 10 + + ) + +54  + #PF_ROSE + 11 + + ) + +55  + #PF_DECt + 12 + + ) + +56  + #PF_NETBEUI + 13 + + ) + +57  + #PF_SECURITY + 14 + + ) + +58  + #PF_KEY + 15 + + ) + +59  + #PF_NETLINK + 16 + + ) + +60  + #PF_ROUTE + +PF_NETLINK + + + ) + +61  + #PF_PACKET + 17 + + ) + +62  + #PF_ASH + 18 + + ) + +63  + #PF_ECONET + 19 + + ) + +64  + #PF_ATMSVC + 20 + + ) + +65  + #PF_RDS + 21 + + ) + +66  + #PF_SNA + 22 + + ) + +67  + #PF_IRDA + 23 + + ) + +68  + #PF_PPPOX + 24 + + ) + +69  + #PF_WANPIPE + 25 + + ) + +70  + #PF_LLC + 26 + + ) + +71  + #PF_IB + 27 + + ) + +72  + #PF_MPLS + 28 + + ) + +73  + #PF_CAN + 29 + + ) + +74  + #PF_TIPC + 30 + + ) + +75  + #PF_BLUETOOTH + 31 + + ) + +76  + #PF_IUCV + 32 + + ) + +77  + #PF_RXRPC + 33 + + ) + +78  + #PF_ISDN + 34 + + ) + +79  + #PF_PHONET + 35 + + ) + +80  + #PF_IEEE802154 + 36 + + ) + +81  + #PF_CAIF + 37 + + ) + +82  + #PF_ALG + 38 + + ) + +83  + #PF_NFC + 39 + + ) + +84  + #PF_VSOCK + 40 + + ) + +85  + #PF_MAX + 41 + + ) + +88  + #AF_UNSPEC + +PF_UNSPEC + + + ) + +89  + #AF_LOCAL + +PF_LOCAL + + + ) + +90  + #AF_UNIX + +PF_UNIX + + + ) + +91  + #AF_FILE + +PF_FILE + + + ) + +92  + #AF_INET + +PF_INET + + + ) + +93  + #AF_AX25 + +PF_AX25 + + + ) + +94  + #AF_IPX + +PF_IPX + + + ) + +95  + #AF_APPLETALK + +PF_APPLETALK + + + ) + +96  + #AF_NETROM + +PF_NETROM + + + ) + +97  + #AF_BRIDGE + +PF_BRIDGE + + + ) + +98  + #AF_ATMPVC + +PF_ATMPVC + + + ) + +99  + #AF_X25 + +PF_X25 + + + ) + +100  + #AF_INET6 + +PF_INET6 + + + ) + +101  + #AF_ROSE + +PF_ROSE + + + ) + +102  + #AF_DECt + +PF_DECt + + + ) + +103  + #AF_NETBEUI + +PF_NETBEUI + + + ) + +104  + #AF_SECURITY + +PF_SECURITY + + + ) + +105  + #AF_KEY + +PF_KEY + + + ) + +106  + #AF_NETLINK + +PF_NETLINK + + + ) + +107  + #AF_ROUTE + +PF_ROUTE + + + ) + +108  + #AF_PACKET + +PF_PACKET + + + ) + +109  + #AF_ASH + +PF_ASH + + + ) + +110  + #AF_ECONET + +PF_ECONET + + + ) + +111  + #AF_ATMSVC + +PF_ATMSVC + + + ) + +112  + #AF_RDS + +PF_RDS + + + ) + +113  + #AF_SNA + +PF_SNA + + + ) + +114  + #AF_IRDA + +PF_IRDA + + + ) + +115  + #AF_PPPOX + +PF_PPPOX + + + ) + +116  + #AF_WANPIPE + +PF_WANPIPE + + + ) + +117  + #AF_LLC + +PF_LLC + + + ) + +118  + #AF_IB + +PF_IB + + + ) + +119  + #AF_MPLS + +PF_MPLS + + + ) + +120  + #AF_CAN + +PF_CAN + + + ) + +121  + #AF_TIPC + +PF_TIPC + + + ) + +122  + #AF_BLUETOOTH + +PF_BLUETOOTH + + + ) + +123  + #AF_IUCV + +PF_IUCV + + + ) + +124  + #AF_RXRPC + +PF_RXRPC + + + ) + +125  + #AF_ISDN + +PF_ISDN + + + ) + +126  + #AF_PHONET + +PF_PHONET + + + ) + +127  + #AF_IEEE802154 + +PF_IEEE802154 + + + ) + +128  + #AF_CAIF + +PF_CAIF + + + ) + +129  + #AF_ALG + +PF_ALG + + + ) + +130  + #AF_NFC + +PF_NFC + + + ) + +131  + #AF_VSOCK + +PF_VSOCK + + + ) + +132  + #AF_MAX + +PF_MAX + + + ) + +138  + #SOL_RAW + 255 + + ) + +139  + #SOL_DECNET + 261 + + ) + +140  + #SOL_X25 + 262 + + ) + +141  + #SOL_PACKET + 263 + + ) + +142  + #SOL_ATM + 264 + + ) + +143  + #SOL_AAL + 265 + + ) + +144  + #SOL_IRDA + 266 + + ) + +147  + #SOMAXCONN + 128 + + ) + +150  + ~ + +153  + ssockaddr + + +155 +__SOCKADDR_COMMON + ( +_ +); + +156  + m_da +[14]; + +162  + #__ss_igy +  + + ) + +163  + #_SS_PADSIZE + \ + +164 ( +_SS_SIZE + - +__SOCKADDR_COMMON_SIZE + -  ( +__ss_igy +)) + + ) + +166  + ssockaddr_age + + +168 +__SOCKADDR_COMMON + ( +ss_ +); + +169  + m__ss_ddg +[ +_SS_PADSIZE +]; + +170 +__ss_igy + + m__ss_ign +; + +177 + mMSG_OOB + = 0x01, + +178  + #MSG_OOB + +MSG_OOB + + + ) + +179 + mMSG_PEEK + = 0x02, + +180  + #MSG_PEEK + +MSG_PEEK + + + ) + +181 + mMSG_DONTROUTE + = 0x04, + +182  + #MSG_DONTROUTE + +MSG_DONTROUTE + + + ) + +183 #ifde +__USE_GNU + + +185 + mMSG_TRYHARD + = +MSG_DONTROUTE +, + +186  + #MSG_TRYHARD + +MSG_DONTROUTE + + + ) + +188 + mMSG_CTRUNC + = 0x08, + +189  + #MSG_CTRUNC + +MSG_CTRUNC + + + ) + +190 + mMSG_PROXY + = 0x10, + +191  + #MSG_PROXY + +MSG_PROXY + + + ) + +192 + mMSG_TRUNC + = 0x20, + +193  + #MSG_TRUNC + +MSG_TRUNC + + + ) + +194 + mMSG_DONTWAIT + = 0x40, + +195  + #MSG_DONTWAIT + +MSG_DONTWAIT + + + ) + +196 + mMSG_EOR + = 0x80, + +197  + #MSG_EOR + +MSG_EOR + + + ) + +198 + mMSG_WAITALL + = 0x100, + +199  + #MSG_WAITALL + +MSG_WAITALL + + + ) + +200 + mMSG_FIN + = 0x200, + +201  + #MSG_FIN + +MSG_FIN + + + ) + +202 + mMSG_SYN + = 0x400, + +203  + #MSG_SYN + +MSG_SYN + + + ) + +204 + mMSG_CONFIRM + = 0x800, + +205  + #MSG_CONFIRM + +MSG_CONFIRM + + + ) + +206 + mMSG_RST + = 0x1000, + +207  + #MSG_RST + +MSG_RST + + + ) + +208 + mMSG_ERRQUEUE + = 0x2000, + +209  + #MSG_ERRQUEUE + +MSG_ERRQUEUE + + + ) + +210 + mMSG_NOSIGNAL + = 0x4000, + +211  + #MSG_NOSIGNAL + +MSG_NOSIGNAL + + + ) + +212 + mMSG_MORE + = 0x8000, + +213  + #MSG_MORE + +MSG_MORE + + + ) + +214 + mMSG_WAITFORONE + = 0x10000, + +215  + #MSG_WAITFORONE + +MSG_WAITFORONE + + + ) + +216 + mMSG_FASTOPEN + = 0x20000000, + +217  + #MSG_FASTOPEN + +MSG_FASTOPEN + + + ) + +219 + mMSG_CMSG_CLOEXEC + = 0x40000000 + +222  + #MSG_CMSG_CLOEXEC + +MSG_CMSG_CLOEXEC + + + ) + +228  + smsghdr + + +230 * + mmsg_me +; + +231 +sockn_t + + mmsg_m +; + +233  +iovec + * + mmsg_iov +; + +234 +size_t + + mmsg_iovn +; + +236 * + mmsg_cڌ +; + +237 +size_t + + mmsg_cڌn +; + +242  + mmsg_ags +; + +246  + scmsghdr + + +248 +size_t + + mcmsg_n +; + +253  + mcmsg_v +; + +254  + mcmsg_ty +; + +255 #i(! +defed + +__STRICT_ANSI__ + && +__GNUC__ + >2|| +__STDC_VERSION__ + >= 199901L + +256 +__exnsi__ +  +__cmsg_da + + m__exr +; + +261 #i(! +defed + +__STRICT_ANSI__ + && +__GNUC__ + >2|| +__STDC_VERSION__ + >= 199901L + +262  + #CMSG_DATA +( +cmsg +((cmsg)-> +__cmsg_da +) + + ) + +264  + #CMSG_DATA +( +cmsg +((*(( +cmsghdr + *(cmsg+ 1)) + + ) + +266  + #CMSG_NXTHDR +( +mhdr +, +cmsg + + `__cmsg_nxthdr + (mhdr, cmsg) + + ) + +267  + #CMSG_FIRSTHDR +( +mhdr +) \ + +268 (( +size_t +( +mhdr +)-> +msg_cڌn + > ( +cmsghdr +) \ + +269 ? ( +cmsghdr + *( +mhdr +)-> +msg_cڌ + : (cmsghd*0) + + ) + +270  + #CMSG_ALIGN +( +n +((֒+  ( +size_t +) - 1) \ + +271 & ( +size_t +~( (size_t- 1)) + + ) + +272  + #CMSG_SPACE +( +n +( + `CMSG_ALIGN + (len) \ + +273 + + `CMSG_ALIGN + ( ( +cmsghdr +))) + + ) + +274  + #CMSG_LEN +( +n +( + `CMSG_ALIGN + ( ( +cmsghdr +)+ (n)) + + ) + +276  +cmsghdr + * + $__cmsg_nxthdr + ( +msghdr + * +__mhdr +, + +277  +cmsghdr + * +__cmsg + +__THROW +; + +278 #ifde +__USE_EXTERN_INLINES + + +279 #ide +_EXTERN_INLINE + + +280  + #_EXTERN_INLINE + +__ex_le + + + ) + +282 +_EXTERN_INLINE +  +cmsghdr + * + +283 + `__NTH + ( + $__cmsg_nxthdr + ( +msghdr + * +__mhdr +,  +cmsghdr + * +__cmsg +)) + +285 i(( +size_t + +__cmsg +-> +cmsg_n + <  ( +cmsghdr +)) + +287  ( +cmsghdr + *) 0; + +289 +__cmsg + = ( +cmsghdr + *) ((*) __cmsg + +290 + + `CMSG_ALIGN + ( +__cmsg +-> +cmsg_n +)); + +291 i((*( +__cmsg + + 1> ((* +__mhdr +-> +msg_cڌ + + +292 + +__mhdr +-> +msg_cڌn +) + +293 || ((* +__cmsg + + + `CMSG_ALIGN + (__cmsg-> +cmsg_n +) + +294 > ((* +__mhdr +-> +msg_cڌ + + __mhdr-> +msg_cڌn +))) + +296  ( +cmsghdr + *) 0; + +297  +__cmsg +; + +298 + } +} + +305 + mSCM_RIGHTS + = 0x01 + +306  + #SCM_RIGHTS + +SCM_RIGHTS + + + ) + +307 #ifde +__USE_GNU + + +308 , + mSCM_CREDENTIALS + = 0x02 + +309  + #SCM_CREDENTIALS + +SCM_CREDENTIALS + + + ) + +313 #ifde +__USE_GNU + + +315  + sued + + +317 +pid_t + + mpid +; + +318 +uid_t + + muid +; + +319 +gid_t + + mgid +; + +324 #ide +__USE_MISC + + +325 #ide +FIOGETOWN + + +326  + #__SYS_SOCKET_H_undef_FIOGETOWN + + + ) + +328 #ide +FIOSETOWN + + +329  + #__SYS_SOCKET_H_undef_FIOSETOWN + + + ) + +331 #ide +SIOCATMARK + + +332  + #__SYS_SOCKET_H_undef_SIOCATMARK + + + ) + +334 #ide +SIOCGPGRP + + +335  + #__SYS_SOCKET_H_undef_SIOCGPGRP + + + ) + +337 #ide +SIOCGSTAMP + + +338  + #__SYS_SOCKET_H_undef_SIOCGSTAMP + + + ) + +340 #ide +SIOCGSTAMPNS + + +341  + #__SYS_SOCKET_H_undef_SIOCGSTAMPNS + + + ) + +343 #ide +SIOCSPGRP + + +344  + #__SYS_SOCKET_H_undef_SIOCSPGRP + + + ) + +349  + ~ + +351 #ide +__USE_MISC + + +352 #ifde +__SYS_SOCKET_H_undef_FIOGETOWN + + +353 #unde +__SYS_SOCKET_H_undef_FIOGETOWN + + +354 #unde +FIOGETOWN + + +356 #ifde +__SYS_SOCKET_H_undef_FIOSETOWN + + +357 #unde +__SYS_SOCKET_H_undef_FIOSETOWN + + +358 #unde +FIOSETOWN + + +360 #ifde +__SYS_SOCKET_H_undef_SIOCATMARK + + +361 #unde +__SYS_SOCKET_H_undef_SIOCATMARK + + +362 #unde +SIOCATMARK + + +364 #ifde +__SYS_SOCKET_H_undef_SIOCGPGRP + + +365 #unde +__SYS_SOCKET_H_undef_SIOCGPGRP + + +366 #unde +SIOCGPGRP + + +368 #ifde +__SYS_SOCKET_H_undef_SIOCGSTAMP + + +369 #unde +__SYS_SOCKET_H_undef_SIOCGSTAMP + + +370 #unde +SIOCGSTAMP + + +372 #ifde +__SYS_SOCKET_H_undef_SIOCGSTAMPNS + + +373 #unde +__SYS_SOCKET_H_undef_SIOCGSTAMPNS + + +374 #unde +SIOCGSTAMPNS + + +376 #ifde +__SYS_SOCKET_H_undef_SIOCSPGRP + + +377 #unde +__SYS_SOCKET_H_undef_SIOCSPGRP + + +378 #unde +SIOCSPGRP + + +383  + slg + + +385  + ml_off +; + +386  + ml_lg +; + + @/usr/include/bits/socket2.h + +19 #ide +_SYS_SOCKET_H + + +23 +ssize_t + +__cv_chk + ( +__fd +, * +__buf +, +size_t + +__n +, size_ +__bu +, + +24  +__ags +); + +25 +ssize_t + +__REDIRECT + ( +__cv_s +, ( +__fd +, * +__buf +, +size_t + +__n +, + +26  +__ags +), +cv +); + +27 +ssize_t + +__REDIRECT + ( +__cv_chk_wn +, + +28 ( +__fd +, * +__buf +, +size_t + +__n +, size_ +__bu +, + +29  +__ags +), +__cv_chk +) + +30 +__wljr + ("recv called with biggerengthhan size of destination " + +33 +__ftify_funi + +ssize_t + + +34 + $cv + ( +__fd +, * +__buf +, +size_t + +__n +,  +__ags +) + +36 i( + `__bos0 + ( +__buf +!( +size_t +) -1) + +38 i(! + `__but_cڡt_p + ( +__n +)) + +39  + `__cv_chk + ( +__fd +, +__buf +, +__n +, + `__bos0 + (__buf), +__ags +); + +41 i( +__n + > + `__bos0 + ( +__buf +)) + +42  + `__cv_chk_wn + ( +__fd +, +__buf +, +__n +, + `__bos0 + (__buf), +__ags +); + +44  + `__cv_s + ( +__fd +, +__buf +, +__n +, +__ags +); + +45 + } +} + +47 +ssize_t + +__cvom_chk + ( +__fd +, * +__ri + +__buf +, +size_t + +__n +, + +48 +size_t + +__bu +,  +__ags +, + +49 +__SOCKADDR_ARG + +__addr +, + +50 +sockn_t + * +__ri + +__addr_n +); + +51 +ssize_t + +__REDIRECT + ( +__cvom_s +, + +52 ( +__fd +, * +__ri + +__buf +, +size_t + +__n +, + +53  +__ags +, +__SOCKADDR_ARG + +__addr +, + +54 +sockn_t + * +__ri + +__addr_n +), +cvom +); + +55 +ssize_t + +__REDIRECT + ( +__cvom_chk_wn +, + +56 ( +__fd +, * +__ri + +__buf +, +size_t + +__n +, + +57 +size_t + +__bu +,  +__ags +, + +58 +__SOCKADDR_ARG + +__addr +, + +59 +sockn_t + * +__ri + +__addr_n +), +__cvom_chk +) + +60 +__wljr + ("recvfrom called with biggerengthhan size of " + +63 +__ftify_funi + +ssize_t + + +64 + $cvom + ( +__fd +, * +__ri + +__buf +, +size_t + +__n +,  +__ags +, + +65 +__SOCKADDR_ARG + +__addr +, +sockn_t + * +__ri + +__addr_n +) + +67 i( + `__bos0 + ( +__buf +!( +size_t +) -1) + +69 i(! + `__but_cڡt_p + ( +__n +)) + +70  + `__cvom_chk + ( +__fd +, +__buf +, +__n +, + `__bos0 + (__buf), +__ags +, + +71 +__addr +, +__addr_n +); + +72 i( +__n + > + `__bos0 + ( +__buf +)) + +73  + `__cvom_chk_wn + ( +__fd +, +__buf +, +__n +, + `__bos0 + (__buf), +__ags +, + +74 +__addr +, +__addr_n +); + +76  + `__cvom_s + ( +__fd +, +__buf +, +__n +, +__ags +, +__addr +, +__addr_n +); + +77 + } +} + + @/usr/include/bits/time.h + +23 #i +defed + +__ed_timev + || defed +__USE_GNU + + +24 #ide +_STRUCT_TIMEVAL + + +25  + #_STRUCT_TIMEVAL + 1 + + ) + +26  + ~ + +30  + stimev + + +32 +__time_t + + mtv_c +; + +33 +__sucds_t + + mtv_uc +; + +38 #ide +__ed_timev + + +39 #ide +_BITS_TIME_H + + +40  + #_BITS_TIME_H + 1 + + ) + +48  + #CLOCKS_PER_SEC + (( +ock_t +1000000) + + ) + +50 #i(! +defed + +__STRICT_ANSI__ + || defed +__USE_POSIX +) \ + +51 && ! +defed + + g__USE_XOPEN2K + + +54  + ~ + +55  +__syscf + (); + +56  + #CLK_TCK + (( +__ock_t + + `__syscf + (2) + + ) + +59 #ifde +__USE_POSIX199309 + + +61  + #CLOCK_REALTIME + 0 + + ) + +63  + #CLOCK_MONOTONIC + 1 + + ) + +65  + #CLOCK_PROCESS_CPUTIME_ID + 2 + + ) + +67  + #CLOCK_THREAD_CPUTIME_ID + 3 + + ) + +69  + #CLOCK_MONOTONIC_RAW + 4 + + ) + +71  + #CLOCK_REALTIME_COARSE + 5 + + ) + +73  + #CLOCK_MONOTONIC_COARSE + 6 + + ) + +75  + #CLOCK_BOOTTIME + 7 + + ) + +77  + #CLOCK_REALTIME_ALARM + 8 + + ) + +79  + #CLOCK_BOOTTIME_ALARM + 9 + + ) + +81  + #CLOCK_TAI + 11 + + ) + +84  + #TIMER_ABSTIME + 1 + + ) + +87 #ifde +__USE_GNU + + +88  + ~ + +90 +__BEGIN_DECLS + + +93  + $ock_adjtime + ( +__ockid_t + +__ock_id +,  +timex + * +__utx + +__THROW +; + +95 +__END_DECLS + + +101 #unde +__ed_timev + + + @/usr/include/bits/types.h + +23 #idef +_BITS_TYPES_H + + +24  + #_BITS_TYPES_H + 1 + + ) + +26  + ~ + +27  + ~ + +30  + t__u_ch +; + +31  + t__u_sht +; + +32  + t__u_t +; + +33  + t__u_lg +; + +36 sigd  + t__t8_t +; + +37  + t__ut8_t +; + +38 sigd  + t__t16_t +; + +39  + t__ut16_t +; + +40 sigd  + t__t32_t +; + +41  + t__ut32_t +; + +42 #i +__WORDSIZE + == 64 + +43 sigd  + t__t64_t +; + +44  + t__ut64_t +; + +46 +__exnsi__ + sigd  + t__t64_t +; + +47 +__exnsi__ +  + t__ut64_t +; + +51 #i +__WORDSIZE + == 64 + +52  + t__quad_t +; + +53  + t__u_quad_t +; + +55 +__exnsi__ +  + t__quad_t +; + +56 +__exnsi__ +  + t__u_quad_t +; + +89  + #__S16_TYPE +  + + ) + +90  + #__U16_TYPE +  + + ) + +91  + #__S32_TYPE +  + + ) + +92  + #__U32_TYPE +  + + ) + +93  + #__SLONGWORD_TYPE +  + + ) + +94  + #__ULONGWORD_TYPE +  + + ) + +95 #i +__WORDSIZE + == 32 + +96  + #__SQUAD_TYPE + +__quad_t + + + ) + +97  + #__UQUAD_TYPE + +__u_quad_t + + + ) + +98  + #__SWORD_TYPE +  + + ) + +99  + #__UWORD_TYPE +  + + ) + +100  + #__SLONG32_TYPE +  + + ) + +101  + #__ULONG32_TYPE +  + + ) + +102  + #__S64_TYPE + +__quad_t + + + ) + +103  + #__U64_TYPE + +__u_quad_t + + + ) + +106  + #__STD_TYPE + +__exnsi__ +  + + ) + +107 #i +__WORDSIZE + == 64 + +108  + t__SQUAD_TYPE +  + + ) + +109  + t__UQUAD_TYPE +  + + ) + +110  + t__SWORD_TYPE +  + + ) + +111  + t__UWORD_TYPE +  + + ) + +112  + t__SLONG32_TYPE +  + + ) + +113  + t__ULONG32_TYPE +  + + ) + +114  + t__S64_TYPE +  + + ) + +115  + t__U64_TYPE +  + + ) + +117  + t__STD_TYPE +  + + ) + +121  + ~ + +124 +__STD_TYPE + + t__DEV_T_TYPE + + t__dev_t +; + +125 +__STD_TYPE + +__UID_T_TYPE + + g__uid_t +; + +126 +__STD_TYPE + +__GID_T_TYPE + + g__gid_t +; + +127 +__STD_TYPE + +__INO_T_TYPE + + g__o_t +; + +128 +__STD_TYPE + +__INO64_T_TYPE + + g__o64_t +; + +129 +__STD_TYPE + +__MODE_T_TYPE + + g__mode_t +; + +130 +__STD_TYPE + +__NLINK_T_TYPE + + g__ƚk_t +; + +131 +__STD_TYPE + +__OFF_T_TYPE + + g__off_t +; + +132 +__STD_TYPE + +__OFF64_T_TYPE + + g__off64_t +; + +133 +__STD_TYPE + +__PID_T_TYPE + + g__pid_t +; + +134 +__STD_TYPE + +__FSID_T_TYPE + + g__fsid_t +; + +135 +__STD_TYPE + +__CLOCK_T_TYPE + + g__ock_t +; + +136 +__STD_TYPE + +__RLIM_T_TYPE + + g__im_t +; + +137 +__STD_TYPE + +__RLIM64_T_TYPE + + g__im64_t +; + +138 +__STD_TYPE + +__ID_T_TYPE + + g__id_t +; + +139 +__STD_TYPE + +__TIME_T_TYPE + + g__time_t +; + +140 +__STD_TYPE + +__USECONDS_T_TYPE + + g__ucds_t +; + +141 +__STD_TYPE + +__SUSECONDS_T_TYPE + + g__sucds_t +; + +143 +__STD_TYPE + +__DADDR_T_TYPE + + g__daddr_t +; + +144 +__STD_TYPE + +__KEY_T_TYPE + + g__key_t +; + +147 +__STD_TYPE + +__CLOCKID_T_TYPE + + g__ockid_t +; + +150 +__STD_TYPE + +__TIMER_T_TYPE + + g__tim_t +; + +153 +__STD_TYPE + +__BLKSIZE_T_TYPE + + g__blksize_t +; + +158 +__STD_TYPE + +__BLKCNT_T_TYPE + + g__blkt_t +; + +159 +__STD_TYPE + +__BLKCNT64_T_TYPE + + g__blkt64_t +; + +162 +__STD_TYPE + +__FSBLKCNT_T_TYPE + + g__fsblkt_t +; + +163 +__STD_TYPE + +__FSBLKCNT64_T_TYPE + + g__fsblkt64_t +; + +166 +__STD_TYPE + +__FSFILCNT_T_TYPE + + g__fsft_t +; + +167 +__STD_TYPE + +__FSFILCNT64_T_TYPE + + g__fsft64_t +; + +170 +__STD_TYPE + +__FSWORD_T_TYPE + + g__fswd_t +; + +172 +__STD_TYPE + +__SSIZE_T_TYPE + + g__ssize_t +; + +175 +__STD_TYPE + +__SYSCALL_SLONG_TYPE + + g__sys_g_t +; + +177 +__STD_TYPE + +__SYSCALL_ULONG_TYPE + + g__sys_ulg_t +; + +181  +__off64_t + + t__loff_t +; + +182  +__quad_t + * + t__qaddr_t +; + +183 * + t__ddr_t +; + +186 +__STD_TYPE + +__SWORD_TYPE + + g___t +; + +189 +__STD_TYPE + +__U32_TYPE + + g__sockn_t +; + +192 #unde +__STD_TYPE + + + @/usr/include/bits/wordsize.h + +3 #i +defed + +__x86_64__ + && !defed +__ILP32__ + + +4  + #__WORDSIZE + 64 + + ) + +6  + #__WORDSIZE + 32 + + ) + +9 #ifde +__x86_64__ + + +10  + #__WORDSIZE_TIME64_COMPAT32 + 1 + + ) + +12  + #__SYSCALL_WORDSIZE + 64 + + ) + + @/usr/include/bits/xopen_lim.h + +29 #ide +_XOPEN_LIM_H + + +30  + #_XOPEN_LIM_H + 1 + + ) + +32  + #__ed_IOV_MAX + + + ) + +33  + ~ + +65  + #_XOPEN_IOV_MAX + +_POSIX_UIO_MAXIOV + + + ) + +70  + #NL_ARGMAX + +_POSIX_ARG_MAX + + + ) + +73  + #NL_LANGMAX + +_POSIX2_LINE_MAX + + + ) + +76  + #NL_MSGMAX + +INT_MAX + + + ) + +80  + #NL_NMAX + +INT_MAX + + + ) + +83  + #NL_SETMAX + +INT_MAX + + + ) + +86  + #NL_TEXTMAX + +INT_MAX + + + ) + +89  + #NZERO + 20 + + ) + +93 #ifde +INT_MAX + + +94 #i +INT_MAX + == 32767 + +95  + #WORD_BIT + 16 + + ) + +97 #i +INT_MAX + == 2147483647 + +98  + #WORD_BIT + 32 + + ) + +101  + #WORD_BIT + 64 + + ) + +104 #i +defed + +__INT_MAX__ + + +105 #i +__INT_MAX__ + == 32767 + +106  + #WORD_BIT + 16 + + ) + +108 #i +__INT_MAX__ + == 2147483647 + +109  + #WORD_BIT + 32 + + ) + +112  + #WORD_BIT + 64 + + ) + +116  + #WORD_BIT + 32 + + ) + +120 #ifde +LONG_MAX + + +121 #i +LONG_MAX + == 2147483647 + +122  + #LONG_BIT + 32 + + ) + +125  + #LONG_BIT + 64 + + ) + +127 #i +defed + +__LONG_MAX__ + + +128 #i +__LONG_MAX__ + == 2147483647 + +129  + #LONG_BIT + 32 + + ) + +132  + #LONG_BIT + 64 + + ) + +135  + ~ + +136 #i +__WORDSIZE + == 64 + +137  + #LONG_BIT + 64 + + ) + +139  + #LONG_BIT + 32 + + ) + + @/usr/include/endian.h + +18 #idef +_ENDIAN_H + + +19  + #_ENDIAN_H + 1 + + ) + +21  + ~ + +31  + #__LITTLE_ENDIAN + 1234 + + ) + +32  + #__BIG_ENDIAN + 4321 + + ) + +33  + #__PDP_ENDIAN + 3412 + + ) + +36  + ~ + +40 #ide +__FLOAT_WORD_ORDER + + +41  + #__FLOAT_WORD_ORDER + +__BYTE_ORDER + + + ) + +44 #ifdef +__USE_MISC + + +45  + #LITTLE_ENDIAN + +__LITTLE_ENDIAN + + + ) + +46  + #BIG_ENDIAN + +__BIG_ENDIAN + + + ) + +47  + #PDP_ENDIAN + +__PDP_ENDIAN + + + ) + +48  + #BYTE_ORDER + +__BYTE_ORDER + + + ) + +51 #i +__BYTE_ORDER + = +__LITTLE_ENDIAN + + +52  + #__LONG_LONG_PAIR +( +HI +, +LO +LO, + ) +HI + +53 #i +__BYTE_ORDER + = +__BIG_ENDIAN + + +54  + #__LONG_LONG_PAIR +( +HI +, +LO +HI, + ) +LO + +58 #i +defed + +__USE_MISC + && !defed +__ASSEMBLER__ + + +60  + ~ + +62 #i +__BYTE_ORDER + = +__LITTLE_ENDIAN + + +63  + #htobe16 +( +x + + `__bsw_16 + (x) + + ) + +64  + #hte16 +( +x +(x) + + ) + +65  + #be16toh +( +x + + `__bsw_16 + (x) + + ) + +66  + #16toh +( +x +(x) + + ) + +68  + #htobe32 +( +x + + `__bsw_32 + (x) + + ) + +69  + #hte32 +( +x +(x) + + ) + +70  + #be32toh +( +x + + `__bsw_32 + (x) + + ) + +71  + #32toh +( +x +(x) + + ) + +73  + #htobe64 +( +x + + `__bsw_64 + (x) + + ) + +74  + #hte64 +( +x +(x) + + ) + +75  + #be64toh +( +x + + `__bsw_64 + (x) + + ) + +76  + #64toh +( +x +(x) + + ) + +79  + #htobe16 +( +x +(x) + + ) + +80  + #hte16 +( +x + + `__bsw_16 + (x) + + ) + +81  + #be16toh +( +x +(x) + + ) + +82  + #16toh +( +x + + `__bsw_16 + (x) + + ) + +84  + #htobe32 +( +x +(x) + + ) + +85  + #hte32 +( +x + + `__bsw_32 + (x) + + ) + +86  + #be32toh +( +x +(x) + + ) + +87  + #32toh +( +x + + `__bsw_32 + (x) + + ) + +89  + #htobe64 +( +x +(x) + + ) + +90  + #hte64 +( +x + + `__bsw_64 + (x) + + ) + +91  + #be64toh +( +x +(x) + + ) + +92  + #64toh +( +x + + `__bsw_64 + (x) + + ) + + @/usr/include/features.h + +18 #idef +_FEATURES_H + + +19  + #_FEATURES_H + 1 + + ) + +97 #unde +__USE_ISOC11 + + +98 #unde +__USE_ISOC99 + + +99 #unde +__USE_ISOC95 + + +100 #unde +__USE_ISOCXX11 + + +101 #unde +__USE_POSIX + + +102 #unde +__USE_POSIX2 + + +103 #unde +__USE_POSIX199309 + + +104 #unde +__USE_POSIX199506 + + +105 #unde +__USE_XOPEN + + +106 #unde +__USE_XOPEN_EXTENDED + + +107 #unde +__USE_UNIX98 + + +108 #unde +__USE_XOPEN2K + + +109 #unde +__USE_XOPEN2KXSI + + +110 #unde +__USE_XOPEN2K8 + + +111 #unde +__USE_XOPEN2K8XSI + + +112 #unde +__USE_LARGEFILE + + +113 #unde +__USE_LARGEFILE64 + + +114 #unde +__USE_FILE_OFFSET64 + + +115 #unde +__USE_MISC + + +116 #unde +__USE_ATFILE + + +117 #unde +__USE_GNU + + +118 #unde +__USE_REENTRANT + + +119 #unde +__USE_FORTIFY_LEVEL + + +120 #unde +__KERNEL_STRICT_NAMES + + +124 #ide +_LOOSE_KERNEL_NAMES + + +125  + #__KERNEL_STRICT_NAMES + + + ) + +135 #i +defed + +__GNUC__ + && defed +__GNUC_MINOR__ + + +136  + #__GNUC_PREREQ +( +maj +, +m +) \ + +137 (( +__GNUC__ + << 16+ +__GNUC_MINOR__ + >(( +maj +<< 16+ ( +m +)) + + ) + +139  + #__GNUC_PREREQ +( +maj +, +m +0 + + ) + +146 #i( +defed + +_BSD_SOURCE + || defed +_SVID_SOURCE +) \ + +147 && ! +defed + + g_DEFAULT_SOURCE + + +149 #unde +_DEFAULT_SOURCE + + +150  + #_DEFAULT_SOURCE + 1 + + ) + +154 #ifde +_GNU_SOURCE + + +155 #unde +_ISOC95_SOURCE + + +156  + #_ISOC95_SOURCE + 1 + + ) + +157 #unde +_ISOC99_SOURCE + + +158  + #_ISOC99_SOURCE + 1 + + ) + +159 #unde +_ISOC11_SOURCE + + +160  + #_ISOC11_SOURCE + 1 + + ) + +161 #unde +_POSIX_SOURCE + + +162  + #_POSIX_SOURCE + 1 + + ) + +163 #unde +_POSIX_C_SOURCE + + +164  + #_POSIX_C_SOURCE + 200809L + + ) + +165 #unde +_XOPEN_SOURCE + + +166  + #_XOPEN_SOURCE + 700 + + ) + +167 #unde +_XOPEN_SOURCE_EXTENDED + + +168  + #_XOPEN_SOURCE_EXTENDED + 1 + + ) + +169 #unde +_LARGEFILE64_SOURCE + + +170  + #_LARGEFILE64_SOURCE + 1 + + ) + +171 #unde +_DEFAULT_SOURCE + + +172  + #_DEFAULT_SOURCE + 1 + + ) + +173 #unde +_ATFILE_SOURCE + + +174  + #_ATFILE_SOURCE + 1 + + ) + +179 #i( +defed + +_DEFAULT_SOURCE + \ + +180 || (! +defed + + g__STRICT_ANSI__ + \ + +181 && ! +defed + + g_ISOC99_SOURCE + \ + +182 && ! +defed + + g_POSIX_SOURCE + && !defed + g_POSIX_C_SOURCE + \ + +183 && ! +defed + + g_XOPEN_SOURCE +)) + +184 #unde +_DEFAULT_SOURCE + + +185  + #_DEFAULT_SOURCE + 1 + + ) + +189 #i( +defed + +_ISOC11_SOURCE + \ + +190 || ( +defed + + g__STDC_VERSION__ + && __STDC_VERSION__ >= 201112L)) + +191  + #__USE_ISOC11 + 1 + + ) + +195 #i( +defed + +_ISOC99_SOURCE + || defed +_ISOC11_SOURCE + \ + +196 || ( +defed + +__STDC_VERSION__ + && __STDC_VERSION__ >= 199901L)) + +197  + #__USE_ISOC99 + 1 + + ) + +201 #i( +defed + +_ISOC99_SOURCE + || defed +_ISOC11_SOURCE + \ + +202 || ( +defed + +__STDC_VERSION__ + && __STDC_VERSION__ >= 199409L)) + +203  + #__USE_ISOC95 + 1 + + ) + +210 #i(( +defed + +__lulus + && __cplusplus >= 201103L) \ + +211 || +defed + +__GXX_EXPERIMENTAL_CXX0X__ +) + +212  + #__USE_ISOCXX11 + 1 + + ) + +218 #ifde +_DEFAULT_SOURCE + + +219 #i! +defed + +_POSIX_SOURCE + && !defed +_POSIX_C_SOURCE + + +220  + #__USE_POSIX_IMPLICITLY + 1 + + ) + +222 #unde +_POSIX_SOURCE + + +223  + #_POSIX_SOURCE + 1 + + ) + +224 #unde +_POSIX_C_SOURCE + + +225  + #_POSIX_C_SOURCE + 200809L + + ) + +227 #i((! +defed + +__STRICT_ANSI__ + \ + +228 || ( +defed + +_XOPEN_SOURCE + && (_XOPEN_SOURCE - 0) >= 500)) \ + +229 && ! +defed + +_POSIX_SOURCE + && !defed +_POSIX_C_SOURCE +) + +230  + #_POSIX_SOURCE + 1 + + ) + +231 #i +defed + +_XOPEN_SOURCE + && (_XOPEN_SOURCE - 0) < 500 + +232  + #_POSIX_C_SOURCE + 2 + + ) + +233 #i +defed + +_XOPEN_SOURCE + && (_XOPEN_SOURCE - 0) < 600 + +234  + #_POSIX_C_SOURCE + 199506L + + ) + +235 #i +defed + +_XOPEN_SOURCE + && (_XOPEN_SOURCE - 0) < 700 + +236  + #_POSIX_C_SOURCE + 200112L + + ) + +238  + #_POSIX_C_SOURCE + 200809L + + ) + +240  + #__USE_POSIX_IMPLICITLY + 1 + + ) + +243 #i( +defed + +_POSIX_SOURCE + \ + +244 || ( +defed + +_POSIX_C_SOURCE + && _POSIX_C_SOURCE >= 1) \ + +245 || +defed + +_XOPEN_SOURCE +) + +246  + #__USE_POSIX + 1 + + ) + +249 #i +defed + +_POSIX_C_SOURCE + && _POSIX_C_SOURCE >2 || defed +_XOPEN_SOURCE + + +250  + #__USE_POSIX2 + 1 + + ) + +253 #i +defed + +_POSIX_C_SOURCE + && (_POSIX_C_SOURCE - 0) >= 199309L + +254  + #__USE_POSIX199309 + 1 + + ) + +257 #i +defed + +_POSIX_C_SOURCE + && (_POSIX_C_SOURCE - 0) >= 199506L + +258  + #__USE_POSIX199506 + 1 + + ) + +261 #i +defed + +_POSIX_C_SOURCE + && (_POSIX_C_SOURCE - 0) >= 200112L + +262  + #__USE_XOPEN2K + 1 + + ) + +263 #unde +__USE_ISOC95 + + +264  + #__USE_ISOC95 + 1 + + ) + +265 #unde +__USE_ISOC99 + + +266  + #__USE_ISOC99 + 1 + + ) + +269 #i +defed + +_POSIX_C_SOURCE + && (_POSIX_C_SOURCE - 0) >= 200809L + +270  + #__USE_XOPEN2K8 + 1 + + ) + +271 #unde +_ATFILE_SOURCE + + +272  + #_ATFILE_SOURCE + 1 + + ) + +275 #ifdef +_XOPEN_SOURCE + + +276  + #__USE_XOPEN + 1 + + ) + +277 #i( +_XOPEN_SOURCE + - 0) >= 500 + +278  + #__USE_XOPEN_EXTENDED + 1 + + ) + +279  + #__USE_UNIX98 + 1 + + ) + +280 #unde +_LARGEFILE_SOURCE + + +281  + #_LARGEFILE_SOURCE + 1 + + ) + +282 #i( +_XOPEN_SOURCE + - 0) >= 600 + +283 #i( +_XOPEN_SOURCE + - 0) >= 700 + +284  + #__USE_XOPEN2K8 + 1 + + ) + +285  + #__USE_XOPEN2K8XSI + 1 + + ) + +287  + #__USE_XOPEN2K + 1 + + ) + +288  + #__USE_XOPEN2KXSI + 1 + + ) + +289 #unde +__USE_ISOC95 + + +290  + #__USE_ISOC95 + 1 + + ) + +291 #unde +__USE_ISOC99 + + +292  + #__USE_ISOC99 + 1 + + ) + +295 #ifde +_XOPEN_SOURCE_EXTENDED + + +296  + #__USE_XOPEN_EXTENDED + 1 + + ) + +301 #ifde +_LARGEFILE_SOURCE + + +302  + #__USE_LARGEFILE + 1 + + ) + +305 #ifde +_LARGEFILE64_SOURCE + + +306  + #__USE_LARGEFILE64 + 1 + + ) + +309 #i +defed + +_FILE_OFFSET_BITS + && _FILE_OFFSET_BITS == 64 + +310  + #__USE_FILE_OFFSET64 + 1 + + ) + +313 #i +defed + +_DEFAULT_SOURCE + + +314  + #__USE_MISC + 1 + + ) + +317 #ifdef +_ATFILE_SOURCE + + +318  + #__USE_ATFILE + 1 + + ) + +321 #ifdef +_GNU_SOURCE + + +322  + #__USE_GNU + 1 + + ) + +325 #i +defed + +_REENTRANT + || defed +_THREAD_SAFE + + +326  + #__USE_REENTRANT + 1 + + ) + +329 #i +defed + +_FORTIFY_SOURCE + && _FORTIFY_SOURCE > 0 + +330 #i! +defed + +__OPTIMIZE__ + || __OPTIMIZE__ <= 0 + +331 #wng +_FORTIFY_SOURCE + +ques + +compg + +wh + +timizi + (- +O +) + +332 #i! +__GNUC_PREREQ + (4, 1) + +333 #wng +_FORTIFY_SOURCE + +ques + +GCC + 4.1 + + +ϋr + + +334 #i +_FORTIFY_SOURCE + > 1 + +335  + #__USE_FORTIFY_LEVEL + 2 + + ) + +337  + #__USE_FORTIFY_LEVEL + 1 + + ) + +340 #ide +__USE_FORTIFY_LEVEL + + +341  + #__USE_FORTIFY_LEVEL + 0 + + ) + +346  + ~ + +354 #unde +__GNU_LIBRARY__ + + +355  + #__GNU_LIBRARY__ + 6 + + ) + +359  + #__GLIBC__ + 2 + + ) + +360  + #__GLIBC_MINOR__ + 23 + + ) + +362  + #__GLIBC_PREREQ +( +maj +, +m +) \ + +363 (( +__GLIBC__ + << 16+ +__GLIBC_MINOR__ + >(( +maj +<< 16+ ( +m +)) + + ) + +366 #ide +__ASSEMBLER__ + + +367 #ide +_SYS_CDEFS_H + + +368  + ~ + +373 #i +defed + +__USE_FILE_OFFSET64 + && !defed +__REDIRECT + + +374  + #__USE_LARGEFILE + 1 + + ) + +375  + #__USE_LARGEFILE64 + 1 + + ) + +381 #i +__GNUC_PREREQ + (2, 7&& +defed + +__OPTIMIZE__ + \ + +382 && ! +defed + + g__OPTIMIZE_SIZE__ + && !defed + g__NO_INLINE__ + \ + +383 && +defed + + g__ex_le + + +384  + #__USE_EXTERN_INLINES + 1 + + ) + +392  + ~ + + @/usr/include/linux/posix_types.h + +1 #ide +_LINUX_POSIX_TYPES_H + + +2  + #_LINUX_POSIX_TYPES_H + + + ) + +4  + ~ + +21 #unde +__FD_SETSIZE + + +22  + #__FD_SETSIZE + 1024 + + ) + +25  + mfds_bs +[ +__FD_SETSIZE + / (8 * ())]; + +26 } + t__kl_fd_t +; + +29 (* + t__kl_sighdr_t +)(); + +32  + t__kl_key_t +; + +33  + t__kl_mqd_t +; + +35  + ~ + + @/usr/include/stdint.h + +22 #ide +_STDINT_H + + +23  + #_STDINT_H + 1 + + ) + +25  + ~ + +26  + ~ + +27  + ~ + +34 #ide +__t8_t_defed + + +35  + #__t8_t_defed + + + ) + +36 sigd  + tt8_t +; + +37  + tt16_t +; + +38  + tt32_t +; + +39 #i +__WORDSIZE + == 64 + +40  + tt64_t +; + +42 +__exnsi__ + + +43  + tt64_t +; + +48  + tut8_t +; + +49  + tut16_t +; + +50 #ide +__ut32_t_defed + + +51  + tut32_t +; + +52  + #__ut32_t_defed + + + ) + +54 #i +__WORDSIZE + == 64 + +55  + tut64_t +; + +57 +__exnsi__ + + +58  + tut64_t +; + +65 sigd  + tt_a8_t +; + +66  + tt_a16_t +; + +67  + tt_a32_t +; + +68 #i +__WORDSIZE + == 64 + +69  + tt_a64_t +; + +71 +__exnsi__ + + +72  + tt_a64_t +; + +76  + tut_a8_t +; + +77  + tut_a16_t +; + +78  + tut_a32_t +; + +79 #i +__WORDSIZE + == 64 + +80  + tut_a64_t +; + +82 +__exnsi__ + + +83  + tut_a64_t +; + +90 sigd  + tt_8_t +; + +91 #i +__WORDSIZE + == 64 + +92  + tt_16_t +; + +93  + tt_32_t +; + +94  + tt_64_t +; + +96  + tt_16_t +; + +97  + tt_32_t +; + +98 +__exnsi__ + + +99  + tt_64_t +; + +103  + tut_8_t +; + +104 #i +__WORDSIZE + == 64 + +105  + tut_16_t +; + +106  + tut_32_t +; + +107  + tut_64_t +; + +109  + tut_16_t +; + +110  + tut_32_t +; + +111 +__exnsi__ + + +112  + tut_64_t +; + +117 #i +__WORDSIZE + == 64 + +118 #ide +___t_defed + + +119  + t_t +; + +120  + #___t_defed + + + ) + +122  + tu_t +; + +124 #ide +___t_defed + + +125  + t_t +; + +126  + #___t_defed + + + ) + +128  + tu_t +; + +133 #i +__WORDSIZE + == 64 + +134  + ttmax_t +; + +135  + tutmax_t +; + +137 +__exnsi__ + + +138  + ttmax_t +; + +139 +__exnsi__ + + +140  + tutmax_t +; + +144 #i +__WORDSIZE + == 64 + +145  + #__INT64_C +( +c +## +L + + + ) + +146  + #__UINT64_C +( +c +## +UL + + + ) + +148  + #__INT64_C +( +c +## +LL + + + ) + +149  + #__UINT64_C +( +c +## +ULL + + + ) + +155  + #INT8_MIN + (-128) + + ) + +156  + #INT16_MIN + (-32767-1) + + ) + +157  + #INT32_MIN + (-2147483647-1) + + ) + +158  + #INT64_MIN + (- + `__INT64_C +(9223372036854775807)-1) + + ) + +160  + #INT8_MAX + (127) + + ) + +161  + #INT16_MAX + (32767) + + ) + +162  + #INT32_MAX + (2147483647) + + ) + +163  + #INT64_MAX + ( + `__INT64_C +(9223372036854775807)) + + ) + +166  + #UINT8_MAX + (255) + + ) + +167  + #UINT16_MAX + (65535) + + ) + +168  + #UINT32_MAX + (4294967295U) + + ) + +169  + #UINT64_MAX + ( + `__UINT64_C +(18446744073709551615)) + + ) + +173  + #INT_LEAST8_MIN + (-128) + + ) + +174  + #INT_LEAST16_MIN + (-32767-1) + + ) + +175  + #INT_LEAST32_MIN + (-2147483647-1) + + ) + +176  + #INT_LEAST64_MIN + (- + `__INT64_C +(9223372036854775807)-1) + + ) + +178  + #INT_LEAST8_MAX + (127) + + ) + +179  + #INT_LEAST16_MAX + (32767) + + ) + +180  + #INT_LEAST32_MAX + (2147483647) + + ) + +181  + #INT_LEAST64_MAX + ( + `__INT64_C +(9223372036854775807)) + + ) + +184  + #UINT_LEAST8_MAX + (255) + + ) + +185  + #UINT_LEAST16_MAX + (65535) + + ) + +186  + #UINT_LEAST32_MAX + (4294967295U) + + ) + +187  + #UINT_LEAST64_MAX + ( + `__UINT64_C +(18446744073709551615)) + + ) + +191  + #INT_FAST8_MIN + (-128) + + ) + +192 #i +__WORDSIZE + == 64 + +193  + #INT_FAST16_MIN + (-9223372036854775807L-1) + + ) + +194  + #INT_FAST32_MIN + (-9223372036854775807L-1) + + ) + +196  + #INT_FAST16_MIN + (-2147483647-1) + + ) + +197  + #INT_FAST32_MIN + (-2147483647-1) + + ) + +199  + #INT_FAST64_MIN + (- + `__INT64_C +(9223372036854775807)-1) + + ) + +201  + #INT_FAST8_MAX + (127) + + ) + +202 #i +__WORDSIZE + == 64 + +203  + #INT_FAST16_MAX + (9223372036854775807L) + + ) + +204  + #INT_FAST32_MAX + (9223372036854775807L) + + ) + +206  + #INT_FAST16_MAX + (2147483647) + + ) + +207  + #INT_FAST32_MAX + (2147483647) + + ) + +209  + #INT_FAST64_MAX + ( + `__INT64_C +(9223372036854775807)) + + ) + +212  + #UINT_FAST8_MAX + (255) + + ) + +213 #i +__WORDSIZE + == 64 + +214  + #UINT_FAST16_MAX + (18446744073709551615UL) + + ) + +215  + #UINT_FAST32_MAX + (18446744073709551615UL) + + ) + +217  + #UINT_FAST16_MAX + (4294967295U) + + ) + +218  + #UINT_FAST32_MAX + (4294967295U) + + ) + +220  + #UINT_FAST64_MAX + ( + `__UINT64_C +(18446744073709551615)) + + ) + +224 #i +__WORDSIZE + == 64 + +225  + #INTPTR_MIN + (-9223372036854775807L-1) + + ) + +226  + #INTPTR_MAX + (9223372036854775807L) + + ) + +227  + #UINTPTR_MAX + (18446744073709551615UL) + + ) + +229  + #INTPTR_MIN + (-2147483647-1) + + ) + +230  + #INTPTR_MAX + (2147483647) + + ) + +231  + #UINTPTR_MAX + (4294967295U) + + ) + +236  + #INTMAX_MIN + (- + `__INT64_C +(9223372036854775807)-1) + + ) + +238  + #INTMAX_MAX + ( + `__INT64_C +(9223372036854775807)) + + ) + +241  + #UINTMAX_MAX + ( + `__UINT64_C +(18446744073709551615)) + + ) + +247 #i +__WORDSIZE + == 64 + +248  + #PTRDIFF_MIN + (-9223372036854775807L-1) + + ) + +249  + #PTRDIFF_MAX + (9223372036854775807L) + + ) + +251  + #PTRDIFF_MIN + (-2147483647-1) + + ) + +252  + #PTRDIFF_MAX + (2147483647) + + ) + +256  + #SIG_ATOMIC_MIN + (-2147483647-1) + + ) + +257  + #SIG_ATOMIC_MAX + (2147483647) + + ) + +260 #i +__WORDSIZE + == 64 + +261  + #SIZE_MAX + (18446744073709551615UL) + + ) + +263 #ifde +__WORDSIZE32_SIZE_ULONG + + +264  + #SIZE_MAX + (4294967295UL) + + ) + +266  + #SIZE_MAX + (4294967295U) + + ) + +271 #ide +WCHAR_MIN + + +273  + #WCHAR_MIN + +__WCHAR_MIN + + + ) + +274  + #WCHAR_MAX + +__WCHAR_MAX + + + ) + +278  + #WINT_MIN + (0u) + + ) + +279  + #WINT_MAX + (4294967295u) + + ) + +282  + #INT8_C +( +c + + ) +c + +283  + #INT16_C +( +c + + ) +c + +284  + #INT32_C +( +c + + ) +c + +285 #i +__WORDSIZE + == 64 + +286  + #INT64_C +( +c +## +L + + + ) + +288  + #INT64_C +( +c +## +LL + + + ) + +292  + #UINT8_C +( +c + + ) +c + +293  + #UINT16_C +( +c + + ) +c + +294  + #UINT32_C +( +c +## +U + + + ) + +295 #i +__WORDSIZE + == 64 + +296  + #UINT64_C +( +c +## +UL + + + ) + +298  + #UINT64_C +( +c +## +ULL + + + ) + +302 #i +__WORDSIZE + == 64 + +303  + #INTMAX_C +( +c +## +L + + + ) + +304  + #UINTMAX_C +( +c +## +UL + + + ) + +306  + #INTMAX_C +( +c +## +LL + + + ) + +307  + #UINTMAX_C +( +c +## +ULL + + + ) + + @/usr/include/sys/cdefs.h + +18 #idef +_SYS_CDEFS_H + + +19  + #_SYS_CDEFS_H + 1 + + ) + +22 #ide +_FEATURES_H + + +23  + ~ + +29 #i +defed + +__GNUC__ + && !defed +__STDC__ + + +34 #unde +__P + + +35 #unde +__PMT + + +37 #ifde +__GNUC__ + + +41 #i +__GNUC_PREREQ + (4, 6&& ! +defed + +_LIBC + + +42  + #__LEAF + , +__af__ + + + ) + +43  + #__LEAF_ATTR + + `__ibu__ + (( +__af__ +)) + + ) + +45  + #__LEAF + + + ) + +46  + #__LEAF_ATTR + + + ) + +54 #i! +defed + +__lulus + && +__GNUC_PREREQ + (3, 3) + +55  + #__THROW + + `__ibu__ + (( +__nhrow__ + +__LEAF +)) + + ) + +56  + #__THROWNL + + `__ibu__ + (( +__nhrow__ +)) + + ) + +57  + #__NTH +( +f + + `__ibu__ + (( +__nhrow__ + +__LEAF +) + ) +fct + +59 #i +defed + +__lulus + && +__GNUC_PREREQ + (2,8) + +60  + #__THROW + + `throw + () + + ) + +61  + #__THROWNL + + `throw + () + + ) + +62  + #__NTH +( +f + +__LEAF_ATTR + f + `throw + () + + ) + +64  + #__THROW + + + ) + +65  + #__THROWNL + + + ) + +66  + #__NTH +( +f + + ) +fct + +72  + #__le + + + ) + +74  + #__THROW + + + ) + +75  + #__THROWNL + + + ) + +76  + #__NTH +( +f + + ) +fct + +82  + #__P +( +gs + + ) +args + +83  + #__PMT +( +gs + + ) +args + +88  + #__CONCAT +( +x +, +y +x ## + ) +y + +89  + #__STRING +( +x +#x + + ) + +92  + #__r_t + * + + ) + +93  + #__lg_doub_t +  + + ) + +97 #ifdef +__lulus + + +98  + #__BEGIN_DECLS + "C" { + + ) + +99  + #__END_DECLS + } + + ) + +101  + #__BEGIN_DECLS + + + ) + +102  + #__END_DECLS + + + ) + +111 #i +defed + +__lulus + && defed +_GLIBCPP_USE_NAMESPACES + + +112  + #__BEGIN_NAMESPACE_STD + +mea + +d + { + + ) + +113  + #__END_NAMESPACE_STD + } + + ) + +114  + #__USING_NAMESPACE_STD +( +me + +usg + +d +::me; + + ) + +115  + #__BEGIN_NAMESPACE_C99 + +mea + +__c99 + { + + ) + +116  + #__END_NAMESPACE_C99 + } + + ) + +117  + #__USING_NAMESPACE_C99 +( +me + +usg + +__c99 +::me; + + ) + +122  + #__BEGIN_NAMESPACE_STD + + + ) + +123  + #__END_NAMESPACE_STD + + + ) + +124  + #__USING_NAMESPACE_STD +( +me +) + + ) + +125  + #__BEGIN_NAMESPACE_C99 + + + ) + +126  + #__END_NAMESPACE_C99 + + + ) + +127  + #__USING_NAMESPACE_C99 +( +me +) + + ) + +132  + #__bos +( +r + + `__but_obje_size + (r, +__USE_FORTIFY_LEVEL + > 1) + + ) + +133  + #__bos0 +( +r + + `__but_obje_size + (r, 0) + + ) + +135 #i +__GNUC_PREREQ + (4,3) + +136  + #__wnde +( +me +, +msg +) \ + +137  + `me + ( + `__ibu__ +(( + `__wng__ + ( +msg +))) + + ) + +138  + #__wljr +( +msg + + `__ibu__ +(( + `__wng__ + (msg))) + + ) + +139  + #__rde +( +me +, +msg +) \ + +140  + `me + ( + `__ibu__ +(( + `__r__ + ( +msg +))) + + ) + +142  + #__wnde +( +me +, +msg +  + `me + () + + ) + +143  + #__wljr +( +msg +) + + ) + +144  + #__rde +( +me +, +msg +  + `me + () + + ) + +148 #i +__GNUC_PREREQ + (2,97) + +150  + #__exr + [] + + ) + +152 #ifde +__GNUC__ + + +153  + #__exr + [0] + + ) + +155 #i +defed + +__STDC_VERSION__ + && __STDC_VERSION__ >= 199901L + +156  + #__exr + [] + + ) + +159  + #__exr + [1] + + ) + +175 #i +defed + +__GNUC__ + && __GNUC__ >= 2 + +177  + #__REDIRECT +( +me +, +o +, +s +m + `__asm__ + ( + `__ASMNAME + (#s)) + + ) + +178 #ifde +__lulus + + +179  + #__REDIRECT_NTH +( +me +, +o +, +s +) \ + +180 +me + +o + +__THROW + + `__asm__ + ( + `__ASMNAME + (#s)) + + ) + +181  + #__REDIRECT_NTHNL +( +me +, +o +, +s +) \ + +182 +me + +o + +__THROWNL + + `__asm__ + ( + `__ASMNAME + (#s)) + + ) + +184  + #__REDIRECT_NTH +( +me +, +o +, +s +) \ + +185 +me + +o + + `__asm__ + ( + `__ASMNAME + (#s) +__THROW + + + ) + +186  + #__REDIRECT_NTHNL +( +me +, +o +, +s +) \ + +187 +me + +o + + `__asm__ + ( + `__ASMNAME + (#s) +__THROWNL + + + ) + +189  + #__ASMNAME +( +ame + + `__ASMNAME2 + ( +__USER_LABEL_PREFIX__ +, cme) + + ) + +190  + #__ASMNAME2 +( +efix +, +ame + + `__STRING + (efix + ) +cname + +203 #i! +defed + +__GNUC__ + || __GNUC__ < 2 + +204  + #__ibu__ +( +xyz + + + ) + +210 #i +__GNUC_PREREQ + (2,96) + +211  + #__ibu_mloc__ + + `__ibu__ + (( +__mloc__ +)) + + ) + +213  + #__ibu_mloc__ + + + ) + +218 #i +__GNUC_PREREQ + (4, 3) + +219  + #__ibu_loc_size__ +( +ms +) \ + +220 + `__ibu__ + (( +__loc_size__ + +ms +)) + + ) + +222  + #__ibu_loc_size__ +( +ms + + + ) + +228 #i +__GNUC_PREREQ + (2,96) + +229  + #__ibu_pu__ + + `__ibu__ + (( +__pu__ +)) + + ) + +231  + #__ibu_pu__ + + + ) + +235 #i +__GNUC_PREREQ + (2,5) + +236  + #__ibu_cڡ__ + + `__ibu__ + (( +__cڡ__ +)) + + ) + +238  + #__ibu_cڡ__ + + + ) + +244 #i +__GNUC_PREREQ + (3,1) + +245  + #__ibu_ud__ + + `__ibu__ + (( +__ud__ +)) + + ) + +246  + #__ibu_nole__ + + `__ibu__ + (( +__nole__ +)) + + ) + +248  + #__ibu_ud__ + + `__ibu__ + (( +__unud__ +)) + + ) + +249  + #__ibu_nole__ + + + ) + +253 #i +__GNUC_PREREQ + (3,2) + +254  + #__ibu_dd__ + + `__ibu__ + (( +__dd__ +)) + + ) + +256  + #__ibu_dd__ + + + ) + +265 #i +__GNUC_PREREQ + (2,8) + +266  + #__ibu_fm_g__ +( +x + + `__ibu__ + (( + `__fm_g__ + (x))) + + ) + +268  + #__ibu_fm_g__ +( +x + + + ) + +275 #i +__GNUC_PREREQ + (2,97) + +276  + #__ibu_fm_rfm__ +( +a +, +b +) \ + +277 + `__ibu__ + (( + `__fm__ + ( +__rfm__ +, +a +, +b +))) + + ) + +279  + #__ibu_fm_rfm__ +( +a +, +b + + + ) + +284 #i +__GNUC_PREREQ + (3,3) + +285  + #__nnu +( +ms + + `__ibu__ + (( +__nnu__ +ams)) + + ) + +287  + #__nnu +( +ms +) + + ) + +292 #i +__GNUC_PREREQ + (3,4) + +293  + #__ibu_wn_unud_su__ + \ + +294 + `__ibu__ + (( +__wn_unud_su__ +)) + + ) + +295 #i +__USE_FORTIFY_LEVEL + > 0 + +296  + #__wur + +__ibu_wn_unud_su__ + + + ) + +299  + #__ibu_wn_unud_su__ + + + ) + +301 #ide +__wur + + +302  + #__wur + + + ) + +306 #i +__GNUC_PREREQ + (3,2) + +307  + #__ways_le + +__le + + `__ibu__ + (( +__ways_le__ +)) + + ) + +309  + #__ways_le + +__le + + + ) + +314 #i +__GNUC_PREREQ + (4,3) + +315  + #__ibu_tificl__ + + `__ibu__ + (( +__tificl__ +)) + + ) + +317  + #__ibu_tificl__ + + + ) + +329 #i(! +defed + +__lulus + || +__GNUC_PREREQ + (4,3) \ + +330 || ( +defed + +__g__ + && (defed +__GNUC_STDC_INLINE__ + \ + +331 || +defed + +__GNUC_GNU_INLINE__ +))) + +332 #i +defed + +__GNUC_STDC_INLINE__ + || defed +__lulus + + +333  + #__ex_le + +__le + + `__ibu__ + (( +__gnu_le__ +)) + + ) + +334  + #__ex_ways_le + \ + +335 +__ways_le + + `__ibu__ + (( +__gnu_le__ +)) + + ) + +337  + #__ex_le + +__le + + + ) + +338  + #__ex_ways_le + +__ways_le + + + ) + +342 #ifde +__ex_ways_le + + +343  + #__ftify_funi + +__ex_ways_le + +__ibu_tificl__ + + + ) + +348 #i +__GNUC_PREREQ + (4,3) + +349  + #__va_g_ck +( + `__but_va_g_ck + () + + ) + +350  + #__va_g_ck_n +( + `__but_va_g_ck_n + () + + ) + +357 #i! +__GNUC_PREREQ + (2,8) + +358  + #__exnsi__ + + + ) + +362 #i! +__GNUC_PREREQ + (2,92) + +363  + #__ri + + + ) + +369 #i +__GNUC_PREREQ + (3,1&& ! +defed + +__GNUG__ + + +370  + #__ri_r + +__ri + + + ) + +372 #ifde +__GNUC__ + + +373  + #__ri_r + + + ) + +375 #i +defed + +__STDC_VERSION__ + && __STDC_VERSION__ >= 199901L + +376  + #__ri_r + +ri + + + ) + +379  + #__ri_r + + + ) + +384 #i +__GNUC__ + >= 3 + +385  + #__glibc_uiky +( +cd + + `__but_ex + ((cd), 0) + + ) + +386  + #__glibc_liky +( +cd + + `__but_ex + ((cd), 1) + + ) + +388  + #__glibc_uiky +( +cd +(cd) + + ) + +389  + #__glibc_liky +( +cd +(cd) + + ) + +392 #i(! +defed + +_Nܑu + \ + +393 && ( +defed + +__STDC_VERSION__ + ? __STDC_VERSION__ : 0) < 201112 \ + +394 && ! + $__GNUC_PREREQ + (4,7)) + +395 #i + `__GNUC_PREREQ + (2,8) + +396  + #_Nܑu + + `__ibu__ + (( +__nܑu__ +)) + + ) + +398  + #_Nܑu + + + ) + +402 #i(! +defed + +_Stic_as + && !defed +__lulus + \ + +403 && ( +defed + +__STDC_VERSION__ + ? __STDC_VERSION__ : 0) < 201112 \ + +404 && (! + `__GNUC_PREREQ + (4, 6|| +defed + +__STRICT_ANSI__ +)) + +405  + #_Stic_as +( +ex +, +dgnoic +) \ + +406 (* + `__Stic_as_funi + ()) \ + +407 [!! (ru {  +__r_if_give +: ( +ex +? 2 : -1; })] + + ) + +410  + ~ + +412 #i +defed + +__LONG_DOUBLE_MATH_OPTIONAL + && defed +__NO_LONG_DOUBLE_MATH + + +413  + #__LDBL_COMPAT + 1 + + ) + +414 #ifde +__REDIRECT + + +415  + #__LDBL_REDIR1 +( +me +, +o +, +s + + `__REDIRECT + (me,ro,ls) + + ) + +416  + #__LDBL_REDIR +( +me +, +o +) \ + +417 + `__LDBL_REDIR1 + ( +me +, +o +, +__dbl_ +##me) + + ) + +418  + #__LDBL_REDIR1_NTH +( +me +, +o +, +s + + `__REDIRECT_NTH + (me,ro,ls) + + ) + +419  + #__LDBL_REDIR_NTH +( +me +, +o +) \ + +420 + `__LDBL_REDIR1_NTH + ( +me +, +o +, +__dbl_ +##me) + + ) + +421  + #__LDBL_REDIR1_DECL +( +me +, +s +) \ + +422 + `__tyof + ( +me +m + `__asm + ( + `__ASMNAME + (#s)); + + ) + +423  + #__LDBL_REDIR_DECL +( +me +) \ + +424 + `__tyof + ( +me +m + `__asm + ( + `__ASMNAME + ("__dbl_" #me)); + + ) + +425  + #__REDIRECT_LDBL +( +me +, +o +, +s +) \ + +426 + `__LDBL_REDIR1 + ( +me +, +o +, +__dbl_ +## +s +) + + ) + +427  + #__REDIRECT_NTH_LDBL +( +me +, +o +, +s +) \ + +428 + `__LDBL_REDIR1_NTH + ( +me +, +o +, +__dbl_ +## +s +) + + ) + +431 #i! +defed + +__LDBL_COMPAT + || !defed +__REDIRECT + + +432  + #__LDBL_REDIR1 +( +me +, +o +, +s +m + ) +proto + +433  + #__LDBL_REDIR +( +me +, +o +m + ) +proto + +434  + #__LDBL_REDIR1_NTH +( +me +, +o +, +s +m +__THROW + + + ) + +435  + #__LDBL_REDIR_NTH +( +me +, +o +m +__THROW + + + ) + +436  + #__LDBL_REDIR_DECL +( +me +) + + ) + +437 #ifde +__REDIRECT + + +438  + #__REDIRECT_LDBL +( +me +, +o +, +s + + `__REDIRECT + (me,ro,ls) + + ) + +439  + #__REDIRECT_NTH_LDBL +( +me +, +o +, +s +) \ + +440 + `__REDIRECT_NTH + ( +me +, +o +, +s +) + + ) + + @/usr/include/sys/ipc.h + +18 #ide +_SYS_IPC_H + + +19  + #_SYS_IPC_H + 1 + + ) + +21  + ~ + +23 #i! +defed + +__USE_MISC + && !defed +__USE_XOPEN + && +__GNUC__ + >= 2 + +28  + ~ + +29  + ~ + +31 #ide +__uid_t_defed + + +32  +__uid_t + + tuid_t +; + +33  + #__uid_t_defed + + + ) + +36 #ide +__gid_t_defed + + +37  +__gid_t + + tgid_t +; + +38  + #__gid_t_defed + + + ) + +41 #ide +__mode_t_defed + + +42  +__mode_t + + tmode_t +; + +43  + #__mode_t_defed + + + ) + +46 #ide +__key_t_defed + + +47  +__key_t + + tkey_t +; + +48  + #__key_t_defed + + + ) + +51 +__BEGIN_DECLS + + +54 +key_t + + $ok + (cڡ * +__thme +,  +__oj_id + +__THROW +; + +56 +__END_DECLS + + + @/usr/include/sys/select.h + +21 #ide +_SYS_SELECT_H + + +22  + #_SYS_SELECT_H + 1 + + ) + +24  + ~ + +27  + ~ + +30  + ~ + +33  + ~ + +35 #ide +__sigt_t_defed + + +36  + #__sigt_t_defed + + + ) + +37  +__sigt_t + + tsigt_t +; + +41  + #__ed_time_t + + + ) + +42  + #__ed_timeec + + + ) + +43  + ~ + +44  + #__ed_timev + + + ) + +45  + ~ + +47 #ide +__sucds_t_defed + + +48  +__sucds_t + + tsucds_t +; + +49  + #__sucds_t_defed + + + ) + +54  + t__fd_mask +; + +57 #unde +__NFDBITS + + +59  + #__NFDBITS + (8 * ( ( +__fd_mask +)) + + ) + +60  + #__FD_ELT +( +d +((d/ +__NFDBITS +) + + ) + +61  + #__FD_MASK +( +d +(( +__fd_mask +(1UL << ((d% +__NFDBITS +))) + + ) + +68 #ifde +__USE_XOPEN + + +69 +__fd_mask + + mfds_bs +[ +__FD_SETSIZE + / +__NFDBITS +]; + +70  + #__FDS_BITS +( +t +((t)-> +fds_bs +) + + ) + +72 +__fd_mask + + m__fds_bs +[ +__FD_SETSIZE + / +__NFDBITS +]; + +73  + #__FDS_BITS +( +t +((t)-> +__fds_bs +) + + ) + +75 } + tfd_t +; + +78  + #FD_SETSIZE + +__FD_SETSIZE + + + ) + +80 #ifde +__USE_MISC + + +82  +__fd_mask + + tfd_mask +; + +85  + #NFDBITS + +__NFDBITS + + + ) + +90  + #FD_SET +( +fd +, +fd + + `__FD_SET + (fd, fd) + + ) + +91  + #FD_CLR +( +fd +, +fd + + `__FD_CLR + (fd, fd) + + ) + +92  + #FD_ISSET +( +fd +, +fd + + `__FD_ISSET + (fd, fd) + + ) + +93  + #FD_ZERO +( +fd + + `__FD_ZERO + (fd) + + ) + +96 +__BEGIN_DECLS + + +106  + + ( +__nfds +, +fd_t + * +__ri + +__adfds +, + +107 +fd_t + * +__ri + +__wrefds +, + +108 +fd_t + * +__ri + +__exfds +, + +109  +timev + * +__ri + +__timeout +); + +111 #ifde +__USE_XOPEN2K + + +118  +p + ( +__nfds +, +fd_t + * +__ri + +__adfds +, + +119 +fd_t + * +__ri + +__wrefds +, + +120 +fd_t + * +__ri + +__exfds +, + +121 cڡ  +timeec + * +__ri + +__timeout +, + +122 cڡ +__sigt_t + * +__ri + +__sigmask +); + +127 #i +__USE_FORTIFY_LEVEL + > 0 && +defed + +__GNUC__ + + +128  + ~ + +131 + g__END_DECLS + + + @/usr/include/sys/types.h + +22 #idef +_SYS_TYPES_H + + +23  + #_SYS_TYPES_H + 1 + + ) + +25  + ~ + +27 + g__BEGIN_DECLS + + +29  + ~ + +31 #ifdef +__USE_MISC + + +32 #ide +__u_ch_defed + + +33  +__u_ch + + tu_ch +; + +34  +__u_sht + + tu_sht +; + +35  +__u_t + + tu_t +; + +36  +__u_lg + + tu_lg +; + +37  +__quad_t + + tquad_t +; + +38  +__u_quad_t + + tu_quad_t +; + +39  +__fsid_t + + tfsid_t +; + +40  + #__u_ch_defed + + + ) + +44  +__loff_t + + tloff_t +; + +46 #ide +__o_t_defed + + +47 #ide +__USE_FILE_OFFSET64 + + +48  +__o_t + + to_t +; + +50  +__o64_t + + to_t +; + +52  + #__o_t_defed + + + ) + +54 #i +defed + +__USE_LARGEFILE64 + && !defed +__o64_t_defed + + +55  +__o64_t + + to64_t +; + +56  + #__o64_t_defed + + + ) + +59 #ide +__dev_t_defed + + +60  +__dev_t + + tdev_t +; + +61  + #__dev_t_defed + + + ) + +64 #ide +__gid_t_defed + + +65  +__gid_t + + tgid_t +; + +66  + #__gid_t_defed + + + ) + +69 #ide +__mode_t_defed + + +70  +__mode_t + + tmode_t +; + +71  + #__mode_t_defed + + + ) + +74 #ide +__ƚk_t_defed + + +75  +__ƚk_t + + tƚk_t +; + +76  + #__ƚk_t_defed + + + ) + +79 #ide +__uid_t_defed + + +80  +__uid_t + + tuid_t +; + +81  + #__uid_t_defed + + + ) + +84 #ide +__off_t_defed + + +85 #ide +__USE_FILE_OFFSET64 + + +86  +__off_t + + toff_t +; + +88  +__off64_t + + toff_t +; + +90  + #__off_t_defed + + + ) + +92 #i +defed + +__USE_LARGEFILE64 + && !defed +__off64_t_defed + + +93  +__off64_t + + toff64_t +; + +94  + #__off64_t_defed + + + ) + +97 #ide +__pid_t_defed + + +98  +__pid_t + + tpid_t +; + +99  + #__pid_t_defed + + + ) + +102 #i( +defed + +__USE_XOPEN + || defed +__USE_XOPEN2K8 +) \ + +103 && ! +defed + +__id_t_defed + + +104  +__id_t + + tid_t +; + +105  + #__id_t_defed + + + ) + +108 #ide +__ssize_t_defed + + +109  +__ssize_t + + tssize_t +; + +110  + #__ssize_t_defed + + + ) + +113 #ifdef +__USE_MISC + + +114 #ide +__daddr_t_defed + + +115  +__daddr_t + + tdaddr_t +; + +116  +__ddr_t + + tddr_t +; + +117  + #__daddr_t_defed + + + ) + +121 #i( +defed + +__USE_MISC + || defed +__USE_XOPEN +&& !defed +__key_t_defed + + +122  +__key_t + + tkey_t +; + +123  + #__key_t_defed + + + ) + +126 #i +defed + +__USE_XOPEN + || defed +__USE_XOPEN2K8 + + +127  + #__ed_ock_t + + + ) + +129  + #__ed_time_t + + + ) + +130  + #__ed_tim_t + + + ) + +131  + #__ed_ockid_t + + + ) + +132  + ~ + +134 #ifde +__USE_XOPEN + + +135 #ide +__ucds_t_defed + + +136  +__ucds_t + + tucds_t +; + +137  + #__ucds_t_defed + + + ) + +139 #ide +__sucds_t_defed + + +140  +__sucds_t + + tsucds_t +; + +141  + #__sucds_t_defed + + + ) + +145  + #__ed_size_t + + + ) + +146  + ~ + +148 #ifde +__USE_MISC + + +150  + tulg +; + +151  + tusht +; + +152  + tut +; + +157 #i! +__GNUC_PREREQ + (2, 7) + +160 #ide +__t8_t_defed + + +161  + #__t8_t_defed + + + ) + +162  + tt8_t +; + +163  + tt16_t +; + +164  + tt32_t +; + +165 #i +__WORDSIZE + == 64 + +166  + tt64_t +; + +168 +__exnsi__ +  + tt64_t +; + +173  + tu_t8_t +; + +174  + tu_t16_t +; + +175  + tu_t32_t +; + +176 #i +__WORDSIZE + == 64 + +177  + tu_t64_t +; + +179 +__exnsi__ +  + tu_t64_t +; + +182  + tgi_t +; + +187  + #__tN_t +( +N +, +MODE +) \ + +188 ## + tN +## + t_t + + t__ibu__ + (( + t__mode__ + ( + tMODE +))) + + ) + +189  + t__u_tN_t +( + tN +, + tMODE +) \ + +190  + tu_t +## + tN +## + t_t + + t__ibu__ + (( + t__mode__ + ( + tMODE +))) + + ) + +192 #ide + t__t8_t_defed + + +193  + t__t8_t_defed + + + ) + +194 + t__tN_t + (8, + t__QI__ +); + +195 +__tN_t + (16, +__HI__ +); + +196 +__tN_t + (32, +__SI__ +); + +197 +__tN_t + (64, +__DI__ +); + +200 +__u_tN_t + (8, +__QI__ +); + +201 +__u_tN_t + (16, +__HI__ +); + +202 +__u_tN_t + (32, +__SI__ +); + +203 +__u_tN_t + (64, +__DI__ +); + +205  + tgi_t + + t__ibu__ + (( + t__mode__ + ( + t__wd__ +))); + +211  + #__BIT_TYPES_DEFINED__ + 1 + + ) + +214 #ifdef +__USE_MISC + + +216  + ~ + +219  + ~ + +222  + ~ + +226 #i( +defed + +__USE_UNIX98 + || defed +__USE_XOPEN2K8 +) \ + +227 && ! +defed + +__blksize_t_defed + + +228  +__blksize_t + + tblksize_t +; + +229  + #__blksize_t_defed + + + ) + +233 #ide +__USE_FILE_OFFSET64 + + +234 #ide +__blkt_t_defed + + +235  +__blkt_t + + tblkt_t +; + +236  + #__blkt_t_defed + + + ) + +238 #ide +__fsblkt_t_defed + + +239  +__fsblkt_t + + tfsblkt_t +; + +240  + #__fsblkt_t_defed + + + ) + +242 #ide +__fsft_t_defed + + +243  +__fsft_t + + tfsft_t +; + +244  + #__fsft_t_defed + + + ) + +247 #ide +__blkt_t_defed + + +248  +__blkt64_t + + tblkt_t +; + +249  + #__blkt_t_defed + + + ) + +251 #ide +__fsblkt_t_defed + + +252  +__fsblkt64_t + + tfsblkt_t +; + +253  + #__fsblkt_t_defed + + + ) + +255 #ide +__fsft_t_defed + + +256  +__fsft64_t + + tfsft_t +; + +257  + #__fsft_t_defed + + + ) + +261 #ifde +__USE_LARGEFILE64 + + +262  +__blkt64_t + + tblkt64_t +; + +263  +__fsblkt64_t + + tfsblkt64_t +; + +264  +__fsft64_t + + tfsft64_t +; + +269 #i +defed + +__USE_POSIX199506 + || defed +__USE_UNIX98 + + +270  + ~ + +273 + g__END_DECLS + + + @/usr/include/sys/uio.h + +18 #ide +_SYS_UIO_H + + +19  + #_SYS_UIO_H + 1 + + ) + +21  + ~ + +23  + ~ + +25 + g__BEGIN_DECLS + + +28  + ~ + +39 +ssize_t + + $adv + ( +__fd +, cڡ  +iovec + * +__iovec +,  +__cou +) + +40 +__wur +; + +50 +ssize_t + + $wrev + ( +__fd +, cڡ  +iovec + * +__iovec +,  +__cou +) + +51 +__wur +; + +54 #ifde +__USE_MISC + + +55 #ide +__USE_FILE_OFFSET64 + + +65 +ssize_t + + $dv + ( +__fd +, cڡ  +iovec + * +__iovec +,  +__cou +, + +66 +__off_t + +__offt + +__wur +; + +77 +ssize_t + + $pwrev + ( +__fd +, cڡ  +iovec + * +__iovec +,  +__cou +, + +78 +__off_t + +__offt + +__wur +; + +80 #ifde +__REDIRECT + + +81 +ssize_t + + `__REDIRECT + ( +dv +, ( +__fd +, cڡ  +iovec + * +__iovec +, + +82  +__cou +, +__off64_t + +__offt +), + +83 +dv64 + +__wur +; + +84 +ssize_t + + `__REDIRECT + ( +pwrev +, ( +__fd +, cڡ  +iovec + * +__iovec +, + +85  +__cou +, +__off64_t + +__offt +), + +86 +pwrev64 + +__wur +; + +88  + #dv + +dv64 + + + ) + +89  + #pwrev + +pwrev64 + + + ) + +93 #ifde +__USE_LARGEFILE64 + + +103 +ssize_t + + $dv64 + ( +__fd +, cڡ  +iovec + * +__iovec +,  +__cou +, + +104 +__off64_t + +__offt + +__wur +; + +115 +ssize_t + + $pwrev64 + ( +__fd +, cڡ  +iovec + * +__iovec +,  +__cou +, + +116 +__off64_t + +__offt + +__wur +; + +120 +__END_DECLS + + + @/usr/include/xlocale.h + +20 #ide +_XLOCALE_H + + +21  + #_XLOCALE_H + 1 + + ) + +27  + s__lo_ru + + +30  +__lo_da + * + m__los +[13]; + +33 cڡ * + m__y_b +; + +34 cڡ * + m__y_tow +; + +35 cڡ * + m__y_tou +; + +38 cڡ * + m__mes +[13]; + +39 } * + t__lo_t +; + +42  +__lo_t + + tlo_t +; + + @/usr/include/asm-generic/sockios.h + +1 #ide +__ASM_GENERIC_SOCKIOS_H + + +2  + #__ASM_GENERIC_SOCKIOS_H + + + ) + +5  + #FIOSETOWN + 0x8901 + + ) + +6  + #SIOCSPGRP + 0x8902 + + ) + +7  + #FIOGETOWN + 0x8903 + + ) + +8  + #SIOCGPGRP + 0x8904 + + ) + +9  + #SIOCATMARK + 0x8905 + + ) + +10  + #SIOCGSTAMP + 0x8906 + + ) + +11  + #SIOCGSTAMPNS + 0x8907 + + ) + + @/usr/include/asm-generic/types.h + +1 #ide +_ASM_GENERIC_TYPES_H + + +2  + #_ASM_GENERIC_TYPES_H + + + ) + +6  + ~ + + @/usr/include/asm/posix_types.h + +1 #ifde +__i386__ + + +2  + ~ + +3 #i +defed +( +__ILP32__ +) + +4  + ~ + +6  + ~ + + @/usr/include/asm/socket.h + +1  + ~ + + @/usr/include/bits/byteswap-16.h + +19 #ide +_BITS_BYTESWAP_H + + +23 #ifde +__GNUC__ + + +24 #i +__GNUC__ + >= 2 + +25  + #__bsw_16 +( +x +) \ + +26 ( +__exnsi__ + \ + +27 ({  +__v +, +__x + = (( +x +); \ + +28 i( + `__but_cڡt_p + ( +__x +)) \ + +29 +__v + = + `__bsw_cڡt_16 + ( +__x +); \ + +31 + `__asm__ + ("rorw $8, %w0" \ + +32 : "" ( +__v +) \ + +33 : "0" ( +__x +) \ + +35 +__v +; })) + + ) + +38  + #__bsw_16 +( +x +) \ + +39 ( +__exnsi__ + \ + +40 ({  +__x + = (( +x +); \ + +41 + `__bsw_cڡt_16 + ( +__x +); })) + + ) + +44  +__le +  + +45 + $__bsw_16 + ( +__bsx +) + +47  + `__bsw_cڡt_16 + ( +__bsx +); + +48 + } +} + + @/usr/include/bits/endian.h + +3 #ide +_ENDIAN_H + + +7  + #__BYTE_ORDER + +__LITTLE_ENDIAN + + + ) + + @/usr/include/bits/ipc.h + +18 #ide +_SYS_IPC_H + + +22  + ~ + +25  + #IPC_CREAT + 01000 + + ) + +26  + #IPC_EXCL + 02000 + + ) + +27  + #IPC_NOWAIT + 04000 + + ) + +30  + #IPC_RMID + 0 + + ) + +31  + #IPC_SET + 1 + + ) + +32  + #IPC_STAT + 2 + + ) + +33 #ifde +__USE_GNU + + +34  + #IPC_INFO + 3 + + ) + +38  + #IPC_PRIVATE + (( +__key_t +0 + + ) + +42  + sc_rm + + +44 +__key_t + + m__key +; + +45 +__uid_t + + muid +; + +46 +__gid_t + + mgid +; + +47 +__uid_t + + mcuid +; + +48 +__gid_t + + mcgid +; + +49  + mmode +; + +50  + m__d1 +; + +51  + m__q +; + +52  + m__d2 +; + +53 +__sys_ulg_t + + m__glibc_rved1 +; + +54 +__sys_ulg_t + + m__glibc_rved2 +; + + @/usr/include/bits/ipctypes.h + +19 #ide +_SYS_IPC_H + + +23 #ide +_BITS_IPCTYPES_H + + +24  + #_BITS_IPCTYPES_H + 1 + + ) + +27 #ifde +__x86_64__ + + +28  + t__c_pid_t +; + +30  + t__c_pid_t +; + + @/usr/include/bits/local_lim.h + +24 #ide +NR_OPEN + + +25  + #__undef_NR_OPEN + + + ) + +27 #ide +LINK_MAX + + +28  + #__undef_LINK_MAX + + + ) + +30 #ide +OPEN_MAX + + +31  + #__undef_OPEN_MAX + + + ) + +33 #ide +ARG_MAX + + +34  + #__undef_ARG_MAX + + + ) + +38  + ~ + +41 #ifde +__undef_NR_OPEN + + +42 #unde +NR_OPEN + + +43 #unde +__undef_NR_OPEN + + +46 #ifde +__undef_LINK_MAX + + +47 #unde +LINK_MAX + + +48 #unde +__undef_LINK_MAX + + +51 #ifde +__undef_OPEN_MAX + + +52 #unde +OPEN_MAX + + +53 #unde +__undef_OPEN_MAX + + +56 #ifde +__undef_ARG_MAX + + +57 #unde +ARG_MAX + + +58 #unde +__undef_ARG_MAX + + +62  + #_POSIX_THREAD_KEYS_MAX + 128 + + ) + +64  + #PTHREAD_KEYS_MAX + 1024 + + ) + +67  + #_POSIX_THREAD_DESTRUCTOR_ITERATIONS + 4 + + ) + +69  + #PTHREAD_DESTRUCTOR_ITERATIONS + +_POSIX_THREAD_DESTRUCTOR_ITERATIONS + + + ) + +72  + #_POSIX_THREAD_THREADS_MAX + 64 + + ) + +74 #unde +PTHREAD_THREADS_MAX + + +78  + #AIO_PRIO_DELTA_MAX + 20 + + ) + +81  + #PTHREAD_STACK_MIN + 16384 + + ) + +84  + #DELAYTIMER_MAX + 2147483647 + + ) + +87  + #TTY_NAME_MAX + 32 + + ) + +90  + #LOGIN_NAME_MAX + 256 + + ) + +93  + #HOST_NAME_MAX + 64 + + ) + +96  + #MQ_PRIO_MAX + 32768 + + ) + +99  + #SEM_VALUE_MAX + (2147483647) + + ) + + @/usr/include/bits/pthreadtypes.h + +18 #ide +_BITS_PTHREADTYPES_H + + +19  + #_BITS_PTHREADTYPES_H + 1 + + ) + +21  + ~ + +23 #ifde +__x86_64__ + + +24 #i +__WORDSIZE + == 64 + +25  + #__SIZEOF_PTHREAD_ATTR_T + 56 + + ) + +26  + #__SIZEOF_PTHREAD_MUTEX_T + 40 + + ) + +27  + #__SIZEOF_PTHREAD_MUTEXATTR_T + 4 + + ) + +28  + #__SIZEOF_PTHREAD_COND_T + 48 + + ) + +29  + #__SIZEOF_PTHREAD_CONDATTR_T + 4 + + ) + +30  + #__SIZEOF_PTHREAD_RWLOCK_T + 56 + + ) + +31  + #__SIZEOF_PTHREAD_RWLOCKATTR_T + 8 + + ) + +32  + #__SIZEOF_PTHREAD_BARRIER_T + 32 + + ) + +33  + #__SIZEOF_PTHREAD_BARRIERATTR_T + 4 + + ) + +35  + #__SIZEOF_PTHREAD_ATTR_T + 32 + + ) + +36  + #__SIZEOF_PTHREAD_MUTEX_T + 32 + + ) + +37  + #__SIZEOF_PTHREAD_MUTEXATTR_T + 4 + + ) + +38  + #__SIZEOF_PTHREAD_COND_T + 48 + + ) + +39  + #__SIZEOF_PTHREAD_CONDATTR_T + 4 + + ) + +40  + #__SIZEOF_PTHREAD_RWLOCK_T + 44 + + ) + +41  + #__SIZEOF_PTHREAD_RWLOCKATTR_T + 8 + + ) + +42  + #__SIZEOF_PTHREAD_BARRIER_T + 20 + + ) + +43  + #__SIZEOF_PTHREAD_BARRIERATTR_T + 4 + + ) + +46  + #__SIZEOF_PTHREAD_ATTR_T + 36 + + ) + +47  + #__SIZEOF_PTHREAD_MUTEX_T + 24 + + ) + +48  + #__SIZEOF_PTHREAD_MUTEXATTR_T + 4 + + ) + +49  + #__SIZEOF_PTHREAD_COND_T + 48 + + ) + +50  + #__SIZEOF_PTHREAD_CONDATTR_T + 4 + + ) + +51  + #__SIZEOF_PTHREAD_RWLOCK_T + 32 + + ) + +52  + #__SIZEOF_PTHREAD_RWLOCKATTR_T + 8 + + ) + +53  + #__SIZEOF_PTHREAD_BARRIER_T + 20 + + ) + +54  + #__SIZEOF_PTHREAD_BARRIERATTR_T + 4 + + ) + +60  + thad_t +; + +63  + uhad__t + + +65  + m__size +[ +__SIZEOF_PTHREAD_ATTR_T +]; + +66  + m__ign +; + +68 #ide +__have_had__t + + +69  +had__t + + thad__t +; + +70  + #__have_had__t + 1 + + ) + +74 #ifde +__x86_64__ + + +75  + s__had__li + + +77  +__had__li + * + m__ev +; + +78  +__had__li + * + m__xt +; + +79 } + t__had_li_t +; + +81  + s__had__i + + +83  +__had__i + * + m__xt +; + +84 } + t__had_i_t +; + +92  + s__had_mux_s + + +94  + m__lock +; + +95  + m__cou +; + +96  + m__owr +; + +97 #ifde +__x86_64__ + + +98  + m__nurs +; + +102  + m__kd +; + +103 #ifde +__x86_64__ + + +104  + m__s +; + +105  + m__isi +; + +106 +__had_li_t + + m__li +; + +107  + #__PTHREAD_MUTEX_HAVE_PREV + 1 + + ) + +109  + #__PTHREAD_SPINS + 0, 0 + + ) + +111  + m__nurs +; + +112 +__exnsi__ + union + +116  + m__es +; + +117  + m__isi +; + +118  + #__s + +__isi_da +. +__es + + + ) + +119  + #__isi + +__isi_da +. +__isi + + + ) + +120  + #__PTHREAD_SPINS + { 0, 0 } + + ) + +121 } + m__isi_da +; + +122 +__had_i_t + + m__li +; + +125 } + m__da +; + +126  + m__size +[ +__SIZEOF_PTHREAD_MUTEX_T +]; + +127  + m__ign +; + +128 } + thad_mux_t +; + +132  + m__size +[ +__SIZEOF_PTHREAD_MUTEXATTR_T +]; + +133  + m__ign +; + +134 } + thad_mux_t +; + +143  + m__lock +; + +144  + m__fux +; + +145 +__exnsi__ +  + m__tٮ_q +; + +146 +__exnsi__ +  + m__wakeup_q +; + +147 +__exnsi__ +  + m__wok_q +; + +148 * + m__mux +; + +149  + m__nwas +; + +150  + m__brd_q +; + +151 } + m__da +; + +152  + m__size +[ +__SIZEOF_PTHREAD_COND_T +]; + +153 +__exnsi__ +  + m__ign +; + +154 } + thad_cd_t +; + +158  + m__size +[ +__SIZEOF_PTHREAD_CONDATTR_T +]; + +159  + m__ign +; + +160 } + thad_cd_t +; + +164  + thad_key_t +; + +168  + thad__t +; + +171 #i +defed + +__USE_UNIX98 + || defed +__USE_XOPEN2K + + +176 #ifde +__x86_64__ + + +179  + m__lock +; + +180  + m___ads +; + +181  + m__ads_wakeup +; + +182  + m__wr_wakeup +; + +183  + m___ads_queued +; + +184  + m___wrs_queued +; + +185  + m__wr +; + +186  + m__shed +; + +187 sigd  + m__rwisi +; + +188 #ifde +__ILP32__ + + +189  + m__d1 +[3]; + +190  + #__PTHREAD_RWLOCK_ELISION_EXTRA + 0, { 0, 0, 0 } + + ) + +192  + m__d1 +[7]; + +193  + #__PTHREAD_RWLOCK_ELISION_EXTRA + 0, { 0, 0, 0, 0, 0, 0, 0 } + + ) + +195  + m__d2 +; + +198  + m__ags +; + +199  + #__PTHREAD_RWLOCK_INT_FLAGS_SHARED + 1 + + ) + +200 } + m__da +; + +204  + m__lock +; + +205  + m___ads +; + +206  + m__ads_wakeup +; + +207  + m__wr_wakeup +; + +208  + m___ads_queued +; + +209  + m___wrs_queued +; + +212  + m__ags +; + +213  + m__shed +; + +214 sigd  + m__rwisi +; + +215  + #__PTHREAD_RWLOCK_ELISION_EXTRA + 0 + + ) + +216  + m__d2 +; + +217  + m__wr +; + +218 } + m__da +; + +220  + m__size +[ +__SIZEOF_PTHREAD_RWLOCK_T +]; + +221  + m__ign +; + +222 } + thad_rwlock_t +; + +226  + m__size +[ +__SIZEOF_PTHREAD_RWLOCKATTR_T +]; + +227  + m__ign +; + +228 } + thad_rwlock_t +; + +232 #ifde +__USE_XOPEN2K + + +234 vީ + thad_lock_t +; + +241  + m__size +[ +__SIZEOF_PTHREAD_BARRIER_T +]; + +242  + m__ign +; + +243 } + thad_brr_t +; + +247  + m__size +[ +__SIZEOF_PTHREAD_BARRIERATTR_T +]; + +248  + m__ign +; + +249 } + thad_brr_t +; + +253 #ide +__x86_64__ + + +255  + #__nup_f_ibu + + `__ibu__ + (( + `__grm__ + (1))) + + ) + + @/usr/include/bits/select.h + +18 #ide +_SYS_SELECT_H + + +22  + ~ + +25 #i +defed + +__GNUC__ + && __GNUC__ >= 2 + +27 #i +__WORDSIZE + == 64 + +28  + #__FD_ZERO_STOS + "osq" + + ) + +30  + #__FD_ZERO_STOS + "o" + + ) + +33  + #__FD_ZERO +( +fd +) \ + +35  +__d0 +, +__d1 +; \ + +36 +__asm__ + + `__vީe__ + ("d;; " +__FD_ZERO_STOS + \ + +37 : "=c" ( +__d0 +), "=D" ( +__d1 +) \ + +38 : "a" (0), "0" ( ( +fd_t +) \ + +39 /  ( +__fd_mask +)), \ + +40 "1" (& + `__FDS_BITS + ( +fd +)[0]) \ + +42 } 0) + + ) + +48  + #__FD_ZERO +( +t +) \ + +50  +__i +; \ + +51 +fd_t + * +__r + = ( +t +); \ + +52  +__i + = 0; __<  ( +fd_t +/  ( +__fd_mask +); ++__i) \ + +53 + `__FDS_BITS + ( +__r +)[ +__i +] = 0; \ + +54 } 0) + + ) + +58  + #__FD_SET +( +d +, +t +) \ + +59 ((( + `__FDS_BITS + ( +t +)[ + `__FD_ELT + ( +d +)] | + `__FD_MASK + (d))) + + ) + +60  + #__FD_CLR +( +d +, +t +) \ + +61 ((( + `__FDS_BITS + ( +t +)[ + `__FD_ELT + ( +d +)] &~ + `__FD_MASK + (d))) + + ) + +62  + #__FD_ISSET +( +d +, +t +) \ + +63 (( + `__FDS_BITS + ( +t +)[ + `__FD_ELT + ( +d +)] & + `__FD_MASK + (d)!0) + + ) + + @/usr/include/bits/select2.h + +19 #ide +_SYS_SELECT_H + + +24  +__fdt_chk + ( +__d +); + +25  + $__fdt_wn + ( +__d +) + +26 + `__wljr + ("bit outside of fd_set selected"); + +27 #unde +__FD_ELT + + +28  + #__FD_ELT +( +d +) \ + +29 +__exnsi__ + \ + +30 ({  +__d + = ( +d +); \ + +31 ( + `__but_cڡt_p + ( +__d +) \ + +32 ? (0 < +__d + && __d < +__FD_SETSIZE + \ + +33 ? ( +__d + / +__NFDBITS +) \ + +34 : + `__fdt_wn + ( +__d +)) \ + +35 : + `__fdt_chk + ( +__d +)); + } +}) + + ) + + @/usr/include/bits/sockaddr.h + +23 #ide +_BITS_SOCKADDR_H + + +24  + #_BITS_SOCKADDR_H + 1 + + ) + +28  + t_my_t +; + +34  + #__SOCKADDR_COMMON +( +_efix +) \ + +35 +_my_t + +_efix +## +my + + + ) + +37  + #__SOCKADDR_COMMON_SIZE + ( ()) + + ) + +40  + #_SS_SIZE + 128 + + ) + + @/usr/include/bits/socket_type.h + +19 #ide +_SYS_SOCKET_H + + +24 + e__sock_ty + + +26 + mSOCK_STREAM + = 1, + +28  + #SOCK_STREAM + +SOCK_STREAM + + + ) + +29 + mSOCK_DGRAM + = 2, + +31  + #SOCK_DGRAM + +SOCK_DGRAM + + + ) + +32 + mSOCK_RAW + = 3, + +33  + #SOCK_RAW + +SOCK_RAW + + + ) + +34 + mSOCK_RDM + = 4, + +35  + #SOCK_RDM + +SOCK_RDM + + + ) + +36 + mSOCK_SEQPACKET + = 5, + +38  + #SOCK_SEQPACKET + +SOCK_SEQPACKET + + + ) + +39 + mSOCK_DCCP + = 6, + +40  + #SOCK_DCCP + +SOCK_DCCP + + + ) + +41 + mSOCK_PACKET + = 10, + +44  + #SOCK_PACKET + +SOCK_PACKET + + + ) + +49 + mSOCK_CLOEXEC + = 02000000, + +51  + #SOCK_CLOEXEC + +SOCK_CLOEXEC + + + ) + +52 + mSOCK_NONBLOCK + = 00004000 + +54  + #SOCK_NONBLOCK + +SOCK_NONBLOCK + + + ) + + @/usr/include/bits/stdio_lim.h + +18 #i! +defed + +_STDIO_H + && !defed +__ed_FOPEN_MAX + && !defed +__ed_IOV_MAX + + +22 #ifde +_STDIO_H + + +23  + #L_tmam + 20 + + ) + +24  + #TMP_MAX + 238328 + + ) + +25  + #FILENAME_MAX + 4096 + + ) + +27 #ifde +__USE_POSIX + + +28  + #L_mid + 9 + + ) + +29 #i! +defed + +__USE_XOPEN2K + || defed +__USE_GNU + + +30  + #L_curid + 9 + + ) + +35 #i +defed + +__ed_FOPEN_MAX + || defed +_STDIO_H + + +36 #unde +FOPEN_MAX + + +37  + #FOPEN_MAX + 16 + + ) + +40 #i +defed + +__ed_IOV_MAX + && !defed +IOV_MAX + + +41  + #IOV_MAX + 1024 + + ) + + @/usr/include/bits/timex.h + +18 #idef +_BITS_TIMEX_H + + +19  + #_BITS_TIMEX_H + 1 + + ) + +21  + ~ + +25  + stimex + + +27  + mmodes +; + +28 +__sys_g_t + + mofft +; + +29 +__sys_g_t + + meq +; + +30 +__sys_g_t + + mmaxr +; + +31 +__sys_g_t + + mer +; + +32  + mus +; + +33 +__sys_g_t + + mcڡt +; + +34 +__sys_g_t + + mecisi +; + +35 +__sys_g_t + + mtޔ +; + +36  +timev + + mtime +; + +37 +__sys_g_t + + mtick +; + +38 +__sys_g_t + + mseq +; + +39 +__sys_g_t + + mjr +; + +40  + mshi +; + +41 +__sys_g_t + + mab +; + +42 +__sys_g_t + + mjt +; + +43 +__sys_g_t + + mlt +; + +44 +__sys_g_t + + mrt +; + +45 +__sys_g_t + + mbt +; + +47  + mi +; + +56  + #ADJ_OFFSET + 0x0001 + + ) + +57  + #ADJ_FREQUENCY + 0x0002 + + ) + +58  + #ADJ_MAXERROR + 0x0004 + + ) + +59  + #ADJ_ESTERROR + 0x0008 + + ) + +60  + #ADJ_STATUS + 0x0010 + + ) + +61  + #ADJ_TIMECONST + 0x0020 + + ) + +62  + #ADJ_TAI + 0x0080 + + ) + +63  + #ADJ_SETOFFSET + 0x0100 + + ) + +64  + #ADJ_MICRO + 0x1000 + + ) + +65  + #ADJ_NANO + 0x2000 + + ) + +66  + #ADJ_TICK + 0x4000 + + ) + +67  + #ADJ_OFFSET_SINGLESHOT + 0x8001 + + ) + +68  + #ADJ_OFFSET_SS_READ + 0xa001 + + ) + +71  + #MOD_OFFSET + +ADJ_OFFSET + + + ) + +72  + #MOD_FREQUENCY + +ADJ_FREQUENCY + + + ) + +73  + #MOD_MAXERROR + +ADJ_MAXERROR + + + ) + +74  + #MOD_ESTERROR + +ADJ_ESTERROR + + + ) + +75  + #MOD_STATUS + +ADJ_STATUS + + + ) + +76  + #MOD_TIMECONST + +ADJ_TIMECONST + + + ) + +77  + #MOD_CLKB + +ADJ_TICK + + + ) + +78  + #MOD_CLKA + +ADJ_OFFSET_SINGLESHOT + + + ) + +79  + #MOD_TAI + +ADJ_TAI + + + ) + +80  + #MOD_MICRO + +ADJ_MICRO + + + ) + +81  + #MOD_NANO + +ADJ_NANO + + + ) + +85  + #STA_PLL + 0x0001 + + ) + +86  + #STA_PPSFREQ + 0x0002 + + ) + +87  + #STA_PPSTIME + 0x0004 + + ) + +88  + #STA_FLL + 0x0008 + + ) + +90  + #STA_INS + 0x0010 + + ) + +91  + #STA_DEL + 0x0020 + + ) + +92  + #STA_UNSYNC + 0x0040 + + ) + +93  + #STA_FREQHOLD + 0x0080 + + ) + +95  + #STA_PPSSIGNAL + 0x0100 + + ) + +96  + #STA_PPSJITTER + 0x0200 + + ) + +97  + #STA_PPSWANDER + 0x0400 + + ) + +98  + #STA_PPSERROR + 0x0800 + + ) + +100  + #STA_CLOCKERR + 0x1000 + + ) + +101  + #STA_NANO + 0x2000 + + ) + +102  + #STA_MODE + 0x4000 + + ) + +103  + #STA_CLK + 0x8000 + + ) + +106  + #STA_RONLY + ( +STA_PPSSIGNAL + | +STA_PPSJITTER + | +STA_PPSWANDER + | \ + +107 +STA_PPSERROR + | +STA_CLOCKERR + | +STA_NANO + | +STA_MODE + | +STA_CLK +) + + ) + + @/usr/include/bits/typesizes.h + +19 #ide +_BITS_TYPES_H + + +23 #idef +_BITS_TYPESIZES_H + + +24  + #_BITS_TYPESIZES_H + 1 + + ) + +30 #i +defed + +__x86_64__ + && defed +__ILP32__ + + +31  + #__SYSCALL_SLONG_TYPE + +__SQUAD_TYPE + + + ) + +32  + #__SYSCALL_ULONG_TYPE + +__UQUAD_TYPE + + + ) + +34  + #__SYSCALL_SLONG_TYPE + +__SLONGWORD_TYPE + + + ) + +35  + #__SYSCALL_ULONG_TYPE + +__ULONGWORD_TYPE + + + ) + +38  + #__DEV_T_TYPE + +__UQUAD_TYPE + + + ) + +39  + #__UID_T_TYPE + +__U32_TYPE + + + ) + +40  + #__GID_T_TYPE + +__U32_TYPE + + + ) + +41  + #__INO_T_TYPE + +__SYSCALL_ULONG_TYPE + + + ) + +42  + #__INO64_T_TYPE + +__UQUAD_TYPE + + + ) + +43  + #__MODE_T_TYPE + +__U32_TYPE + + + ) + +44 #ifde +__x86_64__ + + +45  + #__NLINK_T_TYPE + +__SYSCALL_ULONG_TYPE + + + ) + +46  + #__FSWORD_T_TYPE + +__SYSCALL_SLONG_TYPE + + + ) + +48  + #__NLINK_T_TYPE + +__UWORD_TYPE + + + ) + +49  + #__FSWORD_T_TYPE + +__SWORD_TYPE + + + ) + +51  + #__OFF_T_TYPE + +__SYSCALL_SLONG_TYPE + + + ) + +52  + #__OFF64_T_TYPE + +__SQUAD_TYPE + + + ) + +53  + #__PID_T_TYPE + +__S32_TYPE + + + ) + +54  + #__RLIM_T_TYPE + +__SYSCALL_ULONG_TYPE + + + ) + +55  + #__RLIM64_T_TYPE + +__UQUAD_TYPE + + + ) + +56  + #__BLKCNT_T_TYPE + +__SYSCALL_SLONG_TYPE + + + ) + +57  + #__BLKCNT64_T_TYPE + +__SQUAD_TYPE + + + ) + +58  + #__FSBLKCNT_T_TYPE + +__SYSCALL_ULONG_TYPE + + + ) + +59  + #__FSBLKCNT64_T_TYPE + +__UQUAD_TYPE + + + ) + +60  + #__FSFILCNT_T_TYPE + +__SYSCALL_ULONG_TYPE + + + ) + +61  + #__FSFILCNT64_T_TYPE + +__UQUAD_TYPE + + + ) + +62  + #__ID_T_TYPE + +__U32_TYPE + + + ) + +63  + #__CLOCK_T_TYPE + +__SYSCALL_SLONG_TYPE + + + ) + +64  + #__TIME_T_TYPE + +__SYSCALL_SLONG_TYPE + + + ) + +65  + #__USECONDS_T_TYPE + +__U32_TYPE + + + ) + +66  + #__SUSECONDS_T_TYPE + +__SYSCALL_SLONG_TYPE + + + ) + +67  + #__DADDR_T_TYPE + +__S32_TYPE + + + ) + +68  + #__KEY_T_TYPE + +__S32_TYPE + + + ) + +69  + #__CLOCKID_T_TYPE + +__S32_TYPE + + + ) + +70  + #__TIMER_T_TYPE + * + + ) + +71  + #__BLKSIZE_T_TYPE + +__SYSCALL_SLONG_TYPE + + + ) + +72  + #__FSID_T_TYPE + su {  +__v +[2]; } + + ) + +73  + #__SSIZE_T_TYPE + +__SWORD_TYPE + + + ) + +74  + #__CPU_MASK_TYPE + +__SYSCALL_ULONG_TYPE + + + ) + +76 #ifde +__x86_64__ + + +80  + #__OFF_T_MATCHES_OFF64_T + 1 + + ) + +83  + #__INO_T_MATCHES_INO64_T + 1 + + ) + +87  + #__FD_SETSIZE + 1024 + + ) + + @/usr/include/bits/uio.h + +18 #i! +defed + +_SYS_UIO_H + && !defed +_FCNTL_H + + +22 #ide +_BITS_UIO_H + + +23  + #_BITS_UIO_H + 1 + + ) + +25  + ~ + +39  + #UIO_MAXIOV + 1024 + + ) + +43  + siovec + + +45 * + miov_ba +; + +46 +size_t + + miov_n +; + +52 #ifde +__USE_GNU + + +53 #i +defed + +_SYS_UIO_H + && !defed +_BITS_UIO_H_FOR_SYS_UIO_H + + +54  + #_BITS_UIO_H_FOR_SYS_UIO_H + 1 + + ) + +56 +__BEGIN_DECLS + + +59 +ssize_t + + $oss_vm_adv + ( +pid_t + +__pid +, cڡ  +iovec + * +__lvec +, + +60  +__liovt +, + +61 cڡ  +iovec + * +__rvec +, + +62  +__riovt +, + +63  +__ags +) + +64 +__THROW +; + +67 +ssize_t + + $oss_vm_wrev + ( +pid_t + +__pid +, cڡ  +iovec + * +__lvec +, + +68  +__liovt +, + +69 cڡ  +iovec + * +__rvec +, + +70  +__riovt +, + +71  +__ags +) + +72 +__THROW +; + +74 +__END_DECLS + + + @/usr/include/bits/wchar.h + +19 #ide +_BITS_WCHAR_H + + +20  + #_BITS_WCHAR_H + 1 + + ) + +33 #ifde +__WCHAR_MAX__ + + +34  + #__WCHAR_MAX + +__WCHAR_MAX__ + + + ) + +35 #i +L +'\0' - 1 > 0 + +36  + #__WCHAR_MAX + (0xffffffffu + +L +'\0') + + ) + +38  + #__WCHAR_MAX + (0x7ffffff+ +L +'\0') + + ) + +41 #ifde +__WCHAR_MIN__ + + +42  + #__WCHAR_MIN + +__WCHAR_MIN__ + + + ) + +43 #i +L +'\0' - 1 > 0 + +44  + #__WCHAR_MIN + ( +L +'\0' + 0) + + ) + +46  + #__WCHAR_MIN + (- +__WCHAR_MAX + - 1) + + ) + + @/usr/include/gnu/stubs.h + +6 #i! +defed + +__x86_64__ + + +7  + ~ + +9 #i +defed + +__x86_64__ + && defed +__LP64__ + + +10  + ~ + +12 #i +defed + +__x86_64__ + && defed +__ILP32__ + + +13  + ~ + + @/usr/include/linux/stddef.h + +3 #ide +__ways_le + + +4  + #__ways_le + +__le__ + + + ) + + @/usr/include/stdc-predef.h + +18 #idef +_STDC_PREDEF_H + + +19  + #_STDC_PREDEF_H + 1 + + ) + +36 #ifde +__GCC_IEC_559 + + +37 #i +__GCC_IEC_559 + > 0 + +38  + #__STDC_IEC_559__ + 1 + + ) + +41  + #__STDC_IEC_559__ + 1 + + ) + +44 #ifde +__GCC_IEC_559_COMPLEX + + +45 #i +__GCC_IEC_559_COMPLEX + > 0 + +46  + #__STDC_IEC_559_COMPLEX__ + 1 + + ) + +49  + #__STDC_IEC_559_COMPLEX__ + 1 + + ) + +55  + #__STDC_ISO_10646__ + 201505L + + ) + +58  + #__STDC_NO_THREADS__ + 1 + + ) + + @/usr/include/sys/sysmacros.h + +19 #ide +_SYS_SYSMACROS_H + + +20  + #_SYS_SYSMACROS_H + 1 + + ) + +22  + ~ + +24 +__BEGIN_DECLS + + +26 +__exnsi__ + + +27  + $gnu_dev_maj + ( +__dev +) + +28 +__THROW + +__ibu_cڡ__ +; + +29 +__exnsi__ + + +30  + $gnu_dev_m + ( +__dev +) + +31 +__THROW + +__ibu_cڡ__ +; + +32 +__exnsi__ + + +33  + $gnu_dev_makedev + ( +__maj +, + +34  +__m +) + +35 +__THROW + +__ibu_cڡ__ +; + +37 #ifde +__USE_EXTERN_INLINES + + +38 +__exnsi__ + +__ex_le + +__ibu_cڡ__ +  + +39 + `__NTH + ( + $gnu_dev_maj + ( +__dev +)) + +41  (( +__dev + >> 8) & 0xfff) | (() (__dev >> 32) & ~0xfff); + +42 + } +} + +44 +__exnsi__ + +__ex_le + +__ibu_cڡ__ +  + +45 +__NTH + ( + $gnu_dev_m + ( +__dev +)) + +47  ( +__dev + & 0xff) | (() (__dev >> 12) & ~0xff); + +48 + } +} + +50 +__exnsi__ + +__ex_le + +__ibu_cڡ__ +  + +51 +__NTH + ( + $gnu_dev_makedev + ( +__maj +,  +__m +)) + +53  (( +__m + & 0xff| (( +__maj + & 0xfff) << 8) + +54 | (((( +__m + & ~0xff)) << 12) + +55 | (((( +__maj + & ~0xfff)) << 32)); + +56 + } +} + +58 + g__END_DECLS + + +61  + #maj +( +dev + + `gnu_dev_maj + (dev) + + ) + +62  + #m +( +dev + + `gnu_dev_m + (dev) + + ) + +63  + #makedev +( +maj +, +m + + `gnu_dev_makedev + (maj, m) + + ) + + @/usr/include/asm-generic/int-ll64.h + +8 #ide +_ASM_GENERIC_INT_LL64_H + + +9  + #_ASM_GENERIC_INT_LL64_H + + + ) + +11  + ~ + +13 #ide +__ASSEMBLY__ + + +19  +__sigd__ +  + t__s8 +; + +20  + t__u8 +; + +22  +__sigd__ +  + t__s16 +; + +23  + t__u16 +; + +25  +__sigd__ +  + t__s32 +; + +26  + t__u32 +; + +28 #ifde +__GNUC__ + + +29 +__exnsi__ +  +__sigd__ +  + t__s64 +; + +30 +__exnsi__ +  + t__u64 +; + +32  +__sigd__ +  + t__s64 +; + +33  + t__u64 +; + + @/usr/include/asm-generic/socket.h + +1 #ide +__ASM_GENERIC_SOCKET_H + + +2  + #__ASM_GENERIC_SOCKET_H + + + ) + +4  + ~ + +7  + #SOL_SOCKET + 1 + + ) + +9  + #SO_DEBUG + 1 + + ) + +10  + #SO_REUSEADDR + 2 + + ) + +11  + #SO_TYPE + 3 + + ) + +12  + #SO_ERROR + 4 + + ) + +13  + #SO_DONTROUTE + 5 + + ) + +14  + #SO_BROADCAST + 6 + + ) + +15  + #SO_SNDBUF + 7 + + ) + +16  + #SO_RCVBUF + 8 + + ) + +17  + #SO_SNDBUFFORCE + 32 + + ) + +18  + #SO_RCVBUFFORCE + 33 + + ) + +19  + #SO_KEEPALIVE + 9 + + ) + +20  + #SO_OOBINLINE + 10 + + ) + +21  + #SO_NO_CHECK + 11 + + ) + +22  + #SO_PRIORITY + 12 + + ) + +23  + #SO_LINGER + 13 + + ) + +24  + #SO_BSDCOMPAT + 14 + + ) + +25  + #SO_REUSEPORT + 15 + + ) + +26 #ide +SO_PASSCRED + + +27  + #SO_PASSCRED + 16 + + ) + +28  + #SO_PEERCRED + 17 + + ) + +29  + #SO_RCVLOWAT + 18 + + ) + +30  + #SO_SNDLOWAT + 19 + + ) + +31  + #SO_RCVTIMEO + 20 + + ) + +32  + #SO_SNDTIMEO + 21 + + ) + +36  + #SO_SECURITY_AUTHENTICATION + 22 + + ) + +37  + #SO_SECURITY_ENCRYPTION_TRANSPORT + 23 + + ) + +38  + #SO_SECURITY_ENCRYPTION_NETWORK + 24 + + ) + +40  + #SO_BINDTODEVICE + 25 + + ) + +43  + #SO_ATTACH_FILTER + 26 + + ) + +44  + #SO_DETACH_FILTER + 27 + + ) + +45  + #SO_GET_FILTER + +SO_ATTACH_FILTER + + + ) + +47  + #SO_PEERNAME + 28 + + ) + +48  + #SO_TIMESTAMP + 29 + + ) + +49  + #SCM_TIMESTAMP + +SO_TIMESTAMP + + + ) + +51  + #SO_ACCEPTCONN + 30 + + ) + +53  + #SO_PEERSEC + 31 + + ) + +54  + #SO_PASSSEC + 34 + + ) + +55  + #SO_TIMESTAMPNS + 35 + + ) + +56  + #SCM_TIMESTAMPNS + +SO_TIMESTAMPNS + + + ) + +58  + #SO_MARK + 36 + + ) + +60  + #SO_TIMESTAMPING + 37 + + ) + +61  + #SCM_TIMESTAMPING + +SO_TIMESTAMPING + + + ) + +63  + #SO_PROTOCOL + 38 + + ) + +64  + #SO_DOMAIN + 39 + + ) + +66  + #SO_RXQ_OVFL + 40 + + ) + +68  + #SO_WIFI_STATUS + 41 + + ) + +69  + #SCM_WIFI_STATUS + +SO_WIFI_STATUS + + + ) + +70  + #SO_PEEK_OFF + 42 + + ) + +73  + #SO_NOFCS + 43 + + ) + +75  + #SO_LOCK_FILTER + 44 + + ) + +77  + #SO_SELECT_ERR_QUEUE + 45 + + ) + +79  + #SO_BUSY_POLL + 46 + + ) + +81  + #SO_MAX_PACING_RATE + 47 + + ) + +83  + #SO_BPF_EXTENSIONS + 48 + + ) + +85  + #SO_INCOMING_CPU + 49 + + ) + +87  + #SO_ATTACH_BPF + 50 + + ) + +88  + #SO_DETACH_BPF + +SO_DETACH_FILTER + + + ) + +90  + #SO_ATTACH_REUSEPORT_CBPF + 51 + + ) + +91  + #SO_ATTACH_REUSEPORT_EBPF + 52 + + ) + +93  + #SO_CNX_ADVICE + 53 + + ) + + @/usr/include/asm/posix_types_32.h + +1 #ide +_ASM_X86_POSIX_TYPES_32_H + + +2  + #_ASM_X86_POSIX_TYPES_32_H + + + ) + +10  + t__kl_mode_t +; + +11  + #__kl_mode_t + +__kl_mode_t + + + ) + +13  + t__kl_c_pid_t +; + +14  + #__kl_c_pid_t + +__kl_c_pid_t + + + ) + +16  + t__kl_uid_t +; + +17  + t__kl_gid_t +; + +18  + #__kl_uid_t + +__kl_uid_t + + + ) + +20  + t__kl_d_dev_t +; + +21  + #__kl_d_dev_t + +__kl_d_dev_t + + + ) + +23  + ~ + + @/usr/include/asm/posix_types_64.h + +1 #ide +_ASM_X86_POSIX_TYPES_64_H + + +2  + #_ASM_X86_POSIX_TYPES_64_H + + + ) + +10  + t__kl_d_uid_t +; + +11  + t__kl_d_gid_t +; + +12  + #__kl_d_uid_t + +__kl_d_uid_t + + + ) + +14  + t__kl_d_dev_t +; + +15  + #__kl_d_dev_t + +__kl_d_dev_t + + + ) + +17  + ~ + + @/usr/include/asm/posix_types_x32.h + +1 #ide +_ASM_X86_POSIX_TYPES_X32_H + + +2  + #_ASM_X86_POSIX_TYPES_X32_H + + + ) + +13  + t__kl_lg_t +; + +14  + t__kl_ulg_t +; + +15  + #__kl_lg_t + +__kl_lg_t + + + ) + +17  + ~ + + @/usr/include/gnu/stubs-32.h + +6 #ifde +_LIBC + + +7 #r +Alitis + +may + +n + +defe + +the + +mao + +_LIBC + + +10  + #__ub_chags + + + ) + +11  + #__ub_ach + + + ) + +12  + #__ub_fchags + + + ) + +13  + #__ub_fdach + + + ) + +14  + #__ub_gy + + + ) + +15  + #__ub_lchmod + + + ) + +16  + #__ub_voke + + + ) + +17  + #__ub_og + + + ) + +18  + #__ub_sigtu + + + ) + +19  + #__ub_sk + + + ) + +20  + #__ub_ty + + + ) + + @/usr/include/gnu/stubs-64.h + +6 #ifde +_LIBC + + +7 #r +Alitis + +may + +n + +defe + +the + +mao + +_LIBC + + +10  + #__ub___comt_bdush + + + ) + +11  + #__ub_chags + + + ) + +12  + #__ub_ach + + + ) + +13  + #__ub_fchags + + + ) + +14  + #__ub_fdach + + + ) + +15  + #__ub_gmsg + + + ) + +16  + #__ub_gy + + + ) + +17  + #__ub_lchmod + + + ) + +18  + #__ub_putmsg + + + ) + +19  + #__ub_voke + + + ) + +20  + #__ub_og + + + ) + +21  + #__ub_sigtu + + + ) + +22  + #__ub_sk + + + ) + +23  + #__ub_ty + + + ) + + @/usr/include/linux/limits.h + +1 #ide +_LINUX_LIMITS_H + + +2  + #_LINUX_LIMITS_H + + + ) + +4  + #NR_OPEN + 1024 + + ) + +6  + #NGROUPS_MAX + 65536 + + ) + +7  + #ARG_MAX + 131072 + + ) + +8  + #LINK_MAX + 127 + + ) + +9  + #MAX_CANON + 255 + + ) + +10  + #MAX_INPUT + 255 + + ) + +11  + #NAME_MAX + 255 + + ) + +12  + #PATH_MAX + 4096 + + ) + +13  + #PIPE_BUF + 4096 + + ) + +14  + #XATTR_NAME_MAX + 255 + + ) + +15  + #XATTR_SIZE_MAX + 65536 + + ) + +16  + #XATTR_LIST_MAX + 65536 + + ) + +18  + #RTSIG_MAX + 32 + + ) + + @/usr/include/asm-generic/posix_types.h + +1 #ide +__ASM_GENERIC_POSIX_TYPES_H + + +2  + #__ASM_GENERIC_POSIX_TYPES_H + + + ) + +4  + ~ + +13 #ide +__kl_lg_t + + +14  + t__kl_lg_t +; + +15  + t__kl_ulg_t +; + +18 #ide +__kl_o_t + + +19  +__kl_ulg_t + + t__kl_o_t +; + +22 #ide +__kl_mode_t + + +23  + t__kl_mode_t +; + +26 #ide +__kl_pid_t + + +27  + t__kl_pid_t +; + +30 #ide +__kl_c_pid_t + + +31  + t__kl_c_pid_t +; + +34 #ide +__kl_uid_t + + +35  + t__kl_uid_t +; + +36  + t__kl_gid_t +; + +39 #ide +__kl_sucds_t + + +40  +__kl_lg_t + + t__kl_sucds_t +; + +43 #ide +__kl_daddr_t + + +44  + t__kl_daddr_t +; + +47 #ide +__kl_uid32_t + + +48  + t__kl_uid32_t +; + +49  + t__kl_gid32_t +; + +52 #ide +__kl_d_uid_t + + +53  +__kl_uid_t + + t__kl_d_uid_t +; + +54  +__kl_gid_t + + t__kl_d_gid_t +; + +57 #ide +__kl_d_dev_t + + +58  + t__kl_d_dev_t +; + +65 #ide +__kl_size_t + + +66 #i +__BITS_PER_LONG + != 64 + +67  + t__kl_size_t +; + +68  + t__kl_ssize_t +; + +69  + t__kl_rdiff_t +; + +71  +__kl_ulg_t + + t__kl_size_t +; + +72  +__kl_lg_t + + t__kl_ssize_t +; + +73  +__kl_lg_t + + t__kl_rdiff_t +; + +77 #ide +__kl_fsid_t + + +79  + mv +[2]; + +80 } + t__kl_fsid_t +; + +86  +__kl_lg_t + + t__kl_off_t +; + +87  + t__kl_loff_t +; + +88  +__kl_lg_t + + t__kl_time_t +; + +89  +__kl_lg_t + + t__kl_ock_t +; + +90  + t__kl_tim_t +; + +91  + t__kl_ockid_t +; + +92 * + t__kl_ddr_t +; + +93  + t__kl_uid16_t +; + +94  + t__kl_gid16_t +; + + @/usr/include/asm/bitsperlong.h + +1 #ide +__ASM_X86_BITSPERLONG_H + + +2  + #__ASM_X86_BITSPERLONG_H + + + ) + +4 #i +defed +( +__x86_64__ +&& !defed( +__ILP32__ +) + +5  + #__BITS_PER_LONG + 64 + + ) + +7  + #__BITS_PER_LONG + 32 + + ) + +10  + ~ + + @/usr/include/asm-generic/bitsperlong.h + +1 #ide +__ASM_GENERIC_BITS_PER_LONG + + +2  + #__ASM_GENERIC_BITS_PER_LONG + + + ) + +11 #ide +__BITS_PER_LONG + + +12  + #__BITS_PER_LONG + 32 + + ) + + @ +1 +. +1 +/usr/include +147 +3009 +active_wild.c +common_ioctl.c +common_sockopts.c +cplane_ops.c +csum_copy_iovec_setlen.c +efabcfg.c +eplock_slow.c +icmp_send.c +init.c +iovec_ptr.h +ip_cmsg.c +ip_internal.h +ip_tx.c +ip_tx.h +ipid.c +iptimer.c +netif.c +netif_debug.c +netif_event.c +netif_init.c +netif_pkt.c +netif_stats.c +netif_table.c +netif_tx.c +netif_tx.h +os_sock.c +per_thread.c +pio_buddy.c +pipe.c +pkt_filler.c +pmtu.c +rwlock.c +save_fd.c +signal.c +sockerr.c +socket.c +syscall.c +tcp_close.c +tcp_connect.c +tcp_debug.c +tcp_driver_ops.c +tcp_helper.c +tcp_init_shared.c +tcp_ioctl.c +tcp_misc.c +tcp_recv.c +tcp_rx.c +tcp_rx.h +tcp_send.c +tcp_sleep.c +tcp_sockopts.c +tcp_stats.c +tcp_syncookie.c +tcp_synrecv.c +tcp_timer.c +tcp_tx.c +tcp_tx.h +tcp_tx_reformat.c +udp.c +udp_connect.c +udp_internal.h +udp_ioctl.c +udp_misc.c +udp_recv.c +udp_rx.c +udp_send.c +udp_sockopts.c +waitable.c +/usr/include/aio.h +/usr/include/asm/unistd.h +/usr/include/limits.h +/usr/include/linux/pkt_sched.h +/usr/include/linux/sockios.h +/usr/include/linux/time.h +/usr/include/linux/types.h +/usr/include/linux/version.h +/usr/include/net/if.h +/usr/include/net/if_arp.h +/usr/include/netinet/in.h +/usr/include/netinet/tcp.h +/usr/include/netinet/udp.h +/usr/include/sys/shm.h +/usr/include/sys/socket.h +/usr/include/sys/time.h +/usr/include/time.h +/usr/include/asm/sockios.h +/usr/include/asm/types.h +/usr/include/asm/unistd_32.h +/usr/include/asm/unistd_64.h +/usr/include/asm/unistd_x32.h +/usr/include/bits/byteswap.h +/usr/include/bits/in.h +/usr/include/bits/posix1_lim.h +/usr/include/bits/posix2_lim.h +/usr/include/bits/shm.h +/usr/include/bits/siginfo.h +/usr/include/bits/sigset.h +/usr/include/bits/socket.h +/usr/include/bits/socket2.h +/usr/include/bits/time.h +/usr/include/bits/types.h +/usr/include/bits/wordsize.h +/usr/include/bits/xopen_lim.h +/usr/include/endian.h +/usr/include/features.h +/usr/include/linux/posix_types.h +/usr/include/stdint.h +/usr/include/sys/cdefs.h +/usr/include/sys/ipc.h +/usr/include/sys/select.h +/usr/include/sys/types.h +/usr/include/sys/uio.h +/usr/include/xlocale.h +/usr/include/asm-generic/sockios.h +/usr/include/asm-generic/types.h +/usr/include/asm/posix_types.h +/usr/include/asm/socket.h +/usr/include/bits/byteswap-16.h +/usr/include/bits/endian.h +/usr/include/bits/ipc.h +/usr/include/bits/ipctypes.h +/usr/include/bits/local_lim.h +/usr/include/bits/pthreadtypes.h +/usr/include/bits/select.h +/usr/include/bits/select2.h +/usr/include/bits/sockaddr.h +/usr/include/bits/socket_type.h +/usr/include/bits/stdio_lim.h +/usr/include/bits/timex.h +/usr/include/bits/typesizes.h +/usr/include/bits/uio.h +/usr/include/bits/wchar.h +/usr/include/gnu/stubs.h +/usr/include/linux/stddef.h +/usr/include/stdc-predef.h +/usr/include/sys/sysmacros.h +/usr/include/asm-generic/int-ll64.h +/usr/include/asm-generic/socket.h +/usr/include/asm/posix_types_32.h +/usr/include/asm/posix_types_64.h +/usr/include/asm/posix_types_x32.h +/usr/include/gnu/stubs-32.h +/usr/include/gnu/stubs-64.h +/usr/include/linux/limits.h +/usr/include/asm-generic/posix_types.h +/usr/include/asm/bitsperlong.h +/usr/include/asm-generic/bitsperlong.h diff --git a/src/lib/transport/ip/netif_tx.h b/src/lib/transport/ip/netif_tx.h index 837b0f5..85a1ca9 100644 --- a/src/lib/transport/ip/netif_tx.h +++ b/src/lib/transport/ip/netif_tx.h @@ -117,7 +117,7 @@ ci_inline void ci_netif_dmaq_and_vi_for_pkt(ci_netif* ni, ci_ip_pkt_fmt* pkt, #define __ci_netif_dmaq_insert_prep_pkt_warm_undo(ni, pkt) \ do { \ - (pkt)->flags &=~ CI_PKT_FLAG_TX_PENDING; \ + (pkt)->flags &=~ (CI_PKT_FLAG_TX_PENDING | CI_PKT_FLAG_MSG_WARM); \ --(ni)->state->nic[(pkt)->intf_i].tx_dmaq_insert_seq; \ (ni)->state->nic[(pkt)->intf_i].tx_bytes_added-=TX_PKT_LEN(pkt); \ ci_netif_pkt_release(ni, pkt); \ diff --git a/src/lib/transport/ip/tcp_send.c b/src/lib/transport/ip/tcp_send.c index 53aa9f5..5fda75c 100644 --- a/src/lib/transport/ip/tcp_send.c +++ b/src/lib/transport/ip/tcp_send.c @@ -102,12 +102,12 @@ static void ci_tcp_tx_advance_nagle(ci_netif* ni, ci_tcp_state* ts) /* NB. We call advance() before poll() to get best latency. */ ci_ip_time_resync(IPTIMER_STATE(ni)); ci_tcp_tx_advance(ts, ni); - if(CI_UNLIKELY( ni->flags & CI_NETIF_FLAG_MSG_WARM )) + if(CI_UNLIKELY( ts->tcpflags & CI_TCPT_FLAG_MSG_WARM )) return; goto poll_and_out; } - ci_assert(! (ni->flags & CI_NETIF_FLAG_MSG_WARM)); + ci_assert(! (ts->tcpflags & CI_TCPT_FLAG_MSG_WARM)); /* There can't be a SYN, because connection is established, so the SYN ** must already be acked. There can't be a FIN, because if there was ** tx_errno would be non zero, and we would not have attempted to @@ -1745,7 +1745,7 @@ unroll_msg_warm(ci_netif* ni, ci_tcp_state* ts, struct tcp_send_info* sinf, { ci_ip_pkt_fmt* pkt; ++ts->stats.tx_msg_warm; - ni->flags &= ~CI_NETIF_FLAG_MSG_WARM; + ts->tcpflags &= ~CI_TCPT_FLAG_MSG_WARM; ci_ip_queue_init(&ts->send); ts->send_in = 0; tcp_enq_nxt(ts) -= sinf->fill_list_bytes; @@ -1753,6 +1753,14 @@ unroll_msg_warm(ci_netif* ni, ci_tcp_state* ts, struct tcp_send_info* sinf, ts->burst_window = sinf->old_burst_window; #endif tcp_snd_nxt(ts) = sinf->old_tcp_snd_nxt; + + /* If we updated our rtt seq based on the warm send then timed_seq will + * will be the seq for the warm packet. If so, clear the timing so + * the timed values will be reset when we sent the packet for real. + */ + if( SEQ_EQ(tcp_snd_nxt(ts), ts->timed_seq) ) + ci_tcp_clear_rtt_timing(ts); + --ts->stats.tx_stop_app; CI_TCP_STATS_DEC_OUT_SEGS(ni); if( ! is_zc_send ) { @@ -2160,7 +2168,7 @@ int ci_tcp_sendmsg(ci_netif* ni, ci_tcp_state* ts, ++ts->stats.tx_msg_warm_abort; if( sinf.stack_locked ) ci_netif_unlock(ni); - return 0; + RET_WITH_ERRNO(EPIPE); } if( ci_tcp_sendmsg_notsynchronised(ni, ts, flags, &sinf) == -1 ) { @@ -2173,7 +2181,7 @@ int ci_tcp_sendmsg(ci_netif* ni, ci_tcp_state* ts, slow_path: if(CI_UNLIKELY( flags & ONLOAD_MSG_WARM )) { if( can_do_msg_warm(ni, ts, &sinf, sinf.total_unsent, flags) ) { - ni->flags |= CI_NETIF_FLAG_MSG_WARM; + ts->tcpflags |= CI_TCPT_FLAG_MSG_WARM; #if CI_CFG_BURST_CONTROL sinf.old_burst_window = ts->burst_window; #endif @@ -2264,7 +2272,7 @@ int ci_tcp_zc_send(ci_netif* ni, ci_tcp_state* ts, struct onload_zc_mmsg* msg, msg->rc = -EINVAL; return 1; } - ni->flags |= CI_NETIF_FLAG_MSG_WARM; + ts->tcpflags |= CI_TCPT_FLAG_MSG_WARM; #if CI_CFG_BURST_CONTROL sinf.old_burst_window = ts->burst_window; #endif @@ -2433,7 +2441,7 @@ int ci_tcp_zc_send(ci_netif* ni, ci_tcp_state* ts, struct onload_zc_mmsg* msg, bad_buffer: - if(CI_UNLIKELY( ni->flags & CI_NETIF_FLAG_MSG_WARM )) { + if(CI_UNLIKELY( ts->tcpflags & CI_TCPT_FLAG_MSG_WARM )) { ++ts->stats.tx_msg_warm_abort; if( sinf.stack_locked ) ci_netif_unlock(ni); diff --git a/src/lib/transport/ip/tcp_sockopts.c b/src/lib/transport/ip/tcp_sockopts.c index 6b7d4d2..9badcb7 100644 --- a/src/lib/transport/ip/tcp_sockopts.c +++ b/src/lib/transport/ip/tcp_sockopts.c @@ -294,6 +294,7 @@ int ci_tcp_getsockopt(citp_socket* ep, ci_fd_t fd, int level, } } + static int ci_tcp_setsockopt_lk(citp_socket* ep, ci_fd_t fd, int level, int optname, const void* optval, socklen_t optlen ) @@ -375,23 +376,9 @@ static int ci_tcp_setsockopt_lk(citp_socket* ep, ci_fd_t fd, int level, ci_bit_set(&s->s_aflags, CI_SOCK_AFLAG_CORK_BIT); } else { ci_bit_clear(&s->s_aflags, CI_SOCK_AFLAG_CORK_BIT); - /* We need to push out a segment that was corked. Note that CORK - ** doesn't prevent full segments from going out, so if the send - ** queue contains more than one segment, it must be limited by - ** something else (and therefore not our problem). - ** - ** ?? We could be even more clever here and use the existing - ** deferred mechanism to advance the sendq if the netif lock were - ** contended. - */ - if( s->b.state != CI_TCP_LISTEN ) { - ci_tcp_state* ts = SOCK_TO_TCP(s); - if( ts->send.num == 1 ) { - TX_PKT_TCP(PKT_CHK(netif, ts->send.head))->tcp_flags |= - CI_TCP_FLAG_PSH; - ci_tcp_tx_advance(ts, netif); - } - } + /* We need to push out a segment that was corked. */ + if( s->b.state != CI_TCP_LISTEN ) + ci_tcp_send_corked_packets(netif, SOCK_TO_TCP(s)); } break; # endif @@ -402,22 +389,16 @@ static int ci_tcp_setsockopt_lk(citp_socket* ep, ci_fd_t fd, int level, ci_bit_set(&s->s_aflags, CI_SOCK_AFLAG_NODELAY_BIT); if( s->b.state != CI_TCP_LISTEN ) { - ci_tcp_state* ts = SOCK_TO_TCP(s); ci_uint32 cork; - if( ts->send.num == 1 ) { - /* When TCP_NODELAY is set, push out pending segments (even if - ** CORK is set). - */ - if( (cork = (s->s_aflags & CI_SOCK_AFLAG_CORK)) ) - ci_bit_clear(&s->s_aflags, CI_SOCK_AFLAG_CORK_BIT); - - if( ci_ip_queue_not_empty(&ts->send) ) - ci_tcp_tx_advance(ts, netif); - - if ( cork ) - ci_bit_set(&s->s_aflags, CI_SOCK_AFLAG_CORK_BIT); - } + /* When TCP_NODELAY is set, push out pending segments (even if + ** CORK is set). + */ + if( (cork = (s->s_aflags & CI_SOCK_AFLAG_CORK)) ) + ci_bit_clear(&s->s_aflags, CI_SOCK_AFLAG_CORK_BIT); + ci_tcp_send_corked_packets(netif, SOCK_TO_TCP(s)); + if ( cork ) + ci_bit_set(&s->s_aflags, CI_SOCK_AFLAG_CORK_BIT); } } else diff --git a/src/lib/transport/ip/tcp_synrecv.c b/src/lib/transport/ip/tcp_synrecv.c index 8dc9006..f70cba6 100644 --- a/src/lib/transport/ip/tcp_synrecv.c +++ b/src/lib/transport/ip/tcp_synrecv.c @@ -111,6 +111,7 @@ ci_tcp_listenq_bucket_insert(ci_netif* ni, ci_tcp_socket_listen* tls, #ifdef __KERNEL__ int i = 0; #endif + oo_p nbucket; LOG_TV(ci_log("%s([%d] level=%d "TSR_FMT")", __func__, NI_ID(ni), level, TSR_ARGS(tsr))); @@ -136,10 +137,11 @@ ci_tcp_listenq_bucket_insert(ci_netif* ni, ci_tcp_socket_listen* tls, if( level > CI_LISTENQ_BUCKET_MAX_DEPTH(ni) ) return; - bucket->bucket[idx] = ci_ni_aux_alloc_bucket(ni); - if( OO_P_IS_NULL(bucket->bucket[idx]) ) + nbucket = ci_ni_aux_alloc_bucket(ni); + if( OO_P_IS_NULL(nbucket) ) return; - bucket = ci_ni_aux_p2bucket(ni, bucket->bucket[idx]); + bucket->bucket[idx] = nbucket; + bucket = ci_ni_aux_p2bucket(ni, nbucket); tls->n_buckets++; while( OO_P_NOT_NULL(tsr_p) ) { diff --git a/src/lib/transport/ip/tcp_timer.c b/src/lib/transport/ip/tcp_timer.c index 6a2c2d7..141343a 100644 --- a/src/lib/transport/ip/tcp_timer.c +++ b/src/lib/transport/ip/tcp_timer.c @@ -489,20 +489,35 @@ static void ci_tcp_drop_due_to_rto(ci_netif *ni, ci_tcp_state *ts, } -/* Called as TCP_CORK timeout */ -void ci_tcp_timeout_cork(ci_netif* netif, ci_tcp_state* ts) + +void ci_tcp_send_corked_packets(ci_netif* netif, ci_tcp_state* ts) { - /* We do not stop the timer when a packet is send (just because we do not - * know when we should do it). So, let's check if we have only one packet - * in sendq. Well, possibly it is not our packet, but there is no harm - * here. */ - if( ts->send.num == 1 ) { - TX_PKT_TCP(PKT_CHK(netif, ts->send.head))->tcp_flags |= CI_TCP_FLAG_PSH; + /* If the send queue is more than 1 MSS pending, that suggests + * there is another reason for it not being sent, so do nothing in + * that case. + */ + if( ci_ip_queue_not_empty(&ts->send) && + SEQ_SUB(tcp_enq_nxt(ts), tcp_snd_nxt(ts)) < tcp_eff_mss(ts) ) { + /* Remove CI_PKT_FLAG_TX_MORE flag to ensure it gets sent now */ + oo_pkt_p pp = ts->send.head; + ci_ip_pkt_fmt* pkt; + do { + pkt = PKT_CHK(netif, pp); + pp = pkt->next; + pkt->flags &=~ CI_PKT_FLAG_TX_MORE; + } while( OO_PP_NOT_NULL(pp) ); + TX_PKT_TCP(pkt)->tcp_flags |= CI_TCP_FLAG_PSH; ci_tcp_tx_advance(ts, netif); } - return; } +/* Called as TCP_CORK timeout */ +void ci_tcp_timeout_cork(ci_netif* netif, ci_tcp_state* ts) +{ + ci_tcp_send_corked_packets(netif, ts); +} + + /* Called as action on a retransmission timer timeout (RTO) */ void ci_tcp_timeout_rto(ci_netif* netif, ci_tcp_state* ts) { diff --git a/src/lib/transport/ip/tcp_tx.c b/src/lib/transport/ip/tcp_tx.c index 560006f..6a5e4c9 100644 --- a/src/lib/transport/ip/tcp_tx.c +++ b/src/lib/transport/ip/tcp_tx.c @@ -65,6 +65,8 @@ ci_inline void ci_ip_tcp_list_to_dmaq(ci_netif* ni, ci_tcp_state* ts, pkt->flags |= CI_PKT_FLAG_TX_TIMESTAMPED; ci_ip_set_mac_and_port(ni, &ts->s.pkt, pkt); ci_netif_pkt_hold(ni, pkt); + if(CI_UNLIKELY( ts->tcpflags & CI_TCPT_FLAG_MSG_WARM )) + pkt->flags |= CI_PKT_FLAG_MSG_WARM; __ci_netif_dmaq_insert_prep_pkt(ni, pkt); pkt->netif.tx.dmaq_next = pkt->next; ++n; @@ -82,7 +84,7 @@ ci_inline void ci_ip_tcp_list_to_dmaq(ci_netif* ni, ci_tcp_state* ts, (ni->state->nic[tail_pkt->intf_i].oo_vi_flags & OO_VI_FLAGS_PIO_EN) ) { if( tail_pkt->pay_len <= NI_OPTS(ni).pio_thresh ) { if( (offset = ci_pio_buddy_alloc(ni, buddy, order)) >= 0 ) { - if(CI_UNLIKELY( ni->flags & CI_NETIF_FLAG_MSG_WARM )) { + if(CI_UNLIKELY( ts->tcpflags & CI_TCPT_FLAG_MSG_WARM )) { __ci_netif_dmaq_insert_prep_pkt_warm_undo(ni, tail_pkt); ci_pio_buddy_free(ni, &ni->state->nic[tail_pkt->intf_i].pio_buddy, offset, order); @@ -113,7 +115,7 @@ ci_inline void ci_ip_tcp_list_to_dmaq(ci_netif* ni, ci_tcp_state* ts, } #endif - if(CI_LIKELY( ! (ni->flags & CI_NETIF_FLAG_MSG_WARM) )) { + if(CI_LIKELY( ! (ts->tcpflags & CI_TCPT_FLAG_MSG_WARM) )) { __oo_pktq_put_list(ni, dmaq, head_id, tail_pkt, n, netif.tx.dmaq_next); ci_netif_dmaq_shove2(ni, tail_pkt->intf_i); } @@ -146,6 +148,8 @@ static void ci_ip_tcp_list_to_dmaq_striping(ci_netif* ni, ci_tcp_state* ts, ci_ip_set_mac_and_port(ni, &ts->s.pkt, pkt); pp = pkt->next; ci_netif_pkt_hold(ni, pkt); + if(CI_UNLIKELY( ts->tcpflags & CI_TCPT_FLAG_MSG_WARM )) + pkt->flags |= CI_PKT_FLAG_MSG_WARM; __ci_netif_dmaq_insert_prep_pkt(ni, pkt); pkt->netif.tx.dmaq_next = pkt->next; ++n; @@ -241,7 +245,7 @@ static void ci_ip_send_tcp_list(ci_netif* ni, ci_tcp_state* ts, fast: #if CI_CFG_PORT_STRIPING if( ts->tcpflags & CI_TCPT_FLAG_STRIPE ) { - ci_assert(! (ni->flags & CI_NETIF_FLAG_MSG_WARM)); + ci_assert(! (ts->tcpflags & CI_TCPT_FLAG_MSG_WARM)); ci_ip_tcp_list_to_dmaq_striping(ni, ts, head_id, tail_pkt); } else @@ -249,7 +253,7 @@ static void ci_ip_send_tcp_list(ci_netif* ni, ci_tcp_state* ts, ci_ip_tcp_list_to_dmaq(ni, ts, head_id, tail_pkt); } else { - if(CI_UNLIKELY( ni->flags & CI_NETIF_FLAG_MSG_WARM )) { + if(CI_UNLIKELY( ts->tcpflags & CI_TCPT_FLAG_MSG_WARM )) { cicp_user_retrieve(ni, &ts->s.pkt, &ts->s.cp); return; } @@ -1197,7 +1201,7 @@ void ci_tcp_tx_advance(ci_tcp_state* ts, ci_netif* ni) tcp = TX_PKT_TCP(pkt); paylen = PKT_TCP_TX_SEQ_SPACE(pkt); if(CI_UNLIKELY( paylen > tcp_eff_mss(ts) )) { - ci_assert(! (ni->flags & CI_NETIF_FLAG_MSG_WARM)); + ci_assert(! (ts->tcpflags & CI_TCPT_FLAG_MSG_WARM)); ci_tcp_tx_split(ni, ts, sendq, pkt, tcp_eff_mss(ts), 1); /* If the split fails, tough luck; we push the packet out as-is * anyway. We'll have another go at splitting it if we have to @@ -1242,7 +1246,7 @@ void ci_tcp_tx_advance(ci_tcp_state* ts, ci_netif* ni) (PKT_TCP_TX_SEQ_SPACE(pkt) < tcp_eff_mss(ts)) && (pkt->n_buffers < CI_IP_PKT_SEGMENTS_MAX)) { - ci_assert(! (ni->flags & CI_NETIF_FLAG_MSG_WARM)); + ci_assert(! (ts->tcpflags & CI_TCPT_FLAG_MSG_WARM)); /* We do not want to send packet now, but we'd like to do it * later. If user does send more data, he'll push it forward. @@ -1333,7 +1337,7 @@ void ci_tcp_tx_advance(ci_tcp_state* ts, ci_netif* ni) id = pkt->next; } - if( ni->flags & CI_NETIF_FLAG_MSG_WARM ) + if( ts->tcpflags & CI_TCPT_FLAG_MSG_WARM ) ci_assert(sent_num == 1); if( sent_num != 0 ) { @@ -1343,7 +1347,7 @@ void ci_tcp_tx_advance(ci_tcp_state* ts, ci_netif* ni) if( ts->s.pkt.flags & CI_IP_CACHE_IS_LOCALROUTE ) { oo_pkt_p head = sendq->head; - ci_assert(! (ni->flags & CI_NETIF_FLAG_MSG_WARM )); + ci_assert(! (ts->tcpflags & CI_TCPT_FLAG_MSG_WARM )); /* No retransmit queue in case of local connection: * just send them to peer and clear out from sendq. */ sendq->head = last_pkt->next; @@ -1375,7 +1379,7 @@ void ci_tcp_tx_advance(ci_tcp_state* ts, ci_netif* ni) } else { ci_ip_send_tcp_list(ni, ts, sendq->head, last_pkt); - if(CI_UNLIKELY( ni->flags & CI_NETIF_FLAG_MSG_WARM )) + if(CI_UNLIKELY( ts->tcpflags & CI_TCPT_FLAG_MSG_WARM )) /* This function updated tcp_snd_nxt, burst_window, * ts->stats.tx_stop_app. We made copies of tcp_snd_nxt and * burst_window in tcp_sendmsg(). We will restore these diff --git a/src/lib/transport/ip/udp_send.c b/src/lib/transport/ip/udp_send.c index be5336b..83afa00 100644 --- a/src/lib/transport/ip/udp_send.c +++ b/src/lib/transport/ip/udp_send.c @@ -452,6 +452,13 @@ static int ci_udp_sendmsg_os_get_binding(citp_socket *ep, ci_fd_t fd, /* see what the kernel did - we'll do just the same */ rc = ci_sys_getsockname( os_sock, (struct sockaddr*)&sa, &salen); + + /* Must release the os_sock fd before we can take the stack lock, as the + * citp_dup2_lock is held until we do so, and lock ordering does not allow + * us to take the stack lock with the dup2 lock held. + */ + ci_rel_os_sock_fd( os_sock ); + /* get out if getsockname fails or returns a non INET family * or a sockaddr struct that's too darned small */ if( CI_UNLIKELY( rc || (!rc && @@ -461,7 +468,6 @@ static int ci_udp_sendmsg_os_get_binding(citp_socket *ep, ci_fd_t fd, "len:%d - exp %u)", __FUNCTION__, NT_PRI_ARGS(ni,us), rc, errno, sa.sin_family, salen, (unsigned)sizeof(struct sockaddr_in))); - ci_rel_os_sock_fd( os_sock ); errno = err; return ret; } @@ -502,7 +508,6 @@ static int ci_udp_sendmsg_os_get_binding(citp_socket *ep, ci_fd_t fd, LOG_UV(ci_log("%s: "NT_FMT"Unbound: first send via OS got L:[%s:%u]", __FUNCTION__, NT_PRI_ARGS(ni,us), ip_addr_str( udp_laddr_be32(us)), udp_lport_be16(us))); - ci_rel_os_sock_fd( os_sock ); errno = err; return ret; } diff --git a/src/lib/transport/ip/udp_sockopts.c b/src/lib/transport/ip/udp_sockopts.c index 7de1e27..b6d3f5b 100644 --- a/src/lib/transport/ip/udp_sockopts.c +++ b/src/lib/transport/ip/udp_sockopts.c @@ -577,6 +577,11 @@ int ci_udp_setsockopt(citp_socket* ep, ci_fd_t fd, int level, ci_fd_t os_sock; int rc; + /* We need to grab the stack lock before getting the os_sock fd, which + * holds the dup2 lock until released. + */ + ci_netif_lock_id(ep->netif, SC_SP(ep->s)); + /* Keep the OS socket in sync so we can move freely between efab & OS fds ** on a per-call basis if necessary. */ os_sock = ci_get_os_sock_fd(fd); @@ -594,12 +599,10 @@ int ci_udp_setsockopt(citp_socket* ep, ci_fd_t fd, int level, if( rc <= 0 ) goto out; } - /* Otherwise we need to grab the netif lock. */ - ci_netif_lock_id(ep->netif, SC_SP(ep->s)); rc = ci_udp_setsockopt_lk(ep, fd, os_sock, level, optname, optval, optlen); - ci_netif_unlock(ep->netif); out: ci_rel_os_sock_fd(os_sock); + ci_netif_unlock(ep->netif); return rc; } diff --git a/src/lib/transport/unix/fdtable.c b/src/lib/transport/unix/fdtable.c index 87c9e90..85f56fd 100644 --- a/src/lib/transport/unix/fdtable.c +++ b/src/lib/transport/unix/fdtable.c @@ -208,6 +208,7 @@ static void fdtable_swap(unsigned fd, citp_fdinfo_p from, if( fdip_cas_fail(p_fdip, from, to) ) goto again; } +/* If this is called with OO_IOC_TCP_HANDOVER the stack lock must be held */ static int fdtable_fd_move(ci_fd_t sock_fd, int op) { ci_uint32 io_fd = sock_fd; @@ -804,11 +805,27 @@ citp_fdinfo* citp_fdtable_lookup_noprobe(unsigned fd) return NULL; } +static ci_netif* fd_to_netif(int fd, int fdt_locked) +{ + ci_netif* ni = NULL; + ci_ep_info_t info; + + if( oo_ep_info(fd, &info) < 0 ) { + Log_V(log("%s: fd=%d unknown", __FUNCTION__, fd)); + } + else { + ni = citp_find_ul_netif(info.resource_id, fdt_locked); + } + + return ni; +} + static void citp_fdinfo_do_handover(citp_fdinfo* fdi, int fdt_locked) { int rc; citp_fdinfo* epoll_fdi = NULL; int os_fd = fdi->fd; + ci_netif* ni; #ifndef NDEBUG /* Yuk: does for UDP too. */ volatile citp_fdinfo_p* p_fdip; @@ -825,7 +842,20 @@ static void citp_fdinfo_do_handover(citp_fdinfo* fdi, int fdt_locked) epoll_fdi->protocol->type == CITP_EPOLLB_FD ) { citp_epollb_on_handover(epoll_fdi, fdi); } + + /* Handover requires stack state modification, but we also need the dup2 + * lock to avoid the fd we're furtling changing under our feet, and lock + * ordering requires the stack lock be taken first. + */ + ni = fd_to_netif(fdi->fd, fdt_locked); + /* We should always be able to obtain the netif from our fdi, because if + * we're handing something over that implies it's currently in a stack. + */ + ci_assert(ni); + ci_netif_lock(ni); rc = fdtable_fd_move(fdi->fd, OO_IOC_TCP_HANDOVER); + ci_netif_unlock(ni); + if( rc == -EBUSY && fdi->epoll_fd >= 0 ) { ci_assert(fdi_to_sock_fdi(fdi)->sock.s->b.sb_aflags & CI_SB_AFLAG_MOVED_AWAY);