Hmm.... I seem to recall when I was looking at path optimizations in
Sitara, that a bit more clean up could be done in some hot paths if the
mblk carried the group indication in a bit rather than always carrying
the link layer header around.
Have you given any thought to maybe *gasp* adding a bit or two to the
mblk with the IP header. If that were done, there are other
optimizations that would help the hot code path as well.
-- Garrett
Darren Reed wrote:
> I forgot to mention that this case seeks patch binding.
>
> Darren Reed wrote:
>
>> I'm submitting the following case on behalf of the devil (me).
>>
>> Template Version: @(#)sac_nextcase 1.64 07/13/07 SMI
>> This information is Copyright 2007 Sun Microsystems
>> 1. Introduction
>> 1.1. Project/Component Working Name:
>> Broadcast/multicast packet notification through pfhooks
>> 1.2. Name of Document Author/Supplier:
>> Author: Darren Reed
>> 1.3 Date of This Document:
>> 26 November, 2007
>> 4. Technical Description
>> Broadcast/multicast packet notification through pfhooks
>>
>> Introduction
>> ============
>> This case seeks to introduce a new member of the hooks_pkt_event_t
>> structure (introduced by PSARC/2005/334) to allow communication of
>> whether or not a packet is a multicast or broadcast packet through
>> to receivers of packet events. As the interfaces introduced by
>> PSARC/2005/334 are currently private, so too is the change being
>> introduced by this case.
>>
>> History
>> =======
>> Prior to PSARC/2005/334, IPFilter was able to examine the mblks before
>> they reached IP, giving it access to the data structures used by the
>> DL_UNITDATA_IND primitive. This structure includes a field known as
>> dl_group_address and indicates whether or not the packet is a broadcast/
>> multicast packet or a unicast packet. With the advent of
>> PSARC/2005/334,
>> the interception point for filtering was moved to being inside of IP, to
>> a location where the DL_UNITDATA_IND has already been removed from the
>> front of the packet, thus preventing IPFilter from being able to detect
>> whether or not the packet was unicast or not.
>>
>> Details
>> =======
>> The current hook_pkt_event_t structure can be found in
>> <sys/hook_event.h>
>> and is as follows:
>>
>> /*
>> * The hook_pkt_event_t structure is supplied with packet events on
>> * associated network interfaces.
>> *
>> * The members of this structure are defined as follows:
>> * hpe_ifp - "in" interface for packets coming into the system or
>> forwarded
>> * hpe_ofp - "out" interface for packets being transmitted or forwarded
>> * hpe_hdr - pointer to protocol header within the packet
>> * hpe_mp - pointer to the mblk pointer starting the chain for this
>> packet
>> * hpe_mb - pointer to the mblk that contains hpe_hdr
>> */
>> typedef struct hook_pkt_event {
>> phy_if_t hpe_ifp;
>> phy_if_t hpe_ofp;
>> void *hpe_hdr;
>> mblk_t **hpe_mp;
>> mblk_t *hpe_mb;
>> } hook_pkt_event_t;
>>
>> The proposed new structure is:
>>
>> typedef struct hook_pkt_event {
>> phy_if_t hpe_ifp;
>> phy_if_t hpe_ofp;
>> void *hpe_hdr;
>> mblk_t **hpe_mp;
>> mblk_t *hpe_mb;
>> int hpe_flags;
>> } hook_pkt_event_t;
>>
>> The proposed use of hpe_flags is:
>> #define HPE_MULTICAST 0x01
>> #define HPE_BROADCAST 0x02
>>
>> These two bit values indicate if the packet is multicast or if it
>> is broadcast, however, using DLPI in Solaris today, it is not
>> possible to
>> know if a packet that reaches IP is multicast or broadcast by looking
>> at the dl_group_address field and nor is there any other mechanism
>> available. In light of this, setting both flags together is supported
>> as an indication that the packet might be one or the other:
>>
>> #define HPE_MBCAST 0x03
>>
>> Interface table
>> ===============
>> +---------------------------------------------------------------+
>> | | Interfaces Exported | |
>> |------------------+-----------------------+--------------------|
>> | Interface | Classification | Comments |
>> |------------------+-----------------------+--------------------|
>> | HPE_MULTICAST | Consolidation Private | <sys/hook_event.h> |
>> | HPE_BROADCAST | Consolidation Private | <sys/hook_event.h> |
>> | HPE_MBCAST | Consolidation Private | <sys/hook_event.h> |
>> | hook_pkt_event_t | Consolidation Private | <sys/hook_event.h> |
>> +------------------+-----------------------+--------------------+
>>
>>
>> 6. Resources and Schedule
>> 6.4. Steering Committee requested information
>> 6.4.1. Consolidation C-team Name:
>> ON
>> 6.5. ARC review type: FastTrack
>> 6.6. ARC Exposure: open
>>
>>
>>
>