Skip to content

Commit

Permalink
feat: apply changes in state to routing table
Browse files Browse the repository at this point in the history
  • Loading branch information
bilalcaliskan committed Feb 11, 2024
1 parent 96568b8 commit 23b9de0
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 8 deletions.
49 changes: 46 additions & 3 deletions internal/ipc/ipc.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ func processCommand(logger zerolog.Logger, command, gateway string, conn net.Con
case "remove":
logger = logger.With().Str("operation", "remove").Logger()

handleRemoveCommand(logger, gateway, parts[1:], conn, st)
handleRemoveCommand(logger, parts[1:], conn, st)
case "list":
logger = logger.With().Str("operation", "list").Logger()

Expand Down Expand Up @@ -134,10 +134,12 @@ func handleAddCommand(logger zerolog.Logger, gw string, domains []string, conn n
re := state.NewRouteEntry(domain, gw, ips)

if err := st.AddEntry(re); err != nil {
logger.Error().Err(err).Str("domain", domain).Msg("failed to add route to state")

if err := writeResponse(&DaemonResponse{
Success: false,
Response: "",
Error: errors.Wrap(err, constants.FailedToWriteRouteEntry).Error(),
Error: errors.Wrapf(err, "failed to write RouteEntry to state for domain %s", domain).Error(),
}, conn); err != nil {
logger.Error().
Err(err).
Expand All @@ -148,6 +150,26 @@ func handleAddCommand(logger zerolog.Logger, gw string, domains []string, conn n
continue
}

for _, ip := range re.ResolvedIPs {
if err := utils.AddRoute(ip, re.Gateway); err != nil {
logger.Error().Err(err).Str("domain", domain).Str("ip", ip).Msg("failed to add route to routing table")

if err := writeResponse(&DaemonResponse{
Success: false,
Response: "",
Error: errors.Wrapf(err, "failed to add route for domain %s to routing table", domain).Error(),
}, conn); err != nil {
logger.Error().
Err(err).
Str("domain", domain).
Msg(constants.FailedToWriteToUnixDomainSocket)
}

continue
}

}

logger.Info().Str("domain", domain).Msg("successfully added route to routing table")

if err := writeResponse(&DaemonResponse{
Expand All @@ -164,7 +186,7 @@ func handleAddCommand(logger zerolog.Logger, gw string, domains []string, conn n
}

// handleRemoveCommand removes the given domains from the routing table
func handleRemoveCommand(logger zerolog.Logger, gw string, domains []string, conn net.Conn, st *state.State) {
func handleRemoveCommand(logger zerolog.Logger, domains []string, conn net.Conn, st *state.State) {
logger = logger.With().Str("operation", "remove").Logger()

for _, domain := range domains {
Expand All @@ -184,6 +206,8 @@ func handleRemoveCommand(logger zerolog.Logger, gw string, domains []string, con
}

if err := st.RemoveEntry(domain); err != nil {
logger.Error().Err(err).Str("domain", domain).Msg("failed to remove route from state")

if err := writeResponse(&DaemonResponse{
Success: false,
Response: "",
Expand All @@ -197,6 +221,25 @@ func handleRemoveCommand(logger zerolog.Logger, gw string, domains []string, con
continue
}

for _, ip := range entry.ResolvedIPs {
if err := utils.RemoveRoute(ip); err != nil {
logger.Error().Err(err).Str("domain", domain).Str("ip", ip).Msg("failed to remove route from routing table")

if err := writeResponse(&DaemonResponse{
Success: false,
Response: "",
Error: errors.Wrapf(err, "failed to remove route for domain %s from routing table", domain).Error(),
}, conn); err != nil {
logger.Error().
Err(err).
Str("domain", domain).
Msg(constants.FailedToWriteToUnixDomainSocket)
}

continue
}
}

logger.Info().Str("domain", domain).Msg("successfully removed route from routing table")

if err := writeResponse(&DaemonResponse{
Expand Down
24 changes: 19 additions & 5 deletions internal/utils/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"fmt"
"net"
"os"
"os/exec"
"sort"
"strconv"
"strings"
Expand Down Expand Up @@ -106,11 +107,24 @@ func SlicesEqual(a, b []string) bool {
return true
}

/*func addRoute(ip, gateway string) error {
// AddRoute adds a new route to the routing table
func AddRoute(ip, gateway string) error {
cmd := exec.Command("sudo", "ip", "route", "add", ip, "via", gateway)
err := cmd.Run()
if err != nil {
return fmt.Errorf("failed to add route for %s: %w", ip, err)

if err := cmd.Run(); err != nil {
return errors.Wrap(err, "failed to add route")
}

return nil
}

// RemoveRoute removes a route from the routing table
func RemoveRoute(ip string) error {
cmd := exec.Command("sudo", "ip", "route", "del", ip)

if err := cmd.Run(); err != nil {
return errors.Wrap(err, "failed to remove route")
}

return nil
}*/
}

0 comments on commit 23b9de0

Please sign in to comment.