Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  br_private_mcast_eht.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0-or-later
 * Copyright (c) 2020, Nikolay Aleksandrov <nikolay@nvidia.com>
 */

#ifndef _BR_PRIVATE_MCAST_EHT_H_
#define _BR_PRIVATE_MCAST_EHT_H_

#define BR_MCAST_DEFAULT_EHT_HOSTS_LIMIT 512

union net_bridge_eht_addr {
 __be32    ip4;
#if IS_ENABLED(CONFIG_IPV6)
 struct in6_addr   ip6;
#endif
};

/* single host's list of set entries and filter_mode */
struct net_bridge_group_eht_host {
 struct rb_node   rb_node;

 union net_bridge_eht_addr h_addr;
 struct hlist_head  set_entries;
 unsigned int   num_entries;
 unsigned char   filter_mode;
 struct net_bridge_port_group *pg;
};

/* (host, src entry) added to a per-src set and host's list */
struct net_bridge_group_eht_set_entry {
 struct rb_node   rb_node;
 struct hlist_node  host_list;

 union net_bridge_eht_addr h_addr;
 struct timer_list  timer;
 struct net_bridge  *br;
 struct net_bridge_group_eht_set *eht_set;
 struct net_bridge_group_eht_host *h_parent;
 struct net_bridge_mcast_gc mcast_gc;
};

/* per-src set */
struct net_bridge_group_eht_set {
 struct rb_node   rb_node;

 union net_bridge_eht_addr src_addr;
 struct rb_root   entry_tree;
 struct timer_list  timer;
 struct net_bridge_port_group *pg;
 struct net_bridge  *br;
 struct net_bridge_mcast_gc mcast_gc;
};

#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
void br_multicast_eht_clean_sets(struct net_bridge_port_group *pg);
bool br_multicast_eht_handle(const struct net_bridge_mcast *brmctx,
        struct net_bridge_port_group *pg,
        void *h_addr,
        void *srcs,
        u32 nsrcs,
        size_t addr_size,
        int grec_type);
int br_multicast_eht_set_hosts_limit(struct net_bridge_port *p,
         u32 eht_hosts_limit);

static inline bool
br_multicast_eht_should_del_pg(const struct net_bridge_port_group *pg)
{
 return !!((pg->key.port->flags & BR_MULTICAST_FAST_LEAVE) &&
    RB_EMPTY_ROOT(&pg->eht_host_tree));
}

static inline bool
br_multicast_eht_hosts_over_limit(const struct net_bridge_port_group *pg)
{
 const struct net_bridge_port *p = pg->key.port;

 return !!(p->multicast_eht_hosts_cnt >= p->multicast_eht_hosts_limit);
}

static inline void br_multicast_eht_hosts_inc(struct net_bridge_port_group *pg)
{
 struct net_bridge_port *p = pg->key.port;

 p->multicast_eht_hosts_cnt++;
}

static inline void br_multicast_eht_hosts_dec(struct net_bridge_port_group *pg)
{
 struct net_bridge_port *p = pg->key.port;

 p->multicast_eht_hosts_cnt--;
}
#endif /* CONFIG_BRIDGE_IGMP_SNOOPING */

#endif /* _BR_PRIVATE_MCAST_EHT_H_ */

Messung V0.5
C=95 H=94 G=94

¤ Dauer der Verarbeitung: 0.16 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge