20 Jun, 2012

15 commits

  • Input packet processing for local sockets involves two major demuxes.
    One for the route and one for the socket.

    But we can optimize this down to one demux for certain kinds of local
    sockets.

    Currently we only do this for established TCP sockets, but it could
    at least in theory be expanded to other kinds of connections.

    If a TCP socket is established then it's identity is fully specified.

    This means that whatever input route was used during the three-way
    handshake must work equally well for the rest of the connection since
    the keys will not change.

    Once we move to established state, we cache the receive packet's input
    route to use later.

    Like the existing cached route in sk->sk_dst_cache used for output
    packets, we have to check for route invalidations using dst->obsolete
    and dst->ops->check().

    Early demux occurs outside of a socket locked section, so when a route
    invalidation occurs we defer the fixup of sk->sk_rx_dst until we are
    actually inside of established state packet processing and thus have
    the socket locked.

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Don't pretend that inet_protos[] and inet6_protos[] are hashes, thay
    are just a straight arrays. Remove all unnecessary hash masking.

    Document MAX_INET_PROTOS.

    Use RAW_HTABLE_SIZE when appropriate.

    Reported-by: Ben Hutchings
    Signed-off-by: David S. Miller

    David S. Miller
     
  • Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Jiri Pirko
     
  • This patch adds two exported functions. One allows to mark option
    instance as changed and the second processes change check and does
    transfer of changed options to userspace.

    Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Jiri Pirko
     
  • Introduce struct team_option_inst_info and push option instance info
    there. It can be then easily passed to gsetter context and used for
    feature async option changes.

    Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Jiri Pirko
     
  • Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Jiri Pirko
     
  • Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Jiri Pirko
     
  • Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Jiri Pirko
     
  • Marc Kleine-Budde says:

    ====================
    here is our second pull request for net-next. In this series Federico
    Vaga adds a pci driver for c_can/d_can hardware using the existing
    generic c_can driver. The remaining 6 patches are by Oliver Hartkopp.
    He adds CANFD support to the CAN stack while keeping binary
    compatibility for existing applications. CANFD is an extension to the
    existing CAN standard, it allows longer CAN frames and/or higher data
    rates. There's no real hardware available yet, but this series adds
    CANFD support to the vcan driver.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • John Linville says:

    ====================
    This is a sizeable batch of updates intended for 3.6...

    The bulk of the changes here are Bluetooth. Gustavo says:

    Here goes the first Bluetooth pull request for 3.6, we have
    queued quite a lot of work. Andrei Emeltchenko added the AMP
    Manager code, a lot of work is needed, but the first bit are
    already there. This code is disabled by default. Mat Martineau
    changed the whole L2CAP ERTM state machine code, replacing
    the old one with a new implementation. Besides that we had
    lot of coding style fixes (to follow net rules), more l2cap
    core separation from socket and many clean ups and fixed all
    over the tree.

    Along with the above, there is a healthy dose of ath9k, iwlwifi,
    and other driver updates. There is also another pull from the
    wireless tree to resolve some merge issues. I also fixed-up some
    merge discrepencies between net-next and wireless-next.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • - update sanity checks
    - add DLC to length conversion helpers
    - can_dlc2len() - get data length from can_dlc with sanitized can_dlc
    - can_len2dlc() - map the sanitized data length to an appropriate DLC

    Signed-off-by: Oliver Hartkopp
    Signed-off-by: Marc Kleine-Budde

    Oliver Hartkopp
     
  • - introduce a new sockopt CAN_RAW_FD_FRAMES to allow CAN FD frames
    - handle CAN frames and CAN FD frames simultaneously when enabled

    Signed-off-by: Oliver Hartkopp
    Signed-off-by: Marc Kleine-Budde

    Oliver Hartkopp
     
  • - handle ETH_P_CAN and ETH_P_CANFD skbuffs
    - update sanity checks for CAN and CAN FD
    - make sure the CAN frame can pass the selected CAN netdevice on send
    - bump core version and abi version to indicate the new CAN FD support

    Signed-off-by: Oliver Hartkopp
    Signed-off-by: Marc Kleine-Budde

    Oliver Hartkopp
     
  • - add new struct canfd_frame
    - check identical element offsets in struct can_frame and struct canfd_frame
    - new ETH_P_CANFD definition to tag CAN FD skbs correctly
    - add CAN_MTU and CANFD_MTU definitions for easy frame and mode detection
    - add CAN[FD]_MAX_[DLC|DLEN] helper constants to remove hard coded values
    - update existing struct can_frame with helper constants and comments

    Signed-off-by: Oliver Hartkopp
    Signed-off-by: Marc Kleine-Budde

    Oliver Hartkopp
     
  • …wireless-next into for-davem

    Conflicts:
    drivers/net/wireless/iwlwifi/dvm/testmode.c
    drivers/net/wireless/iwlwifi/pcie/trans.c

    John W. Linville
     

19 Jun, 2012

2 commits

  • ERROR: "nfqnl_ct_parse" [net/netfilter/nfnetlink_queue.ko] undefined!
    ERROR: "nfqnl_ct_seq_adjust" [net/netfilter/nfnetlink_queue.ko] undefined!
    ERROR: "nfqnl_ct_put" [net/netfilter/nfnetlink_queue.ko] undefined!
    ERROR: "nfqnl_ct_get" [net/netfilter/nfnetlink_queue.ko] undefined!

    We have to use CONFIG_NETFILTER_NETLINK_QUEUE_CT in
    include/net/netfilter/nfnetlink_queue.h, not CONFIG_NF_CONNTRACK.

    Signed-off-by: Pablo Neira Ayuso
    Signed-off-by: David S. Miller

    Pablo Neira Ayuso
     
  • In "9cb0176 netfilter: add glue code to integrate nfnetlink_queue and ctnetlink"
    the compilation with NF_CONNTRACK disabled is broken. This patch fixes this
    issue.

    I have moved the conntrack part into nfnetlink_queue_ct.c to avoid
    peppering the entire nfnetlink_queue.c code with ifdefs.

    I also needed to rename nfnetlink_queue.c to nfnetlink_queue_pkt.c
    to update the net/netfilter/Makefile to support conditional compilation
    of the conntrack integration.

    This patch also adds CONFIG_NETFILTER_QUEUE_CT in case you want to explicitly
    disable the integration between nf_conntrack and nfnetlink_queue.

    Reported-by: Andrew Morton
    Signed-off-by: Pablo Neira Ayuso

    Pablo Neira Ayuso
     

17 Jun, 2012

2 commits

  • Pablo says:

    ====================
    This is the second batch of Netfilter updates for net-next. It contains the
    kernel changes for the new user-space connection tracking helper
    infrastructure.

    More details on this infrastructure are provides here:
    http://lwn.net/Articles/500196/

    Still, I plan to provide some official documentation through the
    conntrack-tools user manual on how to setup user-space utilities for this.
    So far, it provides two helper in user-space, one for NFSv3 and another for
    Oracle/SQLnet/TNS. Yet in my TODO list.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Fix code style - place the asterisk where it belongs.

    Signed-off-by: Eldad Zack
    Signed-off-by: David S. Miller

    Eldad Zack
     

16 Jun, 2012

13 commits

  • There are good reasons to supports helpers in user-space instead:

    * Rapid connection tracking helper development, as developing code
    in user-space is usually faster.

    * Reliability: A buggy helper does not crash the kernel. Moreover,
    we can monitor the helper process and restart it in case of problems.

    * Security: Avoid complex string matching and mangling in kernel-space
    running in privileged mode. Going further, we can even think about
    running user-space helpers as a non-root process.

    * Extensibility: It allows the development of very specific helpers (most
    likely non-standard proprietary protocols) that are very likely not to be
    accepted for mainline inclusion in the form of kernel-space connection
    tracking helpers.

    This patch adds the infrastructure to allow the implementation of
    user-space conntrack helpers by means of the new nfnetlink subsystem
    `nfnetlink_cthelper' and the existing queueing infrastructure
    (nfnetlink_queue).

    I had to add the new hook NF_IP6_PRI_CONNTRACK_HELPER to register
    ipv[4|6]_helper which results from splitting ipv[4|6]_confirm into
    two pieces. This change is required not to break NAT sequence
    adjustment and conntrack confirmation for traffic that is enqueued
    to our user-space conntrack helpers.

    Basic operation, in a few steps:

    1) Register user-space helper by means of `nfct':

    nfct helper add ftp inet tcp

    [ It must be a valid existing helper supported by conntrack-tools ]

    2) Add rules to enable the FTP user-space helper which is
    used to track traffic going to TCP port 21.

    For locally generated packets:

    iptables -I OUTPUT -t raw -p tcp --dport 21 -j CT --helper ftp

    For non-locally generated packets:

    iptables -I PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp

    3) Run the test conntrackd in helper mode (see example files under
    doc/helper/conntrackd.conf

    conntrackd

    4) Generate FTP traffic going, if everything is OK, then conntrackd
    should create expectations (you can check that with `conntrack':

    conntrack -E expect

    [NEW] 301 proto=6 src=192.168.1.136 dst=130.89.148.12 sport=0 dport=54037 mask-src=255.255.255.255 mask-dst=255.255.255.255 sport=0 dport=65535 master-src=192.168.1.136 master-dst=130.89.148.12 sport=57127 dport=21 class=0 helper=ftp
    [DESTROY] 301 proto=6 src=192.168.1.136 dst=130.89.148.12 sport=0 dport=54037 mask-src=255.255.255.255 mask-dst=255.255.255.255 sport=0 dport=65535 master-src=192.168.1.136 master-dst=130.89.148.12 sport=57127 dport=21 class=0 helper=ftp

    This confirms that our test helper is receiving packets including the
    conntrack information, and adding expectations in kernel-space.

    The user-space helper can also store its private tracking information
    in the conntrack structure in the kernel via the CTA_HELP_INFO. The
    kernel will consider this a binary blob whose layout is unknown. This
    information will be included in the information that is transfered
    to user-space via glue code that integrates nfnetlink_queue and
    ctnetlink.

    Signed-off-by: Pablo Neira Ayuso

    Pablo Neira Ayuso
     
  • This attribute can be used to modify and to dump the internal
    protocol information.

    Signed-off-by: Pablo Neira Ayuso

    Pablo Neira Ayuso
     
  • User-space programs that receive traffic via NFQUEUE may mangle packets.
    If NAT is enabled, this usually puzzles sequence tracking, leading to
    traffic disruptions.

    With this patch, nfnl_queue will make the corresponding NAT TCP sequence
    adjustment if:

    1) The packet has been mangled,
    2) the NFQA_CFG_F_CONNTRACK flag has been set, and
    3) NAT is detected.

    There are some records on the Internet complaning about this issue:
    http://stackoverflow.com/questions/260757/packet-mangling-utilities-besides-iptables

    By now, we only support TCP since we have no helpers for DCCP or SCTP.
    Better to add this if we ever have some helper over those layer 4 protocols.

    Signed-off-by: Pablo Neira Ayuso

    Pablo Neira Ayuso
     
  • This patch allows you to include the conntrack information together
    with the packet that is sent to user-space via NFQUEUE.

    Previously, there was no integration between ctnetlink and
    nfnetlink_queue. If you wanted to access conntrack information
    from your libnetfilter_queue program, you required to query
    ctnetlink from user-space to obtain it. Thus, delaying the packet
    processing even more.

    Including the conntrack information is optional, you can set it
    via NFQA_CFG_F_CONNTRACK flag with the new NFQA_CFG_FLAGS attribute.

    Signed-off-by: Pablo Neira Ayuso

    Pablo Neira Ayuso
     
  • This patch uses the new variable length conntrack extensions.

    Instead of using union nf_conntrack_help that contain all the
    helper private data information, we allocate variable length
    area to store the private helper data.

    This patch includes the modification of all existing helpers.
    It also includes a couple of include header to avoid compilation
    warnings.

    Signed-off-by: Pablo Neira Ayuso

    Pablo Neira Ayuso
     
  • We can now define conntrack extensions of variable size. This
    patch is useful to get rid of these unions:

    union nf_conntrack_help
    union nf_conntrack_proto
    union nf_conntrack_nat_help

    Signed-off-by: Pablo Neira Ayuso

    Pablo Neira Ayuso
     
  • This patch modifies the struct nf_conntrack_helper to allocate
    the room for the helper name. The maximum length is 16 bytes
    (this was already introduced in 2.6.24).

    For the maximum length for expectation policy names, I have
    also selected 16 bytes.

    This patch is required by the follow-up patch to support
    user-space connection tracking helpers.

    Signed-off-by: Pablo Neira Ayuso

    Pablo Neira Ayuso
     
  • Conflicts:
    net/ipv6/route.c

    Pull in 'net' again to get the revert of Thomas's change
    which introduced regressions.

    Signed-off-by: David S. Miller

    David S. Miller
     
  • This reverts commit 2a0c451ade8e1783c5d453948289e4a978d417c9.

    It causes crashes, because now ip6_null_entry is used before
    it is initialized.

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Conflicts:
    net/ipv6/route.c

    This deals with a merge conflict between the net-next addition of the
    inetpeer network namespace ops, and Thomas Graf's bug fix in
    2a0c451ade8e1783c5d453948289e4a978d417c9 which makes sure we don't
    register /proc/net/ipv6_route before it is actually safe to do so.

    Signed-off-by: David S. Miller

    David S. Miller
     
  • /proc/net/ipv6_route reflects the contents of fib_table_hash. The proc
    handler is installed in ip6_route_net_init() whereas fib_table_hash is
    allocated in fib6_net_init() _after_ the proc handler has been installed.

    This opens up a short time frame to access fib_table_hash with its pants
    down.

    fib6_init() as a whole can't be moved to an earlier position as it also
    registers the rtnetlink message handlers which should be registered at
    the end. Therefore split it into fib6_init() which is run early and
    fib6_init_late() to register the rtnetlink message handlers.

    Signed-off-by: Thomas Graf
    Reviewed-by: Neil Horman
    Signed-off-by: David S. Miller

    Thomas Graf
     
  • Orphaning skb in dev_hard_start_xmit() makes bonding behavior
    unfriendly for applications sending big UDP bursts : Once packets
    pass the bonding device and come to real device, they might hit a full
    qdisc and be dropped. Without orphaning, the sender is automatically
    throttled because sk->sk_wmemalloc reaches sk->sk_sndbuf (assuming
    sk_sndbuf is not too big)

    We could try to defer the orphaning adding another test in
    dev_hard_start_xmit(), but all this seems of little gain,
    now that BQL tends to make packets more likely to be parked
    in Qdisc queues instead of NIC TX ring, in cases where performance
    matters.

    Reverts commits :
    fc6055a5ba31 net: Introduce skb_orphan_try()
    87fd308cfc6b net: skb_tx_hash() fix relative to skb_orphan_try()
    and removes SKBTX_DRV_NEEDS_SK_REF flag

    Reported-and-bisected-by: Jean-Michel Hautbois
    Signed-off-by: Eric Dumazet
    Tested-by: Oliver Hartkopp
    Acked-by: Oliver Hartkopp
    Signed-off-by: David S. Miller

    Eric Dumazet
     
  • One tricky issue on the ipv6 side vs. ipv4 is that the ICMP callouts
    to handle the error pass the 32-bit info cookie in network byte order
    whereas ipv4 passes it around in host byte order.

    Like the ipv4 side, we have two helper functions. One for when we
    have a socket context and one for when we do not.

    ip6ip6 tunnels are not handled here, because they handle PMTU events
    by essentially relaying another ICMP packet-too-big message back to
    the original sender.

    This patch allows us to get rid of rt6_do_pmtu_disc(). It handles all
    kinds of situations that simply cannot happen when we do the PMTU
    update directly using a fully resolved route.

    In fact, the "plen == 128" check in ip6_rt_update_pmtu() can very
    likely be removed or changed into a BUG_ON() check. We should never
    have a prefixed ipv6 route when we get there.

    Another piece of strange history here is that TCP and DCCP, unlike in
    ipv4, never invoke the update_pmtu() method from their ICMP error
    handlers. This is incredibly astonishing since this is the context
    where we have the most accurate context in which to make a PMTU
    update, namely we have a fully connected socket and associated cached
    socket route.

    Signed-off-by: David S. Miller

    David S. Miller
     

15 Jun, 2012

1 commit

  • With ip_rt_frag_needed() removed, we have to explicitly update PMTU
    information in every ICMP error handler.

    Create two helper functions to facilitate this.

    1) ipv4_sk_update_pmtu()

    This updates the PMTU when we have a socket context to
    work with.

    2) ipv4_update_pmtu()

    Raw version, used when no socket context is available. For this
    interface, we essentially just pass in explicit arguments for
    the flow identity information we would have extracted from the
    socket.

    And you'll notice that ipv4_sk_update_pmtu() is simply implemented
    in terms of ipv4_update_pmtu()

    Note that __ip_route_output_key() is used, rather than something like
    ip_route_output_flow() or ip_route_output_key(). This is because we
    absolutely do not want to end up with a route that does IPSEC
    encapsulation and the like. Instead, we only want the route that
    would get us to the node described by the outermost IP header.

    Reported-by: Steffen Klassert
    Signed-off-by: David S. Miller

    David S. Miller
     

14 Jun, 2012

5 commits

  • Pull sound fixes from Takashi Iwai:

    - Fix a regression of USB-audio PCM assignment since 3.4
    - A few VGA-switcheroo-related fixes for proper HDMI audio enablement
    - Fixed the missing initializations of HD-audio verbs, which may have
    resulted in various breakage
    - Some driver-specific ASoC updates
    - A few fixes for the dynamic PCM code
    - The addition of pinctrl support for the i.MX audmux which didn't make
    it into -rc1 due to cross tree dependency issues
    - A few minor fixes in compress API codes

    * tag 'sound-3.5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
    ALSA: hda - Don't forget to call init verbs added by fixup list
    ALSA: HDA: Pin fixup for Zotac Z68 motherboard
    ALSA: compress_core: cleanup pointers on stop
    ALSA: compress_core: don't wake up on pause
    ALSA: hda - Fix detection of Creative SoundCore3D controllers
    vga_switcheroo: Enable/disable audio clients at the right time
    ALSA: hda - HDMI Audio init all connectors when VGA-switcheroo is off
    vga_switcheroo: Fix error without CONFIG_VGA_SWITCHEROO
    ALSA: hda - Fix uninitialized HDMI controllers with VGA-switcheroo
    vga_switcheroo: Add a helper function to get the client state
    ALSA: usb-audio: Fix substream assignments
    ASoC: tegra: add MODULE_DEVICE_TABLE to tegra30_ahub
    ASoC: wm2000: Always use a 4s timeout for the firmware
    ASoC: dapm: Fix input list to use source widgets
    ASoC: dpcm: Fix dpcm_get_be() to check that DAI is BE
    ASoC: wm8994: Apply volume updates with clocks enabled
    ASoC: wm8994: Ensure all AIFnCLK events are run from the _late variants
    ASoC: imx-audmux: add pinctrl support
    ASoC: dapm: Fix connected widget capture path query.

    Linus Torvalds
     
  • Pull networking fixes from David S. Miller:

    This has the fix for the wireless issues I ran into the other week as
    well as:

    1) Fix CAN c_can driver transmit handling resulting in BUG check
    triggers, from AnilKumar Ch.

    2) Fix packet drop monitor sleeping in atomic context, from Eric
    Dumazet.

    3) Fix mv643xx_eth driver build regression, from Andrew Lunn.

    4) Inetpeer freeing needs an RCU grace period in order to avoid races
    during tree invalidation. From Eric Dumazet.

    5) Fix endianness bugs in xt_HMARK netfilter module, from Hans
    Schillstrom.

    6) Add proper module refcounting to l2tp_eth to avoid crash on module
    unload, from Eric Dumazet.

    7) Fix truncation of neighbour entry dumps due to logic errors in
    neigh_dump_info() and friends, from Eric Dumazet.

    8) The conversion of fib6_age() to dst_neigh_lookup() accidently
    reversed the logic of a flags test, fix from Thomas Graf.

    9) Fix checksum configuration in newer sky2 chips, from Stephen
    Hemminger.

    10) Revert BQL support in NIU driver, doesn't work.

    11) l2tp_ip_sendmsg() illegally uses a route without a proper reference.
    From Eric Dumazet.

    12) be2net driver references an SKB after it's potentially been freed,
    also from Eric Dumazet.

    13) Fix RCU stalls in dummy net driver init. Also from Eric Dumazet.

    14) lpc_eth has several bugs in it's transmit engine leading to packet
    leaks and improper queue wakes, from Eric Dumazet.

    15) Apply short DMA workaround to more tg3 chips, from Matt Carlson.

    16) Add tilegx network driver.

    17) Bonding queue mapping for a packet can get corrupted, fix from Eric
    Dumazet.

    18) Fix bug in netpoll_send_udp() SKB management that can leave garbage
    in the payload in certain situations. From Eric Dumazet.

    19) bnx2x driver interprets chip RX checksum offload incorrectly in
    encapsulation situations. Fix from Eric Dumazet.

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (75 commits)
    bnx2x: fix checksum validation
    netpoll: fix netpoll_send_udp() bugs
    bonding: Fix corrupted queue_mapping
    bonding:record primary when modify it via sysfs
    tilegx network driver: initial support
    tg3: Apply short DMA frag workaround to 5906
    net: stmmac: Fix clock en-/disable calls
    lpc_eth: fix tx completion
    lpc_eth: add missing ndo_change_mtu()
    dummy: fix rcu_sched self-detected stalls
    net: Reorder initialization in ip_route_output to fix gcc warning
    virtio-net: fix a race on 32bit arches
    r8169: avoid NAPI scheduling delay.
    net: Make linux/tcp.h C++ friendly (trivial)
    netdev: fix drivers/net/phy/ kernel-doc warnings
    net/core: fix kernel-doc warnings
    be2net: fix a race in be_xmit()
    l2tp: fix a race in l2tp_ip_sendmsg()
    mac80211: add back channel change flag
    NFC: Fix possible NULL ptr deref when getting the name of a socket
    ...

    Linus Torvalds
     
  • Conflicts:
    drivers/net/wireless/ath/ath9k/main.c
    net/bluetooth/hci_event.c

    John W. Linville
     
  • …etooth/bluetooth-next

    John W. Linville
     
  • John W. Linville
     

13 Jun, 2012

2 commits