Mikrotik R11e-LTE-US with Openwrt

I have gotten this working properly with a couple of edits to comgt-directip.

/lib/netifd/proto/directip.sh

#!/bin/sh

[ -n "$INCLUDE_ONLY" ] || {
        . /lib/functions.sh
        . ../netifd-proto.sh
        init_proto "$@"
}

proto_directip_init_config() {
        available=1
        no_device=1
        proto_config_add_string "device:device"
        proto_config_add_string "apn"
        proto_config_add_string "pincode"
        proto_config_add_string "auth"
        proto_config_add_string "username"
        proto_config_add_string "password"
        proto_config_add_defaults
        proto_config_add_string "ifname"
}

proto_directip_setup() {
        local interface="$1"
        local chat devpath devname

        local device apn pincode ifname auth username password ifname $PROTO_DEFAULT_OPTIONS
        json_get_vars device apn pincode auth username password ifname $PROTO_DEFAULT_OPTIONS

        [ -n "$ctl_device" ] && device=$ctl_device

        device="$(readlink -f $device)"
        [ -e "$device" ] || {
                proto_notify_error "$interface" NO_DEVICE
                proto_set_available "$interface" 0
                return 1
        }


        #devname="$(basename "$device")"
        #devpath="$(readlink -f /sys/class/tty/$devname/device)"
        #ifname="$( ls "$devpath"/../../*/net )"

        [ -n "$ifname" ] || {
                proto_notify_error "$interface" NO_IFNAME
                proto_set_available "$interface" 0
                return 1
        }

        gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | grep -q "MikroTik" || {
                proto_notify_error "$interface" BAD_DEVICE
                proto_block_restart "$interface"
                return 1
        }
        logger -p daemon.info -t "directip[$$]" "ConHCP"

        if [ -n "$pincode" ]; then
                PINCODE="$pincode" gcom -d "$device" -s /etc/gcom/setpin.gcom || {
                        proto_notify_error "$interface" PIN_FAILED
                        proto_block_restart "$interface"
                        return 1
                }
        fi
        # wait for carrier to avoid firmware stability bugs
        gcom -d "$device" -s /etc/gcom/getcarrier.gcom || return 1

        local auth_type=0
        case $auth in
        pap) auth_type=1;;
        chap) auth_type=2;;
        esac

        logger -p daemon.info -t "directip[$$]" "ConHCP"

        USE_APN="$apn" USE_USER="$username" USE_PASS="$password" USE_AUTH="$auth_type" \
                        gcom -d "$device" -s /etc/gcom/directip.gcom || {
                proto_notify_error "$interface" CONNECT_FAILED
                proto_block_restart "$interface"
                return 1
        }

        logger -p daemon.info -t "directip[$$]" "Connected, starting DHCP"
        proto_init_update "$ifname" 1
        proto_send_update "$interface"

        json_init
        json_add_string name "${interface}_4"
        json_add_string ifname "@$interface"
        json_add_string proto "dhcp"
        proto_add_dynamic_defaults
        ubus call network add_dynamic "$(json_dump)"

        json_init
        json_add_string name "${interface}_6"
        json_add_string ifname "@$interface"
        json_add_string proto "dhcpv6"
        json_add_string extendprefix 1
        proto_add_dynamic_defaults
        ubus call network add_dynamic "$(json_dump)"

        return 0
}

proto_directip_teardown() {
        local interface="$1"

        local device
        json_get_vars device

        [ -n "$ctl_device" ] && device=$ctl_device

        gcom -d "$device" -s /etc/gcom/directip-stop.gcom || proto_notify_error "$interface" CONNECT_FAILED

        proto_init_update "*" 0
        proto_send_update "$interface"
}

[ -n "$INCLUDE_ONLY" ] || {
        add_protocol directip
}

/etc/gcom/directip.gcom


opengt
set com 115200n81
set comecho off
set senddelay 0.05
waitquiet 1 0.2

:start
 if $env("USE_AUTH") = "0" goto connect
 send "AT$QCPDPP=3,"
 send $env("USE_AUTH")
 send ",\""
 if $env("USE_USER") <> "" send $env("USE_USER")
 send "\",\""
 if $env("USE_PASS") <> "" send $env("USE_PASS")
 send "\"^m"
 waitfor 5 "OK"
 if % = 0 goto connect
 print "WWAN error. Auth failed.\r\n"
 exit 1

:connect
 send "AT+CFUN=1^m"
 send "AT+CGDCONT=1,\"IP\",\""
 send $env("USE_APN")
 send "\"^m"
 send "at$ecmcall=1^m"
 waitfor 5 "OK"
 if % = 0 goto dialok
 print "WWAN error. Connection failed.\r\n"
 exit 1

:carriererr
 print "WWAN error. No carrier.\r\n"
 exit 1

:dialok
 print "WWAN connection established.\r\n"
 exit 0
1 Like