IPC's in QNX V6

Hi All,

I am planning on building a server application that will run under QNX V6 that will receive TCP requests, perform some lookups and contact QNX V4 machines via the QNX message passing IPC method.

My question is: Does the non-commercial version of QNX V6 have the networking C headers and libraries to develop a server application that makes use of both TCP and QNX message passing IPC methods.

FYI, I am a valid license holder of QNX V4.

TIA,
Rick

Rick, unfortunately, the problem is not that QNX6 doesn’t have the networking headers (it does - in fact the entire kernel source is published)… the problem is that QNX4 native networking is not compatible with QNX6 native networking (Qnet).

There isn’t even a translator available (QNX6’s fundamental architecture is so radically different to QNX4’s, that translation simply isn’t possible - without making QNX4 into QNX6).

The issue is that to call QNet “networking”, really doesn’t tell the full story.

The QNX network is fundamentally an extension of the kernel itself, so the reason QNX6 can’t talk to QNX4, is that QNX6’s kernel is incompatible with QNX4’s).

So, to try and help… is there anyway you could port the QNX4 code to QNX6? (there are tools for that).

Thanks for the concise and informative reply rgallen,

I am sorry to hear that the core IPC methods between V4 and V6 are incompatible.

Yes, I guess, with some work my suite of servers could be ported to QNX V6 but there is another option. I could purchase the TCP stack pack for V4 from QNX Software. I am running V4.26a (I think that’s the version).

One of the most important things about QNX V4 is its very low memory requirements. This is the major reason why I decided to start using QNX in the early 90’s as a development platform. Heck, I have QNX happily running on a P1 with 32MB of RAM (I just upgraded it not too long ago after running for years with 16MB). On this box besides the OS running, I have four of my servers running (one of them is a database engine). All of my servers are running in under 1MB of RAM.

My use of QNX networking is very simple and straightforward. If memory serves me, I am basically using the send and receive primitives. A big issue may be that the QNX platform version of my servers (the same code base as the TCP version) also makes use of nameloc. Does nameloc still exist in V6?

I am planning to build a bridge server from TCP to QNX V4. A server that would take TCP requests, look up the nameloc name for the same service on the message passing side and forward the request to the appropriate machine.

Based on what you have told me, I have two choices. I also have concerns about V6’s memory requirements. QNX’s site says half a gig which is really large considering V4. I need convincing…

Rick

You probably can’t go quite that small in QNX6, but read on, it isn’t bad…

No nameloc. There is a functional equivalent called “gns”, and an API called name_attach().

I can allay that concern. QNX has a memory footprint very comparable with QNX4. The half a gig you mention is for the full development environment, not for the runtime. I have a QNX6 product with a full V4 tcpip stack O/S + utilities plus an application. The whole thing takes 5MB of flash and runs in 8MB of RAM (leaving 8MB for application data).

From what you have said, it looks like the service names concept using the forward slash in front of the service name to denote a global name and using the name_attach API is still in place.

I gather that a QNX V4 machine talking to a QNX V6 machine on a networking level using the message passing IPC method would also be out of the question.

Thanks again for your input,
Rick

Check out SIMPL, it may already do just what you want.