blob: 3ec3bd8fbec5b9c3540cbfab1ba9b2e0baf4fdea [file] [log] [blame]
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -08001/**
Ray Milkey269ffb92014-04-03 14:43:30 -07002 * Copyright 2011, Big Switch Networks, Inc.
3 * Originally created by David Erickson, Stanford University
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License"); you may
6 * not use this file except in compliance with the License. You may obtain
7 * a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 * License for the specific language governing permissions and limitations
15 * under the License.
16 **/
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080017
18package net.floodlightcontroller.core.util;
19
Ray Milkey269ffb92014-04-03 14:43:30 -070020/**
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080021 * FIXME Need a system for registering/binding applications to a unique ID
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080022 *
Ray Milkey269ffb92014-04-03 14:43:30 -070023 * @author capveg
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080024 */
25
26public class AppCookie {
27 static final int APP_ID_BITS = 12;
28 static final int APP_ID_SHIFT = (64 - APP_ID_BITS);
29 // we have bits 13-31 unused here ... that's ok!
30 static final int USER_BITS = 32;
31 static final int USER_SHIFT = 0;
32
33
34 /**
35 * Encapsulate an application ID and a user block of stuff into a cookie
Ray Milkey269ffb92014-04-03 14:43:30 -070036 *
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080037 * @param application An ID to identify the application
Ray Milkey269ffb92014-04-03 14:43:30 -070038 * @param user Some application specific data
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080039 * @return a cookie for use in OFFlowMod.setCookie()
40 */
Ray Milkey269ffb92014-04-03 14:43:30 -070041
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080042 static public long makeCookie(int application, int user) {
43 return ((application & ((1L << APP_ID_BITS) - 1)) << APP_ID_SHIFT) | user;
44 }
Ray Milkey269ffb92014-04-03 14:43:30 -070045
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080046 static public int extractApp(long cookie) {
Ray Milkey269ffb92014-04-03 14:43:30 -070047 return (int) ((cookie >> APP_ID_SHIFT) & ((1L << APP_ID_BITS) - 1));
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080048 }
Ray Milkey269ffb92014-04-03 14:43:30 -070049
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080050 static public int extractUser(long cookie) {
Ray Milkey269ffb92014-04-03 14:43:30 -070051 return (int) ((cookie >> USER_SHIFT) & ((1L << USER_BITS) - 1));
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -080052 }
53}