From gitlab at videolan.org Mon Dec 6 21:20:55 2021 From: gitlab at videolan.org (Christophe Massiot (@cmassiot)) Date: Mon, 06 Dec 2021 22:20:55 +0100 Subject: [bTSstream-devel] [Git][videolan/bitstream][master] 2 commits: ethernet: add vlan functions Message-ID: <61ae7eb7e27eb_2b692bcf089649@gitlab.mail> Christophe Massiot pushed to branch master at VideoLAN / bitstream Commits: 07c2fa00 by James Darnley at 2021-12-03T16:20:07+01:00 ethernet: add vlan functions - - - - - ba7576b3 by Christophe Massiot at 2021-12-06T22:20:46+01:00 Merge branch 'JDarnley-master' - - - - - 1 changed file: - ieee/ethernet.h Changes: ===================================== ieee/ethernet.h ===================================== @@ -35,6 +35,7 @@ #ifndef __BITSTREAM_IEEE_ETHERNET_H__ #define __BITSTREAM_IEEE_ETHERNET_H__ +#include #include #include /* memcpy */ @@ -101,7 +102,57 @@ static inline void ethernet_set_lentype(uint8_t *p_ethernet, uint16_t lentype) static inline uint8_t *ethernet_payload(uint8_t *p_ethernet) { - return p_ethernet + ETHERNET_HEADER_LEN; + if (ethernet_get_lentype(p_ethernet) != ETHERNET_TYPE_VLAN) + return p_ethernet + ETHERNET_HEADER_LEN; + else + return p_ethernet + ETHERNET_HEADER_LEN + ETHERNET_VLAN_LEN; +} + +static inline uint8_t ethernet_vlan_get_priority(uint8_t *p_ethernet) +{ + return (p_ethernet[ETHERNET_HEADER_LEN] & 0xe0) >> 5; +} + +static inline void ethernet_vlan_set_priority(uint8_t *p_ethernet, uint8_t priority) +{ + p_ethernet[ETHERNET_HEADER_LEN] &= ~0xe0; + p_ethernet[ETHERNET_HEADER_LEN] |= (priority & 0x7) << 5; +} + +static inline bool ethernet_vlan_get_cfi(uint8_t *p_ethernet) +{ + return (p_ethernet[ETHERNET_HEADER_LEN] & 0x10) == 0x10; +} + +static inline void ethernet_vlan_set_cfi(uint8_t *p_ethernet, bool cfi) +{ + p_ethernet[ETHERNET_HEADER_LEN] &= ~0x10; + p_ethernet[ETHERNET_HEADER_LEN] |= cfi << 4; +} + +static inline uint16_t ethernet_vlan_get_id(uint8_t *p_ethernet) +{ + return (p_ethernet[ETHERNET_HEADER_LEN+0] & 0xf) << 8 + | p_ethernet[ETHERNET_HEADER_LEN+1]; +} + +static inline void ethernet_vlan_set_id(uint8_t *p_ethernet, uint16_t id) +{ + p_ethernet[ETHERNET_HEADER_LEN+0] &= ~0xf; + p_ethernet[ETHERNET_HEADER_LEN+0] |= (id & 0xf00) >> 8; + p_ethernet[ETHERNET_HEADER_LEN+1] = (id & 0x0ff); +} + +static inline uint16_t ethernet_vlan_get_lentype(uint8_t *p_ethernet) +{ + return (p_ethernet[ETHERNET_HEADER_LEN+2] << 8) + | p_ethernet[ETHERNET_HEADER_LEN+3]; +} + +static inline void ethernet_vlan_set_lentype(uint8_t *p_ethernet, uint16_t lentype) +{ + p_ethernet[ETHERNET_HEADER_LEN+2] = (lentype & 0xff00) >> 8; + p_ethernet[ETHERNET_HEADER_LEN+3] = (lentype & 0xff); } #ifdef __cplusplus View it on GitLab: https://code.videolan.org/videolan/bitstream/-/compare/c5e5bef6a971101d20a22200e25a250537cb17d4...ba7576b3ae754a8648f43cfd8ae7560ace616816 -- View it on GitLab: https://code.videolan.org/videolan/bitstream/-/compare/c5e5bef6a971101d20a22200e25a250537cb17d4...ba7576b3ae754a8648f43cfd8ae7560ace616816 You're receiving this email because of your account on code.videolan.org.