github.com/fafucoder/cilium@v1.6.11/bpf/bpf_hostdev_ingress.c (about)

     1  /*
     2   *  Copyright (C) 2019 Authors of Cilium
     3   *
     4   *  This program is free software; you can redistribute it and/or modify
     5   *  it under the terms of the GNU General Public License as published by
     6   *  the Free Software Foundation; either version 2 of the License, or
     7   *  (at your option) any later version.
     8   *
     9   *  This program is distributed in the hope that it will be useful,
    10   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
    11   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    12   *  GNU General Public License for more details.
    13   *
    14   *  You should have received a copy of the GNU General Public License
    15   *  along with this program; if not, write to the Free Software
    16   *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    17   */
    18  #include <linux/if_packet.h>
    19  
    20  #include <node_config.h>
    21  #include <netdev_config.h>
    22  #include <bpf/api.h>
    23  
    24  #include <stdint.h>
    25  #include <stdio.h>
    26  
    27  #include "lib/common.h"
    28  
    29  __section("to-host")
    30  int to_host(struct __sk_buff *skb)
    31  {
    32  	// Upper 16 bits may carry proxy port number, clear it out
    33  	__u32 magic = skb->cb[0] & 0xFFFF;
    34  	if (magic == MARK_MAGIC_TO_PROXY) {
    35  		skb->mark = skb->cb[0];
    36  		skb->cb[0] = 0;
    37  	}
    38  	return TC_ACT_OK;
    39  }
    40  
    41  BPF_LICENSE("GPL");