@@ -118,6 +118,7 @@ enum bpf_map_type {
118
118
BPF_MAP_TYPE_SOCKMAP ,
119
119
BPF_MAP_TYPE_CPUMAP ,
120
120
BPF_MAP_TYPE_XSKMAP ,
121
+ BPF_MAP_TYPE_SOCKHASH ,
121
122
};
122
123
123
124
enum bpf_prog_type {
@@ -1828,7 +1829,6 @@ union bpf_attr {
1828
1829
* Return
1829
1830
* 0 on success, or a negative error in case of failure.
1830
1831
*
1831
- *
1832
1832
* int bpf_fib_lookup(void *ctx, struct bpf_fib_lookup *params, int plen, u32 flags)
1833
1833
* Description
1834
1834
* Do FIB lookup in kernel tables using parameters in *params*.
@@ -1855,6 +1855,53 @@ union bpf_attr {
1855
1855
* Egress device index on success, 0 if packet needs to continue
1856
1856
* up the stack for further processing or a negative error in case
1857
1857
* of failure.
1858
+ *
1859
+ * int bpf_sock_hash_update(struct bpf_sock_ops_kern *skops, struct bpf_map *map, void *key, u64 flags)
1860
+ * Description
1861
+ * Add an entry to, or update a sockhash *map* referencing sockets.
1862
+ * The *skops* is used as a new value for the entry associated to
1863
+ * *key*. *flags* is one of:
1864
+ *
1865
+ * **BPF_NOEXIST**
1866
+ * The entry for *key* must not exist in the map.
1867
+ * **BPF_EXIST**
1868
+ * The entry for *key* must already exist in the map.
1869
+ * **BPF_ANY**
1870
+ * No condition on the existence of the entry for *key*.
1871
+ *
1872
+ * If the *map* has eBPF programs (parser and verdict), those will
1873
+ * be inherited by the socket being added. If the socket is
1874
+ * already attached to eBPF programs, this results in an error.
1875
+ * Return
1876
+ * 0 on success, or a negative error in case of failure.
1877
+ *
1878
+ * int bpf_msg_redirect_hash(struct sk_msg_buff *msg, struct bpf_map *map, void *key, u64 flags)
1879
+ * Description
1880
+ * This helper is used in programs implementing policies at the
1881
+ * socket level. If the message *msg* is allowed to pass (i.e. if
1882
+ * the verdict eBPF program returns **SK_PASS**), redirect it to
1883
+ * the socket referenced by *map* (of type
1884
+ * **BPF_MAP_TYPE_SOCKHASH**) using hash *key*. Both ingress and
1885
+ * egress interfaces can be used for redirection. The
1886
+ * **BPF_F_INGRESS** value in *flags* is used to make the
1887
+ * distinction (ingress path is selected if the flag is present,
1888
+ * egress path otherwise). This is the only flag supported for now.
1889
+ * Return
1890
+ * **SK_PASS** on success, or **SK_DROP** on error.
1891
+ *
1892
+ * int bpf_sk_redirect_hash(struct sk_buff *skb, struct bpf_map *map, void *key, u64 flags)
1893
+ * Description
1894
+ * This helper is used in programs implementing policies at the
1895
+ * skb socket level. If the sk_buff *skb* is allowed to pass (i.e.
1896
+ * if the verdeict eBPF program returns **SK_PASS**), redirect it
1897
+ * to the socket referenced by *map* (of type
1898
+ * **BPF_MAP_TYPE_SOCKHASH**) using hash *key*. Both ingress and
1899
+ * egress interfaces can be used for redirection. The
1900
+ * **BPF_F_INGRESS** value in *flags* is used to make the
1901
+ * distinction (ingress path is selected if the flag is present,
1902
+ * egress otherwise). This is the only flag supported for now.
1903
+ * Return
1904
+ * **SK_PASS** on success, or **SK_DROP** on error.
1858
1905
*/
1859
1906
#define __BPF_FUNC_MAPPER (FN ) \
1860
1907
FN(unspec), \
@@ -1926,7 +1973,10 @@ union bpf_attr {
1926
1973
FN(skb_get_xfrm_state), \
1927
1974
FN(get_stack), \
1928
1975
FN(skb_load_bytes_relative), \
1929
- FN(fib_lookup),
1976
+ FN(fib_lookup), \
1977
+ FN(sock_hash_update), \
1978
+ FN(msg_redirect_hash), \
1979
+ FN(sk_redirect_hash),
1930
1980
1931
1981
/* integer value in 'imm' field of BPF_CALL instruction selects which helper
1932
1982
* function eBPF program intends to call
0 commit comments