Projects
Eulaceura:Factory
lwip
_service:obs_scm:0082-add-vlanid-in-netif.patch
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:obs_scm:0082-add-vlanid-in-netif.patch of Package lwip
From 95f00d7a735b20cf352f6712529547b3720614cb Mon Sep 17 00:00:00 2001 From: jiangheng <jiangheng14@huawei.com> Date: Mon, 5 Feb 2024 17:35:32 +0800 Subject: add vlanid in netif --- src/core/netif.c | 14 ++++++++++++++ src/core/tcp.c | 2 ++ src/core/tcp_in.c | 2 ++ src/include/lwip/netif.h | 9 +++++++++ src/netif/ethernet.c | 6 ++++++ 5 files changed, 33 insertions(+) diff --git a/src/core/netif.c b/src/core/netif.c index 8a1ccec..eff3cae 100644 --- a/src/core/netif.c +++ b/src/core/netif.c @@ -369,6 +369,11 @@ netif_add(struct netif *netif, netif->acd_list = NULL; #endif /* LWIP_ACD */ NETIF_RESET_HINTS(netif); + +#if GAZELLE_ENABLE + netif->vlan_enable=false; +#endif + #if ENABLE_LOOPBACK netif->loop_first = NULL; netif->loop_last = NULL; @@ -455,6 +460,15 @@ netif_add(struct netif *netif, return netif; } +#if GAZELLE_ENABLE +void +netif_set_vlan_tci(struct netif *netif, u16_t vlan_tci) +{ + netif->vlan_enable = true; + netif->vlan_tci = vlan_tci; +} +#endif + static void netif_do_ip_addr_changed(const ip_addr_t *old_addr, const ip_addr_t *new_addr) { diff --git a/src/core/tcp.c b/src/core/tcp.c index 1d02574..b889a4e 100644 --- a/src/core/tcp.c +++ b/src/core/tcp.c @@ -996,7 +996,9 @@ tcp_listen_with_backlog_and_err(struct tcp_pcb *pcb, u8_t backlog, err_t *err) #endif #if LWIP_VLAN_PCP +#if !GAZELLE_ENABLE lpcb->netif_hints.tci = pcb->netif_hints.tci; +#endif #endif /* LWIP_VLAN_PCP */ #if LWIP_IPV4 && LWIP_IPV6 IP_SET_TYPE_VAL(lpcb->remote_ip, pcb->local_ip.type); diff --git a/src/core/tcp_in.c b/src/core/tcp_in.c index 9b1ec9c..10f8a14 100644 --- a/src/core/tcp_in.c +++ b/src/core/tcp_in.c @@ -808,7 +808,9 @@ tcp_listen_input(struct tcp_pcb_listen *pcb) npcb->listener = pcb; #endif /* LWIP_CALLBACK_API || TCP_LISTEN_BACKLOG */ #if LWIP_VLAN_PCP +#if !GAZELLE_ENABLE npcb->netif_hints.tci = pcb->netif_hints.tci; +#endif #endif /* LWIP_VLAN_PCP */ /* inherit socket options */ npcb->so_options = pcb->so_options & SOF_INHERITED; diff --git a/src/include/lwip/netif.h b/src/include/lwip/netif.h index 502a151..368b89a 100644 --- a/src/include/lwip/netif.h +++ b/src/include/lwip/netif.h @@ -45,6 +45,10 @@ #include "lwip/ip_addr.h" +#if GAZELLE_ENABLE +#include <stdbool.h> +#endif + #include "lwip/def.h" #include "lwip/pbuf.h" #include "lwip/stats.h" @@ -360,6 +364,10 @@ struct netif { #if GAZELLE_ENABLE u64_t rxol_flags; u64_t txol_flags; + bool vlan_enable; + /** vlan id is an attribute of NIC. The variable 'netif_hints' is not used because it is assigned by pcb, + * while non transport layers without pcb cannot be enabled */ + u16_t vlan_tci; #endif /** descriptive abbreviation */ char name[2]; @@ -492,6 +500,7 @@ void netif_set_down(struct netif *netif); #define netif_get_rxol_flags(netif) ((netif)->rxol_flags) #define netif_get_txol_flags(netif) ((netif)->txol_flags) +void netif_set_vlan_tci(struct netif *netif, u16_t vlan_tci); void netif_set_rtc_mode(struct netif *netif); void netif_set_rxol_flags(struct netif *netif, u64_t flags); void netif_set_txol_flags(struct netif *netif, u64_t flags); diff --git a/src/netif/ethernet.c b/src/netif/ethernet.c index dc89566..af4cffc 100644 --- a/src/netif/ethernet.c +++ b/src/netif/ethernet.c @@ -283,9 +283,15 @@ ethernet_output(struct netif * netif, struct pbuf * p, vlan_prio_vid = LWIP_HOOK_VLAN_SET(netif, p, src, dst, eth_type); #elif LWIP_VLAN_PCP vlan_prio_vid = -1; +#if !GAZELLE_ENABLE if (netif->hints && (netif->hints->tci >= 0)) { vlan_prio_vid = (u16_t)netif->hints->tci; } +#else + if (netif->vlan_enable) { + vlan_prio_vid = netif->vlan_tci; + } +#endif /* GAZELLE_ENABLE */ #endif if (vlan_prio_vid >= 0) { struct eth_vlan_hdr *vlanhdr; -- 2.33.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2