[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 1/3] pfinet: Dump initial routing table at start up
From: |
Samuel Thibault |
Subject: |
Re: [PATCH 1/3] pfinet: Dump initial routing table at start up |
Date: |
Wed, 31 Aug 2022 16:52:12 +0200 |
User-agent: |
NeoMutt/20170609 (1.8.3) |
Hello,
I don't think we want this commited?
Samuel
Damien Zammit, le mer. 31 août 2022 14:37:23 +0000, a ecrit:
> ---
> pfinet/iioctl-ops.c | 21 +++++++++++++++++++++
> pfinet/linux-src/net/ipv4/fib_hash.c | 6 ------
> pfinet/linux-src/net/ipv4/fib_semantics.c | 4 ----
> pfinet/options.c | 8 ++++++++
> pfinet/pfinet.h | 4 +---
> 5 files changed, 30 insertions(+), 13 deletions(-)
>
> diff --git a/pfinet/iioctl-ops.c b/pfinet/iioctl-ops.c
> index b128242bb..846bd8082 100644
> --- a/pfinet/iioctl-ops.c
> +++ b/pfinet/iioctl-ops.c
> @@ -104,6 +104,7 @@ prepare_rt_req(struct rt_req *req, struct device *dev,
> in_addr_t dst, in_addr_t
> req->rtm.rtm_type = RTN_UNICAST;
> req->rtm.rtm_protocol = RTPROT_BOOT;
> req->rtm.rtm_dst_len = inet_mask_len(mask);
> + req->rtm.rtm_table = RT_TABLE_MAIN;
>
> return 0;
> }
> @@ -234,6 +235,26 @@ delete_static_route(struct device *dev, in_addr_t dst,
> in_addr_t mask)
> return err;
> }
>
> +/* Each route requires 128 bytes preallocated in a char buffer.
> + This will fetch up to count of them at offset start
> + and also consume one row for the header.
> + Returns number of routes dumped. If buf is NULL, give up. */
> +int
> +get_routing_table(char *buf, int start, int count)
> +{
> + struct fib_table *tb;
> +
> + if (!buf)
> + return 0;
> +
> + if ((tb = fib_get_table(RT_TABLE_MAIN)) == NULL)
> + return 0;
> +
> + sprintf(buf, "%-127s\n", "Iface\tDestination\tGateway
> \tFlags\tRefCnt\tUse\tMetric\tMask\t\tMTU\tWindow\tIRTT");
> +
> + return (*tb->tb_get_info)(tb, buf + 128, start, count);
> +}
> +
> error_t
> add_route (struct device *dev, const struct srtentry *r)
> {
> diff --git a/pfinet/linux-src/net/ipv4/fib_hash.c
> b/pfinet/linux-src/net/ipv4/fib_hash.c
> index 074a36876..d3e0d10a3 100644
> --- a/pfinet/linux-src/net/ipv4/fib_hash.c
> +++ b/pfinet/linux-src/net/ipv4/fib_hash.c
> @@ -718,8 +718,6 @@ static int fn_hash_flush(struct fib_table *tb)
> }
>
>
> -#ifdef CONFIG_PROC_FS
> -
> static int fn_hash_get_info(struct fib_table *tb, char *buffer, int first,
> int count)
> {
> struct fn_hash *table = (struct fn_hash*)tb->tb_data;
> @@ -758,8 +756,6 @@ static int fn_hash_get_info(struct fib_table *tb, char
> *buffer, int first, int c
> }
> return n;
> }
> -#endif
> -
>
> #ifdef CONFIG_RTNETLINK
>
> @@ -877,9 +873,7 @@ __initfunc(struct fib_table * fib_hash_init(int id))
> #ifdef CONFIG_RTNETLINK
> tb->tb_dump = fn_hash_dump;
> #endif
> -#ifdef CONFIG_PROC_FS
> tb->tb_get_info = fn_hash_get_info;
> -#endif
> memset(tb->tb_data, 0, sizeof(struct fn_hash));
> return tb;
> }
> diff --git a/pfinet/linux-src/net/ipv4/fib_semantics.c
> b/pfinet/linux-src/net/ipv4/fib_semantics.c
> index ac7633170..7b12dfd71 100644
> --- a/pfinet/linux-src/net/ipv4/fib_semantics.c
> +++ b/pfinet/linux-src/net/ipv4/fib_semantics.c
> @@ -950,8 +950,6 @@ void fib_select_multipath(const struct rt_key *key,
> struct fib_result *res)
> #endif
>
>
> -#ifdef CONFIG_PROC_FS
> -
> static unsigned fib_flag_trans(int type, int dead, u32 mask, struct fib_info
> *fi)
> {
> static unsigned type2flags[RTN_MAX+1] = {
> @@ -987,5 +985,3 @@ void fib_node_get_info(int type, int dead, struct
> fib_info *fi, u32 prefix, u32
> memset(buffer+len, ' ', 127-len);
> buffer[127] = '\n';
> }
> -
> -#endif
> diff --git a/pfinet/options.c b/pfinet/options.c
> index 1e8c1c266..5039f4fbc 100644
> --- a/pfinet/options.c
> +++ b/pfinet/options.c
> @@ -69,6 +69,9 @@ extern error_t delete_route (struct device *dev, struct
> srtentry *r);
> static struct rt6_info * ipv6_get_dflt_router (void);
> #endif
>
> +#define MAX_INITIAL_ROUTES 32
> +static char routes[(MAX_INITIAL_ROUTES + 1) * 128];
> +
>
> /* Pfinet options. Used for both startup and runtime. */
> static const struct argp_option options[] =
> @@ -568,6 +571,11 @@ parse_opt (int opt, char *arg, struct argp_state *state)
> }
> }
>
> + {
> + int n = get_routing_table(routes, 0, MAX_INITIAL_ROUTES);
> + printf("ROUTES: %d\n%s", n, routes);
> + }
> +
> pthread_mutex_unlock (&global_lock);
>
> /* Fall through to free hook. */
> diff --git a/pfinet/pfinet.h b/pfinet/pfinet.h
> index d08779bff..b4d5604dc 100644
> --- a/pfinet/pfinet.h
> +++ b/pfinet/pfinet.h
> @@ -77,9 +77,7 @@ error_t make_sockaddr_port (struct socket *, int,
> void init_devices (void);
> void *net_bh_worker (void *);
> void init_time (void);
> -void ip_rt_add (short, u_long, u_long, u_long, struct device *,
> - u_short, u_long);
> -void ip_rt_del (u_long, struct device *);
> +int get_routing_table(char *buf, int start, int count);
> struct sock;
> error_t tcp_tiocinq (struct sock *sk, mach_msg_type_number_t *amount);
>
> --
> 2.34.1
>
>
>
--
Samuel
---
Pour une évaluation indépendante, transparente et rigoureuse !
Je soutiens la Commission d'Évaluation de l'Inria.
[PATCH 2/3] pfinet: New RPC S_pfinet_getroutes to get routing table, Damien Zammit, 2022/08/31
[PATCH 3/3] procfs: Populate /proc/route with network routes, Damien Zammit, 2022/08/31