#
93466fc6 |
| 10-Feb-2015 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r278351 through r278498.
|
#
2575fbb8 |
| 09-Feb-2015 |
Randall Stewart <rrs@FreeBSD.org> |
This fixes a bug in the way that the LLE timers for nd6 and arp were being used. They basically would pass in the mutex to the callout_init. Because they used this method to the callout system, it wa
This fixes a bug in the way that the LLE timers for nd6 and arp were being used. They basically would pass in the mutex to the callout_init. Because they used this method to the callout system, it was possible to "stop" the callout. When flushing the table and you stopped the running callout, the callout_stop code would return 1 indicating that it was going to stop the callout (that was about to run on the callout_wheel blocked by the function calling the stop). Now when 1 was returned, it would lower the reference count one extra time for the stopped timer, then a few lines later delete the memory. Of course the callout_wheel was stuck in the lock code and would then crash since it was accessing freed memory. By using callout_init(c, 1) we always get a 0 back and the reference counting bug does not rear its head. We do have to make a few adjustments to the callouts themselves though to make sure it does the proper thing if rescheduled as well as gets the lock.
Commented upon by hiren and sbruno See Phabricator D1777 for more details.
Commented upon by hiren and sbruno Reviewed by: adrian, jhb and bz Sponsored by: Netflix Inc.
show more ...
|
#
51dd214c |
| 19-Jan-2015 |
Enji Cooper <ngie@FreeBSD.org> |
MFhead @ r277403
|
#
d899be7d |
| 19-Jan-2015 |
Glen Barber <gjb@FreeBSD.org> |
Reintegrate head: r274132-r277384
Sponsored by: The FreeBSD Foundation
|
#
8f0ea33f |
| 13-Jan-2015 |
Glen Barber <gjb@FreeBSD.org> |
Reintegrate head revisions r273096-r277147
Sponsored by: The FreeBSD Foundation
|
#
d63e657c |
| 09-Jan-2015 |
Alexander V. Chernikov <melifaro@FreeBSD.org> |
* Deal with ARCNET L2 multicast mapping for IPv6 the same way as in IPv4: handle it in arc_output() instead of nd6_storelladdr(). * Remove IFT_ARCNET check from arpresolve() since arc_output() does
* Deal with ARCNET L2 multicast mapping for IPv6 the same way as in IPv4: handle it in arc_output() instead of nd6_storelladdr(). * Remove IFT_ARCNET check from arpresolve() since arc_output() does not use arpresolve() to handle broadcast/multicast. This check was there since r84931. It looks like it was not used since r89099 (initial import of Arcnet support where multicast is handled separately). * Remove IFT_IEEE1394 case from nd6_storelladdr() since firewire_output() calles nd6_storelladdr() for unicast addresses only. * Remove IFT_ARCNET case from nd6_storelladdr() since arc_output() now handles multicast by itself.
As a result, we have the following pattern: all non-ethernet-style media have their own multicast map handling inside their appropriate routines. On the other hand, arpresolve() (and nd6_storelladdr()) which meant to be 'generic' ones de-facto handles ethernet-only multicast maps.
MFC after: 3 weeks
show more ...
|
#
ed6a66ca |
| 05-Jan-2015 |
Robert Watson <rwatson@FreeBSD.org> |
To ease changes to underlying mbuf structure and the mbuf allocator, reduce the knowledge of mbuf layout, and in particular constants such as M_EXT, MLEN, MHLEN, and so on, in mbuf consumers by unify
To ease changes to underlying mbuf structure and the mbuf allocator, reduce the knowledge of mbuf layout, and in particular constants such as M_EXT, MLEN, MHLEN, and so on, in mbuf consumers by unifying various alignment utility functions (M_ALIGN(), MH_ALIGN(), MEXT_ALIGN() in a single M_ALIGN() macro, implemented by a now-inlined m_align() function:
- Move m_align() from uipc_mbuf.c to mbuf.h; mark as __inline. - Reimplement M_ALIGN(), MH_ALIGN(), and MEXT_ALIGN() using m_align(). - Update consumers around the tree to simply use M_ALIGN().
This change eliminates a number of cases where mbuf consumers must be aware of whether or not mbufs returned by the allocator use external storage, but also assumptions about the size of the returned mbuf. This will make it easier to introduce changes in how we use external storage, as well as features such as variable-size mbufs.
Differential Revision: https://reviews.freebsd.org/D1436 Reviewed by: glebius, trasz, gnn, bz Sponsored by: EMC / Isilon Storage Division
show more ...
|
#
20dd8995 |
| 03-Jan-2015 |
Alexander V. Chernikov <melifaro@FreeBSD.org> |
* Hide lltable implementation details in if_llatbl_var.h * Make most of lltable_* methods 'normal' functions instead of inline * Add lltable_get_<af|ifp>() functions to access given lltable fields *
* Hide lltable implementation details in if_llatbl_var.h * Make most of lltable_* methods 'normal' functions instead of inline * Add lltable_get_<af|ifp>() functions to access given lltable fields * Temporarily resurrect nd6_lookup() function
show more ...
|
#
ee7e9a4e |
| 09-Dec-2014 |
Alexander V. Chernikov <melifaro@FreeBSD.org> |
* Do not assume lle has sockaddr key after struct lle: use llt_fill_sa_entry() llt method to store lle address in sa. * Eliminate L3_ADDR macro and either reference IPv4/IPv6 address directly f
* Do not assume lle has sockaddr key after struct lle: use llt_fill_sa_entry() llt method to store lle address in sa. * Eliminate L3_ADDR macro and either reference IPv4/IPv6 address directly from lle or use newly-created llt_fill_sa_entry(). * Do not store sockaddr inside arp/ndp lle anymore.
show more ...
|
#
d82ed505 |
| 09-Dec-2014 |
Alexander V. Chernikov <melifaro@FreeBSD.org> |
Simplify lle lookup/create api by using addresses instead of sockaddrs.
|
#
73b52ad8 |
| 08-Dec-2014 |
Alexander V. Chernikov <melifaro@FreeBSD.org> |
Use llt_prepare_static_entry method to prepare valid per-af static entry.
|
#
0368226e |
| 08-Dec-2014 |
Alexander V. Chernikov <melifaro@FreeBSD.org> |
* Retire abstract llentry_free() in favor of lltable_drop_entry_queue() and explicit calls to RTENTRY_FREE_LOCKED() * Use lltable_prefix_free() in arp_ifscrub to be consistent with nd6. * Rename <
* Retire abstract llentry_free() in favor of lltable_drop_entry_queue() and explicit calls to RTENTRY_FREE_LOCKED() * Use lltable_prefix_free() in arp_ifscrub to be consistent with nd6. * Rename <lltable_|llt>_delete function to _delete_addr() to note that this function is used to external callers. Make this function maintain its own locking. * Use lookup/unlink/clear call chain from internal callers instead of delete_addr. * Fix LLE_DELETED flag handling
show more ...
|
#
721cd2e0 |
| 07-Dec-2014 |
Alexander V. Chernikov <melifaro@FreeBSD.org> |
Do not enforce particular lle storage scheme: * move lltable allocation to per-domain callbacks. * make llentry_link/unlink functions overridable llt methods. * make hash table traversal another over
Do not enforce particular lle storage scheme: * move lltable allocation to per-domain callbacks. * make llentry_link/unlink functions overridable llt methods. * make hash table traversal another overridable llt method.
show more ...
|
#
a743ccd4 |
| 07-Dec-2014 |
Alexander V. Chernikov <melifaro@FreeBSD.org> |
* Add llt_clear_entry() callback which is able to do all lle cleanup including unlinking/freeing * Relax locking in lltable_prefix_free_af/lltable_free * Do not pass @llt to lle free callback: it
* Add llt_clear_entry() callback which is able to do all lle cleanup including unlinking/freeing * Relax locking in lltable_prefix_free_af/lltable_free * Do not pass @llt to lle free callback: it is always NULL now. * Unify arptimer/nd6_llinfo_timer: explicitly unlock lle avoiding unlock/lock sequinces * Do not pass unlocked lle to nd6_ns_output(): add nd6_llinfo_get_holdsrc() to retrieve preferred source address from lle hold queue and pass it instead of lle. * Finally, make nd6_create() create and return unlocked lle * Separate defrtr handling code from nd6_free(): use nd6_check_del_defrtr() to check if we need to keep entry instead of performing GC, use nd6_check_recalc_defrtr() to perform actual recalc on lle removal. * Move isRouter handling from nd6_cache_lladdr() to separate nd6_check_router() * Add initial code to maintain lle runtime flags in sync.
show more ...
|
#
a6e934e3 |
| 01-Dec-2014 |
Alexander V. Chernikov <melifaro@FreeBSD.org> |
Put bandaid on arptimer-derived crashed for 'arp -da' deleted records. The proper fix will arrive after convering lltable 'delete' method.
|
#
9b65db85 |
| 01-Dec-2014 |
Alexander V. Chernikov <melifaro@FreeBSD.org> |
Do more fine-grained locking in lltable code: lltable_create_lle() does actual new lle creation without extensive locking and existing lle search. Move lle updating code from gigantic in_arpinput
Do more fine-grained locking in lltable code: lltable_create_lle() does actual new lle creation without extensive locking and existing lle search. Move lle updating code from gigantic in_arpinput() to arp_update_llle() and some other functions.
IPv6 changes to follow.
show more ...
|
#
ce313fdd |
| 30-Nov-2014 |
Alexander V. Chernikov <melifaro@FreeBSD.org> |
* Unify lle table dump/prefix removal code. * Rename lla_XXX -> lltable_XXX_lle to reduce number of name prefixes used by lltable code.
|
#
5d14e4cd |
| 29-Nov-2014 |
Alexander V. Chernikov <melifaro@FreeBSD.org> |
Provide rte_<get|set> methods to access rtentry for external consumers.
|
#
840e7092 |
| 29-Nov-2014 |
Enji Cooper <ngie@FreeBSD.org> |
MFHead @ r275232
|
#
344e0332 |
| 28-Nov-2014 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r275118 through r275209.
|
#
74860d4f |
| 28-Nov-2014 |
Alexander V. Chernikov <melifaro@FreeBSD.org> |
Do not return unlocked/unreferenced lle in arpresolve/nd6_storelladdr - return lle flags IFF needed. Do not pass rte to arpresolve - pass is_gateway flag instead.
|
#
73d77028 |
| 23-Nov-2014 |
Alexander V. Chernikov <melifaro@FreeBSD.org> |
Do more fine-grained lltable locking: use table runtime lock as rare as we can.
|
#
7c066c18 |
| 22-Nov-2014 |
Alexander V. Chernikov <melifaro@FreeBSD.org> |
Use less-invasive approach for IF_AFDATA lock: convert into 2 locks: use rwlock accessible via external functions (IF_AFDATA_CFG_* -> if_afdata_cfg_*()) for all control plane tasks use rmlock
Use less-invasive approach for IF_AFDATA lock: convert into 2 locks: use rwlock accessible via external functions (IF_AFDATA_CFG_* -> if_afdata_cfg_*()) for all control plane tasks use rmlock (IF_AFDATA_RUN_*) for fast-path lookups.
show more ...
|
#
27688dfe |
| 22-Nov-2014 |
Alexander V. Chernikov <melifaro@FreeBSD.org> |
Temporarily revert r274774.
|
#
2e47d2f9 |
| 22-Nov-2014 |
Alexander V. Chernikov <melifaro@FreeBSD.org> |
Mark ifaddr/rtsock static entries RLLE_VALID.
|