When I connect my Nokia 6300 cellphone to my Linux laptop, it shows up primarily as a serial port device (/dev/ttyACM0) over which I can establish a PPP connection with pppd. The same USB device also provides a mysterious network interface named usbpn0 of type phonet, served by a driver module named cdc_phonet:

$ ip addr show dev usbpn0
35: usbpn0: <POINTOPOINT,NOARP> mtu 65541 qdisc noop state DOWN group default qlen 3
    link/phonet 1b peer 00
    family 35 ???/0 scope link 
$ readlink /sys/class/net/usbpn0/device/driver

There is a kernel documentation file about this type of interface, but it doesn’t explain very much; merely that it’s some sort of a packet-based interface to Nokia modems, without any explanation what the packets are supposed to contain.

What is this network interface? What is it used for? How, if at all, can I use it?


2 Answers 2


Phonet is the link/transport layer for Intelligent Service Interface (ISI), which is a protocol for communicating with a cellular modem used by Nokia cellphones. In a sense, ISI/Phonet serves as an alternative to the AT command set and/or OBEX: by accessing various ‘Phonet resources’ with pre-assigned numbers, one can drive the modem in different ways, for example to:

  • make voice calls (PN_CALL, 0x01; PN_MODEM_CALL, 0xc9)
  • send and receive SMS messages (PN_SMS, 0x02)
  • configure call barring and forwarding, and send USSD codes (PN_SS, 0x06)
  • unlock the SIM card and access the phonebook (PN_SIM, 0x09)
  • check network status and signal strength (PN_NETWORK, 0x0a; PN_MODEM_NETWORK, 0xc8)
  • check the modem’s identifiers such as serial number and IMEI (PN_PHONE_INFO, 0x1b; PN_MODEM_INFO, 0xc5)
  • access smart-card functionality (PN_UICC, 0x8c)

I’ve even seen someone asking around about accessing the smartphone’s file system through a PN_FILE_MANAGER (0x65) resource, but found no working code that does this. As far as I can tell though, ISI/Phonet cannot carry IP traffic: connecting to the mobile network still has to be performed via PPP over the serial link.

An implementation of a Phonet client is found in the oFono project, specifically in the isimodem driver. Some code can also be found in freesmartphone.org’s Cornucopia project, in the modem_nokia_isi driver. The latter project used parts of oFono’s isimodem driver to build a stand-alone library, libisi. Wireshark also contains a dissector for this protocol.


When I connect one particularly old cellphone to my Linux laptop...

Looks like that old cellphone is a Nokia, and it is offering to act as a modem.

The full documentation for the Phonet protocol family can be found here:


what kind of data can be transferred over this kind of interface

I suppose you could hook to it with some terminal emulator like Minicom or Telix and exchange raw AT commands with it, like with the modems of the olden days. Maybe make some shell scripts that use dbus-send to make it dail USSD codes and stuff. That needs some research.

  • Yes, it is a Nokia. But this ‘phonet’ link doesn’t look like it can carry IP traffic. Question is, what kind of traffic can it actually carry: you didn’t answer that. The kernel doc speaks of ‘object IDs’, ‘IPC’ and ‘RPC’ – IPC and RPC with what? Object IDs of what? That deserves an explanation, which the documentation file doesn’t provide. Commented Nov 2, 2020 at 5:18
  • And you downvoted me why?
    – Pourko
    Commented Nov 2, 2020 at 6:17
  • Aside from my previous comment, I was asking about a network interface, not a TTY device; there is no way to hook it to minicom or send AT commands over it. I didn’t ask for ‘cool ideas’ `either; I want to know what software can actually use that interface as described in the kernel doc. Clearly you didn’t understand the question. Commented Nov 2, 2020 at 6:23
  • Oh, so after downvoting me, you moved my doc link up to your original post. Good job!!! Nobody saw that. :-D
    – Pourko
    Commented Nov 2, 2020 at 6:52
  • Please stop this. Comments should not be used for arguments. Pourko, note that 1) links are not considered answers here, an answer should contain all relevant information not just point to it so that it can be useful even if the link is no longer working. See Your answer is in another castle: when is an answer not an answer?. 2) Taking parts of an answer that didn't fully answer your question and including them in the question to explain why they didn't answer is absolutely fine. It's more than fine, it's exactly what askers are supposed to do.
    – terdon
    Commented Nov 2, 2020 at 10:45

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .