Skip to content

Commit

Permalink
feat: add disable_ipv6 option (related #364)
Browse files Browse the repository at this point in the history
  • Loading branch information
yuezk committed May 19, 2024
1 parent 92b8588 commit 90a8c11
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 6 deletions.
3 changes: 3 additions & 0 deletions apps/gpclient/src/connect.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ pub(crate) struct ConnectArgs {

#[arg(short, long, help = "Request MTU from server (legacy servers only)")]
mtu: Option<u32>,
#[arg(long, help = "Do not ask for IPv6 connectivity")]
disable_ipv6: bool,

#[arg(long, default_value = GP_USER_AGENT, help = "The user agent to use")]
user_agent: String,
Expand Down Expand Up @@ -216,6 +218,7 @@ impl<'a> ConnectHandler<'a> {
.csd_uid(csd_uid)
.csd_wrapper(csd_wrapper)
.mtu(mtu)
.disable_ipv6(self.args.disable_ipv6)
.build()?;

let vpn = Arc::new(vpn);
Expand Down
1 change: 1 addition & 0 deletions apps/gpservice/src/vpn_task.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ impl VpnTaskContext {
.csd_wrapper(args.csd_wrapper())
.mtu(args.mtu())
.os(args.openconnect_os())
.disable_ipv6(args.disable_ipv6())
.build()
{
Ok(vpn) => vpn,
Expand Down
21 changes: 16 additions & 5 deletions crates/gpapi/src/service/request.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ pub struct ConnectArgs {
csd_wrapper: Option<String>,
mtu: u32,
os: Option<ClientOs>,
disable_ipv6: bool,
}

impl ConnectArgs {
Expand All @@ -48,6 +49,7 @@ impl ConnectArgs {
csd_uid: 0,
csd_wrapper: None,
mtu: 0,
disable_ipv6: false,
}
}

Expand Down Expand Up @@ -78,6 +80,10 @@ impl ConnectArgs {
pub fn mtu(&self) -> u32 {
self.mtu
}

pub fn disable_ipv6(&self) -> bool {
self.disable_ipv6
}
}

#[derive(Debug, Deserialize, Serialize, Type)]
Expand Down Expand Up @@ -109,11 +115,6 @@ impl ConnectRequest {
self
}

pub fn with_mtu(mut self, mtu: u32) -> Self {
self.args.mtu = mtu;
self
}

pub fn with_user_agent<T: Into<Option<String>>>(mut self, user_agent: T) -> Self {
self.args.user_agent = user_agent.into();
self
Expand All @@ -124,6 +125,16 @@ impl ConnectRequest {
self
}

pub fn with_mtu(mut self, mtu: u32) -> Self {
self.args.mtu = mtu;
self
}

pub fn with_disable_ipv6(mut self, disable_ipv6: bool) -> Self {
self.args.disable_ipv6 = disable_ipv6;
self
}

pub fn gateway(&self) -> &Gateway {
self.info.gateway()
}
Expand Down
1 change: 1 addition & 0 deletions crates/openconnect/src/ffi/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ pub(crate) struct ConnectOptions {
pub csd_wrapper: *const c_char,

pub mtu: u32,
pub disable_ipv6: u32,
}

#[link(name = "vpn")]
Expand Down
5 changes: 5 additions & 0 deletions crates/openconnect/src/ffi/vpn.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ int vpn_connect(const vpn_options *options, vpn_connected_callback callback)
INFO("CSD_USER: %d", options->csd_uid);
INFO("CSD_WRAPPER: %s", options->csd_wrapper);
INFO("MTU: %d", options->mtu);
INFO("DISABLE_IPV6: %d", options->disable_ipv6);

vpninfo = openconnect_vpninfo_new(options->user_agent, validate_peer_cert, NULL, NULL, print_progress, NULL);

Expand Down Expand Up @@ -103,6 +104,10 @@ int vpn_connect(const vpn_options *options, vpn_connected_callback callback)
openconnect_set_reqmtu(vpninfo, mtu);
}

if (options->disable_ipv6) {
openconnect_disable_ipv6(vpninfo);
}

g_cmd_pipe_fd = openconnect_setup_cmd_pipe(vpninfo);
if (g_cmd_pipe_fd < 0)
{
Expand Down
4 changes: 3 additions & 1 deletion crates/openconnect/src/ffi/vpn.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ typedef struct vpn_options
const char *csd_wrapper;

const int mtu;

const int disable_ipv6;
} vpn_options;

int vpn_connect(const vpn_options *options, vpn_connected_callback callback);
Expand All @@ -35,7 +37,7 @@ static char *format_message(const char *format, va_list args)
int len = vsnprintf(NULL, 0, format, args_copy);
va_end(args_copy);

char *buffer = malloc(len + 1);
char *buffer = (char*)malloc(len + 1);
if (buffer == NULL)
{
return NULL;
Expand Down
10 changes: 10 additions & 0 deletions crates/openconnect/src/vpn.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ pub struct Vpn {
csd_wrapper: Option<CString>,

mtu: u32,
disable_ipv6: bool,

callback: OnConnectedCallback,
}
Expand Down Expand Up @@ -68,6 +69,7 @@ impl Vpn {
csd_wrapper: Self::option_to_ptr(&self.csd_wrapper),

mtu: self.mtu,
disable_ipv6: self.disable_ipv6 as u32,
}
}

Expand Down Expand Up @@ -110,6 +112,7 @@ pub struct VpnBuilder {
csd_wrapper: Option<String>,

mtu: u32,
disable_ipv6: bool,
}

impl VpnBuilder {
Expand All @@ -126,6 +129,7 @@ impl VpnBuilder {
csd_wrapper: None,

mtu: 0,
disable_ipv6: false,
}
}

Expand Down Expand Up @@ -159,6 +163,11 @@ impl VpnBuilder {
self
}

pub fn disable_ipv6(mut self, disable_ipv6: bool) -> Self {
self.disable_ipv6 = disable_ipv6;
self
}

pub fn build(self) -> Result<Vpn, VpnError> {
let script = match self.script {
Some(script) => {
Expand Down Expand Up @@ -188,6 +197,7 @@ impl VpnBuilder {
csd_wrapper: self.csd_wrapper.as_deref().map(Self::to_cstring),

mtu: self.mtu,
disable_ipv6: self.disable_ipv6,

callback: Default::default(),
})
Expand Down

0 comments on commit 90a8c11

Please sign in to comment.