@@ -149,6 +149,10 @@ type bfdSession interface {
149149type BatchConn interface {
150150 // @ pred Mem()
151151
152+ // @ requires Mem()
153+ // @ decreases
154+ // @ pure Id() uint16
155+
152156 // @ requires acc(Mem(), _)
153157 // @ requires forall i int :: { &msgs[i] } 0 <= i && i < len(msgs) ==>
154158 // @ msgs[i].Mem()
@@ -179,11 +183,14 @@ type BatchConn interface {
179183 ReadBatch (msgs underlayconn.Messages /*@, ghost ingressID uint16, ghost prophecyM int, ghost place io.Place @*/ ) (n int , err error )
180184 // @ requires acc(addr.Mem(), _)
181185 // @ requires acc(Mem(), _)
182- // @ preserves acc(sl.Bytes(b, 0, len(b)), R10)
186+ // @ requires acc(sl.Bytes(b, 0, len(b)), R10)
187+ // @ requires absIO_val(b, Id()).isValUnsupported
188+ // @ ensures acc(sl.Bytes(b, 0, len(b)), R10)
183189 // @ ensures err == nil ==> 0 <= n && n <= len(b)
184190 // @ ensures err != nil ==> err.ErrorMem()
185191 WriteTo (b []byte , addr * net.UDPAddr ) (n int , err error )
186192 // @ requires acc(Mem(), _)
193+ // @ requires Id() == egressID
187194 // (VerifiedSCION) opted for less reusable spec for WriteBatch for
188195 // performance reasons.
189196 // @ requires len(msgs) == 1
@@ -410,6 +417,7 @@ func (d *DataPlane) AddInternalInterface(conn BatchConn, ip net.IP) error {
410417// If a connection for the given ID is already set this method will return an
411418// error. This can only be called on a not yet running dataplane.
412419// @ requires conn != nil && conn.Mem()
420+ // @ requires conn.Id() == ifID
413421// @ preserves acc(d.Mem(), OutMutexPerm)
414422// @ preserves !d.IsRunning()
415423// @ preserves d.mtx.LockP()
0 commit comments