From c280d6965bcb8d440e0c95caff7ae68a0a70d271 Mon Sep 17 00:00:00 2001
From: Zhongtao Hu <zhongtaohu.tim@linux.alibaba.com>
Date: Tue, 9 Aug 2022 15:19:22 +0800
Subject: [PATCH] runtime-rs: delete route model

As route model is used for specific internal scenario, and it's not for
the general requirement.

Fixes:#4838
Signed-off-by: Zhongtao Hu <zhongtaohu.tim@linux.alibaba.com>
---
 docs/design/architecture_3.0/README.md        |  1 -
 .../resource/src/network/network_model/mod.rs |  6 --
 .../src/network/network_model/route_model.rs  | 88 -------------------
 3 files changed, 95 deletions(-)
 delete mode 100644 src/runtime-rs/crates/resource/src/network/network_model/route_model.rs

diff --git a/docs/design/architecture_3.0/README.md b/docs/design/architecture_3.0/README.md
index 562404bd51..778c355890 100644
--- a/docs/design/architecture_3.0/README.md
+++ b/docs/design/architecture_3.0/README.md
@@ -98,7 +98,6 @@ In our case, there will be a variety of resources, and every resource has severa
 |                            | MACVTAP Endpoint    | Stage 3               |
 |                            | `VhostUserEndpoint` | Stage 3               |
 | Network Interworking Model | Tc filter           | Stage 1               |
-|                            | Route               | Stage 1               |
 |                            | `MacVtap`           | Stage 3               |
 | Storage                    | Virtio-fs           | Stage 1               |
 |                            | `nydus`             | Stage 2               |
diff --git a/src/runtime-rs/crates/resource/src/network/network_model/mod.rs b/src/runtime-rs/crates/resource/src/network/network_model/mod.rs
index 16457f1e4f..d96abf3da6 100644
--- a/src/runtime-rs/crates/resource/src/network/network_model/mod.rs
+++ b/src/runtime-rs/crates/resource/src/network/network_model/mod.rs
@@ -5,7 +5,6 @@
 //
 
 pub mod none_model;
-pub mod route_model;
 pub mod tc_filter_model;
 pub mod test_network_model;
 use std::sync::Arc;
@@ -16,12 +15,10 @@ use async_trait::async_trait;
 use super::NetworkPair;
 
 pub(crate) const TC_FILTER_NET_MODEL_STR: &str = "tcfilter";
-pub(crate) const ROUTE_NET_MODEL_STR: &str = "route";
 
 pub enum NetworkModelType {
     NoneModel,
     TcFilter,
-    Route,
 }
 
 #[async_trait]
@@ -36,9 +33,6 @@ pub fn new(model: &str) -> Result<Arc<dyn NetworkModel>> {
         TC_FILTER_NET_MODEL_STR => Ok(Arc::new(
             tc_filter_model::TcFilterModel::new().context("new tc filter model")?,
         )),
-        ROUTE_NET_MODEL_STR => Ok(Arc::new(
-            route_model::RouteModel::new().context("new route model")?,
-        )),
         _ => Ok(Arc::new(
             none_model::NoneModel::new().context("new none model")?,
         )),
diff --git a/src/runtime-rs/crates/resource/src/network/network_model/route_model.rs b/src/runtime-rs/crates/resource/src/network/network_model/route_model.rs
deleted file mode 100644
index cb47bdad21..0000000000
--- a/src/runtime-rs/crates/resource/src/network/network_model/route_model.rs
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright (c) 2019-2022 Alibaba Cloud
-// Copyright (c) 2019-2022 Ant Group
-//
-// SPDX-License-Identifier: Apache-2.0
-//
-
-use anyhow::{anyhow, Context, Result};
-use async_trait::async_trait;
-use tokio::process::Command;
-
-use super::{NetworkModel, NetworkModelType};
-use crate::network::NetworkPair;
-
-#[derive(Debug)]
-pub(crate) struct RouteModel {}
-
-impl RouteModel {
-    pub fn new() -> Result<Self> {
-        Ok(Self {})
-    }
-}
-
-#[async_trait]
-impl NetworkModel for RouteModel {
-    fn model_type(&self) -> NetworkModelType {
-        NetworkModelType::Route
-    }
-
-    async fn add(&self, pair: &NetworkPair) -> Result<()> {
-        let tap_name = &pair.tap.tap_iface.name;
-        let virt_name = &pair.virt_iface.name;
-        let virt_iface_addr = pair.virt_iface.addrs[0].addr.to_string();
-
-        let commands_args = vec![
-            vec![
-                "rule", "add", "pref", "10", "from", "all", "lookup", "local",
-            ],
-            vec!["rule", "del", "pref", "0", "from", "all"],
-            vec!["rule", "add", "pref", "5", "iif", virt_name, "table", "10"],
-            vec![
-                "route", "replace", "default", "dev", tap_name, "table", "10",
-            ],
-            vec![
-                "neigh",
-                "replace",
-                &virt_iface_addr,
-                "lladdr",
-                &pair.virt_iface.hard_addr,
-                "dev",
-                tap_name,
-            ],
-        ];
-
-        for ca in commands_args {
-            let output = Command::new("/sbin/ip")
-                .args(&ca)
-                .output()
-                .await
-                .with_context(|| format!("run command ip args {:?}", &ca))?;
-            if !output.status.success() {
-                return Err(anyhow!(
-                    "run command ip args {:?} error {}",
-                    &ca,
-                    String::from_utf8(output.stderr)?
-                ));
-            }
-        }
-
-        // TODO: support ipv6
-        // change sysctl for tap0_kata
-        // echo 1 > /proc/sys/net/ipv4/conf/tap0_kata/accept_local
-        let accept_local_path = format!("/proc/sys/net/ipv4/conf/{}/accept_local", &tap_name);
-        std::fs::write(&accept_local_path, "1")
-            .with_context(|| format!("Failed to echo 1 > {}", &accept_local_path))?;
-
-        // echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
-        // This enabled ARP reply on peer eth0 to prevent without any reply on VPC
-        let proxy_arp_path = format!("/proc/sys/net/ipv4/conf/{}/proxy_arp", &virt_name);
-        std::fs::write(&proxy_arp_path, "1")
-            .with_context(|| format!("Failed to echo 1 > {}", &proxy_arp_path))?;
-
-        Ok(())
-    }
-
-    async fn del(&self, _pair: &NetworkPair) -> Result<()> {
-        todo!()
-    }
-}