[OpenAFS-devel] dcerpc.net - freedce

Luke Kenneth Casson Leighton lkcl@samba-tng.org
Wed, 15 Aug 2001 01:38:44 +0200


hi there,

okay, checked the afs-devel archives to get your first
reply, marcus.

okay.  regarding DCE/RPC using ASN.1, well, as i said,
it doesn't use ASN.1 for function call marshalling/
unmarshalling.

regarding packet transfers, these are done in
'protocol data units', which when you make a
function call, the data is split up into regular
sized chunks, a header slapped on the front (16
bytes) and sent over-wire.  header says what opcode,
first pdu, intermediate pdu, last pdu, usual stuff.

the PDU size is negotiated.  typically, NT negotiates
0x1630 bytes, AS/U negotiates 0x0800, freedce / dce
1.1 negotiates 0x1000.  this can be easily changed,
i should imagine, to suit the network conditions etc.,
however i seem to recall vaguely seeing some comments
that said 'this would be nice to implement' :)

regarding ms and k5, UH!  idiots.  they even quoted
to me 'uh, well, DCE uses a PAC so we're not the
only ones' well DUUR, guys, they did it in a
kerberos-friendly and backwards-compatible waaaay.

rrrr.

to answer your point about dfs source being released:
yes, it has.  it's available from the open group's
web site.  the license is 'educational' purposes.
i.e. you can look, you can compile, you can use,
you can _not_ distribute, especially binaries.
you have to get a license (pay $) to do that.

DCE/DFS is slow, file-insecure, and now you tell me
it's cumbersome, too.

... well, _that's_ encouraging: makes it worthwhile
to do something a bit better :)

[but i _do_ like the per-file ACLs.  *sigh*]


yes, the dce 1.22 codebase does contain a working
server, and working cell directory services, and
time server etc. etc.  however, of course, to
get a working and useful client, you have to have
kernel-level tie-ins (or userspace hooks like
in linux) which of course hasn't been done.

regarding your questions:

1) would i try to be compatile with AFS-4?

don't know, i'm not really the best person to ask.
i know dce/rpc extremely well, and what it can
do.

i tend to take the path of least resistance when
it comes to programming, esp. when dealing with
O(10^^5 or ^^6) LOC projects.

so, following that logic:

- AFS-4 is currently still only available under
an Open Group license, until such time as they
resolve their legal negotiations.  therefore,
implementing AFS-4 would have to be done from
scratch, like Transarc did, or waiting.

i'm not into waiting all that much, and from-scratch
is hard work.

- AFS-3 is an existing open source project, with
lots of people working on it, _and_ using it,
_and_ it's available for linux (cool).

so, porting AFS-3 would be an easier job than
AFS-4.

my initial estimation of the tasks involved
would be to start with the IDL files, converting
those to DCE/IDL.  identifying the security
and locator service components, comparing against
the AFS-4 codebase to get some clues on the
locations to investigate.  then choose whether
to convert the AFS-3 locator services _as well_
to DCE/IDL, or to replace them with DCE Cell
Directory Services, whoops, can't do that:
CDS is part of the dce 1.22 codebase/suite :)

is this getting to be a big task, or is it still
a small, manageable one?

2) what, if anything, to do about increased footprint?

well, this assumes that DCE/RPC uses ASN.1 for
data transfer, which it doesn't.

NDR is pretty efficient.  there are two kinds
of implementations that can be used.  one is
to auto-generate inline code, and the other
is to auto-generate a table (in DCOM / MSRPC
terminology, a 'type library') that is then
used with offsetof macros to pack / unpack
structures with a helper function.
the helper function basically reads an
entry in the table to decide what to pack or
unpack next, looping until it hits an end-of-
structure marker in the table.

both approaches - the inline code and the
type-library plus helper function - are pretty
efficient _and_ they are single pass _and_
you could potentially optimise so that you 
can send or receive data out or from over-wire
from or to a buffer as soon as it's full, whilst
still not having finished marshalling or unmarshalling.

bit tricky, wouldn't like to be the one to
implement it unless i had a lot of spare time
on my hands, but it's quite feasible :)

3) what about compatibility with AFS-3.

well, compatibility with AFS-3 seems to be
the most attractive choice.

when-or-if AFS-4 becomes available under an
open source license, we'd be in a much
stronger position to investigate that codebase,
having a firm and working understanding of
dce/rpc (by having created AFS-3-dce/rpc) by
that time.

i mean, what i _really_ don't want is to
have to manage - or expect anyone else to -
manage two very similar codebases, esp. not
at the 100,000 LOC+ level.  it's not bleedin'
funny, i can tell you (i've tried tracking two
similar 300,000 LOC codebases and that's why
i'm not laughing).

so, if at all possible, simply adding in
DCE/RPC as a compile-time or even a run-time
option to AFS-3, and other than that not
even _touching_ the file-serving code _at all_,
well, if that's possible, i'll be v. happy.

luke