here is a simple snippet to use your nokia 9300i as a modem assuming you have all the right bluetooth tools on your machine. this script was only tested with gentoo, not that it would make any difference:

#!/bin/bash
# this script runs as either root or sudo - 
# this script connects to a 9300 (a, b or i) via bluetooth
# this script also assumes that you have scripts gprs, gprs-connect-chat & gprs-disconnet-chat
# located in /etc/ppp/peers
# creating a pause function for user input to run script non-automaticaly

##########
# simplified pause function
# had a bigger pause function but was edited out
function pause(){
    read -p "$*"
}

# info store and clean up
HCI_INFO=/tmp/HCI.tmp
HID_INFO=/tmp/HID.tmp
ETH_INFO=/tmp/ETH.tmp
RFC_INFO=/tmp/RFC.tmp

if [ -f ${HCI_INFO} ]; then
    rm -rfd ${HCI_INFO} && touch ${HCI_INFO}
fi

if [ -f ${HID_INFO} ]; then
    rm -rfd ${HID_INFO} && touch ${HID_INFO}
fi

if [ -f ${ETH_INFO} ]; then
    rm -rfd ${ETH_INFO} && touch ${ETH_INFO}
fi

if [ -f ${RFC_INFO} ]; then
    rm -rfd ${RFC_INFO} && touch ${RFC_INFO}
fi

# local info
    LOCAL_BID=`hcitool dev | egrep hci0`
    echo "local bid:" " ${LOCAL_BID}"
    printf "\n"

# remote hosts info
    hcitool scan | egrep -v "Scanning ..." >> ${HCI_INFO}
    # -s means contain data
    if [ ! -s ${HCI_INFO} ]; then
        printf "hcitool scan is coming back blank\n"
	printf "double check that bluetooth devices are on\n"
	printf "exiting\n"
	exit 1
    fi
    printf "remote bid from hcitool:\n"
    cat ${HCI_INFO}
    printf "\n"

# channel search
    printf "enter bid from specified device (from list above, mac addy looking number):"
    read BID_HID
    # -z means string is null - (length is zero)
    if [ -z ${BID_HID} ]; then
        printf "must input data here.\n"
	printf "\n"
	printf "exiting\n"
	exit 1
    fi
    sdptool browse ${BID_HID} | grep Dial-Up -A 14 >> ${HID_INFO}
    printf "dial-up networking info from device:\n"
    cat ${HID_INFO}
    printf "\n"

# bind channel to rfcomm device
    BID_ID=`cat ${HCI_INFO} | grep ${BID_HID} | awk '{print $1}'`
    CHANNEL=`cat ${HID_INFO} | grep Channel | awk '{print$2}'`
    printf "checking and removing previous rfcomm binds for new bind\n"
    rfcomm >> ${RFC_INFO}
    if [ -s ${RFC_INFO} ]; then
        rfcomm release rfcomm0
    fi
    rfcomm bind 0 ${BID_ID} ${CHANNEL}
    printf "\nrfcomm binding info:\n"
    rfcomm
    printf "\n"

# pausing for review
    pause 'pausing so you can see the data thusfar.....'
    clear 

# beginning pppd stuff
# make sure that all net ifaces are down
    printf "make sure that at this point all ifaces are down\n"
    printf "\n"
    /sbin/ifconfig | egrep "Link encap" | egrep -v Loopback >> ${ETH_INFO}
#   doing a ! -s for temp    
#    if [ -s ${ETH_INFO} ]; then
    if [ ! -s ${ETH_INFO} ]; then

        printf "there is a network adapter still up:\n"
        cat ${ETH_INFO}
	exit 1
    fi
    pause 'about to connect - press enter to continue....'

# beginning pppd messages & logs
    pppd call gprs