[net2-wg] Notes from the Dec 15 meeting.
Gilman Tolle
gilman.tolle at gmail.com
Thu Dec 15 10:03:57 PST 2005
-------------- next part --------------
December 15th, 2005
-------------------
Phil: Let's talk about group membership. What approach will the
group take for admitting new members?
Gil: Is the group going to be long-lived?
Phil: I hope we will consider broader networking architecture, so yes.
Henri: Let's set the membership bar low, because the community is small.
Phil: One person said "let's do HTTP". I said it was outside the
scope. A few people didn't meet the requirement of having
written a publicly-available networking protocol. Is that bar
too high?
Henri: Sounds reasonable to me.
Rodrigo: Should we set a requirement on writing code?
Phil: What do you think?
Rodrigo: We seem weak on application experience, describing
constraints from above.
Kyle: Are we looking for members or setting rules?
Phil: We need to do the latter, so we can be prepared for the former.
Kyle: We could set the bar high and look for people who will make a
good contribution.
Henri: That could be percieved as only bringing in the people we like.
Gil: I think we should focus on using the members we have.
Phil: How should we decide to admit a new member? Email the list
and consensus? More formal? Voting? Keep off the list because the
list is public?
Rodrigo: Agreed. (others agreed too)
Rodrigo: How many applied?
Phil: 15. I denied about half. The group has 9 people now.
Phil: In TOS2, we usually have about half the group.
Kyle: Application experience is important. We should look for it.
Phil: Sounds like we don't want a formal joining protocol.
Rodrigo: Agreed.
Group: Agreed.
Phil: Anybody want to lead the discussion on collection?
Rodrigo: Many different protocols do similar things when forwarding
messages. Scheduling initiation vs. forwarding. Deciding
where to send the messages. From a high level, I have a
message and need to know how to get it there. If you have a
forwarding discipline you like, why can't you use it with a
MintRoute tree or an AODV route? We're looking for the
minimal interface between a Forwarding engine and a Routing
engine. In the internet, we have a control plane and a data
plane, which interact through a table. In sensor networks,
our protocols are more different. For example, opportunistic
forwarding, like MIT's XP or Rob Poor's gradient routing.
Rodrigo: In what I sent out, the forwarding engine sends a
getNextHop() request to the forwarding engine. Addresses are
opaque to the forwarding engine. In trivial collection, with
a gradient, the address is implicit.
Rodrigo: Om asked whether the interface is too narrow for richer
protocols. One way around this is for the routing engine to
keep a state machine and produce part of the network-layer
header, for itself.
Rodrigo: Henri asked whether the app really needs to know the exact
addressing format used by the underlying collection. Not
really. You can easily put a component above the
forwarding-routing combination that abstracts the exact
address, that provides Collection.send() and knows how to get
the address.
Rodrigo: It's a great opportunity to stop implementing monolithic
protocols, and find what's in common.
Jon: As Om said, there might be greater interaction between the
router and the forwarder. What if the forwarder wants to tell
the router about queue length or congestion? What if it wants
to provide feedback to children of the routing engine to
encourage fairness? The router might want to get info from
the forwarder, but it doesn't seem to work with only an
additional header.
Rodrigo: If the queue is too full, the router should return a
different address?
Jon: Or, the forwarder could tell the router to send different
beacons indicating queue depth.
Rodrigo: Only way to be sure is to implement a bunch of protocols.
Rodrigo: Next hops is plural, which allows for alternative hops. But,
I can see that the forwarder might want to know about
children.
Jon: What if a network protocol wanted to piggyback some routing
info in the packet?
Rodrigo: That's what the routing header does.
Phil: Want to get back to Jon's question of additional
information. The trick there is the coupling between
components. There's a component above the network layer that
translates an address into a void*. So, there's coupling
between the routing protocol and the routing engine. But, the
trick is dealing with multiple forwarding engines. It's hard
to share info with the forwarding engine because it makes a
claim about what it can do.
Jon: I like the decomposition, but am not sure if the narrow
interface is enough.
Rodrigo: There's a balance between expressiveness and
plug-and-play. Someone might write a routing engine to work
with one forwarding engine. For example, not all routing
engines can produce a cost. This can be detected at compile
time.
Jon: I'm just trying to get at, for example, how someone would do
congestion feedback like ECN? Can we walk through the example?
Rodrigo: This example is a transport one.
Kyle: Hmm. Our experience is this: if you're not in a many-to-one
topology, congestion control is hard to implement and is
still an open question that we should put off.
Phil: If one were to try this, where would one put it? If the
forwarding engine noticed congestion, how would it propagate
that information?
Kyle: Hmm.
Rodrigo: The forwarding engine could ask for a new route because this
one is congested. Initially, a lot of the functionality would
be in the forwarding engine itself.
Phil: Easier to add new info than remove it. Maybe we should just
try it, and see where the rough edges are.
Phil: SnaSend...provided by the forwarding engine to
application. void* becomes an untypecheckable blob. There
should be a protocol with a concrete type that translates to
a void*. There's no length argument, for example. How do apps
pass this around?
Rodrigo: This interface is fragile. If a protocol is a combo of a
specific routing and forwarding engine, the protocol
configuration could provide a typed address field. But, the
forwarding engine has to treat this as a blob.
Phil: You say a protocol is a combination of a routing engine and a
forwarding engine. But, there's also the state machine. There
are 2 state machines, perhaps retransmissions in the
forwarding engine and link selection in the routing engine.
Rodrigo: These are orthogonal. But, there is a state machine. Can the
state be embedded in the header? Is it per-packet? Largely,
yes.
Phil: An example. I'm asked to send a packet to a set of GEM
coordinates. For some reason, the routing engine doesn't know
how to route to these coordinates. It wants to initiate route
discovery. Now we have separate route discovery and
forwarding state machines. But, they interact.
Gil: Do multiple routing protocols use the forwarding engine at
the same time? That's even more complex.
Rodrigo: Sharing could happen, but could get complicated.
Phil: Let's take synopsis diffusion. You can do it up a tree or
across a gradient.
Rodrigo: For example, you might have one slow reliable forwarding
engine and one fast forwarding engine that share the same
routing tree. Or, the reliable forwarding engine might want
to use a tree sometimes or AODV other times.
Gil: Internal decomposition is interesting, but we need to focus
on the interface above.
Henri: We need to include an intercept interface for in-network
processing. And, given how little in-network processing
occured in TinyOS 1.x, a new interface might help.
Phil: At the datalink layer, the packet abstraction provides a
separate Snoop interface. There's nothing quite like it in
the network layer.
Kyle: If we have Snoop at the link layer, why would we need
Intercept at the network layer?
Phil: I shouldn't have to parse the network fields again, which
using Snoop would seem to require.
Kyle: It's about making applications' lives easier.
Rodrigo: I could see the forwarding engine providing Snoop and
Intercept.
Phil: Let's say I have a single AM type, and my network has bits
for different kinds of packets. The app might not want to
snoop control packets, but does want to snoop data packets.
Kyle: Letting the network layer keep the two separate makes
applications' lives easier. I see the point.
Gil: Maybe we could try to abstract from existing examples.
Rodrigo: Let's work on how the interfaces appear from above.
Meeting next week? Yeses, noes, and not sures.
Phil: Conference next week? Let's have one. We'll talk about
dissemination, and set a deadline of next week for the
top-level interfaces to collection. Sound good?
Henri: Target date for implementation?
Phil: Mid-Jan. But, there's a lot of code that should come together
quickly once we get the interfaces right.
More information about the net2-wg
mailing list